{"version":3,"sources":["../../../src/react/useFuzzy.tsx"],"sourcesContent":["import React from \"react\";\nimport { type FuzzyOptions, type FuzzyResponse, fuzzy } from \"../index\";\nimport { unsortedResponse } from \"../vanilla/helpers/transformers\";\nimport { defaults } from \"../vanilla/constants\";\n\nexport type useFuzzyOptions<T, U = T> = {\n\t/**\n\t * List of items to search against\n\t */\n\tlist: T[];\n\n\t/**\n\t * The query to search for. This is the string that will be searched for in the items.\n\t * @default \"\"\n\t * @example \"foo\"\n\t */\n\tquery: string;\n} & FuzzyOptions<T, U>;\n\n/**\n * Hook for fuzzy searching `list` against `query` and mapping the results with `mapResult`.\n *\n * If `query` is blank, `list` is returned in whole.\n *\n * See `createFuzzySearch` for more details. This hook simply wraps it (with memoization) in a React hook.\n *\n * For best performance, `getKey` and `mapResult` functions should be memoized by the user.\n */\n\nexport function useFuzzy<T, U = T>({\n\tlist,\n\tquery,\n\t...options\n}: useFuzzyOptions<T, U>): FuzzyResponse<U> {\n\tconst {\n\t\tkey,\n\t\tgetKey,\n\t\tdebug = defaults.debug,\n\t\tlimit = defaults.limit,\n\t\tmaxScore = defaults.maxScore,\n\t\tmapResult,\n\t} = options;\n\n\t// Memoriza las opciones para evitar recreaciones innecesarias\n\tconst memoizedOptions = React.useMemo(\n\t\t() => ({ key, getKey, debug, limit, maxScore, mapResult }),\n\t\t[key, getKey, debug, limit, maxScore, mapResult],\n\t);\n\n\t// Memoiza la lista para evitar cambios en cada render (si la recibe como prop)\n\tconst stableList = React.useMemo(() => list, [list]);\n\n\t// Crea la función fuzzy solo cuando cambian lista u opciones\n\tconst executeFuzzy = React.useMemo(\n\t\t() => fuzzy(stableList, memoizedOptions),\n\t\t[stableList, memoizedOptions],\n\t);\n\n\t// Devuelve los resultados filtrados o la lista original ordenada si no hay query\n\tconst results = React.useMemo(() => {\n\t\tif (!query) {\n\t\t\treturn unsortedResponse(stableList, maxScore, limit, mapResult, query);\n\t\t}\n\t\treturn executeFuzzy(query);\n\t}, [stableList, maxScore, limit, mapResult, query, executeFuzzy]);\n\n\treturn results;\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAgD,aAAa;AAC7D,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AA0BlB,SAAS,SAAmB;AAAA,EAClC;AAAA,EACA;AAAA,EACA,GAAG;AACJ,GAA4C;AAC3C,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,WAAW,SAAS;AAAA,IACpB;AAAA,EACD,IAAI;AAGJ,QAAM,kBAAkB,MAAM;AAAA,IAC7B,OAAO,EAAE,KAAK,QAAQ,OAAO,OAAO,UAAU,UAAU;AAAA,IACxD,CAAC,KAAK,QAAQ,OAAO,OAAO,UAAU,SAAS;AAAA,EAChD;AAGA,QAAM,aAAa,MAAM,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC;AAGnD,QAAM,eAAe,MAAM;AAAA,IAC1B,MAAM,MAAM,YAAY,eAAe;AAAA,IACvC,CAAC,YAAY,eAAe;AAAA,EAC7B;AAGA,QAAM,UAAU,MAAM,QAAQ,MAAM;AACnC,QAAI,CAAC,OAAO;AACX,aAAO,iBAAiB,YAAY,UAAU,OAAO,WAAW,KAAK;AAAA,IACtE;AACA,WAAO,aAAa,KAAK;AAAA,EAC1B,GAAG,CAAC,YAAY,UAAU,OAAO,WAAW,OAAO,YAAY,CAAC;AAEhE,SAAO;AACR;","names":[]}