Tipos
property
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.
}