diff --git a/frontend/src/components/HousingEdition/HousingEditionSideMenu.tsx b/frontend/src/components/HousingEdition/HousingEditionSideMenu.tsx index 0a146fd12..b50c8646d 100644 --- a/frontend/src/components/HousingEdition/HousingEditionSideMenu.tsx +++ b/frontend/src/components/HousingEdition/HousingEditionSideMenu.tsx @@ -81,7 +81,7 @@ function HousingEditionSideMenu(props: HousingEditionSideMenuProps) { occupancy: props.housing?.occupancy ?? Occupancy.UNKNOWN, occupancyIntended: props.housing?.occupancyIntended ?? Occupancy.UNKNOWN, status: props.housing?.status ?? HousingStatus.NEVER_CONTACTED, - subStatus: props.housing?.subStatus ?? '', + subStatus: props.housing?.subStatus ?? null, note: '' }, mode: 'onSubmit', @@ -114,6 +114,18 @@ function HousingEditionSideMenu(props: HousingEditionSideMenuProps) { } }); + const { data } = useFindPrecisionsQuery(); + const precisionOptions = data ?? []; + const precisions = + housing?.precisions?.length && precisionOptions.length + ? housing.precisions + .concat(housing?.vacancyReasons ?? []) + // Only keep the well formed precisions and vacancy reasons + // like `Dispositifs > Dispositifs incitatifs > Réserve personnelle ou pour une autre personne` + .filter((precision) => precision.split(' > ').length === 3) + .map((precision) => toNewPrecision(precisionOptions, precision)) + : []; + function submit() { if (housing) { const { note, ...payload } = form.getValues(); @@ -129,7 +141,8 @@ function HousingEditionSideMenu(props: HousingEditionSideMenuProps) { occupancy: payload.occupancy as Occupancy, occupancyIntended: payload.occupancyIntended as Occupancy | null, status: payload.status as HousingStatus, - subStatus: payload.subStatus + subStatus: payload.subStatus, + precisions: precisions.map((p) => p.id) }); } @@ -169,18 +182,6 @@ function HousingEditionSideMenu(props: HousingEditionSideMenuProps) { } function MobilisationTab(): ElementOf { - const { data } = useFindPrecisionsQuery(); - - const precisionOptions = data ?? []; - const precisions = - housing?.precisions?.length && precisionOptions.length - ? housing.precisions - .concat(housing?.vacancyReasons ?? []) - // Only keep the well formed precisions and vacancy reasons - // like `Dispositifs > Dispositifs incitatifs > Réserve personnelle ou pour une autre personne` - .filter((precision) => precision.split(' > ').length === 3) - .map((precision) => toNewPrecision(precisionOptions, precision)) - : []; const mechanisms = precisions.filter((precision) => isPrecisionMechanismCategory(precision.category) ); diff --git a/frontend/src/components/HousingList/HousingList.tsx b/frontend/src/components/HousingList/HousingList.tsx index 6b009e933..0daa2ae8e 100644 --- a/frontend/src/components/HousingList/HousingList.tsx +++ b/frontend/src/components/HousingList/HousingList.tsx @@ -59,7 +59,7 @@ const HousingList = ({ const [pagination, setPagination] = useState(DefaultPagination); const [sort, setSort] = useState(); - const [updatingHousing, setUpdatingHousing] = useState(null); + const [updatingHousing, setUpdatingHousing] = useState(null); const { housingList } = useHousingList({ filters, @@ -243,7 +243,7 @@ const HousingList = ({ title="Mettre à jour" size="small" priority="secondary" - onClick={() => setUpdatingHousing(housing)} + onClick={() => setUpdatingHousing(housing.id)} > Mettre à jour @@ -337,7 +337,9 @@ const HousingList = ({ )} housing.id === updatingHousing) ?? null + } expand={!!updatingHousing} onClose={() => { setUpdatingHousing(null); diff --git a/frontend/src/services/housing.service.ts b/frontend/src/services/housing.service.ts index b1e6edfdb..b285f0fa3 100644 --- a/frontend/src/services/housing.service.ts +++ b/frontend/src/services/housing.service.ts @@ -14,7 +14,6 @@ import { import { parseOwner } from './owner.service'; import { HousingCount } from '../models/HousingCount'; import { zlvApi } from './api.service'; -import fp from 'lodash/fp'; export interface FindOptions extends PaginationOptions, @@ -140,16 +139,13 @@ export const housingApi = zlvApi.injectEndpoints({ query: ({ id, ...payload }) => ({ url: `housing/${id}`, method: 'PUT', - body: fp.pick( - [ - 'occupancy', - 'occupancyIntended', - 'status', - 'subStatus', - 'precisions' - ], - payload - ) + body: { + occupancy: payload.occupancy, + occupancyIntended: payload.occupancyIntended ?? null, + status: payload.status, + subStatus: payload.subStatus?.length ? payload.subStatus : null, + precisions: payload.precisions?.length ? payload.precisions : null + } satisfies HousingUpdatePayloadDTO }), invalidatesTags: (result, error, payload) => [ { type: 'Housing', id: payload.id }, diff --git a/packages/models/src/HousingDTO.ts b/packages/models/src/HousingDTO.ts index 58e93a8a5..87d1c6d38 100644 --- a/packages/models/src/HousingDTO.ts +++ b/packages/models/src/HousingDTO.ts @@ -51,7 +51,6 @@ export type HousingUpdatePayloadDTO = // Optional, nullable keys subStatus?: string | null; precisions?: string[] | null; - vacancyReasons?: string[] | null; occupancyIntended?: Occupancy | null; }; diff --git a/packages/schemas/src/housing-update-payload.ts b/packages/schemas/src/housing-update-payload.ts index 7d872061b..d03cf7180 100644 --- a/packages/schemas/src/housing-update-payload.ts +++ b/packages/schemas/src/housing-update-payload.ts @@ -25,14 +25,6 @@ export const housingUpdatePayload: ObjectSchema = .transform((value) => Array.isArray(value) && value.length === 0 ? null : value ), - vacancyReasons: array() - .of(string().trim().required()) - .nullable() - .optional() - .default(null) - .transform((value) => - Array.isArray(value) && value.length === 0 ? null : value - ), occupancyIntended: string() .oneOf(OCCUPANCY_VALUES) .nullable() diff --git a/packages/schemas/src/test/housing-update-payload.test.ts b/packages/schemas/src/test/housing-update-payload.test.ts index f07561426..bb6aa3d5f 100644 --- a/packages/schemas/src/test/housing-update-payload.test.ts +++ b/packages/schemas/src/test/housing-update-payload.test.ts @@ -21,11 +21,6 @@ describe('Housing update payload', () => { fc.constant(null), fc.constant(undefined) ), - vacancyReasons: fc.oneof( - fc.array(fc.stringMatching(/\S/), { minLength: 1 }), - fc.constant(null), - fc.constant(undefined) - ), occupancyIntended: fc.oneof( fc.constantFrom(...OCCUPANCY_VALUES), fc.constant(null), diff --git a/server/src/controllers/housingController.test.ts b/server/src/controllers/housingController.test.ts index 5b3a0e157..7f07ed966 100644 --- a/server/src/controllers/housingController.test.ts +++ b/server/src/controllers/housingController.test.ts @@ -568,7 +568,6 @@ describe('Housing API', () => { ), subStatus: null, precisions: null, - vacancyReasons: null, occupancy: faker.helpers.arrayElement( OCCUPANCY_VALUES.filter( (occupancy) => occupancy !== housing.occupancy @@ -627,7 +626,6 @@ describe('Housing API', () => { status: payload.status, subStatus: null, precisions: payload.precisions, - vacancyReasons: payload.vacancyReasons, occupancy: payload.occupancy, occupancyIntended: payload.occupancyIntended }); @@ -647,7 +645,6 @@ describe('Housing API', () => { status: payload.status as unknown as HousingStatusApi.Blocked, sub_status: null, precisions: payload.precisions, - vacancy_reasons: payload.vacancyReasons, occupancy: payload.occupancy, occupancy_intended: payload.occupancyIntended }); @@ -762,8 +759,7 @@ describe('Housing API', () => { subStatus: housing.subStatus, occupancy: housing.occupancy, occupancyIntended: housing.occupancyIntended, - precisions: housing.precisions, - vacancyReasons: housing.vacancyReasons + precisions: housing.precisions }; const { status } = await request(app) diff --git a/server/src/controllers/housingController.ts b/server/src/controllers/housingController.ts index 38b82b39c..e1a48a452 100644 --- a/server/src/controllers/housingController.ts +++ b/server/src/controllers/housingController.ts @@ -337,9 +337,7 @@ async function updateNext( HousingUpdatePayloadDTO >; - const precisionIds = (body.precisions ?? []).concat( - body.vacancyReasons ?? [] - ); + const precisionIds = body.precisions ?? []; const [housing, precisions] = await Promise.all([ housingRepository.findOne({ id: params.id,