diff --git a/apps/infoalloggi/kanel.config.js b/apps/infoalloggi/kanel.config.js index bff5b0f..1030bd9 100644 --- a/apps/infoalloggi/kanel.config.js +++ b/apps/infoalloggi/kanel.config.js @@ -1,6 +1,6 @@ const { makeKyselyHook } = require("kanel-kysely"); const { makePgTsGenerator } = require("kanel"); -const { generateZodSchemas, makeGenerateZodSchemas } = require("kanel-zod"); +const { generateZodSchemas, makeGenerateZodSchemas, defaultZodTypeMap } = require("kanel-zod"); const ignoredTables = ["schema_migrations"]; /** @@ -98,7 +98,52 @@ function kanelKyselyZodCompatibilityHook(path, lines) { return line; }); } +/**@type {import("kanel").PostRenderHook} */ +function zodCaratteristicheHook(path, lines) { + if (path.includes("src\\schemas\\public\\Annunci.ts")) { + return lines.map(line => { + + if (line.includes("kanel-types")) { + return "import { CaratteristicheSchema, type Caratteristiche } from '../../utils/kanel-types';" + } + if (line.includes("caratteristiche: z.unknown().optional().nullable()")) { + return line.replace("caratteristiche: z.unknown().optional().nullable()", "caratteristiche: CaratteristicheSchema.optional().nullable()") + } + if (line.includes("caratteristiche: z.unknown().nullable()")) { + return line.replace("caratteristiche: z.unknown().nullable()", "caratteristiche: CaratteristicheSchema.nullable()") + } + + return line; + }) + } + return lines +} + +/**@type {import("kanel").PostRenderHook} */ +function zodUpdateInsertionDatesFix(path, lines) { + //z.date() -> z.union([z.date(), z.string()]).pipe(z.coerce.date()) + let insideUpdateOrInsert = false; + return lines.map(line => { + if (line.includes("export const") && line.includes("UpdateSchema")) { + insideUpdateOrInsert = true; + } + if (line.includes("export const") && line.includes("New")) { + insideUpdateOrInsert = true; + } + if (insideUpdateOrInsert && line.includes("z.date()")) { + console.log(`Fixing line in ${path}: ${line}`); + return line.replace("z.date()", "z.union([z.date(), z.string()]).pipe(z.coerce.date())"); + } + + if (line.includes("import")) { + insideUpdateOrInsert = false; + } + + return line; + }) + +} /** @type {import('kanel').Config} */ module.exports = { connection: { @@ -129,17 +174,17 @@ module.exports = { }), makeKyselyHook(), makeGenerateZodSchemas({ - castToSchema: false + castToSchema: false, + zodTypeMap: { + ...defaultZodTypeMap, + "pg_catalog.numeric": "z.number()", + } }), ], }), ], - postRenderHooks: [kanelKyselyZodCompatibilityHook], + postRenderHooks: [kanelKyselyZodCompatibilityHook, zodCaratteristicheHook, zodUpdateInsertionDatesFix], preDeleteOutputFolder: true, - - typescriptConfig: { - enumStyle: "enum", - }, }; diff --git a/apps/infoalloggi/src/components/prezzi.tsx b/apps/infoalloggi/src/components/prezzi.tsx index 9afac00..df89871 100644 --- a/apps/infoalloggi/src/components/prezzi.tsx +++ b/apps/infoalloggi/src/components/prezzi.tsx @@ -14,7 +14,8 @@ import { import { Tabs, TabsContent, TabsList, TabsTrigger } from "~/components/ui/tabs"; import { cn } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import type TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum"; import { api } from "~/utils/api"; export const PricingChoice = () => { @@ -63,7 +64,7 @@ export const PricingChoice = () => { t.pricing_cmp.breve_option5, ]} pricingData={pricingBreve} - tipo={TipologiaPosizioneEnum.Transitorio} + tipo={tipologiaPosizioneEnum.enum.Transitorio} title={t.prezzi.titolo_transitori} /> @@ -77,7 +78,7 @@ export const PricingChoice = () => { t.pricing_cmp.stabile_option3, ]} pricingData={pricingStabile} - tipo={TipologiaPosizioneEnum.Stabile} + tipo={tipologiaPosizioneEnum.enum.Stabile} title={t.prezzi.titolo_stabile} /> @@ -192,7 +193,7 @@ export const PricingComponent = ({ Contratto - {tipo === TipologiaPosizioneEnum.Transitorio ? ( + {tipo === tipologiaPosizioneEnum.enum.Transitorio ? (
: } Non in conferma - {Object.values(StatusConfermaEnum).map((status) => ( + {statusConfermaEnum.options.map((status) => (
- {servizio.tipologia === TipologiaPosizioneEnum.Stabile && ( + {servizio.tipologia === tipologiaPosizioneEnum.enum.Stabile && (
<> diff --git a/apps/infoalloggi/src/components/tables/orders-table.tsx b/apps/infoalloggi/src/components/tables/orders-table.tsx index 677d14e..8da8318 100644 --- a/apps/infoalloggi/src/components/tables/orders-table.tsx +++ b/apps/infoalloggi/src/components/tables/orders-table.tsx @@ -14,9 +14,10 @@ import type { SearchFiltro, } from "~/components/ui/dataTable-toolbar"; import { formatCurrency } from "~/lib/utils"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; import type { OrdiniOrdineId } from "~/schemas/public/Ordini"; -import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum"; +import type PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum"; +import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum"; import type { UsersId } from "~/schemas/public/Users"; import type { Ordini_w_Utente } from "~/server/services/ordini.service"; @@ -29,11 +30,11 @@ type PaymentsTableProps = { const StatusMapping = (status: PaymentStatusEnum | null) => { switch (status) { - case PaymentStatusEnum.success: + case paymentStatusEnum.enum.success: return "Successo"; - case PaymentStatusEnum.processing: + case paymentStatusEnum.enum.processing: return "In lavorazione"; - case PaymentStatusEnum.failed: + case paymentStatusEnum.enum.failed: return "Errore"; default: return "Non completato"; @@ -78,10 +79,10 @@ export const OrdiniTable = ({ ]; const type_options = [ - { label: "Acconto", value: OrderTypeEnum.Acconto }, - { label: "Saldo", value: OrderTypeEnum.Saldo }, - { label: "Consulenza", value: OrderTypeEnum.Consulenza }, - { label: "Altro", value: OrderTypeEnum.Altro }, + { label: "Acconto", value: orderTypeEnum.enum.Acconto }, + { label: "Saldo", value: orderTypeEnum.enum.Saldo }, + { label: "Consulenza", value: orderTypeEnum.enum.Consulenza }, + { label: "Altro", value: orderTypeEnum.enum.Altro }, ]; const [selectedOrdine, setSelectedOrdine] = useState( diff --git a/apps/infoalloggi/src/components/tables/prezziario-tables.tsx b/apps/infoalloggi/src/components/tables/prezziario-tables.tsx index 9f68f4b..0028842 100644 --- a/apps/infoalloggi/src/components/tables/prezziario-tables.tsx +++ b/apps/infoalloggi/src/components/tables/prezziario-tables.tsx @@ -9,9 +9,9 @@ import type { SearchFiltro, } from "~/components/ui/dataTable-toolbar"; import { cn, formatCurrency } from "~/lib/utils"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; import type { Prezziario } from "~/schemas/public/Prezziario"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum"; export const PrezzarioTable = ({ data, @@ -24,12 +24,12 @@ export const PrezzarioTable = ({ }) => { const tabledata = data; - const tipologia_options = Object.values(OrderTypeEnum).map((value) => ({ + const tipologia_options = orderTypeEnum.options.map((value) => ({ label: value, value: value, })); - const cat_options = Object.values(TipologiaPosizioneEnum).map((value) => ({ + const cat_options = tipologiaPosizioneEnum.options.map((value) => ({ label: value, value: value, })); diff --git a/apps/infoalloggi/src/components/tables/richieste-table.tsx b/apps/infoalloggi/src/components/tables/richieste-table.tsx index 85d9035..07d2d53 100644 --- a/apps/infoalloggi/src/components/tables/richieste-table.tsx +++ b/apps/infoalloggi/src/components/tables/richieste-table.tsx @@ -58,9 +58,9 @@ import { import { UserAvatar } from "~/components/user_avatar"; import { MutationPageRestore } from "~/lib/tableUtils"; import { cn } from "~/lib/utils"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; -import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; +import { statusConfermaEnum } from "~/schemas/public/StatusConfermaEnum"; +import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum"; import type { RichiesteData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; import { DEFAULT_SERVIZIO_DURATION_DAYS } from "~/utils/config"; @@ -91,8 +91,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { ]; const type_options = [ - { label: "Transitorio", value: TipologiaPosizioneEnum.Transitorio }, - { label: "Stabile", value: TipologiaPosizioneEnum.Stabile }, + { label: "Transitorio", value: tipologiaPosizioneEnum.enum.Transitorio }, + { label: "Stabile", value: tipologiaPosizioneEnum.enum.Stabile }, ]; type Column = (typeof tabledata)[number]; @@ -282,7 +282,7 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { { } if (!row.original.isOkAcconto || !row.original.decorrenza) { const acconti = row.original.ordini_servizio.filter( - (o) => o.type === OrderTypeEnum.Acconto, + (o) => o.type === orderTypeEnum.enum.Acconto, ); const activeAcconto = acconti.find((a) => a.isActive); @@ -395,7 +395,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { if ( //hasConsulanzaDaPagare row.original.ordini_servizio.some( - (o) => o.type === OrderTypeEnum.Consulenza && !o.isActive, + (o) => + o.type === orderTypeEnum.enum.Consulenza && !o.isActive, ) ) { badgeClass = @@ -420,7 +421,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { } const annuncioCaparraVersata = row.original.annunci_servizio.filter( - (a) => a.status_conferma === StatusConfermaEnum["Caparra versata"], + (a) => + a.status_conferma === statusConfermaEnum.enum["Caparra versata"], ); if (annuncioCaparraVersata.length > 0) { if (row.original.isOkSaldo) { @@ -445,7 +447,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { } const annuncioConfermato = row.original.annunci_servizio.filter( (a) => - a.status_conferma === StatusConfermaEnum["Conferma accettata"], + a.status_conferma === + statusConfermaEnum.enum["Conferma accettata"], ); if (annuncioConfermato.length > 0) { badgeClass = "border-yellow-500 bg-yellow-500/10 text-yellow-600"; @@ -460,7 +463,8 @@ export const RichiesteTable = ({ data }: RichiesteTableProps) => { } const annuncioAttesaConferma = row.original.annunci_servizio.filter( - (a) => a.status_conferma === StatusConfermaEnum["Inviato conferma"], + (a) => + a.status_conferma === statusConfermaEnum.enum["Inviato conferma"], ); if (annuncioAttesaConferma.length > 0) { badgeClass = "border-blue-500 bg-blue-500/10 text-blue-500"; diff --git a/apps/infoalloggi/src/forms/FormBanlist.tsx b/apps/infoalloggi/src/forms/FormBanlist.tsx index afa7f4a..92482b6 100644 --- a/apps/infoalloggi/src/forms/FormBanlist.tsx +++ b/apps/infoalloggi/src/forms/FormBanlist.tsx @@ -17,9 +17,12 @@ import { SelectValue, } from "~/components/ui/select"; import { useZodForm } from "~/lib/zodForm"; -import type { Banlist, BanlistId } from "~/schemas/public/Banlist"; -import BanType from "~/schemas/public/BanType"; -import { zBanlistId, zBanType } from "~/server/utils/zod_types"; +import { + type Banlist, + type BanlistId, + banlistId, +} from "~/schemas/public/Banlist"; +import { banType } from "~/schemas/public/BanType"; type FormProps = { initialValues: Banlist | null; @@ -33,8 +36,8 @@ export const FormBanlist = ({ del, }: FormProps) => { const Schema = z.object({ - id: zBanlistId, - type: zBanType, + id: banlistId, + type: banType, value: z.string(), }); type FormValues = z.infer; @@ -44,7 +47,7 @@ export const FormBanlist = ({ if (!initialValues) { defaultValues = { id: 0 as BanlistId, - type: BanType.email, + type: banType.enum.email, value: "", }; } else { @@ -93,7 +96,7 @@ export const FormBanlist = ({ - {Object.values(BanType).map((option) => ( + {banType.options.map((option) => ( {option} diff --git a/apps/infoalloggi/src/forms/FormEditAnnuncio.tsx b/apps/infoalloggi/src/forms/FormEditAnnuncio.tsx index 5cfb6ba..89dcda1 100644 --- a/apps/infoalloggi/src/forms/FormEditAnnuncio.tsx +++ b/apps/infoalloggi/src/forms/FormEditAnnuncio.tsx @@ -59,8 +59,8 @@ import { cn } from "~/lib/utils"; import { useZodForm } from "~/lib/zodForm"; import { StatusBadge } from "~/pages/area-riservata/admin/edit-annuncio/[id]"; import { useTranslation } from "~/providers/I18nProvider"; +import { annunciId } from "~/schemas/public/Annunci"; import type { AnnunciWithMedia } from "~/server/controllers/annunci.controller"; -import { zAnnuncioId } from "~/server/utils/zod_types"; import { api } from "~/utils/api"; import type { Caratteristiche } from "~/utils/kanel-types"; @@ -85,7 +85,7 @@ export const AnnuncioEditForm = ({ data }: { data: AnnunciWithMedia }) => { email: z.email().nullable(), homepage: z.boolean().nullable(), //BASE - id: zAnnuncioId, + id: annunciId, // DATI IMMOBILE indirizzo: z.string().nullable(), diff --git a/apps/infoalloggi/src/forms/FormEditOrdine.tsx b/apps/infoalloggi/src/forms/FormEditOrdine.tsx index 90cc89f..77886eb 100644 --- a/apps/infoalloggi/src/forms/FormEditOrdine.tsx +++ b/apps/infoalloggi/src/forms/FormEditOrdine.tsx @@ -37,11 +37,13 @@ import { Switch } from "~/components/ui/switch"; import { PAYMENT_TYPES, type PaymentType } from "~/i18n/stripe"; import { cn, formatCurrency } from "~/lib/utils"; import { useZodForm } from "~/lib/zodForm"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; import type { Ordini } from "~/schemas/public/Ordini"; -import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum"; -import type { Prezziario } from "~/schemas/public/Prezziario"; -import { zPrezziarioId } from "~/server/utils/zod_types"; +import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum"; +import { + type Prezziario, + prezziarioIdprezziario, +} from "~/schemas/public/Prezziario"; import { api } from "~/utils/api"; type FormProps = { @@ -52,15 +54,15 @@ type FormProps = { export const FormEditOrder = ({ prezziario, data, close }: FormProps) => { const schema = z.object({ - packid: zPrezziarioId, + packid: prezziarioIdprezziario, isActive: z.boolean(), - type: z.enum(OrderTypeEnum), + type: orderTypeEnum, created_at: z.date(), amount_cent: z.number(), sconto: z.number().min(0).max(100), paid_at: z.date().nullable(), paymentmethod: z.enum(PAYMENT_TYPES).nullable(), - paymentstatus: z.enum(PaymentStatusEnum).nullable(), + paymentstatus: paymentStatusEnum.nullable(), }); type FormValues = z.infer; @@ -137,7 +139,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => { elementName="packid" isMulti={false} onValueChange={(value) => { - const selected = zPrezziarioId.safeParse( + const selected = prezziarioIdprezziario.safeParse( value.value, ); if (selected.success) { @@ -191,7 +193,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => { - {Object.values(OrderTypeEnum).map((option) => ( + {orderTypeEnum.options.map((option) => ( {option} @@ -301,7 +303,7 @@ export const FormEditOrder = ({ prezziario, data, close }: FormProps) => { - {Object.values(PaymentStatusEnum).map((option) => ( + {paymentStatusEnum.options.map((option) => ( {option} diff --git a/apps/infoalloggi/src/forms/FormEtichette.tsx b/apps/infoalloggi/src/forms/FormEtichette.tsx index 5c10f94..a93506c 100644 --- a/apps/infoalloggi/src/forms/FormEtichette.tsx +++ b/apps/infoalloggi/src/forms/FormEtichette.tsx @@ -12,11 +12,11 @@ import { import { Button } from "~/components/ui/button"; import Input from "~/components/ui/input"; import { useZodForm } from "~/lib/zodForm"; -import type { - Etichette, - EtichetteIdEtichetta, +import { + type Etichette, + type EtichetteIdEtichetta, + etichetteIdEtichetta, } from "~/schemas/public/Etichette"; -import { zEtichettaId } from "~/server/utils/zod_types"; type FormProps = { initialValues: Etichette | null; @@ -30,7 +30,7 @@ export const FormEtichette = ({ }: FormProps) => { const Schema = z.object({ color_hex: z.string().max(7), - id_etichetta: zEtichettaId, + id_etichetta: etichetteIdEtichetta, title: z.string(), }); type FormValues = z.infer; diff --git a/apps/infoalloggi/src/forms/FormNewOrdine.tsx b/apps/infoalloggi/src/forms/FormNewOrdine.tsx index 31dcb0d..5b11f1a 100644 --- a/apps/infoalloggi/src/forms/FormNewOrdine.tsx +++ b/apps/infoalloggi/src/forms/FormNewOrdine.tsx @@ -36,12 +36,14 @@ import { Switch } from "~/components/ui/switch"; import { PAYMENT_TYPES } from "~/i18n/stripe"; import { cn, formatCurrency } from "~/lib/utils"; import { useZodForm } from "~/lib/zodForm"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; -import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum"; -import type { Prezziario } from "~/schemas/public/Prezziario"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; +import { paymentStatusEnum } from "~/schemas/public/PaymentStatusEnum"; +import { + type Prezziario, + prezziarioIdprezziario, +} from "~/schemas/public/Prezziario"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import type { UsersId } from "~/schemas/public/Users"; -import { zPrezziarioId } from "~/server/utils/zod_types"; import { api } from "~/utils/api"; type FormProps = { @@ -58,14 +60,14 @@ export const FormNewOrder = ({ setOpen, }: FormProps) => { const schema = z.object({ - packid: zPrezziarioId, + packid: prezziarioIdprezziario, isActive: z.boolean(), - type: z.enum(OrderTypeEnum), + type: orderTypeEnum, created_at: z.date(), amount_cent: z.number(), sconto: z.number().min(0).max(100), paymentmethod: z.enum(PAYMENT_TYPES).nullable(), - paymentstatus: z.enum(PaymentStatusEnum).nullable(), + paymentstatus: paymentStatusEnum.nullable(), }); type FormValues = z.infer; @@ -123,7 +125,9 @@ export const FormNewOrder = ({ elementName="packid" isMulti={false} onValueChange={(value) => { - const selected = zPrezziarioId.safeParse(value.value); + const selected = prezziarioIdprezziario.safeParse( + value.value, + ); if (selected.success) { field.onChange(selected.data); const selectedPrezzo = prezziario.find( @@ -173,7 +177,7 @@ export const FormNewOrder = ({ - {Object.values(OrderTypeEnum).map((option) => ( + {orderTypeEnum.options.map((option) => ( {option} @@ -275,7 +279,7 @@ export const FormNewOrder = ({ - {Object.values(PaymentStatusEnum).map((option) => ( + {paymentStatusEnum.options.map((option) => ( {option} diff --git a/apps/infoalloggi/src/forms/FormPrezzo.tsx b/apps/infoalloggi/src/forms/FormPrezzo.tsx index 4dade9b..e2b769f 100644 --- a/apps/infoalloggi/src/forms/FormPrezzo.tsx +++ b/apps/infoalloggi/src/forms/FormPrezzo.tsx @@ -22,12 +22,12 @@ import { Switch } from "~/components/ui/switch"; import { Textarea } from "~/components/ui/textarea"; import { FieldResetButton } from "~/forms/comps"; import { useZodForm } from "~/lib/zodForm"; -import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; +import { orderTypeEnum } from "~/schemas/public/OrderTypeEnum"; import type { Prezziario, PrezziarioIdprezziario, } from "~/schemas/public/Prezziario"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum"; import { api } from "~/utils/api"; type FormPrezzoProps = { @@ -56,8 +56,8 @@ export const FormPrezzo = ({ prezzo_cent: z.number().min(0), sconto: z.number().min(0).max(100), testo_condizioni: z.string().nullable(), - order_type: z.enum(OrderTypeEnum).nullable(), - service_type: z.enum(TipologiaPosizioneEnum).nullable(), + order_type: orderTypeEnum.nullable(), + service_type: tipologiaPosizioneEnum.nullable(), service_variant: z.number().nullable(), }) .superRefine(({ testo_condizioni }, ctx) => { @@ -297,7 +297,7 @@ export const FormPrezzo = ({ - {Object.values(OrderTypeEnum).map((option) => ( + {orderTypeEnum.options.map((option) => ( {option} @@ -336,13 +336,11 @@ export const FormPrezzo = ({ - {Object.values(TipologiaPosizioneEnum).map( - (option) => ( - - {option} - - ), - )} + {tipologiaPosizioneEnum.options.map((option) => ( + + {option} + + ))} diff --git a/apps/infoalloggi/src/forms/FormServizioAcquisto.tsx b/apps/infoalloggi/src/forms/FormServizioAcquisto.tsx index ca537ff..87678a2 100644 --- a/apps/infoalloggi/src/forms/FormServizioAcquisto.tsx +++ b/apps/infoalloggi/src/forms/FormServizioAcquisto.tsx @@ -59,13 +59,10 @@ import { cn } from "~/lib/utils"; import { useZodForm } from "~/lib/zodForm"; import { useCatasto } from "~/providers/CatastoProvider"; import { useTranslation } from "~/providers/I18nProvider"; -import type { Servizio, ServizioUpdate } from "~/schemas/public/Servizio"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import type { Servizio } from "~/schemas/public/Servizio"; +import { tipologiaPosizioneEnum } from "~/schemas/public/TipologiaPosizioneEnum"; import type { Users, UsersId } from "~/schemas/public/Users"; -import type { - UsersAnagrafica, - UsersAnagraficaUpdate, -} from "~/schemas/public/UsersAnagrafica"; +import type { UsersAnagrafica } from "~/schemas/public/UsersAnagrafica"; import { api } from "~/utils/api"; type InitialData = { @@ -105,7 +102,7 @@ const schema = z.object({ sesso: z.string(), telefono: z.string(), terrazzo: z.boolean(), - tipologia: z.custom(), + tipologia: tipologiaPosizioneEnum, scadenza_motivazione_transitoria: z.date().nullable(), skipPayment: z.boolean(), }); @@ -228,7 +225,7 @@ export const FormServizioAcquisto = ({ }); } - if (tipologia === TipologiaPosizioneEnum.Transitorio) { + if (tipologia === tipologiaPosizioneEnum.enum.Transitorio) { if ( motivazione_transitorio === "" || motivazione_transitorio === null @@ -324,56 +321,51 @@ export const FormServizioAcquisto = ({ }); function onSubmit(fields: FormServizioAcquistoValues) { - const a: UsersAnagraficaUpdate = { - cap_residenza: fields.cap_recapiti, - civico_residenza: fields.civico_recapiti, - codice_fiscale: fields.codice_fiscale, - comune_residenza: fields.citta_recapiti, - data_nascita: fields.data_nascita, - idanagrafica: initialData.anagrafica?.idanagrafica, - luogo_nascita: fields.luogo_nascita, - nazione_nascita: fields.nazione_nascita, - nazione_residenza: fields.nazione_recapiti, - provincia_residenza: fields.provincia_recapiti, - sesso: fields.sesso, - userid: userId, - via_residenza: fields.indirizzo_recapiti, - }; - const s: ServizioUpdate = { - animali: fields.animali, - arredato: fields.arredato, - ascensore: fields.ascensore, - budget: fields.budget, - entromese: fields.entromese, - fumatori: fields.fumatori, - giardino: fields.giardino, - motivazione_transitorio: fields.motivazione_transitorio, - n_adulti: fields.n_adulti, - n_minori: fields.n_minori, - parcheggio: fields.parcheggio, - permanenza: fields.permanenza, - pianoterra: fields.pianoterra, - reddito: fields.reddito, - terrazzo: fields.terrazzo, - tipologia: fields.tipologia, - skipPayment: fields.skipPayment, - scadenza_motivazione_transitoria: fields.scadenza_motivazione_transitoria, - }; - const u: Pick< - Users, - "nome" | "cognome" | "email" | "telefono" | "username" - > = { - cognome: fields.cognome, - email: fields.email, - nome: fields.nome, - telefono: fields.telefono.replace(/\s/g, ""), - username: `${fields.cognome.trim()} ${fields.nome.trim()}`, - }; mutate({ - anagrafica: a, - servizio: s, + anagrafica: { + cap_residenza: fields.cap_recapiti, + civico_residenza: fields.civico_recapiti, + codice_fiscale: fields.codice_fiscale, + comune_residenza: fields.citta_recapiti, + data_nascita: fields.data_nascita, + idanagrafica: initialData.anagrafica?.idanagrafica, + luogo_nascita: fields.luogo_nascita, + nazione_nascita: fields.nazione_nascita, + nazione_residenza: fields.nazione_recapiti, + provincia_residenza: fields.provincia_recapiti, + sesso: fields.sesso, + userid: userId, + via_residenza: fields.indirizzo_recapiti, + }, + servizio: { + animali: fields.animali, + arredato: fields.arredato, + ascensore: fields.ascensore, + budget: fields.budget, + entromese: fields.entromese, + fumatori: fields.fumatori, + giardino: fields.giardino, + motivazione_transitorio: fields.motivazione_transitorio, + n_adulti: fields.n_adulti, + n_minori: fields.n_minori, + parcheggio: fields.parcheggio, + permanenza: fields.permanenza, + pianoterra: fields.pianoterra, + reddito: fields.reddito, + terrazzo: fields.terrazzo, + tipologia: fields.tipologia, + skipPayment: fields.skipPayment, + scadenza_motivazione_transitoria: + fields.scadenza_motivazione_transitoria, + }, servizioId: initialData.servizio.servizio_id, - user: u, + user: { + cognome: fields.cognome, + email: fields.email, + nome: fields.nome, + telefono: fields.telefono.replace(/\s/g, ""), + username: `${fields.cognome.trim()} ${fields.nome.trim()}`, + }, userId, }); } @@ -445,14 +437,14 @@ export const FormServizioAcquisto = ({ ) : ( (
- {tipologia === TipologiaPosizioneEnum.Transitorio && ( + {tipologia === tipologiaPosizioneEnum.enum.Transitorio && ( {t.parametri.permanenza_desc} @@ -682,7 +675,7 @@ export const FormServizioAcquisto = ({ />
- {tipologia === TipologiaPosizioneEnum.Transitorio ? ( + {tipologia === tipologiaPosizioneEnum.enum.Transitorio ? (
{ lastEventId === false ? skipToken : { chatId, lastEventId }, { onData({ data }) { - addMessages([data]); + addMessages([data as Message]); setRead({ chatId }); }, @@ -148,9 +148,11 @@ export const useLiveChat = (chatId: ChatsChatid, userData: Session) => { { onData(event) { if (event.eventType === "edit") { - updateMessage(event.data.messageId, { message: event.data.message }); + updateMessage(event.data.messageId as MessagesMessageid, { + message: event.data.message, + }); } else if (event.eventType === "delete") { - deleteMessage(event.data); + deleteMessage(event.data as MessagesMessageid); } else if (event.eventType === "read_receipt") { // Mark all messages sent by this user as read setMessages((current) => @@ -172,7 +174,8 @@ export const useLiveChat = (chatId: ChatsChatid, userData: Session) => { api.chatSSE.onTyping.useSubscription( { chatId, username: userData.username, userId: userData.id }, { - onData(typers: TypingData) { + onData(data) { + const typers = data as TypingData; setTypingStatus(typers.filter((n) => n.userId !== userData.id)); }, }, diff --git a/apps/infoalloggi/src/pages/annuncio/[cod].tsx b/apps/infoalloggi/src/pages/annuncio/[cod].tsx index f182737..da572fa 100644 --- a/apps/infoalloggi/src/pages/annuncio/[cod].tsx +++ b/apps/infoalloggi/src/pages/annuncio/[cod].tsx @@ -62,7 +62,9 @@ import { cn, redirectTo500 } from "~/lib/utils"; import { AnnuncioContext, useAnnuncio } from "~/providers/AnnuncioProvider"; import { useTranslation } from "~/providers/I18nProvider"; import { buildRicercaUrl } from "~/providers/RicercaProvider"; -import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; +import { + tipologiaPosizioneEnum, +} from "~/schemas/public/TipologiaPosizioneEnum"; import type { AnnuncioData } from "~/server/controllers/annunci.controller"; import { generateSSGHelper } from "~/server/utils/ssgHelper"; import { api } from "~/utils/api"; @@ -228,8 +230,8 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => { const { prezzo, tipo } = useAnnuncio(); const tipologia = tipo === "Transitorio" - ? TipologiaPosizioneEnum.Transitorio - : TipologiaPosizioneEnum.Stabile; + ? tipologiaPosizioneEnum.enum.Transitorio + : tipologiaPosizioneEnum.enum.Stabile; const { data: prezziario, isLoading } = api.prezziario.getPrezziPerTipologia.useQuery({ tipologia, @@ -252,7 +254,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => { ]; const cta = - tipologia === TipologiaPosizioneEnum.Transitorio + tipologia === tipologiaPosizioneEnum.enum.Transitorio ? t.pricing_cmp.cta_breve : t.pricing_cmp.cta_stabile; @@ -264,7 +266,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => { let opzioni: string[] = []; let pricingData: PricingData = []; - if (tipologia === TipologiaPosizioneEnum.Stabile) { + if (tipologia === tipologiaPosizioneEnum.enum.Stabile) { //se stabile, mostra il prezzo basato sul canone in default const idx = prezzo > 70000 ? 2 : prezzo > 50000 ? 1 : 0; const opzione = opzioniS[idx]; @@ -282,12 +284,12 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => { } const style = - tipologia === TipologiaPosizioneEnum.Transitorio + tipologia === tipologiaPosizioneEnum.enum.Transitorio ? "border-transitorio bg-transitorio" : "border-stabile bg-stabile"; const title = - tipologia === TipologiaPosizioneEnum.Transitorio + tipologia === tipologiaPosizioneEnum.enum.Transitorio ? t.prezzi.titolo_transitori : t.prezzi.titolo_stabile; @@ -313,7 +315,7 @@ const Pricing = ({ isDesktop }: { isDesktop: boolean }) => {