aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/forms
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-05-18 22:40:59 +0200
committerArmand Philippot <git@armandphilippot.com>2022-05-18 22:40:59 +0200
commit584bd42f871d2e1618ca414749f09c38f0143a44 (patch)
tree45c821eec2ad9c77d5bccf83057cfc0a7e22ba09 /src/components/organisms/forms
parentb214baab3e17d92f784b4f782863deafc5558ee4 (diff)
chore: handle settings change
Diffstat (limited to 'src/components/organisms/forms')
-rw-r--r--src/components/organisms/forms/settings-form.test.tsx38
-rw-r--r--src/components/organisms/forms/settings-form.tsx32
2 files changed, 59 insertions, 11 deletions
diff --git a/src/components/organisms/forms/settings-form.test.tsx b/src/components/organisms/forms/settings-form.test.tsx
index beb65ec..43d546e 100644
--- a/src/components/organisms/forms/settings-form.test.tsx
+++ b/src/components/organisms/forms/settings-form.test.tsx
@@ -1,37 +1,65 @@
import { render, screen } from '@test-utils';
import SettingsForm from './settings-form';
+const ackeeStorageKey = 'ackee-tracking';
+const motionStorageKey = 'reduce-motion';
+
describe('SettingsForm', () => {
it('renders a form', () => {
- render(<SettingsForm />);
+ render(
+ <SettingsForm
+ ackeeStorageKey={ackeeStorageKey}
+ motionStorageKey={motionStorageKey}
+ />
+ );
expect(
screen.getByRole('form', { name: /^Settings form/i })
).toBeInTheDocument();
});
it('renders a theme toggle setting', () => {
- render(<SettingsForm />);
+ render(
+ <SettingsForm
+ ackeeStorageKey={ackeeStorageKey}
+ motionStorageKey={motionStorageKey}
+ />
+ );
expect(
screen.getByRole('checkbox', { name: /^Theme:/i })
).toBeInTheDocument();
});
it('renders a code blocks toggle setting', () => {
- render(<SettingsForm />);
+ render(
+ <SettingsForm
+ ackeeStorageKey={ackeeStorageKey}
+ motionStorageKey={motionStorageKey}
+ />
+ );
expect(
screen.getByRole('checkbox', { name: /^Code blocks:/i })
).toBeInTheDocument();
});
it('renders a motion setting', () => {
- render(<SettingsForm />);
+ render(
+ <SettingsForm
+ ackeeStorageKey={ackeeStorageKey}
+ motionStorageKey={motionStorageKey}
+ />
+ );
expect(
screen.getByRole('checkbox', { name: /^Animations:/i })
).toBeInTheDocument();
});
it('renders a Ackee setting', () => {
- render(<SettingsForm />);
+ render(
+ <SettingsForm
+ ackeeStorageKey={ackeeStorageKey}
+ motionStorageKey={motionStorageKey}
+ />
+ );
expect(
screen.getByRole('combobox', { name: /^Tracking:/i })
).toBeInTheDocument();
diff --git a/src/components/organisms/forms/settings-form.tsx b/src/components/organisms/forms/settings-form.tsx
index 0a34601..c897fa5 100644
--- a/src/components/organisms/forms/settings-form.tsx
+++ b/src/components/organisms/forms/settings-form.tsx
@@ -2,16 +2,31 @@ import Form from '@components/atoms/forms/form';
import AckeeSelect, {
type AckeeSelectProps,
} from '@components/molecules/forms/ackee-select';
-import MotionToggle from '@components/molecules/forms/motion-toggle';
+import MotionToggle, {
+ MotionToggleProps,
+} from '@components/molecules/forms/motion-toggle';
import PrismThemeToggle from '@components/molecules/forms/prism-theme-toggle';
import ThemeToggle from '@components/molecules/forms/theme-toggle';
import { FC } from 'react';
import { useIntl } from 'react-intl';
import styles from './settings-form.module.scss';
-export type SettingsFormProps = Pick<AckeeSelectProps, 'tooltipClassName'>;
+export type SettingsFormProps = Pick<AckeeSelectProps, 'tooltipClassName'> & {
+ /**
+ * The local storage key for Ackee settings.
+ */
+ ackeeStorageKey: AckeeSelectProps['storageKey'];
+ /**
+ * The local storage key for Reduce motion settings.
+ */
+ motionStorageKey: MotionToggleProps['storageKey'];
+};
-const SettingsForm: FC<SettingsFormProps> = ({ tooltipClassName }) => {
+const SettingsForm: FC<SettingsFormProps> = ({
+ ackeeStorageKey,
+ motionStorageKey,
+ tooltipClassName,
+}) => {
const intl = useIntl();
const ariaLabel = intl.formatMessage({
defaultMessage: 'Settings form',
@@ -21,13 +36,18 @@ const SettingsForm: FC<SettingsFormProps> = ({ tooltipClassName }) => {
return (
<Form aria-label={ariaLabel} onSubmit={() => null}>
- <ThemeToggle labelClassName={styles.label} value={false} />
- <PrismThemeToggle labelClassName={styles.label} value={false} />
- <MotionToggle labelClassName={styles.label} value={false} />
+ <ThemeToggle labelClassName={styles.label} />
+ <PrismThemeToggle labelClassName={styles.label} />
+ <MotionToggle
+ labelClassName={styles.label}
+ storageKey={motionStorageKey}
+ value={false}
+ />
<AckeeSelect
initialValue="full"
labelClassName={styles.label}
tooltipClassName={tooltipClassName}
+ storageKey={ackeeStorageKey}
/>
</Form>
);