55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
'use client';
|
|
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
import { FieldValues, Path, PathValue, UseFormSetValue } from 'react-hook-form';
|
|
|
|
import TServicoItemPedidoCalculoResponseInterface from '@/packages/servicos/interfaces/TServicoItemPedido/TServicoItemPedidoCalculoResponseInterface';
|
|
|
|
export function useTServicoItemPedidoLocalHandleHook<TFormValues extends FieldValues>(
|
|
setValue?: UseFormSetValue<TFormValues>,
|
|
) {
|
|
const [TServicoItemPedidoLocal, setLocalTServicoItemPedido] = useState<
|
|
TServicoItemPedidoCalculoResponseInterface[]
|
|
>([]);
|
|
|
|
// Estado auxiliar para indicar que o form deve ser atualizado
|
|
const [shouldSync, setShouldSync] = useState(false);
|
|
|
|
// Adiciona item localmente (apenas atualiza o state)
|
|
const localAddTServicoItemPedido = (item: TServicoItemPedidoCalculoResponseInterface) => {
|
|
setLocalTServicoItemPedido((prev) => [...prev, item]);
|
|
setShouldSync(true);
|
|
};
|
|
|
|
// Remove item por índice
|
|
const localRemoveTServicoItemPedido = useCallback((index: number) => {
|
|
setLocalTServicoItemPedido((prev) => prev.filter((_, i) => i !== index));
|
|
setShouldSync(true);
|
|
}, []);
|
|
|
|
// Limpa os itens
|
|
const localClearTServicoItemPedido = () => {
|
|
setLocalTServicoItemPedido([]);
|
|
setShouldSync(true);
|
|
};
|
|
|
|
// Efeito responsável por sincronizar o formulário depois da atualização
|
|
useEffect(() => {
|
|
if (setValue && shouldSync) {
|
|
setValue(
|
|
'itens' as Path<TFormValues>,
|
|
TServicoItemPedidoLocal as unknown as PathValue<TFormValues, Path<TFormValues>>,
|
|
{ shouldDirty: true },
|
|
);
|
|
setShouldSync(false);
|
|
}
|
|
}, [setValue, shouldSync, TServicoItemPedidoLocal]);
|
|
|
|
return {
|
|
TServicoItemPedidoLocal,
|
|
localAddTServicoItemPedido,
|
|
localRemoveTServicoItemPedido,
|
|
setLocalTServicoItemPedido,
|
|
localClearTServicoItemPedido,
|
|
};
|
|
}
|