mirror of
https://github.com/langgenius/dify.git
synced 2026-07-24 04:58:32 +08:00
89 lines
2.3 KiB
TypeScript
89 lines
2.3 KiB
TypeScript
import type { SortType } from '@/service/datasets'
|
|
import { useDebounce } from 'ahooks'
|
|
import { useCallback, useState } from 'react'
|
|
import { normalizeStatusForQuery, sanitizeStatusValue } from '../status-filter'
|
|
import { useDocumentListQueryState } from './use-document-list-query-state'
|
|
|
|
export function useDocumentsPageState() {
|
|
const { query, updateQuery } = useDocumentListQueryState()
|
|
|
|
const inputValue = query.keyword
|
|
const debouncedSearchValue = useDebounce(query.keyword, { wait: 500 })
|
|
|
|
const statusFilterValue = sanitizeStatusValue(query.status)
|
|
const sortValue = query.sort
|
|
const normalizedStatusFilterValue = normalizeStatusForQuery(statusFilterValue)
|
|
|
|
const currPage = query.page - 1
|
|
const limit = query.limit
|
|
|
|
const [selectedIds, setSelectedIds] = useState<string[]>([])
|
|
|
|
const handlePageChange = useCallback(
|
|
(newPage: number) => {
|
|
updateQuery({ page: newPage + 1 })
|
|
},
|
|
[updateQuery],
|
|
)
|
|
|
|
const handleLimitChange = useCallback(
|
|
(newLimit: number) => {
|
|
updateQuery({ limit: newLimit, page: 1 })
|
|
},
|
|
[updateQuery],
|
|
)
|
|
|
|
const handleInputChange = useCallback(
|
|
(value: string) => {
|
|
if (value !== query.keyword) setSelectedIds([])
|
|
updateQuery({ keyword: value, page: 1 })
|
|
},
|
|
[query.keyword, updateQuery],
|
|
)
|
|
|
|
const handleStatusFilterChange = useCallback(
|
|
(value: string) => {
|
|
const selectedValue = sanitizeStatusValue(value)
|
|
setSelectedIds([])
|
|
updateQuery({ status: selectedValue, page: 1 })
|
|
},
|
|
[updateQuery],
|
|
)
|
|
|
|
const handleStatusFilterClear = useCallback(() => {
|
|
if (statusFilterValue === 'all') return
|
|
setSelectedIds([])
|
|
updateQuery({ status: 'all', page: 1 })
|
|
}, [statusFilterValue, updateQuery])
|
|
|
|
const handleSortChange = useCallback(
|
|
(value: string) => {
|
|
const next = value as SortType
|
|
if (next === sortValue) return
|
|
updateQuery({ sort: next, page: 1 })
|
|
},
|
|
[sortValue, updateQuery],
|
|
)
|
|
|
|
return {
|
|
inputValue,
|
|
debouncedSearchValue,
|
|
handleInputChange,
|
|
|
|
statusFilterValue,
|
|
sortValue,
|
|
normalizedStatusFilterValue,
|
|
handleStatusFilterChange,
|
|
handleStatusFilterClear,
|
|
handleSortChange,
|
|
|
|
currPage,
|
|
limit,
|
|
handlePageChange,
|
|
handleLimitChange,
|
|
|
|
selectedIds,
|
|
setSelectedIds,
|
|
}
|
|
}
|