saas_app/src/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoLocalHandleHook.ts

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,
};
}