From 25da14bac2d55ab9cfc5fe1849526db15993f64f Mon Sep 17 00:00:00 2001 From: Elisabeth Fainstein <139369258+elisfainstein@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:57:46 +0100 Subject: [PATCH 1/3] feat: add trackers to filtres in Toutes les FA --- .../MenuFiltresToutesLesFichesAction.tsx | 64 ++++++++++++++++++- .../ToutesLesFichesAction.tsx | 1 + .../src/components/tracking/trackingPlan.ts | 26 ++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx index 01a69cbc95..75bacbd8e4 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx @@ -15,14 +15,20 @@ import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/Them import CiblesDropdown from '@/app/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown'; import PrioritesFilterDropdown from '@/app/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown'; import StatutsFilterDropdown from '@/app/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown'; -import { Checkbox, Field, FormSection } from '@/ui'; +import { Checkbox, Field, FormSection, useEventTracker } from '@/ui'; type Props = { filters: Filtre; setFilters: (filters: Filtre) => void; + collectiviteId: number; }; -const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { +const MenuFiltresToutesLesFichesAction = ({ + filters, + setFilters, + collectiviteId, +}: Props) => { + const tracker = useEventTracker('app/toutes-les-fiches-action'); const pilotes = getPilotesValues(filters); const referents = getReferentsValues(filters); @@ -42,6 +48,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ...rest, ...(plans ? { planActionIds: plans } : {}), }); + tracker('filtre_plan_action_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -63,6 +72,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { } : {}), }); + tracker('filtre_personne_pilote_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -78,6 +90,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ? { servicePiloteIds: services.map((s) => s.id) } : {}), }); + tracker('filtre_direction_pilote_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -93,6 +108,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ? { structurePiloteIds: structures.map((s) => s.id) } : {}), }); + tracker('filtre_structure_pilote_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -119,6 +137,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { } : {}), }); + tracker('filtre_elu_referent_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -132,6 +153,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ...rest, ...(!budgetPrevisionnel ? { budgetPrevisionnel: true } : {}), }); + tracker('filtre_budge_previsionnel_total_renseigne_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ...rest, ...(!restreint ? { restreint: true } : {}), }); + tracker('filtre_mode_prive_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ? { ameliorationContinue: true } : {}), }); + tracker('filtre_action_se_repete_ans_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ...rest, ...(!hasIndicateurLies ? { hasIndicateurLies: true } : {}), }); + tracker('filtre_indicateurs_associes_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ...rest, ...(!sansPilote ? { sansPilote: true } : {}), }); + tracker('filtre_sans_pilote_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ...rest, ...(!sansServicePilote ? { sansServicePilote: true } : {}), }); + tracker('filtre_sans_direction_fa', { + collectivite_id: collectiviteId!, + }); }} /> { ...rest, ...(!sansStatut ? { sansStatut: true } : {}), }); + tracker('filtre_sans_statut_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -215,6 +257,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ...rest, ...(statuts ? { statuts } : {}), }); + tracker('filtre_statut_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -227,6 +272,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ...rest, ...(priorites ? { priorites } : {}), }); + tracker('filtre_niveau_priorite_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -241,6 +289,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ? { thematiqueIds: thematiques.map((t) => t.id) } : {}), }); + tracker('filtre_thematique_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -255,6 +306,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ? { financeurIds: financeurs.map((f) => f.id!) } : {}), }); + tracker('filtre_financeur_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -269,6 +323,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ? { partenaireIds: partenaires.map((p) => p.id) } : {}), }); + tracker('filtre_partenaires_fa', { + collectivite_id: collectiviteId!, + }); }} /> @@ -281,6 +338,9 @@ const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { ...rest, ...(newCibles ? { cibles: newCibles.map((c) => c) } : {}), }); + tracker('filtre_cibles_fa', { + collectivite_id: collectiviteId!, + }); }} /> diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx index dd0c438404..e06ee21629 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx @@ -126,6 +126,7 @@ const ToutesLesFichesAction = () => { setFilterParams(filters)} + collectiviteId={collectivite?.collectivite_id!} /> )} diff --git a/packages/ui/src/components/tracking/trackingPlan.ts b/packages/ui/src/components/tracking/trackingPlan.ts index 1801eac41f..4725dd1fd5 100644 --- a/packages/ui/src/components/tracking/trackingPlan.ts +++ b/packages/ui/src/components/tracking/trackingPlan.ts @@ -244,6 +244,32 @@ export interface TrackingPlan extends Record { }; }; + /** Page toutes les fiches action */ + 'app/toutes-les-fiches-action': { + properties: { collectivite_id: number }; + onglets: never; + events: { + filtre_plan_action_fa: {}; + filtre_personne_pilote_fa: {}; + filtre_direction_pilote_fa: {}; + filtre_structure_pilote_fa: {}; + filtre_elu_referent_fa: {}; + filtre_statut_fa: {}; + filtre_niveau_priorite_fa: {}; + filtre_thematique_fa: {}; + filtre_financeur_fa: {}; + filtre_partenaires_fa: {}; + filtre_cibles_fa: {}; + filtre_budge_previsionnel_total_renseigne_fa: {}; + filtre_mode_prive_fa: {}; + filtre_action_se_repete_ans_fa: {}; + filtre_indicateurs_associes_fa: {}; + filtre_sans_pilote_fa: {}; + filtre_sans_direction_fa: {}; + filtre_sans_statut_fa: {}; + }; + }; + /** Actions groupées sur les fiches actions */ 'app/actions-groupees-fiches-action': { properties: { collectivite_id: number }; From b72e480fe7b744ad5d61b0cee8abc708f8e94b02 Mon Sep 17 00:00:00 2001 From: Elisabeth Fainstein <139369258+elisfainstein@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:59:04 +0100 Subject: [PATCH 2/3] refactor: rename "sans" filter variables to follow english-based naming convention --- .../ToutesLesFichesAction/ToutesLesFichesAction.tsx | 6 +++--- .../shared/filters/filter-badges/use-filters-to-badges.ts | 6 +++--- .../fiche-resumes.list/data-access/fiche-resumes.fetch.ts | 6 +++--- .../fiche-resumes.list/domain/fetch-options.schema.ts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx index e06ee21629..7b53507f58 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx @@ -72,9 +72,9 @@ export const nameToparams: Record< ameliorationContinue: 'ac', page: 'p', sort: 'sort', - sansPilote: 'ssp', - sansServicePilote: 'sssp', - sansStatut: 'sss', + noPilote: 'ssp', + noServicePilote: 'sssp', + noStatut: 'sss', }; /** Page de listing de toutes les fiches actions de la collectivité */ diff --git a/app.territoiresentransitions.react/src/ui/shared/filters/filter-badges/use-filters-to-badges.ts b/app.territoiresentransitions.react/src/ui/shared/filters/filter-badges/use-filters-to-badges.ts index 767a2b851d..eac8ab763c 100644 --- a/app.territoiresentransitions.react/src/ui/shared/filters/filter-badges/use-filters-to-badges.ts +++ b/app.territoiresentransitions.react/src/ui/shared/filters/filter-badges/use-filters-to-badges.ts @@ -173,11 +173,11 @@ export const useFiltersToBadges = ({ filters, customValues }: Args) => { badgeValues.push(`Date de début : ${mergedFilters[key]}`); } else if (key === 'dateFin') { badgeValues.push(`Date de fin prévisionnelle : ${mergedFilters[key]}`); - } else if (key === 'sansStatut') { + } else if (key === 'noStatut') { mergedFilters[key] && badgeValues.push('Sans statut'); - } else if (key === 'sansPilote') { + } else if (key === 'noPilote') { mergedFilters[key] && badgeValues.push('Sans pilote'); - } else if (key === 'sansServicePilote') { + } else if (key === 'noServicePilote') { mergedFilters[key] && badgeValues.push('Sans direction ou service pilote'); } diff --git a/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-resumes.fetch.ts b/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-resumes.fetch.ts index ff7b4eefaa..87b9773891 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-resumes.fetch.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-resumes.fetch.ts @@ -235,15 +235,15 @@ export async function ficheResumesFetch({ query.is('restreint', true); } - if (filtre.sansPilote) { + if (filtre.noPilote) { query.is('pilotes', null); } - if (filtre.sansServicePilote) { + if (filtre.noServicePilote) { query.is('services', null); } - if (filtre.sansStatut) { + if (filtre.noStatut) { query.is('statut', null); } diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index 6943da1acf..057c84e57d 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -21,9 +21,9 @@ export const filtreSpecifiqueSchema = z.object({ budgetPrevisionnel: z.coerce.boolean().default(false).optional(), restreint: z.coerce.boolean().default(false).optional(), hasIndicateurLies: z.coerce.boolean().default(false).optional(), - sansPilote: z.coerce.boolean().default(false).optional(), - sansServicePilote: z.coerce.boolean().default(false).optional(), - sansStatut: z.coerce.boolean().default(false).optional(), + noPilote: z.coerce.boolean().default(false).optional(), + noServicePilote: z.coerce.boolean().default(false).optional(), + noStatut: z.coerce.boolean().default(false).optional(), dateDebut: z.string().optional(), dateFin: z.string().optional(), ameliorationContinue: z.coerce.boolean().default(false).optional(), From e51f233bc03cceb3dd328e7d29219abed4d04be2 Mon Sep 17 00:00:00 2001 From: Elisabeth Fainstein <139369258+elisfainstein@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:00:36 +0100 Subject: [PATCH 3/3] refactor: centralize tracking --- .../MenuFiltresToutesLesFichesAction.tsx | 82 +++---------------- .../ToutesLesFichesAction.tsx | 12 ++- .../src/components/tracking/trackingPlan.ts | 30 +++---- 3 files changed, 32 insertions(+), 92 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx index 75bacbd8e4..8c3f516553 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/MenuFiltresToutesLesFichesAction.tsx @@ -15,20 +15,14 @@ import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/Them import CiblesDropdown from '@/app/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown'; import PrioritesFilterDropdown from '@/app/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown'; import StatutsFilterDropdown from '@/app/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown'; -import { Checkbox, Field, FormSection, useEventTracker } from '@/ui'; +import { Checkbox, Field, FormSection } from '@/ui'; type Props = { filters: Filtre; setFilters: (filters: Filtre) => void; - collectiviteId: number; }; -const MenuFiltresToutesLesFichesAction = ({ - filters, - setFilters, - collectiviteId, -}: Props) => { - const tracker = useEventTracker('app/toutes-les-fiches-action'); +const MenuFiltresToutesLesFichesAction = ({ filters, setFilters }: Props) => { const pilotes = getPilotesValues(filters); const referents = getReferentsValues(filters); @@ -48,9 +42,6 @@ const MenuFiltresToutesLesFichesAction = ({ ...rest, ...(plans ? { planActionIds: plans } : {}), }); - tracker('filtre_plan_action_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -72,9 +63,6 @@ const MenuFiltresToutesLesFichesAction = ({ } : {}), }); - tracker('filtre_personne_pilote_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -90,9 +78,6 @@ const MenuFiltresToutesLesFichesAction = ({ ? { servicePiloteIds: services.map((s) => s.id) } : {}), }); - tracker('filtre_direction_pilote_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -108,9 +93,6 @@ const MenuFiltresToutesLesFichesAction = ({ ? { structurePiloteIds: structures.map((s) => s.id) } : {}), }); - tracker('filtre_structure_pilote_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -137,9 +119,6 @@ const MenuFiltresToutesLesFichesAction = ({ } : {}), }); - tracker('filtre_elu_referent_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -153,9 +132,6 @@ const MenuFiltresToutesLesFichesAction = ({ ...rest, ...(!budgetPrevisionnel ? { budgetPrevisionnel: true } : {}), }); - tracker('filtre_budge_previsionnel_total_renseigne_fa', { - collectivite_id: collectiviteId!, - }); }} /> { - const { sansPilote, ...rest } = filters; + const { noPilote, ...rest } = filters; setFilters({ ...rest, - ...(!sansPilote ? { sansPilote: true } : {}), - }); - tracker('filtre_sans_pilote_fa', { - collectivite_id: collectiviteId!, + ...(!noPilote ? { noPilote: true } : {}), }); }} /> { - const { sansServicePilote, ...rest } = filters; + const { noServicePilote, ...rest } = filters; setFilters({ ...rest, - ...(!sansServicePilote ? { sansServicePilote: true } : {}), - }); - tracker('filtre_sans_direction_fa', { - collectivite_id: collectiviteId!, + ...(!noServicePilote ? { noServicePilote: true } : {}), }); }} /> { - const { sansStatut, ...rest } = filters; + const { noStatut, ...rest } = filters; setFilters({ ...rest, - ...(!sansStatut ? { sansStatut: true } : {}), - }); - tracker('filtre_sans_statut_fa', { - collectivite_id: collectiviteId!, + ...(!noStatut ? { noStatut: true } : {}), }); }} /> @@ -257,9 +215,6 @@ const MenuFiltresToutesLesFichesAction = ({ ...rest, ...(statuts ? { statuts } : {}), }); - tracker('filtre_statut_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -272,9 +227,6 @@ const MenuFiltresToutesLesFichesAction = ({ ...rest, ...(priorites ? { priorites } : {}), }); - tracker('filtre_niveau_priorite_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -289,9 +241,6 @@ const MenuFiltresToutesLesFichesAction = ({ ? { thematiqueIds: thematiques.map((t) => t.id) } : {}), }); - tracker('filtre_thematique_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -306,9 +255,6 @@ const MenuFiltresToutesLesFichesAction = ({ ? { financeurIds: financeurs.map((f) => f.id!) } : {}), }); - tracker('filtre_financeur_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -323,9 +269,6 @@ const MenuFiltresToutesLesFichesAction = ({ ? { partenaireIds: partenaires.map((p) => p.id) } : {}), }); - tracker('filtre_partenaires_fa', { - collectivite_id: collectiviteId!, - }); }} /> @@ -338,9 +281,6 @@ const MenuFiltresToutesLesFichesAction = ({ ...rest, ...(newCibles ? { cibles: newCibles.map((c) => c) } : {}), }); - tracker('filtre_cibles_fa', { - collectivite_id: collectiviteId!, - }); }} /> diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx index 7b53507f58..b782b37a71 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction.tsx @@ -5,7 +5,7 @@ import MenuFiltresToutesLesFichesAction from '@/app/app/pages/collectivite/Plans import { makeCollectiviteToutesLesFichesUrl } from '@/app/app/paths'; import { useSearchParams } from '@/app/core-logic/hooks/query'; import { useCurrentCollectivite } from '@/app/core-logic/hooks/useCurrentCollectivite'; -import { Button, ButtonMenu } from '@/ui'; +import { Button, ButtonMenu, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useFicheResumesFetch } from '../FicheAction/data/useFicheResumesFetch'; @@ -98,6 +98,7 @@ const ToutesLesFichesAction = () => { const filters = convertParamsToFilters(filterParams); const { mutate: createFicheAction } = useCreateFicheAction(); + const tracker = useEventTracker('app/toutes-les-fiches-action'); return (
@@ -125,8 +126,13 @@ const ToutesLesFichesAction = () => { > setFilterParams(filters)} - collectiviteId={collectivite?.collectivite_id!} + setFilters={(filters) => { + setFilterParams(filters); + tracker('filtres', { + collectivite_id: collectivite?.collectivite_id!, + filtreValues: filters, + }); + }} /> )} diff --git a/packages/ui/src/components/tracking/trackingPlan.ts b/packages/ui/src/components/tracking/trackingPlan.ts index 4725dd1fd5..8d5eb3787a 100644 --- a/packages/ui/src/components/tracking/trackingPlan.ts +++ b/packages/ui/src/components/tracking/trackingPlan.ts @@ -76,6 +76,15 @@ type IndicateursFiltres = { hasOpenData?: boolean; }; +type FichesActionFiltres = { + budgetPrevisionnel?: boolean; + restreint?: boolean; + hasIndicateurLies?: boolean; + noPilote?: boolean; + noServicePilote?: boolean; + noStatut?: boolean; +}; + type EventsGraphReferentiel = { zoom_graph: { referentiel: string; @@ -249,24 +258,9 @@ export interface TrackingPlan extends Record { properties: { collectivite_id: number }; onglets: never; events: { - filtre_plan_action_fa: {}; - filtre_personne_pilote_fa: {}; - filtre_direction_pilote_fa: {}; - filtre_structure_pilote_fa: {}; - filtre_elu_referent_fa: {}; - filtre_statut_fa: {}; - filtre_niveau_priorite_fa: {}; - filtre_thematique_fa: {}; - filtre_financeur_fa: {}; - filtre_partenaires_fa: {}; - filtre_cibles_fa: {}; - filtre_budge_previsionnel_total_renseigne_fa: {}; - filtre_mode_prive_fa: {}; - filtre_action_se_repete_ans_fa: {}; - filtre_indicateurs_associes_fa: {}; - filtre_sans_pilote_fa: {}; - filtre_sans_direction_fa: {}; - filtre_sans_statut_fa: {}; + filtres: { + filtreValues: FichesActionFiltres; + }; }; };