From 1d131c563397a3357dad66c58c3bd9d582db92be Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Tue, 8 Apr 2025 19:06:24 +0530 Subject: [PATCH 01/10] Choosing a default radio button "type of date picker to show" radio group button --- .../rendering-types/inputs/date/date.component.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx index 5086cca9f..546047022 100644 --- a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { RadioButtonGroup, RadioButton } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { useFormField } from '../../../../form-field-context'; @@ -14,6 +14,18 @@ const Date: React.FC = () => { time: [{ value: 'timer', label: t('timerOnly', 'Timer only'), defaultChecked: false }], }; + const initializeDefaultSelection=useCallback(()=>{ + if(!formField.datePickerFormat){ + setFormField((prevField)=>({ + ...prevField, + datePickerFormat:'both' + })); + } + },[formField.datePickerFormat,setFormField]); + useEffect(()=>{ + initializeDefaultSelection(); + },[initializeDefaultSelection]) + const handleDatePickerTypeChange = useCallback( (type: DatePickerTypeOption) => { setFormField((prevField) => ({ From 9ae3da722274a3adbf277325fbf65c11da372a5c Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Thu, 10 Apr 2025 01:05:04 +0530 Subject: [PATCH 02/10] Used defaultSelected property and removed manually selecting default --- .../rendering-types/inputs/date/date.component.tsx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx index 546047022..e51c237cb 100644 --- a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx @@ -13,18 +13,6 @@ const Date: React.FC = () => { date: [{ value: 'calendar', label: t('calendarOnly', 'Calendar only'), defaultChecked: false }], time: [{ value: 'timer', label: t('timerOnly', 'Timer only'), defaultChecked: false }], }; - - const initializeDefaultSelection=useCallback(()=>{ - if(!formField.datePickerFormat){ - setFormField((prevField)=>({ - ...prevField, - datePickerFormat:'both' - })); - } - },[formField.datePickerFormat,setFormField]); - useEffect(()=>{ - initializeDefaultSelection(); - },[initializeDefaultSelection]) const handleDatePickerTypeChange = useCallback( (type: DatePickerTypeOption) => { @@ -37,7 +25,7 @@ const Date: React.FC = () => { ); return ( - + {Object.values(datePickerTypeOptions) .flat() .map((type) => ( From 6c491da908cb1e64750de304e3949eab9bf9d05d Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Thu, 10 Apr 2025 01:07:49 +0530 Subject: [PATCH 03/10] Formatting --- .../rendering-types/inputs/date/date.component.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx index e51c237cb..6bc83e8a2 100644 --- a/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/rendering-types/inputs/date/date.component.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect } from 'react'; +import React, { useCallback } from 'react'; import { RadioButtonGroup, RadioButton } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { useFormField } from '../../../../form-field-context'; @@ -13,7 +13,7 @@ const Date: React.FC = () => { date: [{ value: 'calendar', label: t('calendarOnly', 'Calendar only'), defaultChecked: false }], time: [{ value: 'timer', label: t('timerOnly', 'Timer only'), defaultChecked: false }], }; - + const handleDatePickerTypeChange = useCallback( (type: DatePickerTypeOption) => { setFormField((prevField) => ({ From 13d1e5d5fe9c39f5348326d7a98413b53f40797a Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:07:23 +0530 Subject: [PATCH 04/10] Added logic for resetting rendering sub properties --- .../question/question.component.tsx | 150 ++++++++++++++++-- 1 file changed, 133 insertions(+), 17 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 642ec79fe..61951e0f9 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -8,11 +8,26 @@ import { useFormField } from '../../form-field-context'; import type { FormField, RenderType } from '@openmrs/esm-form-engine-lib'; import { questionTypes, renderTypeOptions, renderingTypes } from '@constants'; import styles from './question.scss'; +import { Date, Markdown, Number, SelectAnswers, Text, TextArea, Toggle, UiSelectExtended } from '../rendering-types/inputs'; interface QuestionProps { checkIfQuestionIdExists: (idToTest: string) => boolean; } +const renderComponentMap: Partial> = { + number: Number, + text: Text, + textarea: TextArea, + toggle: Toggle, + 'ui-select-extended': UiSelectExtended, + date: Date, + datetime: Date, + markdown: Markdown, + select: SelectAnswers, + radio: SelectAnswers, + checkbox: SelectAnswers, +}; + const Question: React.FC = ({ checkIfQuestionIdExists }) => { const { t } = useTranslation(); const { formField, setFormField } = useFormField(); @@ -45,6 +60,121 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { }, [setFormField], ); + + const handleQuestionTypeChange = useCallback( + (event: React.ChangeEvent) => { + const newQuestionType = event.target.value; + setFormField((prevFormField) => { + const hasPreviousRenderingType = prevFormField?.questionOptions?.rendering; + if (hasPreviousRenderingType) { + const isQuestionTypeObs = newQuestionType === 'obs' ? true : false; + if (!isQuestionTypeObs) { + const isRenderingTypeValidForQuestionType = + questionTypes.includes(newQuestionType as keyof typeof renderTypeOptions) && + renderTypeOptions[newQuestionType].includes(prevFormField.questionOptions.rendering as RenderType); + if (!isRenderingTypeValidForQuestionType) { + prevFormField = removeRenderingTypeSubProperties(prevFormField,null); + return { + ...prevFormField, + questionOptions: { ...prevFormField.questionOptions, rendering: null }, + type: newQuestionType, + }; + } + } + } + return { + ...prevFormField, + type: newQuestionType, + }; + }); + }, + [setFormField], + ); + + const handleRenderTypePropertiesChange = useCallback((prevFormField: FormField, newRenderingType) :FormField => { + if(prevFormField.questionOptions?.rendering) { + prevFormField= removeRenderingTypeSubProperties(prevFormField,newRenderingType); + } + prevFormField = addDefaultRenderingTypeSubProperties(prevFormField,newRenderingType); + return { + ...prevFormField, + questionOptions: { + ...prevFormField.questionOptions, + rendering: newRenderingType as RenderType, + } + } + }, []); + + const removeRenderingTypeSubProperties = useCallback((prevFormField: FormField,newRenderingType) : FormField=> { + if(newRenderingType==null || (renderComponentMap[newRenderingType]!=renderComponentMap[prevFormField.questionOptions.rendering])) { + switch(renderComponentMap[prevFormField.questionOptions.rendering]) { + case Number: { + (prevFormField.questionOptions?.min!=null)?(delete prevFormField.questionOptions.min):null; + (prevFormField.questionOptions?.max!=null)?(delete prevFormField.questionOptions.max):null; + break; + }; + case Text: { + (prevFormField.questionOptions?.minLength!=null)?(delete prevFormField.questionOptions.minLength):null; + (prevFormField.questionOptions?.maxLength!=null)?(delete prevFormField.questionOptions.maxLength):null; + break; + }; + case TextArea: { + (prevFormField.questionOptions?.rows!=null)?(delete prevFormField.questionOptions.rows):null; + break; + }; + case Toggle: { + (prevFormField.questionOptions?.toggleOptions!=null)?(delete prevFormField.questionOptions.toggleOptions):null; + break; + }; + case UiSelectExtended: { + (prevFormField.questionOptions?.isSearchable!=null)?(delete prevFormField.questionOptions.isSearchable):null; + break; + }; + case Date: { + (prevFormField.datePickerFormat!=null)?(delete prevFormField.datePickerFormat):null; + break; + }; + case Markdown: { + (prevFormField.value!=null)?(delete prevFormField.value):null; + break; + }; + case SelectAnswers: { + (prevFormField.questionOptions?.answers!=null)?(delete prevFormField.questionOptions.answers):null; + break; + }; + } + } + return prevFormField; + },[]); + + const addDefaultRenderingTypeSubProperties = useCallback((prevFormField: FormField, newRenderingType) : FormField=> { + if(newRenderingType) { + switch(renderComponentMap[newRenderingType]) { + case UiSelectExtended: { + (!(prevFormField.questionOptions?.isSearchable!=null))?(prevFormField = { ...prevFormField, questionOptions: { ...prevFormField.questionOptions, isSearchable: false }}):null; + break; + }; + case Date: { + (!(prevFormField.datePickerFormat!=null))?(prevFormField = {...prevFormField, datePickerFormat: "both" }):null; + break; + }; + } + } + return prevFormField; + + },[]); + + const handleRenderingTypeChange = useCallback( + (event: React.ChangeEvent) => { + setFormField((prevFormField)=> { + return (prevFormField === null) + ? { ...prevFormField, questionOptions: { rendering: event.target.value as RenderType } } + : handleRenderTypePropertiesChange(prevFormField,event.target.value); + } + ) + }, + [setFormField], + ); const handleQuestionInfoChange = useCallback( (event: React.ChangeEvent) => { @@ -86,9 +216,7 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { /> From f714a51f39fa87c8d4250ff6ef25803c0a9c479c Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:11:22 +0530 Subject: [PATCH 05/10] Update question.component.tsx --- .../question/question-form/question/question.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 61951e0f9..8ae57b80e 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -242,7 +242,7 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { formField.type !== 'obs' && questionTypes.includes(formField.type as keyof typeof renderTypeOptions) ? renderTypeOptions[formField?.type].map((type, key) => ( - + )) : renderingTypes.map((type, key) => )} From c2fc144c781ada53d7fba9c6246ce6632c7dc84a Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Fri, 25 Apr 2025 18:32:50 +0530 Subject: [PATCH 06/10] Update question.component.tsx --- .../question/question.component.tsx | 49 ++++--------------- 1 file changed, 10 insertions(+), 39 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 57b6de0c3..108cb09e9 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -112,36 +112,36 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { (prevFormField.questionOptions?.min!=null)?(delete prevFormField.questionOptions.min):null; (prevFormField.questionOptions?.max!=null)?(delete prevFormField.questionOptions.max):null; break; - }; + } case Text: { (prevFormField.questionOptions?.minLength!=null)?(delete prevFormField.questionOptions.minLength):null; (prevFormField.questionOptions?.maxLength!=null)?(delete prevFormField.questionOptions.maxLength):null; break; - }; + } case TextArea: { (prevFormField.questionOptions?.rows!=null)?(delete prevFormField.questionOptions.rows):null; break; - }; + } case Toggle: { (prevFormField.questionOptions?.toggleOptions!=null)?(delete prevFormField.questionOptions.toggleOptions):null; break; - }; + } case UiSelectExtended: { (prevFormField.questionOptions?.isSearchable!=null)?(delete prevFormField.questionOptions.isSearchable):null; break; - }; + } case Date: { (prevFormField.datePickerFormat!=null)?(delete prevFormField.datePickerFormat):null; break; - }; + } case Markdown: { (prevFormField.value!=null)?(delete prevFormField.value):null; break; - }; + } case SelectAnswers: { (prevFormField.questionOptions?.answers!=null)?(delete prevFormField.questionOptions.answers):null; break; - }; + } } } return prevFormField; @@ -153,11 +153,11 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { case UiSelectExtended: { (!(prevFormField.questionOptions?.isSearchable!=null))?(prevFormField = { ...prevFormField, questionOptions: { ...prevFormField.questionOptions, isSearchable: false }}):null; break; - }; + } case Date: { (!(prevFormField.datePickerFormat!=null))?(prevFormField = {...prevFormField, datePickerFormat: "both" }):null; break; - }; + } } } return prevFormField; @@ -176,35 +176,6 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { [setFormField], ); - const handleQuestionTypeChange = useCallback( - (event: React.ChangeEvent) => { - const newQuestionType = event.target.value; - setFormField((prevFormField) => { - const hasPreviousRenderingType = prevFormField?.questionOptions?.rendering; - if (hasPreviousRenderingType) { - const isQuestionTypeObs = newQuestionType === 'obs' ? true : false; - if (!isQuestionTypeObs) { - const isRenderingTypeValidForQuestionType = - questionTypes.includes(newQuestionType as keyof typeof renderTypeOptions) && - renderTypeOptions[newQuestionType].includes(prevFormField.questionOptions.rendering as RenderType); - if (!isRenderingTypeValidForQuestionType) { - return { - ...prevFormField, - questionOptions: { ...prevFormField.questionOptions, rendering: null }, - type: newQuestionType, - }; - } - } - } - return { - ...prevFormField, - type: newQuestionType, - }; - }); - }, - [setFormField], - ); - const handleQuestionInfoChange = useCallback( (event: React.ChangeEvent) => { setFormField((prevFormField) => ({ From f1e17ae1e72ba2dde1b7d63c0a192381d6d6f066 Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Fri, 25 Apr 2025 19:27:27 +0530 Subject: [PATCH 07/10] Update question.component.tsx --- .../question/question.component.tsx | 97 ++++++++++--------- 1 file changed, 50 insertions(+), 47 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 108cb09e9..629f2edc1 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -60,50 +60,6 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { }, [setFormField], ); - - const handleQuestionTypeChange = useCallback( - (event: React.ChangeEvent) => { - const newQuestionType = event.target.value; - setFormField((prevFormField) => { - const hasPreviousRenderingType = prevFormField?.questionOptions?.rendering; - if (hasPreviousRenderingType) { - const isQuestionTypeObs = newQuestionType === 'obs' ? true : false; - if (!isQuestionTypeObs) { - const isRenderingTypeValidForQuestionType = - questionTypes.includes(newQuestionType as keyof typeof renderTypeOptions) && - renderTypeOptions[newQuestionType].includes(prevFormField.questionOptions.rendering as RenderType); - if (!isRenderingTypeValidForQuestionType) { - prevFormField = removeRenderingTypeSubProperties(prevFormField,null); - return { - ...prevFormField, - questionOptions: { ...prevFormField.questionOptions, rendering: null }, - type: newQuestionType, - }; - } - } - } - return { - ...prevFormField, - type: newQuestionType, - }; - }); - }, - [setFormField], - ); - - const handleRenderTypePropertiesChange = useCallback((prevFormField: FormField, newRenderingType) :FormField => { - if(prevFormField.questionOptions?.rendering) { - prevFormField= removeRenderingTypeSubProperties(prevFormField,newRenderingType); - } - prevFormField = addDefaultRenderingTypeSubProperties(prevFormField,newRenderingType); - return { - ...prevFormField, - questionOptions: { - ...prevFormField.questionOptions, - rendering: newRenderingType as RenderType, - } - } - }, []); const removeRenderingTypeSubProperties = useCallback((prevFormField: FormField,newRenderingType) : FormField=> { if(newRenderingType==null || (renderComponentMap[newRenderingType]!=renderComponentMap[prevFormField.questionOptions.rendering])) { @@ -146,8 +102,38 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { } return prevFormField; },[]); + + const handleQuestionTypeChange = useCallback( + (event: React.ChangeEvent) => { + const newQuestionType = event.target.value; + setFormField((prevFormField) => { + const hasPreviousRenderingType = prevFormField?.questionOptions?.rendering; + if (hasPreviousRenderingType) { + const isQuestionTypeObs = newQuestionType === 'obs' ? true : false; + if (!isQuestionTypeObs) { + const isRenderingTypeValidForQuestionType = + questionTypes.includes(newQuestionType as keyof typeof renderTypeOptions) && + renderTypeOptions[newQuestionType].includes(prevFormField.questionOptions.rendering as RenderType); + if (!isRenderingTypeValidForQuestionType) { + prevFormField = removeRenderingTypeSubProperties(prevFormField,null); + return { + ...prevFormField, + questionOptions: { ...prevFormField.questionOptions, rendering: null }, + type: newQuestionType, + }; + } + } + } + return { + ...prevFormField, + type: newQuestionType, + }; + }); + }, + [setFormField,removeRenderingTypeSubProperties], + ); - const addDefaultRenderingTypeSubProperties = useCallback((prevFormField: FormField, newRenderingType) : FormField=> { +const addDefaultRenderingTypeSubProperties = useCallback((prevFormField: FormField, newRenderingType) : FormField=> { if(newRenderingType) { switch(renderComponentMap[newRenderingType]) { case UiSelectExtended: { @@ -164,16 +150,33 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { },[]); + const handleRenderTypePropertiesChange = useCallback((prevFormField: FormField, newRenderingType) :FormField => { + if(prevFormField.questionOptions?.rendering) { + prevFormField= removeRenderingTypeSubProperties(prevFormField,newRenderingType); + } + prevFormField = addDefaultRenderingTypeSubProperties(prevFormField,newRenderingType); + return { + ...prevFormField, + questionOptions: { + ...prevFormField.questionOptions, + rendering: newRenderingType as RenderType, + } + } + }, [removeRenderingTypeSubProperties,addDefaultRenderingTypeSubProperties]); + const handleRenderingTypeChange = useCallback( (event: React.ChangeEvent) => { setFormField((prevFormField)=> { return (prevFormField === null) - ? { ...prevFormField, questionOptions: { rendering: event.target.value as RenderType } } + ? { + ...prevFormField, + questionOptions: { rendering: event.target.value as RenderType } + } : handleRenderTypePropertiesChange(prevFormField,event.target.value); } ) }, - [setFormField], + [setFormField,handleRenderTypePropertiesChange], ); const handleQuestionInfoChange = useCallback( From 7855e3bb72272785fbaa341d22d922d4de934d64 Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:08:19 +0530 Subject: [PATCH 08/10] Update question.component.tsx --- .../question/question.component.tsx | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 629f2edc1..17c4cc2cf 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -7,13 +7,22 @@ import RequiredLabel from '../common/required-label/required-label.component'; import { useFormField } from '../../form-field-context'; import type { FormField, RenderType } from '@openmrs/esm-form-engine-lib'; import { questionTypes, renderTypeOptions, renderingTypes } from '@constants'; +import type { QuestionType } from '@types'; import styles from './question.scss'; import { Date, Markdown, Number, SelectAnswers, Text, TextArea, Toggle, UiSelectExtended } from '../rendering-types/inputs'; +import { ObsTypeQuestion, ProgramStateTypeQuestion, PatientIdentifierTypeQuestion } from '../question-types/inputs'; interface QuestionProps { checkIfQuestionIdExists: (idToTest: string) => boolean; } +const questionComponentMap: Partial> = { + obs: ObsTypeQuestion, + programState: ProgramStateTypeQuestion, + patientIdentifier: PatientIdentifierTypeQuestion, + obsGroup: ObsTypeQuestion, +}; + const renderComponentMap: Partial> = { number: Number, text: Text, @@ -62,7 +71,7 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { ); const removeRenderingTypeSubProperties = useCallback((prevFormField: FormField,newRenderingType) : FormField=> { - if(newRenderingType==null || (renderComponentMap[newRenderingType]!=renderComponentMap[prevFormField.questionOptions.rendering])) { + if(newRenderingType==null || renderComponentMap[newRenderingType]==null || (renderComponentMap[newRenderingType]!=renderComponentMap[prevFormField.questionOptions.rendering])) { switch(renderComponentMap[prevFormField.questionOptions.rendering]) { case Number: { (prevFormField.questionOptions?.min!=null)?(delete prevFormField.questionOptions.min):null; @@ -99,6 +108,32 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { break; } } + } + if((newRenderingType== null || newRenderingType == 'markdown') && formField.required) { + delete formField.required; + } + return prevFormField; + },[formField]); + + const removeQuestionTypeSubProperties = useCallback((prevFormField: FormField, newQuestionType) : FormField=> { + if(newQuestionType==null || questionComponentMap[newQuestionType]==null || (questionComponentMap[newQuestionType]!=questionComponentMap[prevFormField.type])) { + switch(questionComponentMap[prevFormField.type]) { + case ObsTypeQuestion: { + (prevFormField.questionOptions?.concept!=null)?(delete prevFormField.questionOptions.concept):null; + (prevFormField.datePickerFormat!=null)?(delete prevFormField.datePickerFormat):null; + break; + } + case ProgramStateTypeQuestion: { + (prevFormField.questionOptions?.programUuid!=null)?(delete prevFormField.questionOptions.programUuid):null; + (prevFormField.questionOptions?.workflowUuid!=null)?(delete prevFormField.questionOptions.workflowUuid):null; + (prevFormField.questionOptions?.answers!=null)?(delete prevFormField.questionOptions.answers):null; + break; + } + case PatientIdentifierTypeQuestion: { + (prevFormField.questionOptions?.identifierType!=null)?(delete prevFormField.questionOptions.identifierType):null; + break; + } + } } return prevFormField; },[]); @@ -124,13 +159,14 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { } } } + prevFormField = removeQuestionTypeSubProperties(prevFormField,newQuestionType); return { ...prevFormField, type: newQuestionType, }; }); }, - [setFormField,removeRenderingTypeSubProperties], + [setFormField,removeRenderingTypeSubProperties,removeQuestionTypeSubProperties], ); const addDefaultRenderingTypeSubProperties = useCallback((prevFormField: FormField, newRenderingType) : FormField=> { @@ -145,6 +181,9 @@ const addDefaultRenderingTypeSubProperties = useCallback((prevFormField: FormFie break; } } + if(renderComponentMap[newRenderingType]!== 'markdown') { + prevFormField = {...prevFormField, required: false }; + } } return prevFormField; From 2406e7ca0ae2b53f8d2eae728c6a30781f666f95 Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:33:11 +0530 Subject: [PATCH 09/10] =?UTF-8?q?questionType=20sub=20properties=20change?= =?UTF-8?q?=C2=A0also=C2=A0fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question/question-form/question/question.component.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 17c4cc2cf..7c1ffad34 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -109,11 +109,11 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { } } } - if((newRenderingType== null || newRenderingType == 'markdown') && formField.required) { - delete formField.required; + if((newRenderingType== null || newRenderingType == 'markdown') && prevFormField.required) { + delete prevFormField.required; } return prevFormField; - },[formField]); + },[]); const removeQuestionTypeSubProperties = useCallback((prevFormField: FormField, newQuestionType) : FormField=> { if(newQuestionType==null || questionComponentMap[newQuestionType]==null || (questionComponentMap[newQuestionType]!=questionComponentMap[prevFormField.type])) { From 7ad104ec5975b7c1a94147e2868ea97d706e881f Mon Sep 17 00:00:00 2001 From: Vinayak Sharma <140600673+yoursanonymous@users.noreply.github.com> Date: Tue, 29 Apr 2025 00:22:37 +0530 Subject: [PATCH 10/10] Update question.component.tsx --- .../question/question-form/question/question.component.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx index 7c1ffad34..159be48a2 100644 --- a/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx +++ b/src/components/interactive-builder/modals/question/question-form/question/question.component.tsx @@ -151,6 +151,7 @@ const Question: React.FC = ({ checkIfQuestionIdExists }) => { renderTypeOptions[newQuestionType].includes(prevFormField.questionOptions.rendering as RenderType); if (!isRenderingTypeValidForQuestionType) { prevFormField = removeRenderingTypeSubProperties(prevFormField,null); + prevFormField = removeQuestionTypeSubProperties(prevFormField,newQuestionType); return { ...prevFormField, questionOptions: { ...prevFormField.questionOptions, rendering: null },