import { Meta } from "@storybook/react-vite"; import Fuse from "fuse.js/basic"; import { ChangeEvent, ReactNode, useState } from "react"; import { Toggle } from "../fields/toggle/Toggle"; import { Highlight } from "./Highlight"; import { Field } from "../fields/field/Field"; import { Input } from "../fields/text"; const meta = { title: "Components/Highlight", component: Highlight, decorators: [(Story) => ], } satisfies Meta; export default meta; export const Basic = () => { return ; }; const list = ["Châtillon-sur-Cluses, Haute-Savoie, Auvergne-Rhône-Alpes"]; export const Playbook = () => { const [search, setSearch] = useState("clu"); const [minLength, setMinLength] = useState(2); const [isCaseSensitive, setIsCaseSensitive] = useState(false); const [minMatchCharLength, setMinMatchCharLength] = useState(1); const [location, setLocation] = useState(0); const [threshold, setThreshold] = useState(0.6); const [distance, setDistance] = useState(100); const [ignoreLocation, setIgnoreLocation] = useState(false); const fuse = new Fuse(list, { includeScore: true, includeMatches: true, isCaseSensitive, minMatchCharLength, location, threshold, distance, ignoreLocation, }); const result = fuse.search(search); let PreviewElement: ReactNode; if (result.length === 0 || !result[0].matches) { PreviewElement =

[Empty]

; } else { const { matches, score } = result[0]; PreviewElement = ( <> {matches.map(({ indices, value }, idx) => ( ))}
score: {score}
); } return ( <>
{PreviewElement}
) => setSearch(e.target.value)} /> ) => e.target.validity.valid && setMinLength(e.target.valueAsNumber) } /> ) => setIsCaseSensitive(e.target.checked)} /> ) => e.target.validity.valid && setMinMatchCharLength(e.target.valueAsNumber) } /> ) => e.target.validity.valid && setLocation(e.target.valueAsNumber) } /> ) => e.target.validity.valid && setThreshold(e.target.valueAsNumber) } /> ) => e.target.validity.valid && setDistance(e.target.valueAsNumber) } /> ) => setIgnoreLocation(e.target.checked)} />
); };