Merge branch 'MVPTN-89' into release(MVP/Sprint6)
This commit is contained in:
commit
f6faae900d
10 changed files with 95 additions and 123 deletions
|
|
@ -48,21 +48,22 @@ export default function GCidadePage() {
|
|||
setIsFormOpen(true);
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Fecha o formulário e limpa o andamento selecionado
|
||||
*/
|
||||
const handleCloseForm = useCallback(() => {
|
||||
setSelectedCidade(null);
|
||||
setIsFormOpen(false);
|
||||
}, []);
|
||||
/**
|
||||
* Fecha o formulário e limpa o andamento selecionado
|
||||
*/
|
||||
const handleCloseForm = useCallback((_: null, __: boolean) => {
|
||||
setSelectedCidade(null);
|
||||
setIsFormOpen(false);
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Salva os dados do formulário
|
||||
*/
|
||||
const handleSave = useCallback(
|
||||
async (formData: GCidadeInterface) => {
|
||||
// Aguarda salvar o registro
|
||||
await saveGCidade(formData);
|
||||
/**
|
||||
* Salva os dados do formulário
|
||||
*/
|
||||
const handleSave = useCallback(async (formData: GCidadeInterface) => {
|
||||
|
||||
|
||||
// Aguarda salvar o registro
|
||||
await saveGCidade(formData);
|
||||
|
||||
// Atualiza a lista de dados
|
||||
fetchGCidade();
|
||||
|
|
|
|||
|
|
@ -67,9 +67,29 @@ export default function GCidadeForm({ isOpen, data, onClose, onSave }: Props) {
|
|||
|
||||
// Quando recebe dados para edição, atualiza os valores do formulário
|
||||
useEffect(() => {
|
||||
// Se existir dados, reseta o formulário com os dados informados
|
||||
if (data) form.reset(data);
|
||||
|
||||
if (data) {
|
||||
// Se for edição, carrega os dados recebidos
|
||||
form.reset({
|
||||
cidade_id: data.cidade_id,
|
||||
uf: data.uf ?? '',
|
||||
cidade_nome: data.cidade_nome ?? '',
|
||||
codigo_ibge: data.codigo_ibge ?? '',
|
||||
codigo_gyn: data.codigo_gyn ?? '',
|
||||
});
|
||||
} else {
|
||||
// Se for novo cadastro, limpa o formulário com valores padrão
|
||||
form.reset({
|
||||
cidade_id: 0,
|
||||
uf: '',
|
||||
cidade_nome: '',
|
||||
codigo_ibge: '',
|
||||
codigo_gyn: '',
|
||||
});
|
||||
}
|
||||
|
||||
// Carrega todos os estados
|
||||
// brasileiros para o formulário
|
||||
const loadData = async () => {
|
||||
// Aguarda a busca terminar
|
||||
await fetchGUf();
|
||||
|
|
@ -77,6 +97,7 @@ export default function GCidadeForm({ isOpen, data, onClose, onSave }: Props) {
|
|||
|
||||
// Dispara a função
|
||||
loadData();
|
||||
|
||||
}, [data, form]);
|
||||
|
||||
return (
|
||||
|
|
@ -105,7 +126,7 @@ export default function GCidadeForm({ isOpen, data, onClose, onSave }: Props) {
|
|||
<FormItem>
|
||||
<FormLabel>Descrição</FormLabel>
|
||||
<FormControl>
|
||||
<Input {...field} placeholder="Digite a descrição" />
|
||||
<Input {...field} value={field.value ?? ''} placeholder="Digite a descrição" />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
|
|
@ -120,7 +141,7 @@ export default function GCidadeForm({ isOpen, data, onClose, onSave }: Props) {
|
|||
<FormItem>
|
||||
<FormLabel>Código IBGE</FormLabel>
|
||||
<FormControl>
|
||||
<Input {...field} placeholder="Digite o código" />
|
||||
<Input {...field} value={field.value ?? ''} placeholder="Digite o código" />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
|
|
@ -134,11 +155,10 @@ export default function GCidadeForm({ isOpen, data, onClose, onSave }: Props) {
|
|||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>UF</FormLabel>
|
||||
<Select
|
||||
value={String(field.value)}
|
||||
// Carrega o valor selecionado
|
||||
onValueChange={(val) => field.onChange(val)}
|
||||
>
|
||||
<Select
|
||||
value={field.value ?? ''} // garante que não será null
|
||||
onValueChange={(val) => field.onChange(val)}
|
||||
>
|
||||
<FormControl className="w-full">
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Selecione o estado desejado" />
|
||||
|
|
|
|||
|
|
@ -1,81 +1,24 @@
|
|||
// Importa o serviço de API que será utilizado para realizar requisições HTTP
|
||||
import API from '@/services/api/Api';
|
||||
|
||||
// Importa o enum que contém os métodos HTTP disponíveis (GET, POST, PUT, DELETE)
|
||||
import { Methods } from '@/services/api/enums/ApiMethodEnum';
|
||||
|
||||
export default async function GCidadeIndexData() {
|
||||
return Promise.resolve({
|
||||
status: 200,
|
||||
message: 'Dados localizados',
|
||||
data: [
|
||||
{
|
||||
cidade_id: 1,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Acrelândia',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 2,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Assis Brasil',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 3,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Brasiléia',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 4,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Bujari',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 5,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Capixaba',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 6,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Cruzeiro do Sul',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 7,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Epitaciolândia',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 8,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Feijó',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 9,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Jordão',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
{
|
||||
cidade_id: 10,
|
||||
uf: 'AC',
|
||||
cidade_nome: 'Mâncio Lima',
|
||||
codigo_ibge: null,
|
||||
codigo_gyn: null,
|
||||
},
|
||||
],
|
||||
// Importa função que encapsula chamadas assíncronas e trata erros automaticamente
|
||||
import { withClientErrorHandler } from '@/actions/withClientErrorHandler/withClientErrorHandler';
|
||||
|
||||
// Função assíncrona que implementa a lógica de salvar (criar/atualizar) uma cidade
|
||||
async function executeGcidadeIndexData() {
|
||||
|
||||
// Instancia o cliente da API para enviar a requisição
|
||||
const api = new API();
|
||||
|
||||
// Executa a requisição para a API com o método apropriado e envia os dados no corpo
|
||||
return await api.send({
|
||||
method: Methods.GET, // GET listar todos os itens
|
||||
endpoint: `administrativo/g_cidade/` // endpoint dinâmico
|
||||
});
|
||||
}
|
||||
|
||||
// Exporta a função de salvar cidade já encapsulada com tratamento de erros
|
||||
export const GCidadeIndexData = withClientErrorHandler(executeGcidadeIndexData);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,27 @@
|
|||
// Importa o serviço de API que será utilizado para realizar requisições HTTP
|
||||
import API from '@/services/api/Api';
|
||||
|
||||
// Importa o enum que contém os métodos HTTP disponíveis (GET, POST, PUT, DELETE)
|
||||
import { Methods } from '@/services/api/enums/ApiMethodEnum';
|
||||
|
||||
// Importa a interface tipada que define a estrutura dos dados de uma cidade
|
||||
import GCidadeInterface from '../../_interfaces/GCidadeInterface';
|
||||
|
||||
export default async function GCidadeRemoveData(data: GCidadeInterface) {
|
||||
return Promise.resolve({
|
||||
status: 200,
|
||||
message: 'Dados removidos',
|
||||
data: null,
|
||||
// Importa função que encapsula chamadas assíncronas e trata erros automaticamente
|
||||
import { withClientErrorHandler } from '@/actions/withClientErrorHandler/withClientErrorHandler';
|
||||
|
||||
// Função assíncrona que implementa a lógica de salvar (criar/atualizar) uma cidade
|
||||
async function executeGcidadeRemoveData(data: GCidadeInterface) {
|
||||
|
||||
// Instancia o cliente da API para enviar a requisição
|
||||
const api = new API();
|
||||
|
||||
// Executa a requisição para a API com o método apropriado e envia os dados no corpo
|
||||
return await api.send({
|
||||
method: Methods.DELETE, // Verbo DELETE para exclusão
|
||||
endpoint: `administrativo/g_cidade/${data.cidade_id}`, // endpoint dinâmico
|
||||
});
|
||||
}
|
||||
|
||||
// Exporta a função de salvar cidade já encapsulada com tratamento de erros
|
||||
export const GCidadeRemoveData = withClientErrorHandler(executeGcidadeRemoveData);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import { withClientErrorHandler } from '@/actions/withClientErrorHandler/withCli
|
|||
|
||||
// Função assíncrona que implementa a lógica de salvar (criar/atualizar) uma cidade
|
||||
async function executeGcidadeSaveData(data: GCidadeInterface) {
|
||||
|
||||
// Verifica se existe ID da cidade para decidir se é atualização (PUT) ou criação (POST)
|
||||
const isUpdate = Boolean(data.cidade_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { useResponse } from '@/app/_response/ResponseContext'; // Contexto global para gerenciar respostas da API
|
||||
import GCidadeInterface from '../../_interfaces/GCidadeInterface'; // Interface tipada da cidade
|
||||
import GCidadeRemoveData from '../../_data/GCidade/GCidadeRemoveData'; // Função que remove a cidade via API
|
||||
import { useResponse } from "@/app/_response/ResponseContext"; // Contexto global para gerenciar respostas da API
|
||||
import GCidadeInterface from "../../_interfaces/GCidadeInterface"; // Interface tipada da cidade
|
||||
import { GCidadeRemoveData } from "../../_data/GCidade/GCidadeRemoveData"; // Função que remove a cidade via API
|
||||
|
||||
// Hook customizado para remoção de cidades
|
||||
export const useGCidadeRemoveHook = () => {
|
||||
|
|
|
|||
|
|
@ -8,29 +8,18 @@ export const useGCidadeSaveHook = () => {
|
|||
const [gCidade, setGCidade] = useState<GCidadeInterface | null>(null);
|
||||
|
||||
// controla se o formulário está aberto ou fechado
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
// const [isOpen, setIsOpen] = useState(false);
|
||||
|
||||
const saveGCidade = async (data: GCidadeInterface) => {
|
||||
const response = await GCidadeSaveService(data);
|
||||
|
||||
// Guardar os dados localizados
|
||||
setGCidade(response.data);
|
||||
// Guardar os dados localizados
|
||||
setGCidade(response.data);
|
||||
|
||||
console.log(response);
|
||||
|
||||
// Manda a resposta para o verificador de resposta
|
||||
setResponse(response);
|
||||
|
||||
// Fecha o formulário automaticamente após salvar
|
||||
setIsOpen(false);
|
||||
|
||||
console.log(response);
|
||||
|
||||
// Manda a resposta para o verificador de resposta
|
||||
setResponse(response);
|
||||
};
|
||||
}
|
||||
|
||||
return { gCidade, saveGCidade };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { withClientErrorHandler } from '@/actions/withClientErrorHandler/withClientErrorHandler';
|
||||
// Função que envolve qualquer ação assíncrona para capturar e tratar erros do cliente
|
||||
import GCidadeIndexData from '../../_data/GCidade/GCidadeIndexData';
|
||||
import { GCidadeIndexData } from '../../_data/GCidade/GCidadeIndexData';
|
||||
// Função que retorna os dados da lista de cidades (chamada à API ou mock)
|
||||
|
||||
// Função assíncrona que executa a chamada para buscar os dados de cidades
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ export default function CadastrosPage() {
|
|||
</div>
|
||||
<div className="grid grid-cols-5 gap-3">
|
||||
{items.map((item, key) => (
|
||||
<Link href={'/'}>
|
||||
<Card key={key} className="hover:bg-muted cursor-pointer transition-colors">
|
||||
<Link key={key} href={'/'}>
|
||||
<Card className="hover:bg-muted cursor-pointer transition-colors">
|
||||
<CardContent>
|
||||
<span className="mb-2 inline-flex shrink-0 rounded-md border border-blue-300 bg-blue-100 p-2 dark:border-blue-300/10 dark:bg-blue-400/10">
|
||||
<item.icon className="size-6 stroke-blue-700 dark:stroke-blue-500" />
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ export default function Response() {
|
|||
|
||||
useEffect(() => {
|
||||
switch (Number(response?.status)) {
|
||||
|
||||
|
||||
case 201:
|
||||
toast.success(response.message);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue