Playground
Lege <Autocomplete />
, um ein
TextField oder ein
SearchField, um Texteigaben mit
Vorschlägen zu unterstützen.
import { Option, Label, TextField, Autocomplete, } from "@mittwald/flow-react-components"; import { useState } from "react"; export default () => { const [input, setInput] = useState(""); const generateSuggestItems = () => { return [ "example.com", "test.org", "email.net", "mail.com", ] .map((d) => { const email = `${input.split("@")[0]}@${d}`; return ( <Option key={email} value={email} textValue={email} > {email} </Option> ); }) .filter(() => input); }; return ( <Autocomplete> <TextField value={input} onChange={setInput}> <Label>Email</Label> </TextField> {generateSuggestItems()} </Autocomplete> ); }
Benutzerdefinierte Filter
Schränke die Optionen, die dem User zur Auswahl stehen mithilfe von Filtern ein.
import { Option, Label, TextField, Autocomplete, } from "@mittwald/flow-react-components"; import { useState } from "react"; export default () => { const [input, setInput] = useState(""); const generateSuggestItems = () => { return [ "example.com", "test.org", "email.net", "mail.com", ] .map((d) => { const email = `${input.split("@")[0]}@${d}`; return ( <Option key={email} value={email} textValue={email} > {email} </Option> ); }) .filter(() => input); }; const domainDotComFilter = ( textValue: string, ignored_inputValue: string, ) => { return textValue.includes(".com"); }; return ( <Autocomplete filter={domainDotComFilter}> <TextField value={input} onChange={setInput}> <Label>Email</Label> </TextField> {generateSuggestItems()} </Autocomplete> ); }
Kombiniere mit ...
SearchField
Nutze <Autocomplete />
mit einem
SearchField, um die User beim
Suchen mit Vorschlägen zu unterstützen.
import { Label, Autocomplete, SearchField, Option, } from "@mittwald/flow-react-components"; import { useState } from "react"; export default () => { const [input, setInput] = useState(""); const generateSuggestItems = () => { return [ "example.com", "test.org", "email.net", "mail.com", ] .map((d) => { const email = `${input.split("@")[0]}@${d}`; return ( <Option key={email} value={email} textValue={email} > {email} </Option> ); }) .filter(() => input); }; return ( <Autocomplete> <SearchField value={input} onChange={setInput}> <Label>Email</Label> </SearchField> {generateSuggestItems()} </Autocomplete> ); }
React Hook Form
Weitere Details zur Formularlogik und -validierung sind in der Component Form (React Hook Form) zu finden.
import { Button, Label, Autocomplete, Section, TextField, Option, } from "@mittwald/flow-react-components"; import { useForm, useWatch } from "react-hook-form"; import { Form, typedField, } from "@mittwald/flow-react-components/react-hook-form"; import { sleep } from "@/content/03-components/actions/action/examples/lib"; export default () => { const form = useForm<{ email: string }>({ defaultValues: { email: "", }, }); const Field = typedField(form); const currentEmailValue = useWatch({ name: "email", control: form.control, }); const generateSuggestItems = () => { return [ "example.com", "test.org", "email.net", "mail.com", ] .map((d) => { const email = `${currentEmailValue.split("@")[0]}@${d}`; return ( <Option key={email} value={email} textValue={email} > {email} </Option> ); }) .filter(() => currentEmailValue); }; return ( <Section> <Form form={form} onSubmit={sleep}> <Field name="email" rules={{ required: "Bitte wähle eine App aus", }} > <Autocomplete> <TextField> <Label>Test</Label> </TextField> {generateSuggestItems()} </Autocomplete> </Field> <Button type="submit">Speichern</Button> </Form> </Section> ); }