dify/web/app/components/apps/hooks/use-apps-query-state.ts
FFXN 00ac937934
feat: snippet (#37046)
Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-06-05 09:38:42 +00:00

42 lines
1.3 KiB
TypeScript

import type { AppListCategory } from '../app-type-filter-shared'
import { debounce, parseAsString, useQueryStates } from 'nuqs'
import { useCallback, useMemo, useState } from 'react'
import { parseAsAppListCategory } from '../app-type-filter-shared'
import { APP_LIST_SEARCH_DEBOUNCE_MS } from '../constants'
const appListQueryParsers = {
category: parseAsAppListCategory,
keywords: parseAsString.withDefault('').withOptions({
limitUrlUpdates: debounce(APP_LIST_SEARCH_DEBOUNCE_MS),
}),
}
export function useAppsQueryState() {
const [urlQuery, setUrlQuery] = useQueryStates(appListQueryParsers)
const [creatorIDs, setCreatorIDs] = useState<string[]>([])
const setCategory = useCallback((category: AppListCategory) => {
setUrlQuery({ category })
}, [setUrlQuery])
const setKeywords = useCallback((keywords: string) => {
setUrlQuery({ keywords })
}, [setUrlQuery])
const handleSetCreatorIDs = useCallback((creatorIDs: string[]) => {
setCreatorIDs(creatorIDs)
}, [])
const query = useMemo(() => ({
...urlQuery,
creatorIDs,
}), [creatorIDs, urlQuery])
return useMemo(() => ({
query,
setCategory,
setKeywords,
setCreatorIDs: handleSetCreatorIDs,
}), [handleSetCreatorIDs, query, setCategory, setKeywords])
}