refactor: remove redundant getServizio invalidations across components

This commit is contained in:
Marco Pedone 2026-03-06 18:23:35 +01:00
parent ccdbe03c2f
commit b32ebf9fde
14 changed files with 60 additions and 117 deletions

View file

@ -118,9 +118,6 @@ const DebugActions = () => {
userId: userId, userId: userId,
}); });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getServizio.invalidate({
servizioId,
});
toast.success("Dati salvati con successo"); toast.success("Dati salvati con successo");
}, },
@ -461,11 +458,9 @@ const Caparra = () => {
}; };
const MotivazioneSection = () => { const MotivazioneSection = () => {
const { servizioId } = useServizio(); const { servizio } = useServizio();
const { t } = useTranslation(); const { t } = useTranslation();
const { data: servizio } = api.servizio.getServizio.useQuery({ servizioId });
if (!servizio) return null; if (!servizio) return null;
return ( return (
<Card> <Card>
@ -804,9 +799,7 @@ const SendConferma = () => {
await utils.servizio.getServizioData.invalidate({ await utils.servizio.getServizioData.invalidate({
servizioId: servizio.servizio_id, servizioId: servizio.servizio_id,
}); });
await utils.servizio.getServizio.invalidate({
servizioId: servizio.servizio_id,
});
toast.success("Status aggiornato con successo"); toast.success("Status aggiornato con successo");
}, },
onError: (error) => { onError: (error) => {

View file

@ -154,9 +154,7 @@ const DocCheckpoint = () => {
}); });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.storage.retrieveUserFileData.invalidate({ userId }); await utils.storage.retrieveUserFileData.invalidate({ userId });
await utils.servizio.getServizio.invalidate({
servizioId: servizio.servizio_id,
});
await utils.servizio.getPacksSolution.invalidate({ servizioId }); await utils.servizio.getPacksSolution.invalidate({ servizioId });
}, },
onError: (err) => { onError: (err) => {

View file

@ -94,9 +94,6 @@ const DocCheckpoint = () => {
servizioId: servizio.servizio_id, servizioId: servizio.servizio_id,
}); });
await utils.storage.retrieveUserFileData.invalidate({ userId }); await utils.storage.retrieveUserFileData.invalidate({ userId });
await utils.servizio.getServizio.invalidate({
servizioId: servizio.servizio_id,
});
}, },
onError: (err) => { onError: (err) => {
toast.error(`Errore aggiornamento servizio: ${err.message}`); toast.error(`Errore aggiornamento servizio: ${err.message}`);

View file

@ -70,10 +70,10 @@ const NewServizioModal = ({
toast.success("Servizio modificato con successo"); toast.success("Servizio modificato con successo");
await utils.servizio.getUserServizi.invalidate(); await utils.servizio.getUserServizi.invalidate();
await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizioData.invalidate({ servizioId: data.servizio_id }); await utils.servizio.getServizioData.invalidate({
await utils.servizio.getServizio.invalidate({
servizioId: data.servizio_id, servizioId: data.servizio_id,
}); });
await utils.servizio.getCompatibileAnnunci.invalidate({ await utils.servizio.getCompatibileAnnunci.invalidate({
servizioId: data.servizio_id, servizioId: data.servizio_id,
}); });

View file

@ -235,6 +235,7 @@ const Main = () => {
onSuccess: async () => { onSuccess: async () => {
toast.success("Servizio modificato con successo"); toast.success("Servizio modificato con successo");
await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getPacksSolution.invalidate({ servizioId }); await utils.servizio.getPacksSolution.invalidate({ servizioId });
}, },

View file

@ -383,7 +383,7 @@ const EditParametri = () => {
const { servizioId, userId, isAdmin, servizio } = useServizio(); const { servizioId, userId, isAdmin, servizio } = useServizio();
const { t } = useTranslation(); const { t } = useTranslation();
const [openEditParametri, setOpenEditParametri] = useState(false); const [openEditParametri, setOpenEditParametri] = useState(false);
const { data, isLoading } = api.servizio.getServizio.useQuery({ servizioId });
const utils = api.useUtils(); const utils = api.useUtils();
const { mutate: update } = api.servizio.updateServizio.useMutation({ const { mutate: update } = api.servizio.updateServizio.useMutation({
@ -394,7 +394,7 @@ const EditParametri = () => {
toast.success("Servizio modificato con successo"); toast.success("Servizio modificato con successo");
await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getServizio.invalidate({ servizioId });
await utils.servizio.getCompatibileAnnunci.invalidate({ await utils.servizio.getCompatibileAnnunci.invalidate({
servizioId, servizioId,
}); });
@ -437,15 +437,11 @@ const EditParametri = () => {
</CredenzaDescription> </CredenzaDescription>
</CredenzaHeader> </CredenzaHeader>
<CredenzaBody className="max-h-[80vh] w-full max-w-3xl overflow-y-auto pb-5 sm:max-w-5xl"> <CredenzaBody className="max-h-[80vh] w-full max-w-3xl overflow-y-auto pb-5 sm:max-w-5xl">
{isLoading ? (
<LoadingPage />
) : (
<FormNewServizio <FormNewServizio
initialData={data} initialData={servizio}
isLimited={!isAdmin} isLimited={!isAdmin}
onSubmit={onSubmit} onSubmit={onSubmit}
/> />
)}
</CredenzaBody> </CredenzaBody>
</CredenzaContent> </CredenzaContent>
</Credenza> </Credenza>
@ -455,7 +451,7 @@ const EditParametri = () => {
const EditServizioAdmin = () => { const EditServizioAdmin = () => {
const { servizioId, userId, servizio } = useServizio(); const { servizioId, userId, servizio } = useServizio();
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const { data, isLoading } = api.servizio.getServizio.useQuery({ servizioId });
const utils = api.useUtils(); const utils = api.useUtils();
const { mutate: update } = api.servizio.updateServizio.useMutation({ const { mutate: update } = api.servizio.updateServizio.useMutation({
@ -465,7 +461,7 @@ const EditServizioAdmin = () => {
onSuccess: async () => { onSuccess: async () => {
toast.success("Servizio modificato con successo"); toast.success("Servizio modificato con successo");
await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizio.invalidate({ servizioId });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getCompatibileAnnunci.invalidate({ await utils.servizio.getCompatibileAnnunci.invalidate({
servizioId, servizioId,
@ -482,7 +478,6 @@ const EditServizioAdmin = () => {
toast.success("Servizio rimosso con successo"); toast.success("Servizio rimosso con successo");
await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getServizio.invalidate({ servizioId });
}, },
}); });
@ -511,11 +506,8 @@ const EditServizioAdmin = () => {
</CredenzaDescription> </CredenzaDescription>
</CredenzaHeader> </CredenzaHeader>
<CredenzaBody className="max-h-[80vh] w-full space-y-2 overflow-y-auto pb-5"> <CredenzaBody className="max-h-[80vh] w-full space-y-2 overflow-y-auto pb-5">
{isLoading ? ( <FormEditServizio initialData={servizio} onSubmit={onSubmit} />
<LoadingPage />
) : (
<FormEditServizio initialData={data} onSubmit={onSubmit} />
)}
<Collapsible> <Collapsible>
<CollapsibleTrigger asChild> <CollapsibleTrigger asChild>
<Button variant="warning"> <Button variant="warning">

View file

@ -322,7 +322,7 @@ export const FormNewServizioAcquisto = ({
await router.push(`/area-riservata/admin/user-view/ordini/${userId}`); await router.push(`/area-riservata/admin/user-view/ordini/${userId}`);
} else { } else {
await router.push( await router.push(
`/area-riservata/admin/user-view/ricerca/${userId}`, `/area-riservata/admin/user-view/servizio/${userId}/${initialData.servizio.servizio_id}`,
); );
} }
} else { } else {

View file

@ -78,16 +78,12 @@ export const getServerSideProps = (async (context) => {
await helper.trpc.servizio.getAcquistoData.prefetch({ await helper.trpc.servizio.getAcquistoData.prefetch({
servizioId: parsed.data, servizioId: parsed.data,
}); });
const servizio = await helper.trpc.servizio.getServizio.fetch({ const { available, userId } =
await helper.trpc.servizio.isOnboardAvailable.fetch({
servizioId: parsed.data, servizioId: parsed.data,
}); });
if ( if (!available) {
!servizio ||
servizio.isOkAcconto ||
servizio.isInterrotto ||
servizio.decorrenza !== null
) {
return { return {
redirect: { redirect: {
destination: `/area-riservata/dashboard`, destination: `/area-riservata/dashboard`,
@ -99,7 +95,7 @@ export const getServerSideProps = (async (context) => {
props: { props: {
servizioId: parsed.data, servizioId: parsed.data,
trpcState: helper.trpc.dehydrate(), trpcState: helper.trpc.dehydrate(),
userId: servizio.user_id, userId,
}, },
}; };
} }

View file

@ -82,7 +82,7 @@ export const getServerSideProps = (async (context) => {
const helper = await TrpcAuthedFetchingIstance({ access_token }); const helper = await TrpcAuthedFetchingIstance({ access_token });
if (helper) { if (helper) {
await helper.trpc.servizio.getServizio.prefetch({ await helper.trpc.servizio.getServizioData.prefetch({
servizioId, servizioId,
}); });

View file

@ -96,7 +96,7 @@ export const getServerSideProps = (async (context) => {
const helper = await TrpcAuthedFetchingIstance({ access_token }); const helper = await TrpcAuthedFetchingIstance({ access_token });
if (helper) { if (helper) {
await helper.trpc.servizio.getServizio.prefetch({ await helper.trpc.servizio.getServizioData.prefetch({
servizioId, servizioId,
}); });

View file

@ -81,16 +81,12 @@ export const getServerSideProps = (async (context) => {
await helper.trpc.servizio.getAcquistoData.prefetch({ await helper.trpc.servizio.getAcquistoData.prefetch({
servizioId: parsed.data, servizioId: parsed.data,
}); });
const servizio = await helper.trpc.servizio.getServizio.fetch({ const { available, userId: _ } =
await helper.trpc.servizio.isOnboardAvailable.fetch({
servizioId: parsed.data, servizioId: parsed.data,
}); });
if ( if (!available) {
!servizio ||
servizio.isOkAcconto ||
servizio.isInterrotto ||
servizio.decorrenza !== null
) {
return { return {
redirect: { redirect: {
destination: "/area-riservata/dashboard", destination: "/area-riservata/dashboard",

View file

@ -74,9 +74,6 @@ export const ServizioAnnuncioProvider = ({
userId: userId, userId: userId,
}); });
await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getServizioData.invalidate({ servizioId });
await utils.servizio.getServizio.invalidate({
servizioId,
});
toast.success("Dati salvati con successo"); toast.success("Dati salvati con successo");
}, },

View file

@ -185,16 +185,37 @@ export const servizioRouter = createTRPCRouter({
.query(async ({ input }) => { .query(async ({ input }) => {
return await getOrdini(input.userId); return await getOrdini(input.userId);
}), }),
isOnboardAvailable: protectedProcedure
getServizio: protectedProcedure
.input( .input(
z.object({ z.object({
servizioId: zServizioId, servizioId: zServizioId,
}), }),
) )
.query(async ({ input }) => { .output(
return await getServizioById(input.servizioId); z.discriminatedUnion("available", [
z.object({
available: z.literal(true),
userId: zUserId,
}), }),
z.object({
available: z.literal(false),
userId: z.null(),
}),
]),
)
.query(async ({ input }) => {
const servizio = await getServizioById(input.servizioId);
if (
!servizio ||
servizio.isOkAcconto ||
servizio.isInterrotto ||
servizio.decorrenza !== null
) {
return { available: false, userId: null };
}
return { available: true, userId: servizio.user_id };
}),
getServizioAnnuncio: protectedProcedure getServizioAnnuncio: protectedProcedure
.input( .input(
z.object({ z.object({

View file

@ -711,25 +711,7 @@ type DocRef = {
storageId: string; storageId: string;
ref: UsersStorageUserStorageId | null; ref: UsersStorageUserStorageId | null;
}; };
export type ServizioData = Pick< export type ServizioData = Servizio & {
Servizio,
| "servizio_id"
| "created_at"
| "decorrenza"
| "tipologia"
| "budget"
| "permanenza"
| "isInterrotto"
| "isOkAcconto"
| "isOkSaldo"
| "isOkConsulenza"
| "skipPayment"
| "skipControlloDoc"
| "skipDocMotivazione"
| "n_adulti"
| "n_minori"
| "entromese"
> & {
doc_personale_fronte: DocRef | null; doc_personale_fronte: DocRef | null;
doc_personale_retro: DocRef | null; doc_personale_retro: DocRef | null;
doc_motivazione: DocRef | null; doc_motivazione: DocRef | null;
@ -782,23 +764,8 @@ export const getAllServizioAnnunci = async (
"servizio.user_id", "servizio.user_id",
"users_anagrafica.userid", "users_anagrafica.userid",
) )
.selectAll("servizio")
.select((eb) => [ .select((eb) => [
"servizio.servizio_id",
"servizio.created_at",
"servizio.decorrenza",
"servizio.tipologia",
"servizio.budget",
"servizio.permanenza",
"servizio.isInterrotto",
"servizio.isOkAcconto",
"servizio.isOkSaldo",
"servizio.isOkConsulenza",
"servizio.skipPayment",
"servizio.skipControlloDoc",
"servizio.skipDocMotivazione",
"servizio.n_adulti",
"servizio.n_minori",
"servizio.entromese",
jsonObjectFrom( jsonObjectFrom(
eb eb
.selectFrom("users_storage") .selectFrom("users_storage")
@ -935,23 +902,8 @@ export const getServizioDataById = async (
"servizio.user_id", "servizio.user_id",
"users_anagrafica.userid", "users_anagrafica.userid",
) )
.selectAll("servizio")
.select((eb) => [ .select((eb) => [
"servizio.servizio_id",
"servizio.created_at",
"servizio.decorrenza",
"servizio.tipologia",
"servizio.budget",
"servizio.permanenza",
"servizio.isInterrotto",
"servizio.isOkAcconto",
"servizio.isOkSaldo",
"servizio.isOkConsulenza",
"servizio.skipPayment",
"servizio.skipControlloDoc",
"servizio.skipDocMotivazione",
"servizio.n_adulti",
"servizio.n_minori",
"servizio.entromese",
jsonObjectFrom( jsonObjectFrom(
eb eb
.selectFrom("users_storage") .selectFrom("users_storage")