From f840997afcd6feb90de494da81a730791c0373ce Mon Sep 17 00:00:00 2001 From: koory1st <32436334@qq.com> Date: Mon, 11 Mar 2024 21:00:33 +0800 Subject: [PATCH] fix(autocomplete): add function --- packages/autocomplete/package.json | 3 ++- .../autocomplete/src/lib/autocomplete.svelte | 27 +++++++++++++++++++ packages/utils/src/index.js | 1 + packages/utils/src/is_array.js | 3 +++ pnpm-lock.yaml | 3 +++ 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 packages/utils/src/is_array.js diff --git a/packages/autocomplete/package.json b/packages/autocomplete/package.json index 3c050b2d..e7fb7926 100644 --- a/packages/autocomplete/package.json +++ b/packages/autocomplete/package.json @@ -24,7 +24,8 @@ "@svelement-ui/scrollbar": "workspace:^", "@svelement-ui/theme-chalk": "workspace:^", "@svelement-ui/tooltip": "workspace:^", - "@svelement-ui/util-array-2-class-string": "workspace:^" + "@svelement-ui/util-array-2-class-string": "workspace:^", + "@svelement-ui/utils": "workspace:^" }, "bundledDependencies": [ "@svelement-ui/util-array-2-class-string" diff --git a/packages/autocomplete/src/lib/autocomplete.svelte b/packages/autocomplete/src/lib/autocomplete.svelte index 9f5edc2c..8a440e22 100644 --- a/packages/autocomplete/src/lib/autocomplete.svelte +++ b/packages/autocomplete/src/lib/autocomplete.svelte @@ -4,10 +4,12 @@ import SvelTooltip from '@svelement-ui/tooltip'; import SvelScrollbar from '@svelement-ui/scrollbar'; import { getContext } from 'svelte'; + import { isArray } from '@svelement-ui/utils'; export let value; export let fetchSuggestions; export let triggerOnFocus = true; + export let highlightFirstItem = false; let suggestions = []; let dropdownWidth = ''; @@ -16,8 +18,33 @@ let loading = false; let activated = false; let tooltipVisible = false; + let highlightedIndex = -1; $: dark = dark || getContext('svel-dark'); + const getData = async (queryString) => { + if (suggestionDisabled) return; + + const cb = (suggestionList) => { + loading = false; + if (suggestionDisabled) return; + + if (isArray(suggestionList)) { + suggestions = suggestionList; + highlightedIndex = highlightFirstItem ? 0 : -1; + } else { + throw Error('autocomplete suggestions must be an array'); + } + }; + + loading.value = true; + if (isArray(fetchSuggestions)) { + cb(fetchSuggestions); + } else { + const result = await fetchSuggestions(queryString, cb); + if (isArray(result)) cb(result); + } + }; + function handleFocus() { tooltipVisible = true; } diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index f8ee04dc..e9097d23 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -2,3 +2,4 @@ export { isNull } from './is_null.js'; export { isNumber } from './is_number.js'; export { isUndefined } from './is_undefined.js'; export { isString } from './is_string.js'; +export { isArray } from './is_array.js'; diff --git a/packages/utils/src/is_array.js b/packages/utils/src/is_array.js new file mode 100644 index 00000000..234f7e23 --- /dev/null +++ b/packages/utils/src/is_array.js @@ -0,0 +1,3 @@ +export function isArray(input) { + return Array.isArray(input); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1db5fd54..cd78b71a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -191,6 +191,9 @@ importers: '@svelement-ui/util-array-2-class-string': specifier: workspace:^ version: link:../util-array-2-class-string + '@svelement-ui/utils': + specifier: workspace:^ + version: link:../utils packages/button: devDependencies: