diff --git a/.eslintrc b/.eslintrc index 893f15c..2f9c284 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,9 @@ { - "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "prettier" + ], "env": { "browser": true, "node": true, @@ -15,4 +19,4 @@ "rules": { "react/react-in-jsx-scope": "off" } -} +} \ No newline at end of file diff --git a/src/lib/fuzzySearch.js b/src/lib/fuzzySearch.js index 1902335..16957ed 100644 --- a/src/lib/fuzzySearch.js +++ b/src/lib/fuzzySearch.js @@ -25,13 +25,22 @@ function search(q, text) { return true; } -export default function fuzzySearch(options, query) { +export function fuzzySearch(options, query) { return !query.length ? options : options.filter((o) => - search( - query.toLowerCase(), - `${o.name} ${o.group || ''}`.trim().toLowerCase(), - ), - ); + search( + query.toLowerCase(), + `${o.name} ${o.group || ''}`.trim().toLowerCase(), + ), + ); } + +export function fulltextSearch(options, query) { + return !query.length + ? options + : options?.filter((o) => + `${o?.name}`.trim().toLowerCase().indexOf(query.toLowerCase()) == 0 + ); +} + diff --git a/src/useSelect.js b/src/useSelect.js index b1d3f05..1d40d3f 100644 --- a/src/useSelect.js +++ b/src/useSelect.js @@ -4,7 +4,7 @@ import updateOption from './lib/updateOption'; import getDisplayValue from './lib/getDisplayValue'; import getValue from './lib/getValue'; import groupOptions from './lib/groupOptions'; -import fuzzySearch from './lib/fuzzySearch'; +import {fuzzySearch,fulltextSearch} from './lib/fuzzySearch'; import reduce from './lib/reduce'; import useOptions from './useOptions'; import useHighlight from './useHighlight'; @@ -59,7 +59,7 @@ export default function useSelect({ }; const middleware = [ - useFuzzySearch ? fuzzySearch : null, + useFuzzySearch ? fuzzySearch : fulltextSearch, ...(filterOptions ? filterOptions : []), ]; const filteredOptions = groupOptions(reduce(middleware, options, q));