mirror of
https://github.com/langgenius/dify.git
synced 2026-06-19 08:31:07 +08:00
52 lines
1.4 KiB
TypeScript
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,
|
|
}
|
|
}
|