[refactoring] Distinguish User Controls from Risk Engine in DashboardEnablementPanel (#212441)

## Summary
This PR refactors naming and logic in EntityStoreEnablementModal to
improve readability and better distinguish between:
1. Feature enablement state – Whether Risk Score or Entity Store is
actually enabled.
2. User-selected state – Whether the user has checked the corresponding
toggle.

#### Changes

- Renamed disabled → canToggle to clearly represent UI interaction.
- Renamed enablements → userSelectedEnablements to reflect user-selected
toggle states, not feature enablement.
- Refactored shouldAllowEnablement logic for clarity and correctness:
- If riskScore is enabled, return whether the user has enabled
entityStore.
- If entityStore is enabled, return whether the user has enabled
riskScore.
     - Otherwise, return true if either toggle is selected.
- Updated corresponding tests to reflect naming and logic changes.

## Testing/Validation
Manually tested the toggling behaviour still works as before and modal
still shows warning, and disables the "enable" button when there are no
available options selected.

### Validation Video


https://github.com/user-attachments/assets/0f2a3f59-e2a0-4c8b-a350-70a9573a8566
This commit is contained in:
Charlotte Alexandra Wilson 2025-02-26 13:29:21 +00:00 committed by GitHub
parent 8972d5b973
commit 874cee2c57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 18 deletions

View file

@ -225,11 +225,11 @@ export const EnablementPanel: React.FC<EnableEntityStorePanelProps> = ({ state }
toggle={(visible) => setModalState({ visible })}
enableStore={enableEntityStore}
riskScore={{
disabled: riskEngineStatus !== RiskEngineStatusEnum.NOT_INSTALLED,
canToggle: riskEngineStatus === RiskEngineStatusEnum.NOT_INSTALLED,
checked: riskEngineStatus === RiskEngineStatusEnum.NOT_INSTALLED,
}}
entityStore={{
disabled: entityStoreStatus === 'running',
canToggle: entityStoreStatus !== 'running',
checked: entityStoreStatus === 'not_installed',
}}
/>

View file

@ -35,8 +35,8 @@ const defaultProps = {
visible: true,
toggle: mockToggle,
enableStore: mockEnableStore,
riskScore: { disabled: false, checked: false },
entityStore: { disabled: false, checked: false },
riskScore: { canToggle: false, checked: false },
entityStore: { canToggle: false, checked: false },
};
const allEntityEnginePrivileges: EntityAnalyticsPrivileges = {
@ -149,8 +149,8 @@ describe('EntityStoreEnablementModal', () => {
it('should show proceed warning when riskScore is enabled but entityStore is disabled and unchecked', () => {
renderComponent({
...defaultProps,
riskScore: { disabled: false, checked: false }, // Enabled & Checked
entityStore: { disabled: true, checked: false }, // Disabled & Unchecked
riskScore: { canToggle: false, checked: false }, // Enabled & Checked
entityStore: { canToggle: true, checked: false }, // Disabled & Unchecked
});
expect(screen.getByText('Please enable at least one option to proceed.')).toBeInTheDocument();
});
@ -158,8 +158,8 @@ describe('EntityStoreEnablementModal', () => {
it('should show proceed warning when entityStore is enabled but riskScore is disabled and unchecked', () => {
renderComponent({
...defaultProps,
entityStore: { disabled: false, checked: false }, // Enabled & Checked
riskScore: { disabled: true, checked: false }, // Disabled & Unchecked
entityStore: { canToggle: false, checked: false }, // Enabled & Checked
riskScore: { canToggle: true, checked: false }, // Disabled & Unchecked
});
expect(screen.getByText('Please enable at least one option to proceed.')).toBeInTheDocument();
});

View file

@ -45,11 +45,11 @@ interface EntityStoreEnablementModalProps {
toggle: (visible: boolean) => void;
enableStore: (enablements: Enablements) => () => void;
riskScore: {
disabled?: boolean;
canToggle?: boolean;
checked?: boolean;
};
entityStore: {
disabled?: boolean;
canToggle?: boolean;
checked?: boolean;
};
}
@ -57,15 +57,15 @@ interface EntityStoreEnablementModalProps {
const shouldAllowEnablement = (
riskScoreEnabled: boolean,
entityStoreEnabled: boolean,
enablements: Enablements
userHasEnabled: Enablements
) => {
if (riskScoreEnabled) {
return enablements.entityStore;
return userHasEnabled.entityStore;
}
if (entityStoreEnabled) {
return enablements.riskScore;
return userHasEnabled.riskScore;
}
return enablements.riskScore || enablements.entityStore;
return userHasEnabled.riskScore || userHasEnabled.entityStore;
};
export const EntityStoreEnablementModal: React.FC<EntityStoreEnablementModalProps> = ({
@ -85,8 +85,8 @@ export const EntityStoreEnablementModal: React.FC<EntityStoreEnablementModalProp
const riskEnginePrivileges = useMissingRiskEnginePrivileges();
const enablementOptions = shouldAllowEnablement(
!!riskScore.disabled,
!!entityStore.disabled,
!riskScore.canToggle,
!entityStore.canToggle,
enablements
);
const { AdditionalChargesMessage } = useContractComponents();
@ -129,7 +129,7 @@ export const EntityStoreEnablementModal: React.FC<EntityStoreEnablementModalProp
}
checked={enablements.riskScore}
disabled={
riskScore.disabled ||
!riskScore.canToggle ||
(!riskEnginePrivileges.isLoading && !riskEnginePrivileges?.hasAllRequiredPrivileges)
}
onChange={() => setEnablements((prev) => ({ ...prev, riskScore: !prev.riskScore }))}
@ -156,7 +156,7 @@ export const EntityStoreEnablementModal: React.FC<EntityStoreEnablementModalProp
}
checked={enablements.entityStore}
disabled={
entityStore.disabled ||
!entityStore.canToggle ||
(!isLoadingEntityEnginePrivileges && !entityEnginePrivileges?.has_all_required)
}
onChange={() =>