mirror of
https://github.com/langgenius/dify.git
synced 2026-07-27 23:18:33 +08:00
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import { debounce, parseAsArrayOf, parseAsString, useQueryStates } from 'nuqs'
|
|
import { useCallback, useMemo, useState } from 'react'
|
|
import { SNIPPET_LIST_SEARCH_DEBOUNCE_MS } from '../constants'
|
|
|
|
const snippetListQueryParsers = {
|
|
tagIDs: parseAsArrayOf(parseAsString, ';').withDefault([]).withOptions({ history: 'push' }),
|
|
keywords: parseAsString.withDefault('').withOptions({
|
|
limitUrlUpdates: debounce(SNIPPET_LIST_SEARCH_DEBOUNCE_MS),
|
|
}),
|
|
}
|
|
|
|
export function useSnippetsQueryState() {
|
|
const [urlQuery, setUrlQuery] = useQueryStates(snippetListQueryParsers)
|
|
const [creatorIDs, setCreatorIDs] = useState<string[]>([])
|
|
|
|
const setKeywords = useCallback(
|
|
(keywords: string) => {
|
|
setUrlQuery({ keywords })
|
|
},
|
|
[setUrlQuery],
|
|
)
|
|
|
|
const setTagIDs = useCallback(
|
|
(tagIDs: string[]) => {
|
|
setUrlQuery({ tagIDs })
|
|
},
|
|
[setUrlQuery],
|
|
)
|
|
|
|
const handleSetCreatorIDs = useCallback((creatorIDs: string[]) => {
|
|
setCreatorIDs(creatorIDs)
|
|
}, [])
|
|
|
|
const query = useMemo(
|
|
() => ({
|
|
...urlQuery,
|
|
creatorIDs,
|
|
}),
|
|
[creatorIDs, urlQuery],
|
|
)
|
|
|
|
return useMemo(
|
|
() => ({
|
|
query,
|
|
setKeywords,
|
|
setTagIDs,
|
|
setCreatorIDs: handleSetCreatorIDs,
|
|
}),
|
|
[handleSetCreatorIDs, query, setKeywords, setTagIDs],
|
|
)
|
|
}
|