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([]) const onSelectedSegmentIdsChange = useCallback((segmentIds: string[]) => { setSelectedSegmentIds(segmentIds) }, []) const onCancelBatchOperation = useCallback(() => { setSelectedSegmentIds([]) }, []) const clearSelection = useCallback(() => { setSelectedSegmentIds([]) }, []) return { selectedSegmentIds, onSelectedSegmentIdsChange, onCancelBatchOperation, clearSelection, } }