dify/web/app/components/datasets/documents/detail/completed/hooks/use-segment-selection.ts
yyh 4b2badb6f2
refactor(web): migrate multi-checkbox lists to CheckboxGroup (#36381)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-05-19 07:55:33 +00:00

52 lines
1.4 KiB
TypeScript

import { useCallback, useState } from 'react'
type UseSegmentSelectionReturn = {
selectedSegmentIds: string[]
onSelectedSegmentIdsChange: (segmentIds: string[]) => void
onCancelBatchOperation: () => void
clearSelection: () => void
}
type MergeCurrentPageSelectedSegmentIdsOptions = {
selectedSegmentIds: string[]
currentPageSegmentIds: string[]
nextCurrentPageSelectedSegmentIds: string[]
}
export const mergeCurrentPageSelectedSegmentIds = ({
selectedSegmentIds,
currentPageSegmentIds,
nextCurrentPageSelectedSegmentIds,
}: MergeCurrentPageSelectedSegmentIdsOptions) => {
const currentPageSegmentIdSet = new Set(currentPageSegmentIds)
const selectedSegmentIdsOutsideCurrentPage = selectedSegmentIds.filter(segmentId => !currentPageSegmentIdSet.has(segmentId))
return [
...selectedSegmentIdsOutsideCurrentPage,
...nextCurrentPageSelectedSegmentIds,
]
}
export const useSegmentSelection = (): UseSegmentSelectionReturn => {
const [selectedSegmentIds, setSelectedSegmentIds] = useState<string[]>([])
const onSelectedSegmentIdsChange = useCallback((segmentIds: string[]) => {
setSelectedSegmentIds(segmentIds)
}, [])
const onCancelBatchOperation = useCallback(() => {
setSelectedSegmentIds([])
}, [])
const clearSelection = useCallback(() => {
setSelectedSegmentIds([])
}, [])
return {
selectedSegmentIds,
onSelectedSegmentIdsChange,
onCancelBatchOperation,
clearSelection,
}
}