166 lines
4.6 KiB
TypeScript
166 lines
4.6 KiB
TypeScript
'use client';
|
|
|
|
import { useEffect, useState, useCallback } from 'react';
|
|
|
|
import Loading from '@/app/_components/loading/loading';
|
|
import TImovelUnidadeTable from './TImovelUnidadeTable';
|
|
import TImovelUnidadeForm from './TImovelUnidadeForm';
|
|
|
|
import { useTImovelUnidadeIndexHook } from '../../hooks/t_imovel_unidade/useTImovelUnidadeIndexHook';
|
|
import { useTImovelUnidadeSaveHook } from '../../hooks/t_imovel_unidade/useTImovelUnidadeSaveHook';
|
|
import { useTImovelUnidadeDeleteHook } from '../../hooks/t_imovel_unidade/useTImovelUnidadeDeleteHook';
|
|
|
|
import ConfirmDialog from '@/app/_components/confirm_dialog/ConfirmDialog';
|
|
import { useConfirmDialog } from '@/app/_components/confirm_dialog/useConfirmDialog';
|
|
|
|
import TImovelUnidadeInterface from '../../interfaces/TImovelUnidadeInterface';
|
|
import Header from '@/app/_components/structure/Header';
|
|
|
|
export default function TImovelUnidadePage() {
|
|
// Controle de estado do botão
|
|
const [buttonIsLoading, setButtonIsLoading] = useState(false);
|
|
|
|
// Hooks para leitura e salvamento
|
|
const { tImovelUnidade, indexTImovelUnidade } = useTImovelUnidadeIndexHook();
|
|
const { saveTImovelUnidade } = useTImovelUnidadeSaveHook();
|
|
const { deleteTImovelUnidade } = useTImovelUnidadeDeleteHook();
|
|
|
|
// Estados
|
|
const [selectedAndamento, setSelectedAndamento] = useState<TImovelUnidadeInterface | null>(null);
|
|
const [isFormOpen, setIsFormOpen] = useState(false);
|
|
|
|
// Estado para saber qual item será deletado
|
|
const [itemToDelete, setItemToDelete] = useState<TImovelUnidadeInterface | null>(null);
|
|
|
|
/**
|
|
* Hook do modal de confirmação
|
|
*/
|
|
const {
|
|
isOpen: isConfirmOpen,
|
|
openDialog: openConfirmDialog,
|
|
handleConfirm,
|
|
handleCancel,
|
|
} = useConfirmDialog();
|
|
|
|
/**
|
|
* Abre o formulário no modo de edição ou criação
|
|
*/
|
|
const handleOpenForm = useCallback((data: TImovelUnidadeInterface | null) => {
|
|
setSelectedAndamento(data);
|
|
setIsFormOpen(true);
|
|
}, []);
|
|
|
|
/**
|
|
* Fecha o formulário e limpa o andamento selecionado
|
|
*/
|
|
const handleCloseForm = useCallback(() => {
|
|
setSelectedAndamento(null);
|
|
setIsFormOpen(false);
|
|
}, []);
|
|
|
|
/**
|
|
* Salva os dados do formulário
|
|
*/
|
|
const handleSave = useCallback(
|
|
async (formData: TImovelUnidadeInterface) => {
|
|
// Coloca o botão em estado de loading
|
|
setButtonIsLoading(true);
|
|
|
|
// Aguarda salvar o registro
|
|
await saveTImovelUnidade(formData);
|
|
|
|
// Remove o botão em estado de loading
|
|
setButtonIsLoading(false);
|
|
|
|
// Atualiza a lista de dados
|
|
indexTImovelUnidade();
|
|
},
|
|
[saveTImovelUnidade, indexTImovelUnidade, handleCloseForm],
|
|
);
|
|
|
|
/**
|
|
* Quando o usuário clica em "remover" na tabela
|
|
*/
|
|
const handleConfirmDelete = useCallback(
|
|
(item: TImovelUnidadeInterface) => {
|
|
// Define o item atual para remoção
|
|
setItemToDelete(item);
|
|
|
|
// Abre o modal de confirmação
|
|
openConfirmDialog();
|
|
},
|
|
[openConfirmDialog],
|
|
);
|
|
|
|
/**
|
|
* Executa a exclusão de fato quando o usuário confirma
|
|
*/
|
|
const handleDelete = useCallback(async () => {
|
|
// Protege contra null
|
|
if (!itemToDelete) return;
|
|
|
|
// Executa o Hook de remoção
|
|
await deleteTImovelUnidade(itemToDelete);
|
|
|
|
// Atualiza a lista
|
|
await indexTImovelUnidade();
|
|
|
|
// Limpa o item selecionado
|
|
setItemToDelete(null);
|
|
|
|
// Fecha o modal
|
|
handleCancel();
|
|
}, [itemToDelete, indexTImovelUnidade, handleCancel]);
|
|
|
|
/**
|
|
* Busca inicial dos dados
|
|
*/
|
|
useEffect(() => {
|
|
indexTImovelUnidade();
|
|
}, []);
|
|
|
|
/**
|
|
* Tela de loading enquanto carrega os dados
|
|
*/
|
|
if (tImovelUnidade?.length == 0) {
|
|
return <Loading type={2} />;
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
{/* Cabeçalho */}
|
|
<Header
|
|
title={'Unidades'}
|
|
description={'Gerenciamento de unidades'}
|
|
buttonText={'Nova unidade'}
|
|
buttonAction={() => {
|
|
handleOpenForm(null);
|
|
}}
|
|
/>
|
|
{/* Tabela de andamentos */}
|
|
<TImovelUnidadeTable
|
|
data={tImovelUnidade}
|
|
onEdit={handleOpenForm}
|
|
onDelete={handleConfirmDelete} />
|
|
{/* Modal de confirmação */}
|
|
<ConfirmDialog
|
|
isOpen={isConfirmOpen}
|
|
title="Confirmar exclusão"
|
|
description="Atenção"
|
|
message={`Deseja realmente excluir a unidade "${itemToDelete?.cidade}"?`}
|
|
confirmText="Sim, excluir"
|
|
cancelText="Cancelar"
|
|
onConfirm={handleDelete}
|
|
onCancel={handleCancel}
|
|
/>
|
|
{/* Formulário de criação/edição */}
|
|
<TImovelUnidadeForm
|
|
isOpen={isFormOpen}
|
|
data={selectedAndamento}
|
|
onClose={handleCloseForm}
|
|
onSave={handleSave}
|
|
buttonIsLoading={buttonIsLoading}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|