summaryrefslogtreecommitdiffstats
path: root/src/components/Form/Select
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-02-23 18:11:37 +0100
committerGitHub <noreply@github.com>2022-02-23 18:11:37 +0100
commit84903c1e5182124b1bb618b7d8754cb70d0a6647 (patch)
treeb9202449b4eb17d2ecd93ce53fef76b0eee81f15 /src/components/Form/Select
parentc9b16994cd697b15ccb66be6879a119cf7bde7f7 (diff)
feat: improve Ackee tracking (#11)
* build(deps): add use-ackee hook package * chore: create a context provider for Ackee The provider allows users to change the 'detailed' settings. * chore: add a select menu to choose which info to share with Ackee * chore: add a tooltip for askee settings * chore: replace default select styles with custom styles * chore: register user choice in localstorage * chore: replace Matomo with Ackee in legal notice
Diffstat (limited to 'src/components/Form/Select')
-rw-r--r--src/components/Form/Select/Select.module.scss23
-rw-r--r--src/components/Form/Select/Select.tsx56
2 files changed, 79 insertions, 0 deletions
diff --git a/src/components/Form/Select/Select.module.scss b/src/components/Form/Select/Select.module.scss
new file mode 100644
index 0000000..d4a40eb
--- /dev/null
+++ b/src/components/Form/Select/Select.module.scss
@@ -0,0 +1,23 @@
+@use "@styles/abstracts/functions" as fun;
+
+.wrapper {
+ padding: fun.convert-px(3) var(--spacing-xs);
+ background: var(--color-bg-tertiary);
+ border: fun.convert-px(2) solid var(--color-border);
+ box-shadow: fun.convert-px(3) fun.convert-px(3) 0 0 var(--color-shadow);
+ cursor: pointer;
+ transition: all 0.3s ease-in-out 0s;
+
+ &:hover {
+ box-shadow: fun.convert-px(4) fun.convert-px(4) 0 fun.convert-px(1)
+ var(--color-shadow);
+ transform: translate(#{fun.convert-px(-2)}, #{fun.convert-px(-2)});
+ }
+
+ &:focus {
+ background: var(--color-bg);
+ border-color: var(--color-primary);
+ box-shadow: 0 0 0 0 var(--color-shadow);
+ transform: translate(#{fun.convert-px(3)}, #{fun.convert-px(3)});
+ }
+}
diff --git a/src/components/Form/Select/Select.tsx b/src/components/Form/Select/Select.tsx
new file mode 100644
index 0000000..feab991
--- /dev/null
+++ b/src/components/Form/Select/Select.tsx
@@ -0,0 +1,56 @@
+import { ChangeEvent, ReactElement, SetStateAction } from 'react';
+import styles from './Select.module.scss';
+
+type SelectOptions = {
+ id: string;
+ name: string;
+ value: string;
+};
+
+const Select = ({
+ options,
+ id,
+ name,
+ value,
+ setValue,
+ required = false,
+ label,
+}: {
+ options: SelectOptions[];
+ id: string;
+ name: string;
+ value: string;
+ setValue: (value: SetStateAction<string>) => void;
+ required?: boolean;
+ label?: ReactElement;
+}) => {
+ const getOptions = () => {
+ return options.map((option) => (
+ <option key={option.id} value={option.value}>
+ {option.name}
+ </option>
+ ));
+ };
+
+ const handleChange = (event: ChangeEvent<HTMLSelectElement>) => {
+ setValue(event.target.value);
+ };
+
+ return (
+ <>
+ {label}
+ <select
+ name={name}
+ id={id}
+ value={value}
+ onChange={handleChange}
+ required={required}
+ className={styles.wrapper}
+ >
+ {getOptions()}
+ </select>
+ </>
+ );
+};
+
+export default Select;