Skip to content

Commit

Permalink
fix(tenant-management-webapp): duplicate roles in form definition for…
Browse files Browse the repository at this point in the history
… form definition on save (#3262)
  • Loading branch information
thdlam authored Aug 7, 2024
1 parent 3a515e5 commit aadc64c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,14 @@ const isFormUpdated = (prev: FormDefinition, next: FormDefinition): boolean => {
return isUpdated;
};

const ensureRolesAreUniqueWithNoDuplicates = (definition: FormDefinition) => {
definition.applicantRoles = [...new Set(definition.applicantRoles)];
definition.clerkRoles = [...new Set(definition.clerkRoles)];
definition.assessorRoles = [...new Set(definition.assessorRoles)];

return definition;
};

export const formEditorJsonConfig = {
'data-testid': 'templateForm-test-input',
options: {
Expand Down Expand Up @@ -176,8 +184,8 @@ export function AddEditFormDefinitionEditor(): JSX.Element {
const dispatch = useDispatch();

useEffect(() => {
dispatch(FetchFileTypeService());
dispatch(getConfigurationDefinitions());
dispatch(FetchFileTypeService());
}, [dispatch]);

const fileTypes = useSelector((state: RootState) => state.fileService.fileTypes);
Expand Down Expand Up @@ -376,17 +384,17 @@ export function AddEditFormDefinitionEditor(): JSX.Element {
if (type === applicantRoles.name) {
setDefinition({
...definition,
applicantRoles: roles,
applicantRoles: [...new Set(roles)],
});
} else if (type === clerkRoles.name) {
setDefinition({
...definition,
clerkRoles: roles,
clerkRoles: [...new Set(roles)],
});
} else {
setDefinition({
...definition,
assessorRoles: roles,
assessorRoles: [...new Set(roles)],
});
}
}}
Expand Down Expand Up @@ -507,18 +515,32 @@ export function AddEditFormDefinitionEditor(): JSX.Element {

const validateDefinitionRegisters = () => {
const registers = getDataRegisters(JSON.parse(tempUiSchema), 'urn');
const foundRegisters = selectDefinitionRegisters.filter((register) => {
return registers.filter((reg) => reg.urn === register.urn);
});

if (registers.length > 0 || foundRegisters.length === 0) {
if (foundRegisters.length === 0) {
const registersLength = registers.length;
const selectDefinitionRegistersLength = selectDefinitionRegisters.length;

if (selectDefinitionRegisters.length > 0 && registersLength > 0) {
let isValidRegister = false;
for (let reg = 0; reg < selectDefinitionRegistersLength; reg++) {
for (let registersIndex = 0; registersIndex < registers.length; registersIndex++) {
if (selectDefinitionRegisters[reg].urn === registers[registersIndex]) {
isValidRegister = true;
break;
}
}
}
if (!isValidRegister) {
dispatch(
ErrorNotification({
message: 'Data register not available or unauthorized',
})
);
}
} else if (selectDefinitionRegistersLength === 0 && registersLength > 0) {
dispatch(
ErrorNotification({
message: 'Data register not available or unauthorized',
})
);
}
};

Expand Down Expand Up @@ -899,6 +921,7 @@ export function AddEditFormDefinitionEditor(): JSX.Element {
validateDefinitionRegisters();

setCustomIndicator(true);

if (
!doesRoleExistForClientInKeyCloak(FORM_SERVICE_ID.toString(), FORM_APPLICANT_ID, elements) &&
isRoleUpdated(
Expand All @@ -909,6 +932,8 @@ export function AddEditFormDefinitionEditor(): JSX.Element {
) {
definition.applicantRoles.push(FORM_APPLICANT_SERVICE_ID);
}

ensureRolesAreUniqueWithNoDuplicates(definition);
await dispatch(
updateFormDefinition({
...definition,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { AddEditFormDefinition } from './addEditFormDefinition';
import { fetchDirectory } from '@store/directory/actions';
import { SecurityClassification } from '@store/common/models';
import { LoadMoreWrapper } from './style-components';
import { getConfigurationDefinitions } from '@store/configuration/action';

interface FormDefinitionsProps {
openAddDefinition: boolean;
Expand Down Expand Up @@ -50,6 +51,7 @@ export const FormDefinitions = ({ openAddDefinition }: FormDefinitionsProps) =>
}, [openAddDefinition]);

useEffect(() => {
dispatch(getConfigurationDefinitions());
dispatch(getFormDefinitions());
dispatch(fetchDirectory());
// eslint-disable-next-line react-hooks/exhaustive-deps
Expand Down

0 comments on commit aadc64c

Please sign in to comment.