diff --git a/.talismanrc b/.talismanrc index 496404a86..7a91949fd 100644 --- a/.talismanrc +++ b/.talismanrc @@ -3,12 +3,16 @@ fileignoreconfig: checksum: f7719ba0d36160d97e80ee15cb5415b601354576929e36df0596c7d192465cfb - filename: README.md checksum: df312ccb4c75fc4c2441a1f7f2c7817ee98ffb3065c78d5d7d6addf6ab129176 +- filename: frontend/.env.example + checksum: 7e2a5ff197c49ff9f715b3d189da7282bdb40de53ea49735e9f183ece19168fc - filename: frontend/src/components/Draft/DraftSender.tsx checksum: cfcc1023edac4d29c305f00a4bd86f27d491e4e9535bec2bd905a917b3f396b7 - filename: frontend/src/components/Draft/DraftSignature.tsx checksum: 8abd2b819601d46cc6a3d0a61a60b76391601f2d89d9126f5167b684878bd2d1 - filename: frontend/src/index.tsx checksum: 25a58ba4ecfb8606daf5efbae6a1f0f2efe4e87a4a8a18e745712b39198d93a5 +- filename: frontend/src/utils/config.ts + checksum: 2916d5a89dbd4b6425e9b6980e235007cb0f09a3dd0f2cc8b49f43c0e79d5d5f - filename: packages/api-sdk/src/test/campaign-api.test.ts checksum: b200d9e1fec310660a91e99cd048b24cbe983e0f9f965861d061a7f0992af43e - filename: packages/healthcheck/src/checks/brevo.ts diff --git a/frontend/.env.example b/frontend/.env.example index 5b1de3bad..d4f453086 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -1,3 +1,5 @@ REACT_APP_API_URL=http://localhost:3001 REACT_APP_METABASE_STATS_DASHBOARD=UUID REACT_APP_FEATURE_OCCUPANCY=ct1,ct2,ct3 +REACT_APP_POSTHOG_ENABLED=false +REACT_APP_POSTHOG_API_KEY=key diff --git a/frontend/src/components/HousingDetails/HousingDetailsSubCardMobilisation.tsx b/frontend/src/components/HousingDetails/HousingDetailsSubCardMobilisation.tsx index 2454d5659..da7c1ff2e 100644 --- a/frontend/src/components/HousingDetails/HousingDetailsSubCardMobilisation.tsx +++ b/frontend/src/components/HousingDetails/HousingDetailsSubCardMobilisation.tsx @@ -57,14 +57,6 @@ function HousingDetailsCardMobilisation({ housing, campaigns }: Props) { Dernière mise à jour {lastUpdate(housing)} - - Prise de contact - - {campaigns.length === 0 - ? 'Jamais contacté' - : `Contacté ${campaigns.length} fois`} - - Dispositifs ({housing.precisions?.length ?? 0}) diff --git a/frontend/src/components/HousingFiltersBadges/HousingFiltersBadges.tsx b/frontend/src/components/HousingFiltersBadges/HousingFiltersBadges.tsx index 93ceb30f7..b4268ef77 100644 --- a/frontend/src/components/HousingFiltersBadges/HousingFiltersBadges.tsx +++ b/frontend/src/components/HousingFiltersBadges/HousingFiltersBadges.tsx @@ -3,7 +3,6 @@ import { beneficiaryCountOptions, buildingPeriodOptions, cadastralClassificationOptions, - campaignsCountOptions, dataFileYearsExcludedOptions, dataFileYearsIncludedOptions, energyConsumptionOptions, @@ -200,12 +199,6 @@ function HousingFiltersBadges(props: HousingFiltersBadgesProps) { onChange={(values) => onChange?.({ geoPerimetersExcluded: values })} /> )} - onChange?.({ campaignsCounts: values })} - /> - onChangeFilters({ subStatus: values }, 'Sous-statut') - } - data-testid="filtre-sous-statut-suivi" + onChange={(values) => { + onChangeFilters({ subStatus: values }, 'Sous-statut'); + posthog.capture('filtre-sous-statut-suivi'); + }} /> {campaigns && ( @@ -234,24 +234,13 @@ function HousingListFiltersSidemenu(props: Props) { ) => - onChangeFilters({ campaignIds: values }, 'Campagne') - } - data-testid="filtre-campagne" + onChange={(values: Array) => { + onChangeFilters({ campaignIds: values }, 'Campagne'); + posthog.capture('filtre-campagne'); + }} /> )} - - - onChangeFilters({ campaignsCounts: values }, 'Prise de contact') - } - data-testid="filtre-prise-de-contact" - /> - - onChangeFilters({ occupancies: values }, 'Statut d’occupation') - } - data-testid="filtre-statut-occupation" + onChange={(values) => { + onChangeFilters({ occupancies: values }, 'Statut d’occupation'); + posthog.capture('filtre-statut-occupation'); + }} /> {filters?.occupancies?.includes(Occupancy.VACANT) && ( @@ -319,6 +308,7 @@ function HousingListFiltersSidemenu(props: Props) { { intercommunalities: values.map((value) => value.id) }, 'Intercommunalité' ); + posthog.capture('filtre-intercommunalite'); } } }} @@ -328,7 +318,6 @@ function HousingListFiltersSidemenu(props: Props) { placeholder: 'Rechercher une intercommunalité' } }} - data-testid="filtre-commune" /> @@ -342,9 +331,9 @@ function HousingListFiltersSidemenu(props: Props) { { localities: concat(filters.localities, value) }, 'Commune' ); + posthog.capture('filtre-commune'); } }} - data-testid="filtre-commune" /> @@ -352,10 +341,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Type de commune" options={localityKindsOptions} initialValues={filters.localityKinds} - onChange={(values) => - onChangeFilters({ localityKinds: values }, 'Type de commune') - } - data-testid="filtre-type-de-commune" + onChange={(values) => { + onChangeFilters({ localityKinds: values }, 'Type de commune'); + posthog.capture('filtre-commune'); + }} /> @@ -377,9 +366,9 @@ function HousingListFiltersSidemenu(props: Props) { }, 'Périmètre inclus' ); + posthog.capture('filtre-perimetre-inclus'); } }} - data-testid="filtre-perimetre-inclus" /> @@ -401,9 +390,9 @@ function HousingListFiltersSidemenu(props: Props) { }, 'Périmètre exclu' ); + posthog.capture('filtre-perimetre-exclu'); } }} - data-testid="filtre-perimetre-exclu" /> {!isVisitor && } @@ -420,13 +409,13 @@ function HousingListFiltersSidemenu(props: Props) { label="Nombre de logements" options={housingCountOptions} initialValues={filters.housingCounts} - onChange={(values) => + onChange={(values) => { onChangeFilters( { housingCounts: values }, 'Nombre de logements' - ) - } - data-testid="filtre-nombre-de-logements" + ); + posthog.capture('filtre-nombre-de-logements'); + }} /> @@ -434,10 +423,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Taux de vacance" options={vacancyRateOptions} initialValues={filters.vacancyRates} - onChange={(values) => - onChangeFilters({ vacancyRates: values }, 'Taux de vacance') - } - data-testid="filtre-taux-de-vacance" + onChange={(values) => { + onChangeFilters({ vacancyRates: values }, 'Taux de vacance'); + posthog.capture('filtre-taux-de-vacance'); + }} /> @@ -445,13 +434,13 @@ function HousingListFiltersSidemenu(props: Props) { label="Étiquette DPE représentatif (CSTB)" options={energyConsumptionOptions} initialValues={filters.energyConsumption} - onChange={(values) => + onChange={(values) => { onChangeFilters( { energyConsumption: values }, 'Étiquette DPE représentatif (CSTB)' - ) - } - data-testid="filtre-etiquette-dpe" + ); + posthog.capture('filtre-etiquette-dpe'); + }} /> @@ -463,10 +452,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Type de logement" options={housingKindOptions} initialValues={filters.housingKinds} - onChange={(values) => - onChangeFilters({ housingKinds: values }, 'Type') - } - data-testid="filtre-type-logement" + onChange={(values) => { + onChangeFilters({ housingKinds: values }, 'Type'); + posthog.capture('filtre-type-logement'); + }} /> @@ -474,13 +463,13 @@ function HousingListFiltersSidemenu(props: Props) { label="Date de construction" options={buildingPeriodOptions} initialValues={filters.buildingPeriods} - onChange={(values) => + onChange={(values) => { onChangeFilters( { buildingPeriods: values }, 'Date de construction' - ) - } - data-testid="filtre-date-construction" + ); + posthog.capture('filtre-date-construction'); + }} /> @@ -488,10 +477,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Surface" options={housingAreaOptions} initialValues={filters.housingAreas} - onChange={(values) => - onChangeFilters({ housingAreas: values }, 'Surface') - } - data-testid="filtre-surface" + onChange={(values) => { + onChangeFilters({ housingAreas: values }, 'Surface'); + posthog.capture('filtre-surface'); + }} /> @@ -499,10 +488,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Nombre de pièces" options={roomsCountOptions} initialValues={filters.roomsCounts ?? []} - onChange={(values) => - onChangeFilters({ roomsCounts: values }, 'Nombre de pièces') - } - data-testid="filtre-nombre-de-pieces" + onChange={(values) => { + onChangeFilters({ roomsCounts: values }, 'Nombre de pièces'); + posthog.capture('filtre-nombre-de-pieces'); + }} /> @@ -512,15 +501,15 @@ function HousingListFiltersSidemenu(props: Props) { initialValues={filters.isTaxedValues?.map((value) => value ? 'true' : 'false' )} - onChange={(values) => + onChange={(values) => { onChangeFilters( { isTaxedValues: values.map((value) => value === 'true') }, 'Taxé' - ) - } - data-testid="filtre-taxe" + ); + posthog.capture('filtre-taxe'); + }} /> @@ -528,13 +517,13 @@ function HousingListFiltersSidemenu(props: Props) { label="Classement cadastral" options={cadastralClassificationOptions} initialValues={filters.cadastralClassifications} - onChange={(values) => + onChange={(values) => { onChangeFilters( { cadastralClassifications: values }, 'Classement cadastral' - ) - } - data-testid="filtre-classement-cadastral" + ); + posthog.capture('filtre-classement-cadastral'); + }} /> @@ -542,10 +531,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Type de propriété" options={ownershipKindsOptions} initialValues={filters.ownershipKinds} - onChange={(values) => - onChangeFilters({ ownershipKinds: values }, 'Type de propriété') - } - data-testid="filtre-type-propriete" + onChange={(values) => { + onChangeFilters({ ownershipKinds: values }, 'Type de propriété'); + posthog.capture('filtre-type-propriete'); + }} /> @@ -560,10 +549,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Type de propriétaire" options={ownerKindOptions} initialValues={filters.ownerKinds} - onChange={(values) => - onChangeFilters({ ownerKinds: values }, 'Type') - } - data-testid="filtre-type-proprietaire" + onChange={(values) => { + onChangeFilters({ ownerKinds: values }, 'Type'); + posthog.capture('filtre-type-proprietaire'); + }} /> @@ -572,10 +561,10 @@ function HousingListFiltersSidemenu(props: Props) { label="Âge" options={ownerAgeOptions} initialValues={filters.ownerAges} - onChange={(values) => - onChangeFilters({ ownerAges: values }, 'Âge') - } - data-testid="filtre-age" + onChange={(values) => { + onChangeFilters({ ownerAges: values }, 'Âge'); + posthog.capture('filtre-age'); + }} /> @@ -585,13 +574,13 @@ function HousingListFiltersSidemenu(props: Props) { initialValues={filters.multiOwners?.map((value) => value ? 'true' : 'false' )} - onChange={(values) => + onChange={(values) => { onChangeFilters( { multiOwners: values?.map((value) => value === 'true') }, 'Multi-propriétaire' - ) - } - data-testid="filtre-multi-propriétaire" + ); + posthog.capture('filtre-multi-proprietaire'); + }} /> @@ -599,13 +588,13 @@ function HousingListFiltersSidemenu(props: Props) { label="Propriétaires secondaires" options={beneficiaryCountOptions} initialValues={filters.beneficiaryCounts} - onChange={(values) => + onChange={(values) => { onChangeFilters( { beneficiaryCounts: values }, 'Propriétaires secondaires' - ) - } - data-testid="filtre-proprietaires-secondaires" + ); + posthog.capture('filtre-proprietaires-secondaires'); + }} /> @@ -619,13 +608,13 @@ function HousingListFiltersSidemenu(props: Props) { initialValues={(filters.dataFileYearsIncluded ?? []).map((_) => String(_) )} - onChange={(values) => + onChange={(values) => { onChangeFilters( { dataFileYearsIncluded: values }, 'Sources et Millésimes inclus' - ) - } - data-testid="filtre-sources-millesimes-inclus" + ); + posthog.capture('filtre-sources-millesimes-inclus'); + }} /> @@ -636,13 +625,13 @@ function HousingListFiltersSidemenu(props: Props) { initialValues={(filters.dataFileYearsExcluded ?? []).map((_) => String(_) )} - onChange={(values) => + onChange={(values) => { onChangeFilters( { dataFileYearsExcluded: values }, 'Sources et millésime exclus' - ) - } - data-testid="filtre-sources-millesimes-exclu" + ); + posthog.capture('filtre-sources-millesimes-exclus'); + }} /> diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 233cbd8c3..d69e05caa 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -24,7 +24,7 @@ declare module '@codegouvfr/react-dsfr/spa' { } if (config.posthog.enabled) { - posthog.init('phc_Thondx9VvGONN5SZK0OuDttJDIorIANsudwCL2gU3O7', { + posthog.init(config.posthog.apiKey, { api_host: 'https://eu.i.posthog.com', person_profiles: 'identified_only' }); diff --git a/frontend/src/models/HousingFilters.tsx b/frontend/src/models/HousingFilters.tsx index 684f63281..8cd803ff8 100644 --- a/frontend/src/models/HousingFilters.tsx +++ b/frontend/src/models/HousingFilters.tsx @@ -1,7 +1,6 @@ import { BeneficiaryCount, BuildingPeriod, - CampaignCount, ENERGY_CONSUMPTION_VALUES, EnergyConsumption, HousingByBuilding, @@ -72,13 +71,6 @@ export const ownerKindOptions: SelectOption[] = label: OWNER_KIND_LABELS[value] })); -export const campaignsCountOptions: SelectOption[] = [ - { value: '0', label: 'Dans aucune campagne en cours' }, - { value: '1', label: 'Déjà contacté 1 fois' }, - { value: '2', label: 'Déjà contacté 2 fois' }, - { value: 'gt2', label: 'Déjà contacté 3 fois et plus' } -]; - export const statusOptions = ( statusExcluded?: HousingStatus[] ): SelectOption[] => [ diff --git a/frontend/src/utils/config.ts b/frontend/src/utils/config.ts index 4145177f8..6e1ccefd4 100644 --- a/frontend/src/utils/config.ts +++ b/frontend/src/utils/config.ts @@ -12,7 +12,8 @@ const config = { enabled: process.env.REACT_APP_POSTHOG_ENABLED !== undefined ? process.env.REACT_APP_POSTHOG_ENABLED === 'true' - : process.env.NODE_ENV === 'production' + : process.env.NODE_ENV === 'production', + apiKey: process.env.REACT_APP_POSTHOG_API_KEY ?? '' }, dataYear: 2023, banEligibleScore: 0.8, diff --git a/server/src/models/HousingFiltersApi.ts b/server/src/models/HousingFiltersApi.ts index 6c7cb48bc..8e929aba0 100644 --- a/server/src/models/HousingFiltersApi.ts +++ b/server/src/models/HousingFiltersApi.ts @@ -71,7 +71,6 @@ const validators = (property = 'filters'): ValidationChain[] => [ body(`${property}.ownershipKinds`).custom(isArrayOf(isString)).optional(), body(`${property}.housingCounts`).custom(isArrayOf(isString)).optional(), body(`${property}.vacancyRates`).custom(isArrayOf(isString)).optional(), - body(`${property}.campaignsCounts`).custom(isArrayOf(isString)).optional(), body(`${property}.campaignIds`).custom(isArrayOf(isUUID)).optional(), body(`${property}.ownerIds`).custom(isArrayOf(isUUID)).optional(), body(`${property}.localities`).custom(isArrayOf(isString)).optional(), diff --git a/server/src/repositories/housingRepository.ts b/server/src/repositories/housingRepository.ts index 86dc02f1f..a4a62392d 100644 --- a/server/src/repositories/housingRepository.ts +++ b/server/src/repositories/housingRepository.ts @@ -455,32 +455,8 @@ function filteredQuery(opts: FilteredQueryOptions) { `cardinality(${campaignsTable}.campaign_ids) = 0` ); } - if (filters.campaignsCounts?.includes('current')) { - whereBuilder.orWhereRaw( - `cardinality(${campaignsTable}.campaign_ids) >= 1` - ); - } - if (filters.campaignsCounts?.indexOf('1') !== -1) { - whereBuilder.orWhereRaw( - `cardinality(${campaignsTable}.campaign_ids)`, - 1 - ); - } - if (filters.campaignsCounts?.indexOf('2') !== -1) { - whereBuilder.orWhereRaw( - `cardinality(${campaignsTable}.campaign_ids)`, - 2 - ); - } - if (filters.campaignsCounts?.indexOf('gt3') !== -1) { - whereBuilder.orWhereRaw( - `cardinality(${campaignsTable}.campaign_ids) >= ?`, - 3 - ); - } }); } - if (filters.ownerIds?.length) { queryBuilder.whereIn(`${ownerTable}.id`, filters.ownerIds); }