Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,15 @@ const CaseAssigneePage = () => {
});

const registeringUnitId = useMemo(() => {
return state.formData.registeringUnitText?.id;
}, [state.formData.registeringUnitText]);
return (
state.formData.registeringUnitText?.id ??
state.apiData.areasAndRegisteringUnits?.homeUnit?.id ??
null
);
}, [
state.formData.registeringUnitText,
state.apiData.areasAndRegisteringUnits?.homeUnit?.id,
]);
Comment on lines +85 to +93

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicated registeringUnitId fallback — extract to a shared hook

The exact same useMemo block now appears in two components. If the fallback priority ever changes (or a third page needs it), two places need updating (components/case-registration/first-hearing-page/index.tsx).

// Current (duplicated in both files)
const registeringUnitId = useMemo(() => {
  return (
    state.formData.registeringUnitText?.id ??
    state.apiData.areasAndRegisteringUnits?.homeUnit?.id ??
    null
  );
}, [
  state.formData.registeringUnitText,
  state.apiData.areasAndRegisteringUnits?.homeUnit?.id,
]);
// Suggested: src/ui-spa/src/common/hooks/useRegisteringUnitId.ts
import { useContext, useMemo } from "react";
import { CaseRegistrationFormContext } from "../providers/CaseRegistrationProvider";

export const useRegisteringUnitId = () => {
  const { state } = useContext(CaseRegistrationFormContext);
  return useMemo(
    () =>
      state.formData.registeringUnitText?.id ??
      state.apiData.areasAndRegisteringUnits?.homeUnit?.id ??
      null,
    [
      state.formData.registeringUnitText?.id,
      state.apiData.areasAndRegisteringUnits?.homeUnit?.id,
    ],
  );
};


const previousRoute = useMemo(() => {
if (state.formData.navigation.fromCaseSummaryPage) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,19 @@
"registering-unit-text",
) as HTMLInputElement | null;
const registeringUnitInputValue = registeringUnitInput?.value ?? "";
if (
if (isAreaSensitive) {
// Field is hidden; use stored value or fall back to home unit.
const homeUnit = state.apiData.areasAndRegisteringUnits?.homeUnit;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think the changes in the case-assignee page , first hearing page , and this page can be removed if you add default registering unit just like default case area in caseRegistrationPage if is a sensitiveCase. CaseRegistrationPage line 185

if (!state.formData.areaOrDivisionText.id && areasData?.homeUnit) {
dispatch({
type: "SET_FIELDS",
payload: {
data: {
areaOrDivisionText: {
id: areasData.homeUnit.areaId,
description: areasData.homeUnit.areaDescription,
},

// include the registering unit here if it is sensitive case
},
},
});

const registeringUnitText = state.formData.registeringUnitText.id
? state.formData.registeringUnitText
: homeUnit
? { id: homeUnit.id, description: homeUnit.description }
: state.formData.registeringUnitText;

Check warning on line 354 in src/ui-spa/src/components/case-registration/case-details-page/index.tsx

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract this nested ternary operation into an independent statement.

See more on https://sonarcloud.io/project/issues?id=CPS-Innovation_Case-Management-Register-a-Case&issues=AZ_HBbbetBnhjux5Bx3V&open=AZ_HBbbetBnhjux5Bx3V&pullRequest=195
formValue = {
...formValue,
registeringUnitText,
};
} else if (
formData.registeringUnitText?.description !== registeringUnitInputValue
) {
const { id, description } = getSelectedUnit(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,15 @@ const FirstHearingPage = () => {
}, [state.formData.navigation.fromCaseSummaryPage]);

const registeringUnitId = useMemo(() => {
return state.formData.registeringUnitText?.id;
}, [state.formData.registeringUnitText]);
return (
state.formData.registeringUnitText?.id ??
state.apiData.areasAndRegisteringUnits?.homeUnit?.id ??
null
);
}, [
state.formData.registeringUnitText,
state.apiData.areasAndRegisteringUnits?.homeUnit?.id,
]);

const [formData, setFormData] = useState<{
firstHearingRadio: string;
Expand Down
49 changes: 34 additions & 15 deletions src/ui-spa/src/components/case-registration/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,26 +181,45 @@ const CaseRegistrationPage = () => {
areasAndRegisteringUnits: areasData,
},
});
}
}, [areasData, dispatch, state.apiData.areasAndRegisteringUnits]);

if (!state.formData.areaOrDivisionText.id && areasData?.homeUnit) {
dispatch({
type: "SET_FIELDS",
payload: {
data: {
areaOrDivisionText: {
id: areasData.homeUnit.areaId,
description: areasData.homeUnit.areaDescription,
},
// Home unit must be re-applied after RESET_FORM_DATA (apiData is kept, form is cleared).
useEffect(() => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No unit/integration tests for the new fallback behaviour

Four components gain new branching logic (sensitive vs. non-sensitive) and a new useEffect with conditional dispatch. A regression here would silently re-break the defect. At minimum, add a test for:

  • CaseRegistrationPage: after RESET_FORM_DATA, the home-unit effect re-applies areaOrDivisionText and registeringUnitText when the area is sensitive.
  • CaseAssigneePage / FirstHearingPage: registeringUnitId resolves to homeUnit.id when registeringUnitText.id is null.

const homeUnit = state.apiData.areasAndRegisteringUnits?.homeUnit;
if (!homeUnit) return;

const needsArea = !state.formData.areaOrDivisionText.id;
const needsRegisteringUnit =
homeUnit.areaIsSensitive && !state.formData.registeringUnitText.id;

if (!needsArea && !needsRegisteringUnit) return;

dispatch({
type: "SET_FIELDS",
payload: {
data: {
...(needsArea && {
areaOrDivisionText: {
id: homeUnit.areaId,
description: homeUnit.areaDescription,
},
},
});
}
}
}),
// Only auto-set RU for sensitive areas (field is hidden there).
...(needsRegisteringUnit && {
registeringUnitText: {
id: homeUnit.id,
description: homeUnit.description,
},
}),
},
},
});
}, [
areasData,
dispatch,
state.formData.areaOrDivisionText,
state.apiData.areasAndRegisteringUnits,
state.formData.areaOrDivisionText.id,
state.formData.registeringUnitText.id,
]);

useEffect(() => {
Expand Down
Loading