First commit of the new app

This commit is contained in:
2026-05-26 09:18:37 +01:00
parent 295d1bda21
commit b427fb0f85
110 changed files with 6483 additions and 833 deletions

345
assets/types/index.tsx Normal file
View File

@@ -0,0 +1,345 @@
import { ReactNode } from 'react';
// ============================================
// TIPOS DE AUTENTICAÇÃO
// ============================================
export interface User {
email: string;
nome: string;
apelido: string;
contacto: string;
morada: string;
nif: string;
id_user?: string;
[key: string]: any;
}
export interface AuthContextType {
user: User | null;
token: string | null;
isAuthenticated: boolean;
isLoading: boolean;
login: (email: string, password: string) => Promise<void>;
logout: () => Promise<void>;
updateProfile: (nome?: string, apelido?: string, oldPassword?: string, newPassword?: string) => Promise<void>;
error: string | null;
}
export interface LoginResponse {
status: number;
message?: string;
token?: string;
user?: User;
[key: string]: any;
}
export interface UserData {
email: string;
nome: string;
apelido: string;
contacto: string;
morada: string;
nif: string;
}
export interface AuthProviderProps {
children: ReactNode;
}
// ============================================
// TIPOS DE RESERVAS
// ============================================
export interface Reserva {
destino: string;
referenciaAgencia: string;
referenciaViagem: string;
startDate: string;
status: string;
statusCode: string;
imagemCidade: string;
pais: string;
}
export interface ReservasResponse {
status: string | number;
user?: User;
message?: string;
reservas: Reserva[];
}
export interface HotelFoto {
src: string;
srcZoom: string;
alt: string;
}
export interface Passageiro {
nome: string;
sobrenome: string;
genero: string;
dataNascimento: string;
nacionalidade: string;
morada: string;
paisEmissao: string;
numeroDocumento: string;
dataDeEmissao: string;
dataDeValidade: string;
telemovel: string;
email: string;
}
export interface HotelInfo {
name: string;
data: string;
noites: number;
regime: string;
quarto: string;
id_hotel: string;
imagemexterna: string;
imageminterna: string;
stars: string;
}
export interface Escala {
companyCode: string;
company: string;
number: string;
departureAirportCode: string;
mapaAirportDeparture?: string;
departureAirport: string;
departureDateTime: string;
departureDate: string;
departureTime: string;
arrivalAirportCode: string;
mapaAirportArrival?: string;
arrivalAirport: string;
arrivalDateTime: string;
arrivalDate: string;
arrivalTime: string;
flightTime: string;
mala: boolean;
malaLabel: string;
class: string;
infoAeroportoDeparture?: InfoAeroporto;
infoAeroportoArrival?: InfoAeroporto;
}
export interface VooSegment {
departureDate: string;
departureTime: string;
arrivalDate: string;
arrivalTime: string;
number: string;
class: string;
malaLabel: string;
departureAirportCode: string;
arrivalAirportCode: string;
departureAirport: string;
arrivalAirport: string;
departureAirportTimeZone: string;
arrivalAirportTimeZone: string;
flightTime: string;
}
export interface VooLeg {
departureDate: string;
infoEscalas: Escala[];
infoAeroportoDeparture?: InfoAeroporto;
infoAeroportoArrival?: InfoAeroporto;
}
export interface InfoAeroporto {
name: string;
timezone: string;
iso_country?: string;
gps: {
lng: number | string;
lat: number | string;
};
}
export interface Extra {
name: string;
price: number;
}
export type VooDirection = VooLeg | VooSegment[];
export interface JsonData {
hotel: HotelInfo[];
voo: {
departure: VooDirection;
arrival: VooDirection;
};
extra?: Extra[];
extras?: Extra[];
}
export interface Cidade {
id_cidade: string;
cod_pais: string;
imagem: string;
imagem_banner: string;
thumbnail: string;
destaque: string;
destaque_top: string;
outros_destinos: string;
lat: string;
lng: string;
zoom: string;
ordem: string;
reference: string;
ordemFooter: string;
html_image_social: string;
activofooter: string;
activo: string;
cod_tag: string;
categoria: string;
lowAeroporto: string;
lowData: string;
lowNoites: string;
lowRegimeKey: string;
lowPreco: string;
imagemMenu: string;
}
export interface ReservaData {
id_reserva: string;
destino: string;
startDate: string;
endDate: string;
referenciaViagem: string;
referenciaAgencia: string;
localizador: string;
noites: string;
status: string;
pessoas: string;
adultos: string;
criancas: string;
quartos: string;
jsonData: string | JsonData;
precoTotalFinal: string;
valorPago: string;
valorAPagar: string;
operador: string;
linkTransfers?: string;
cidade: Cidade | null;
imagemCidade?: string;
infoCidade: string;
passageiros: Passageiro[];
quartosPassageiros?: QuartoPassageiro[];
}
export interface QuartoPassageiro {
cod_user_api: string;
idade: string;
}
export interface ReservaResponse {
status: number;
message?: string;
reserva?: ReservaData;
pagamentos?: Pagamento[];
documentos?: Documento[];
}
export interface Pagamento {
valor: string;
estado: string;
metodoPagamento: string;
data_hora: string;
data_pagamento: string;
}
export interface Documento {
nome: string;
idDocumento: string;
caminhoFicheiro: string;
checksum: string | null;
}
// ============================================
// TIPOS DE PERFIL
// ============================================
export interface UserInfo {
nome: string;
apelido: string;
email: string;
}
export interface UserInfoResponse {
status: number;
message?: string;
user?: UserInfo;
}
// ============================================
// TIPOS DE CONTACTOS
// ============================================
export interface ContactData {
email: string;
telephone: string;
mobilePhone: string;
address: string;
horarios: string;
whatsapp: string | null;
emergencyPhone: string | null;
coordenadas?: string | null;
}
export interface SocialMedia {
key: string;
title: string;
value: string;
}
export interface ContactResponse {
status: number;
message?: string;
contact?: ContactData;
socials?: SocialMedia[];
}
// ============================================
// TIPOS DE COMPONENTES
// ============================================
export interface CardDestinoProps {
destino: string;
referenciaAgencia: string;
referenciaViagem: string;
startDate: string;
status: string;
statusCode: string;
imagemCidade: string;
imageUrl: string;
color: string;
textColor: string;
}
// ============================================
// TIPOS DE DOCUMENTOS CHECKSUMS
// ============================================
export interface DocumentoChecksum {
idDocumento: string;
checksum: string;
nome: string;
caminhoFicheiro: string;
}
export interface ReservaDocumentos {
referenciaViagem: string;
documentos: DocumentoChecksum[];
}
export interface DocumentosChecksumsResponse {
status: number;
message?: string;
documentos: ReservaDocumentos[];
}