import { useSetModalState } from '@/hooks/common-hooks'; import { useSetSelectedRecord } from '@/hooks/logic-hooks'; import { useCallback, useMemo, useState } from 'react'; import { BeginQuery, IOperatorForm } from '../../interface'; export const useEditQueryRecord = ({ form, onValuesChange }: IOperatorForm) => { const { setRecord, currentRecord } = useSetSelectedRecord(); const { visible, hideModal, showModal } = useSetModalState(); const [index, setIndex] = useState(-1); const otherThanCurrentQuery = useMemo(() => { const query: BeginQuery[] = form?.getFieldValue('query') || []; return query.filter((item, idx) => idx !== index); }, [form, index]); const handleEditRecord = useCallback( (record: BeginQuery) => { const query: BeginQuery[] = form?.getFieldValue('query') || []; const nextQuery: BeginQuery[] = index > -1 ? query.toSpliced(index, 1, record) : [...query, record]; onValuesChange?.( { query: nextQuery }, { query: nextQuery, prologue: form?.getFieldValue('prologue') }, ); hideModal(); }, [form, hideModal, index, onValuesChange], ); const handleShowModal = useCallback( (idx?: number, record?: BeginQuery) => { setIndex(idx ?? -1); setRecord(record ?? ({} as BeginQuery)); showModal(); }, [setRecord, showModal], ); return { ok: handleEditRecord, currentRecord, setRecord, visible, hideModal, showModal: handleShowModal, otherThanCurrentQuery, }; };