diff --git a/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.feature b/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.feature index e13095474a..1eade0c8dd 100644 --- a/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.feature +++ b/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.feature @@ -2,5 +2,5 @@ Feature: Hidden program stage Scenario: The user cannot add an event in a hidden program stage Given you add an enrollment event that will result in a rule effect to hide a program stage - Then the New Postpartum care visit event button is disabled in the stages and events widget + Then the Postpartum care visit stage should not be displayed in the Stages and Events widget And the Postpartum care visit button is disabled in the enrollmentEventNew page diff --git a/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.js b/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.js index bfd806d758..43152029ff 100644 --- a/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.js +++ b/cypress/e2e/EnrollmentPage/HiddenProgramStage/HiddenProgramStage.js @@ -43,9 +43,8 @@ Given('you add an enrollment event that will result in a rule effect to hide a p cy.contains('[data-test="dhis2-uicore-button"]', 'Save without completing').click(); }); -Then('the New Postpartum care visit event button is disabled in the stages and events widget', () => { - cy.contains('[data-test="create-new-button"]', 'New Postpartum care visit event') - .should('be.disabled'); +Then('the Postpartum care visit stage should not be displayed in the Stages and Events widget', () => { + cy.get('[data-test="stages-and-events-widget"]').should('not.contain', 'Postpartum care visit'); }); Then('the Postpartum care visit button is disabled in the enrollmentEventNew page', () => { diff --git a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js index 87815c565c..d76690c7eb 100644 --- a/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js +++ b/src/core_modules/capture-core/components/WidgetStagesAndEvents/Stages/Stage/Stage.component.js @@ -4,7 +4,6 @@ import cx from 'classnames'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core'; import { spacersNum, colors, IconAdd16, Button } from '@dhis2/ui'; -import { ConditionalTooltip } from 'capture-core/components/Tooltips/ConditionalTooltip'; import { StageOverview } from './StageOverview'; import type { Props } from './stage.types'; import { Widget } from '../../../Widget'; @@ -24,14 +23,20 @@ const styles = { alignItems: 'center', }, }; -const hideProgramStage = (ruleEffects, stageId) => ( +const rulesEffectHideProgramStage = (ruleEffects, stageId) => ( Boolean(ruleEffects?.find(ruleEffect => ruleEffect.type === 'HIDEPROGRAMSTAGE' && ruleEffect.id === stageId)) ); export const StagePlain = ({ stage, events, classes, className, onCreateNew, ruleEffects, ...passOnProps }: Props) => { const [open, setOpenStatus] = useState(true); const { id, name, icon, description, dataElements, hideDueDate, repeatable, enableUserAssignment } = stage; - const hiddenProgramStage = hideProgramStage(ruleEffects, id); + const preventAddingNewEvents = rulesEffectHideProgramStage(ruleEffects, id); + const hideProgramStage = preventAddingNewEvents && events.length === 0; + + const handleOpen = useCallback(() => setOpenStatus(true), [setOpenStatus]); + const handleClose = useCallback(() => setOpenStatus(false), [setOpenStatus]); + + if (hideProgramStage) return null; return (
} borderless - onOpen={useCallback(() => setOpenStatus(true), [setOpenStatus])} - onClose={useCallback(() => setOpenStatus(false), [setOpenStatus])} + onOpen={handleOpen} + onClose={handleClose} open={open} > {events.length > 0 ? : ( - } + className={classes.button} + dataTest="create-new-button" + onClick={() => onCreateNew(id)} + > + {i18n.t('New {{ eventName }} event', { + eventName: name, interpolation: { escapeValue: false }, })} - enabled={hiddenProgramStage} - > - - + )}