| 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<BeginQuery>(); | |
| 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, | |
| }; | |
| }; | |