dify/web/app/components/apps/hooks/use-apps-query-state.ts
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

54 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],
)
}