property.d.ts
import type { CondoEmbed, Media } from "~/types/condo";
import type {
Address,
Location,
UF,
MinMax,
} from "~/types/general";
import type { UserEmbed } from "~/types/user";
export type Transaction = "sale" | "longStay";
interface Values {
sale: number | null;
longStay: number | null;
condoFee: number | null;
propertyTax: number | null;
}
interface Areas {
useful: number | null;
total: number | null;
land: number | null;
}
export type PropertyType =
| "APARTAMENTO_GARDEN"
| "APARTAMENTO_TIPO"
| "COBERTURA"
| "DUPLEX"
| "FLAT"
| "KITNET"
| "LOFT"
| "STUDIO"
| "TRIPLEX"
| "CASA_COMERCIAL"
| "CASA_DE_VILA"
| "CASA_EM_CONDOMINIO"
| "CASA_TIPO"
| "SOBRADO"
| "CONJUNTO_COMERCIAL"
| "EDIFICIO_MONOUSUARIO"
| "LAGE_CORPORATIVA"
| "GALPAO"
| "LOJA_DE_RUA"
| "TERRENO_COMERCIAL"
| "TERRENO_RESIDENCIAL";
interface Available {
sale: boolean;
longStay: boolean;
}
type Accepts = "PERMUTA" | "FINANCIAMENTO";
type Status = "LANCAMENTO" | "CONSTRUCAO" | "REFORMA" | "NOVO" | "PADRAO";
type Face = "N" | "NE" | "E" | "SE" | "S" | "SW" | "W" | "NW";
type Feature =
| "ADEGA_CLIMATIZADA"
| "AGUA_QUENTE"
| "AQUECIMENTO_CENTRAL"
| "AQUECIMENTO_SOLAR"
| "ALARME"
| "AR_CONDICIONADO_CENTRAL"
| "AREA_SERVICO"
| "BANHEIRO_SERVICO"
| "BANHEIRO_SR_SRA"
| "CARPETE"
| "CHURRASQUEIRA"
| "CLOSET"
| "COPA"
| "COZINHA_INTEGRADA"
| "DEPENDENCIA_DE_FUNCIONARIO"
| "DEPOSITO"
| "DESPENSA"
| "ELEVADOR_PRIVATIVO"
| "ESPACO_GOURMET"
| "GAS_ENCANADO"
| "HALL_PRIVATIVO"
| "HIDROMASSAGEM"
| "HOME_OFFICE"
| "HOME_THEATER"
| "INFRAESTRUTURA_AR_CONDICIONADO"
| "INTERFONE"
| "JANELA_TETO_CHAO"
| "JARDIM"
| "LAREIRA"
| "LAVABO"
| "LOCACAO_NAO_ACEITA_PET"
| "MOBILIADO"
| "MOVEIS_PLANEJADOS"
| "OFURO"
| "PISCINA"
| "PISO_MADEIRA"
| "PISO_PORCELANATO"
| "PISO_LAMINADO"
| "PISO_VINILICO"
| "SACADA"
| "SALA_INTIMA"
| "SALA_CINEMA"
| "SAUNA_SECA"
| "SAUNA_UMIDA"
| "VISTA_PARA_CIDADE"
| "VISTA_PARA_MAR"
| "VISTA_PANORAMICA"
| "VISTA_PERMANENTE";
interface Mgmt {
hideAddress: boolean;
hideFloor: boolean;
hidePrice: boolean;
disallowPortals: boolean;
}
type Pendency =
| "ALIENACAO_FIDUCIARIA"
| "DEBITO_DE_CONDOMINIO"
| "DEBITO_DE_IPTU"
| "INVENTARIO"
| "PENHORA"
| "PROPRIETARIO_INCAPAZ"
| "USUFRUTO";
type TransactionStatus =
| "SEM_OBSERVACOES"
| "EM_NEGOCIACAO"
| "VENDIDO"
| "ALUGADO"
type ResidentialType =
| "TERRENO_RESIDENCIAL"
| "APARTAMENTO_GARDEN"
| "APARTAMENTO_TIPO"
| "CASA_DE_VILA"
| "CASA_EM_CONDOMINIO"
| "CASA_TIPO"
| "COBERTURA"
| "DUPLEX"
| "FLAT"
| "KITNET"
| "LOFT"
| "SOBRADO"
| "STUDIO"
| "TRIPLEX";
export type CommercialType =
| "TERRENO_COMERCIAL"
| "CASA_COMERCIAL"
| "CONJUNTO_COMERCIAL"
| "EDIFICIO_MONOUSUARIO"
| "GALPAO"
| "LAGE_CORPORATIVA"
| "LOJA_DE_RUA";
type PropertySort =
| "_id"
| "user.name"
| "type"
| "address.street"
| "address.area"
| "values.sale"
| "valuePerSquareMeter"
| "values.longStay"
| "zapRating"
| "transactionStatus";
type FilterCondoFeature =
| "ACADEMIA"
| "BRINQUEDOTECA"
| "CHURRASQUEIRA"
| "ELEVADOR"
| "PISCINA"
| "PLAYGROUND"
| "PORTARIA_24_HORAS"
| "QUADRA_POLIESPORTIVA"
| "SALAO_DE_FESTAS"
| "SALA_DE_JOGOS"
| "SAUNA";
type FilterFeature =
| "ADEGA_CLIMATIZADA"
| "AGUA_QUENTE"
| "AQUECIMENTO_CENTRAL"
| "AQUECIMENTO_SOLAR"
| "ALARME"
| "AR_CONDICIONADO_CENTRAL"
| "AREA_SERVICO"
| "BANHEIRO_SERVICO"
| "BANHEIRO_SR_SRA"
| "CARPETE"
| "CHURRASQUEIRA"
| "CLOSET"
| "COPA"
| "COZINHA_INTEGRADA"
| "DEPENDENCIA_DE_FUNCIONARIO"
| "DEPOSITO"
| "DESPENSA"
| "ELEVADOR_PRIVATIVO"
| "ESPACO_GOURMET"
| "GAS_ENCANADO"
| "HALL_PRIVATIVO"
| "HIDROMASSAGEM"
| "HOME_OFFICE"
| "HOME_THEATER"
| "INFRAESTRUTURA_AR_CONDICIONADO"
| "INTERFONE"
| "JANELA_TETO_CHAO"
| "JARDIM"
| "LAREIRA"
| "LAVABO"
| "LOCACAO_NAO_ACEITA_PET"
| "MOBILIADO"
| "MOVEIS_PLANEJADOS"
| "OFURO"
| "PISCINA"
| "PISO_MADEIRA"
| "PISO_PORCELANATO"
| "PISO_LAMINADO"
| "PISO_VINILICO"
| "SACADA"
| "SALA_INTIMA"
| "SALA_CINEMA"
| "SAUNA_SECA"
| "SAUNA_UMIDA"
| "VISTA_PARA_CIDADE"
| "VISTA_PARA_MAR"
| "VISTA_PANORAMICA"
| "VISTA_PERMANENTE"
export interface ParkingLot {
id: string;
size: "PEQUENA" | "MEDIA" | "GRANDE";
type: "DETERMINADA" | "INDETERMINADA";
notes: string | null;
}
type Use = "COMERCIAL" | "RESIDENCIAL";
interface PropertyFilter {
state: UF | null;
city: string | null;
area: string | null;
use: Use[];
residentialTypes: ResidentialType[];
commercialTypes: CommercialType[];
status: Status[];
accepts: (Accepts | "INDIFERENTE")[];
face: (Face | "ANY")[];
minBaths: number | null;
minRooms: number | null;
minSuites: number | null;
minParkingLots: number | null;
values: {
sale: MinMax;
longStay: MinMax;
propertyTax: MinMax;
condoFee: MinMax;
};
}
interface MapBounds {
NE: Location;
SW: Location;
}
CardProperty
card-property.d.ts
export interface CardProperty {
id: string;
type: PropertyType;
image?: string | undefined;
rooms?: number | null;
parkingLots: number;
url: string;
condo: CondoEmbed | null;
base36Id: string;
transactionStatus: TransactionStatus;
baths: number | null;
values: Values;
areas: Areas;
address: Address;
user: UserEmbed;
mgmt: Mgmt;
sharedMgmtUser: UserEmbed | null;
createdAt: Date;
}
Property
property.d.ts
export interface CommonFields {
id: string;
available: Available;
accepts: Accepts[];
title: string
status: Status;
baths: number | null;
floor: number | null;
face: Face | null;
user: UserEmbed;
sharedMgmtUser: UserEmbed | null;
values: Values;
areas: Areas;
yearOfConstruction: number | null;
condo: CondoEmbed | null
address: Address;
description: string;
parkingLots: ParkingLot[];
features: Feature[];
mgmt: Mgmt;
pendencies: Pendency[];
base36Id: string;
zapRating: number;
transactionStatus: TransactionStatus;
media: Media;
updatedAt: Date;
createdAt: Date;
}
interface ResidentialProperty extends CommonFields {
use: "RESIDENCIAL";
type: ResidentialType;
rooms: number | null;
suites: number | null;
}
interface CommercialProperty extends CommonFields {
use: "COMERCIAL";
type: CommercialType;
}
export type Property = ResidentialProperty | CommercialProperty;
Marker
marker.d.ts
export interface Marker {
id: string;
size: number;
selected: boolean;
position: Location;
base36Ids: string[] //O marker só vem com os base36Ids para pontos únicos ou clusters em zoom > 16.
}