diff --git a/CHANGELOG.md b/CHANGELOG.md index a9b8e29d4b..ddcfc2c8a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## [100.41.2](https://github.com/dhis2/capture-app/compare/v100.41.1...v100.41.2) (2023-10-12) + + +### Bug Fixes + +* [DHIS2-15827] remove effects of 'Prevent adding new events to stage' action from the form ([#3418](https://github.com/dhis2/capture-app/issues/3418)) ([f17d087](https://github.com/dhis2/capture-app/commit/f17d087f368cf4d6b26923fd5cf4fb15d7795ba2)) + +## [100.41.1](https://github.com/dhis2/capture-app/compare/v100.41.0...v100.41.1) (2023-10-09) + + +### Bug Fixes + +* [DHIS2-15734] assign effect dynamic formId object key ([#3422](https://github.com/dhis2/capture-app/issues/3422)) ([85f242b](https://github.com/dhis2/capture-app/commit/85f242b2b0c6092b46e92f087e21e102a2e1e19d)) + # [100.41.0](https://github.com/dhis2/capture-app/compare/v100.40.1...v100.41.0) (2023-10-03) diff --git a/cypress/integration/EnrollmentPage/HiddenProgramStage.feature b/cypress/integration/EnrollmentPage/HiddenProgramStage.feature index 4e6e427e3e..e13095474a 100644 --- a/cypress/integration/EnrollmentPage/HiddenProgramStage.feature +++ b/cypress/integration/EnrollmentPage/HiddenProgramStage.feature @@ -3,5 +3,4 @@ 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 - And and an error is show in the Postpartum care visit stage And the Postpartum care visit button is disabled in the enrollmentEventNew page diff --git a/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js b/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js index edf6b833bd..f9e5cf69c2 100644 --- a/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js +++ b/cypress/integration/EnrollmentPage/HiddenProgramStage/index.js @@ -45,18 +45,6 @@ Then('the New Postpartum care visit event button is disabled in the stages and e .should('be.disabled'); }); -Then('and an error is show in the Postpartum care visit stage', () => { - cy.visit( - '/#/enrollmentEventNew?enrollmentId=fmhIsWXVDmS&orgUnitId=s7SLtx8wmRA&programId=WSGAb5XwJ3Y&teiId=uW8Y7AIcRKA&stageId=bbKtnxRZKEP', - ); - cy.contains('[data-test="dhis2-uicore-button"]', 'Complete') - .should('be.disabled'); - cy.contains('[data-test="dhis2-uicore-button"]', 'Save without completing') - .should('be.disabled'); - cy.contains('[data-test="dhis2-uicore-noticebox-content"]', 'You can\'t add any more Postpartum care visit events') - .should('exist'); -}); - Then('the Postpartum care visit button is disabled in the enrollmentEventNew page', () => { cy.visit( '/#/enrollmentEventNew?enrollmentId=fmhIsWXVDmS&orgUnitId=s7SLtx8wmRA&programId=WSGAb5XwJ3Y&teiId=uW8Y7AIcRKA', diff --git a/docs/user/resources/images/first-stage-during-registration.png b/docs/user/resources/images/first-stage-during-registration.png new file mode 100644 index 0000000000..1baba4bc34 Binary files /dev/null and b/docs/user/resources/images/first-stage-during-registration.png differ diff --git a/docs/user/using-the-capture-app.md b/docs/user/using-the-capture-app.md index 1de82958d9..b335b3e7ce 100644 --- a/docs/user/using-the-capture-app.md +++ b/docs/user/using-the-capture-app.md @@ -203,8 +203,12 @@ You can set multiple program stages within a program to be auto-generating (this A program can be configured to automatically take the user to register a new event immediately after enrolling a tracked entity instance. To enable this behavior, the program must have at least one program stage with the "Open data entry form after registration" option checked. If more than one program stage has this option enabled, the first stage will be used. To configure it, you must follow the steps described in the [Enrollment with auto generated events](#enrollment-with-auto-generated-events) section and then check the option "Open data entry form after enrollment". - -![](resources/images/open-data-entry-form-after-enrollment.png) + +### Enrollment with first stage on registration page + +For tracker programs enable the "First stage appears on registration page" flag in the Maintenance. The enrollment registration page will now display the first program stage the user has access to. + +![](resources/images/first-stage-during-registration.png) #### Active type of event diff --git a/package.json b/package.json index fbf2ef4982..64230da5bf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "capture-app", "homepage": ".", - "version": "100.41.0", + "version": "100.41.2", "cacheVersion": "6", "serverVersion": "38", "license": "BSD-3-Clause", @@ -10,7 +10,7 @@ "packages/rules-engine" ], "dependencies": { - "@dhis2/rules-engine-javascript": "100.41.0", + "@dhis2/rules-engine-javascript": "100.41.2", "@dhis2/app-runtime": "^3.9.3", "@dhis2/d2-i18n": "^1.1.0", "@dhis2/d2-icons": "^1.0.1", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 411dcf5450..88cc2da714 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -1,6 +1,6 @@ { "name": "@dhis2/rules-engine-javascript", - "version": "100.41.0", + "version": "100.41.2", "license": "BSD-3-Clause", "main": "./build/cjs/index.js", "scripts": { diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js deleted file mode 100644 index a885a48a6d..0000000000 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.component.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow -import React from 'react'; -import i18n from '@dhis2/d2-i18n'; -import { NoticeBox } from '@dhis2/ui'; -import type { Props } from './ErrorText.types'; - -export const ErrorText = ({ stageName }: Props) => ( - <> -
- - - {i18n.t("You can't add any more {{ programStageName }} events", { - programStageName: stageName, - interpolation: { escapeValue: false }, - })} - - -
- -); diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js deleted file mode 100644 index 07785c7e1a..0000000000 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/ErrorText.types.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow - -export type Props = {| - stageName: string, -|}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js deleted file mode 100644 index 2b26086840..0000000000 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/ErrorText/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// @flow -export { ErrorText } from './ErrorText.component'; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js index 1c0a36c1c8..465f807ace 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/FinishButtons.component.js @@ -3,7 +3,6 @@ import React, { type ComponentType } from 'react'; import i18n from '@dhis2/d2-i18n'; import { withStyles } from '@material-ui/core'; import { Button, spacersNum } from '@dhis2/ui'; -import { ConditionalTooltip } from 'capture-core/components/ConditionalTooltip'; import { withCancelButton } from '../../DataEntry/withCancelButton'; import { addEventSaveTypes } from '../DataEntry/addEventSaveTypes'; import type { InputProps, Props } from './finishButtons.types'; @@ -18,40 +17,17 @@ const styles = { }, }; -const FinishButtonsPlain = ({ onSave, cancelButton, hiddenProgramStage, stageName, classes }: Props) => ( +const FinishButtonsPlain = ({ onSave, cancelButton, classes }: Props) => (
- - - +
- - - +
{cancelButton}
diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js index 079708e30a..dd3acb8e32 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/FinishButtons/finishButtons.types.js @@ -6,14 +6,10 @@ export type InputProps = {| onSave: (saveType: $Keys) => void, onCancel: () => void, id: string, - hiddenProgramStage: boolean, - stageName: string, |}; export type Props = {| onSave: (saveType: $Keys) => void, cancelButton: Element, - hiddenProgramStage: boolean, - stageName: string, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js index 4f784d2b9a..4e3f2f96ef 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.component.js @@ -6,7 +6,6 @@ import { Widget } from '../../Widget'; import { DataEntry } from '../DataEntry'; import { FinishButtons } from '../FinishButtons'; import { SavingText } from '../SavingText'; -import { ErrorText } from '../ErrorText'; import type { Props } from './validated.types'; const styles = () => ({ @@ -24,7 +23,6 @@ const ValidatedPlain = ({ onSave, onCancel, orgUnit, - hiddenProgramStage, id, ...passOnProps }: Props) => ( @@ -48,14 +46,8 @@ const ValidatedPlain = ({ onSave={onSave} onCancel={onCancel} id={id} - hiddenProgramStage={hiddenProgramStage} - stageName={stage.name} /> - {hiddenProgramStage ? ( - - ) : ( - - )} + )} diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js index c0245b477f..3d85e67cbf 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/Validated.container.js @@ -1,6 +1,6 @@ // @flow import React, { useCallback } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; +import { useDispatch } from 'react-redux'; import { withAskToCreateNew, withSaveHandler } from '../../DataEntry'; import { useLifecycle } from './useLifecycle'; import { useClientFormattedRulesExecutionDependencies } from './useClientFormattedRulesExecutionDependencies'; @@ -29,11 +29,6 @@ export const Validated = ({ }: ContainerProps) => { const dataEntryId = 'enrollmentEvent'; const itemId = 'newEvent'; - const rulesEffectsHiddenProgram = useSelector( - ({ rulesEffectsHiddenProgramStageDesc }) => - rulesEffectsHiddenProgramStageDesc && rulesEffectsHiddenProgramStageDesc[`${dataEntryId}-${itemId}`], - ); - const hiddenProgramStage = rulesEffectsHiddenProgram && rulesEffectsHiddenProgram[stage.id]; const rulesExecutionDependenciesClientFormatted = useClientFormattedRulesExecutionDependencies(rulesExecutionDependencies, program); @@ -132,7 +127,6 @@ export const Validated = ({ programName={program.name} orgUnit={orgUnit} rulesExecutionDependenciesClientFormatted={rulesExecutionDependenciesClientFormatted} - hiddenProgramStage={hiddenProgramStage} /> ); }; diff --git a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js index 932e61a6d8..a5194d88af 100644 --- a/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js +++ b/src/core_modules/capture-core/components/WidgetEnrollmentEventNew/Validated/validated.types.js @@ -25,6 +25,5 @@ export type Props = {| formRef: (formInstance: any) => void, dataEntryFieldRef: (instance: any, id: string) => void, rulesExecutionDependenciesClientFormatted: RulesExecutionDependenciesClientFormatted, - hiddenProgramStage: boolean, ...CssClasses, |}; diff --git a/src/core_modules/capture-core/reducers/descriptions/form.reducerDescription.js b/src/core_modules/capture-core/reducers/descriptions/form.reducerDescription.js index 85ab6638ee..30dd29a15f 100644 --- a/src/core_modules/capture-core/reducers/descriptions/form.reducerDescription.js +++ b/src/core_modules/capture-core/reducers/descriptions/form.reducerDescription.js @@ -230,7 +230,7 @@ export const formsSectionsFieldsUIDesc = createReducerDescription({ return { ...state, - formId: { + [formId]: { ...state[formId], ...updatedFields, },