From a6ff5eee45215effb3344cb5d631a27a7c0369aa Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Fri, 22 Sep 2023 19:34:01 +0200 Subject: refactor(components): rewrite form components --- .../organisms/forms/search-form/search-form.tsx | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/components/organisms/forms/search-form/search-form.tsx (limited to 'src/components/organisms/forms/search-form/search-form.tsx') diff --git a/src/components/organisms/forms/search-form/search-form.tsx b/src/components/organisms/forms/search-form/search-form.tsx new file mode 100644 index 0000000..826e6c8 --- /dev/null +++ b/src/components/organisms/forms/search-form/search-form.tsx @@ -0,0 +1,98 @@ +import { useRouter } from 'next/router'; +import { + ChangeEvent, + FormEvent, + forwardRef, + ForwardRefRenderFunction, + useId, + useState, +} from 'react'; +import { useIntl } from 'react-intl'; +import { Button, Form, Input, Label, MagnifyingGlass } from '../../../atoms'; +import { LabelledField } from '../../../molecules'; +import styles from './search-form.module.scss'; + +export type SearchFormProps = { + /** + * Should the label be visually hidden? + * + * @default false + */ + isLabelHidden?: boolean; + /** + * The search page url. + */ + searchPage: string; +}; + +const SearchFormWithRef: ForwardRefRenderFunction< + HTMLInputElement, + SearchFormProps +> = ({ isLabelHidden = false, searchPage }, ref) => { + const intl = useIntl(); + const fieldLabel = intl.formatMessage({ + defaultMessage: 'Search for:', + description: 'SearchForm: field accessible label', + id: 'X8oujO', + }); + const buttonLabel = intl.formatMessage({ + defaultMessage: 'Search', + description: 'SearchForm: button accessible name', + id: 'WMqQrv', + }); + + const router = useRouter(); + const [value, setValue] = useState(''); + + const submitHandler = (e: FormEvent) => { + e.preventDefault(); + router.push({ pathname: searchPage, query: { s: value } }); + setValue(''); + }; + + const updateForm = (e: ChangeEvent) => { + setValue(e.target.value); + }; + + const id = useId(); + + return ( +
+ + } + label={ + + } + /> + + + ); +}; + +/** + * SearchForm component + * + * Render a search form. + */ +export const SearchForm = forwardRef(SearchFormWithRef); -- cgit v1.2.3