diff --git a/.talismanrc b/.talismanrc index 42be17022..9eac1d1eb 100644 --- a/.talismanrc +++ b/.talismanrc @@ -13,4 +13,5 @@ scopeconfig: - scope: node allowed_patterns: - keyof +- key= version: "1.0" diff --git a/frontend/src/components/Campaign/CampaignRecipients.tsx b/frontend/src/components/Campaign/CampaignRecipients.tsx index 622894ed8..fb734519d 100644 --- a/frontend/src/components/Campaign/CampaignRecipients.tsx +++ b/frontend/src/components/Campaign/CampaignRecipients.tsx @@ -5,15 +5,18 @@ import Typography from '@mui/material/Typography'; import Grid from '@mui/material/Unstable_Grid2'; import { ReactNode, useState } from 'react'; +import { + formatAddress as formatAddressDTO, + Pagination +} from '@zerologementvacant/models'; import { Campaign } from '../../models/Campaign'; import { useHousingList } from '../../hooks/useHousingList'; -import { Address, addressToString, isBanEligible } from '../../models/Address'; +import { Address, isBanEligible } from '../../models/Address'; import OwnerEditionSideMenu from '../OwnerEditionSideMenu/OwnerEditionSideMenu'; import AppLink from '../_app/AppLink/AppLink'; import { Housing } from '../../models/Housing'; import { useRemoveCampaignHousingMutation } from '../../services/campaign.service'; import ConfirmationModal from '../modals/ConfirmationModal/ConfirmationModal'; -import { Pagination } from '@zerologementvacant/models'; import { DefaultPagination } from '../../store/reducers/housingReducer'; import { usePagination } from '../../hooks/usePagination'; import Button from '@codegouvfr/react-dsfr/Button'; @@ -27,21 +30,23 @@ interface Props { function CampaignRecipients(props: Props) { const [pagination, setPagination] = useState(DefaultPagination); const filters = { - campaignIds: [props.campaign.id], + campaignIds: [props.campaign.id] }; const { housingList } = useHousingList({ filters, - pagination, + pagination }); const { data: count } = useCountHousingQuery(filters); const filteredCount = count?.housing ?? 0; - const { pageCount, hasPagination, changePerPage, changePage} = usePagination({ - pagination, - setPagination, - count: filteredCount, - }); + const { pageCount, hasPagination, changePerPage, changePage } = usePagination( + { + pagination, + setPagination, + count: filteredCount + } + ); const [removeCampaignHousing] = useRemoveCampaignHousingMutation(); async function removeHousing(housing: Housing): Promise { @@ -49,14 +54,14 @@ function CampaignRecipients(props: Props) { campaignId: props.campaign.id, all: false, ids: [housing.id], - filters: {}, + filters: {} }).unwrap(); } function formatAddress(address: Address): ReactNode[] { - return (addressToString(address) as string) - .split('\n') - .map((line) => {line}); + return formatAddressDTO(address).map((line) => ( + {line} + )); } const headers: ReactNode[] = [ @@ -65,7 +70,7 @@ function CampaignRecipients(props: Props) { 'Propriétaire principal', 'Adresse BAN du propriétaire', 'Complément d’adresse', - null, + null ]; const data: ReactNode[][] = (housingList ?? []).map((housing, i) => [ `# ${i + 1 + (pagination.page - 1) * pagination.perPage}`, @@ -107,7 +112,7 @@ function CampaignRecipients(props: Props) { iconId: 'fr-icon-close-line', priority: 'tertiary', size: 'small', - title: 'Supprimer le propriétaire', + title: 'Supprimer le propriétaire' }} title="Suppression d’un propriétaire" onSubmit={() => removeHousing(housing)} @@ -116,7 +121,7 @@ function CampaignRecipients(props: Props) { Vous êtes sur le point de supprimer ce destinataire de la campagne. - , + ]); return ( @@ -125,7 +130,9 @@ function CampaignRecipients(props: Props) { severity="info" closable title="Vos propriétaires destinataires" - description={'Vérifiez les adresses des propriétaires, notamment dans les cas où l\'adresse BAN diffère de l\'adresse issue des Fichiers Fonciers (cas signalés par la mention "Adresse améliorable"). Une fois la liste des destinataires vérifiée, cliquez sur "Valider et passer au téléchargement" pour télécharger les destinataires au format XLSX.'} + description={ + 'Vérifiez les adresses des propriétaires, notamment dans les cas où l\'adresse BAN diffère de l\'adresse issue des Fichiers Fonciers (cas signalés par la mention "Adresse améliorable"). Une fois la liste des destinataires vérifiée, cliquez sur "Valider et passer au téléchargement" pour télécharger les destinataires au format XLSX.' + } className="fr-mt-2w" /> diff --git a/frontend/src/components/EventsHistory/EventPartialOwnerContent.tsx b/frontend/src/components/EventsHistory/EventPartialOwnerContent.tsx index abcdb6c78..44f3963ea 100644 --- a/frontend/src/components/EventsHistory/EventPartialOwnerContent.tsx +++ b/frontend/src/components/EventsHistory/EventPartialOwnerContent.tsx @@ -2,7 +2,8 @@ import styles from './events-history.module.scss'; import { hasValues } from '../../models/Diff'; import { Owner } from '../../models/Owner'; import { birthdate } from '../../utils/dateUtils'; -import { addressToString } from '../../models/Address'; +import { formatAddress } from '@zerologementvacant/models'; +import Typography from '@mui/material/Typography'; interface Props { partialOwner: Partial; @@ -49,7 +50,9 @@ const EventPartialOwnerContent = ({ partialOwner.banAddress !== null && ( <> Adresse postale - {addressToString(partialOwner.banAddress)} + {formatAddress(partialOwner.banAddress).map((line) => ( + {line} + ))} )} {partialOwner.additionalAddress !== undefined && diff --git a/frontend/src/models/Address.tsx b/frontend/src/models/Address.tsx index 2f1750f54..b89d94f28 100644 --- a/frontend/src/models/Address.tsx +++ b/frontend/src/models/Address.tsx @@ -1,4 +1,3 @@ -import { reduceStringArray } from '../utils/stringUtils'; import config from '../utils/config'; import { AddressDTO, AddressKinds } from '@zerologementvacant/models'; import { Owner } from './Owner'; @@ -6,25 +5,6 @@ import fp from 'lodash/fp'; export type Address = Omit; -/** - * @deprecated - * @param address - * @param breakLine - */ -export const addressToString = (address?: Address, breakLine = true) => { - if (address) { - return reduceStringArray( - [ - address.street?.startsWith(address.houseNumber ?? '') - ? address.street - : [address.houseNumber, address.street].join(' '), - [address.postalCode, address.city].join(' ') - ], - breakLine - ); - } -}; - export const isBanEligible = (address?: Pick) => { return ( address?.score !== undefined && address.score >= config.banEligibleScore diff --git a/frontend/src/models/test/Address.test.ts b/frontend/src/models/test/Address.test.ts index bdd32d80e..9834441fc 100644 --- a/frontend/src/models/test/Address.test.ts +++ b/frontend/src/models/test/Address.test.ts @@ -1,34 +1,8 @@ -import { addressToString, isBanEligible } from '../Address'; +import { isBanEligible } from '../Address'; import { genAddress } from '../../../test/fixtures.test'; import config from '../../utils/config'; describe('Address', () => { - describe('addressToString', () => { - const address = genAddress(); - - it('should return undefined when the address is undefined', () => { - const actual = addressToString(undefined); - expect(actual).toBeUndefined(); - }); - - it('should return a string with the address', () => { - const actual = addressToString(address); - expect(actual).toBe( - `${address.houseNumber} ${address.street}\n${address.postalCode} ${address.city}` - ); - }); - - it('should return a string with the address when street also contains houseNumber', () => { - const actual = addressToString({ - ...address, - street: `${address.houseNumber} ${address.street}`, - }); - expect(actual).toBe( - `${address.houseNumber} ${address.street}\n${address.postalCode} ${address.city}` - ); - }); - }); - describe('isBanEligible', () => { const address = genAddress(); it('should return false when the score is undefined', () => { @@ -39,7 +13,7 @@ describe('Address', () => { it('should return false when the address is not eligible', () => { const actual = isBanEligible({ ...address, - score: config.banEligibleScore - 0.1, + score: config.banEligibleScore - 0.1 }); expect(actual).toBe(false); }); @@ -47,7 +21,7 @@ describe('Address', () => { it('should return true when the address is eligible', () => { const actual = isBanEligible({ ...address, - score: config.banEligibleScore + 0.1, + score: config.banEligibleScore + 0.1 }); expect(actual).toBe(true); });