Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
}
}));

const hasDisagg = values.disaggregation && values.disaggregation.length > 0;
const indicatorData = {
name,
description,
Expand All @@ -382,18 +383,18 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
programId: programId ? programId : null,
ascending,
creationDate: creationDate ? formatDate(new Date(creationDate)) : null,
base: checkObjectIsNull(base) ? null : {
base: hasDisagg ? null : (checkObjectIsNull(base) ? null : {
originalValue: base.originalValue ? lodash.toNumber(base.originalValue): null,
originalValueDate: base.originalValueDate ? formatDate(base.originalValueDate) : null,
revisedValue: base.revisedValue ? lodash.toNumber(base.revisedValue) : null,
revisedValueDate: base.revisedValueDate ? formatDate(base.revisedValueDate) : null,
},
target: checkObjectIsNull(target) ? null : {
}),
target: hasDisagg ? null : (checkObjectIsNull(target) ? null : {
originalValue: target.originalValue ? lodash.toNumber(target.originalValue) : null,
originalValueDate: target.originalValueDate ? formatDate(target.originalValueDate) : null,
revisedValue: target.revisedValue ? lodash.toNumber(target.revisedValue) : null,
revisedValueDate: target.revisedValueDate ? formatDate(target.revisedValueDate) : null,
},
}),
indicatorsCategory,
outputId: values.outputId,
outcomeId: values.outcomeId,
Expand All @@ -407,7 +408,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
calculationMethod: values.calculationMethod,
responsibleOrganizations: values.responsibleOrganizations,
frequency: values.frequency,
disaggregationValues: formattedDisaggregationValues,
disaggregationValues: hasDisagg ? formattedDisaggregationValues : [],
};

dispatch(createIndicator(indicatorData));
Expand Down Expand Up @@ -754,7 +755,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
className={`basic-multi-select ${(props.errors.disaggregation && props.touched.disaggregation) && styles.text_is_invalid}`}
classNamePrefix="select"
value={disaggregationOptions.filter(opt => props.values.disaggregation?.includes(opt.value))}
value={(props.values.disaggregation || []).map(id => disaggregationOptions.find(opt => opt.value === id)).filter(Boolean)}
/>
</Form.Group>
</Row>
Expand Down Expand Up @@ -1107,6 +1108,15 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
{/* Value Tracking */}
<Row className={styles.view_row}><Col><h5 className={styles.sectionTitle}>{translations["amp.indicatormanager:value-tracking"]}</h5></Col></Row>
<div className={styles.sectionContainer}>
{props.values.disaggregation?.length > 0 && (
<Row className={styles.view_row}>
<Col>
<div style={{color: '#856404', background: '#fff3cd', border: '1px solid #ffc107', borderRadius: '4px', padding: '0.5rem 1rem', marginBottom: '0.5rem'}}>
{translations["amp.indicatormanager:value-tracking-disabled-disaggregation"] || "Regular base/target values are disabled when disaggregation is active and will be cleared on save."}
</div>
</Col>
</Row>
)}
<Form.Group as={Col}>
<Form.Label>
<h4>{translations["amp.indicatormanager:base-values"]}</h4>
Expand All @@ -1121,6 +1131,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="base.originalValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.originalValue && props.touched.base?.originalValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-original-value"]} />

Expand All @@ -1144,7 +1155,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
props.setFieldValue('base.originalValueDate', null);
}}
onBlur={props.handleBlur}
disabled={baseOriginalValueDateDisabled}
disabled={props.values.disaggregation?.length > 0 || baseOriginalValueDateDisabled}
className={`${styles.input_field} ${(props.errors.base?.originalValueDate && props.touched.base?.originalValueDate) && styles.text_is_invalid}`}/>

<Form.Control.Feedback type="invalid" className={styles.text_is_invalid}>
Expand All @@ -1162,6 +1173,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="base.revisedValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.revisedValue && props.touched.base?.revisedValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-revised-value"]} />

Expand All @@ -1185,6 +1197,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
}}
onBlur={props.handleBlur}
name="base.revisedValueDate"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.revisedValueDate && props.touched.base?.revisedValueDate) && styles.text_is_invalid}`}
/>

Expand All @@ -1206,6 +1219,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="target.originalValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.originalValue && props.touched.target?.originalValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-target-value"]} />

Expand All @@ -1227,7 +1241,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
props.setFieldValue('target.originalValueDate', null);
}}
onBlur={props.handleBlur}
disabled={targetOriginalValueDateDisabled}
disabled={props.values.disaggregation?.length > 0 || targetOriginalValueDateDisabled}
className={`${styles.input_field} ${(props.errors.target?.originalValueDate && props.touched.target?.originalValueDate) && styles.text_is_invalid}`} />

<Form.Control.Feedback type="invalid" className={styles.text_is_invalid}>
Expand All @@ -1245,6 +1259,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="target.revisedValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.revisedValue && props.touched.target?.revisedValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-revised-value"]} />

Expand All @@ -1268,6 +1283,7 @@ const AddNewIndicatorModal: React.FC<AddNewIndicatorModalProps> = (props) => {
}}
onBlur={props.handleBlur}
name="target.revisedValueDate"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.revisedValueDate && props.touched.target?.revisedValueDate) && styles.text_is_invalid}`}
/>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
revisedValueDate: dv.target?.revisedValueDate ? formatDate(dv.target.revisedValueDate) : null,
}
}));
const hasDisagg = values.disaggregation && values.disaggregation.length > 0;
const updatedIndicatorData = {
id: indicator.id,
name: values.name,
Expand All @@ -488,21 +489,21 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
programId: values.programId ? values.programId: null,
ascending: values.ascending,
creationDate: values.creationDate && formatDate(values.creationDate),
base: checkObjectIsNull(values.base) ? null : {
base: hasDisagg ? null : (checkObjectIsNull(values.base) ? null : {
originalValue: values.base.originalValue ? lodash.toNumber(values.base.originalValue) : null,
originalValueDate: values.base.originalValueDate ? formatDate(values.base.originalValueDate) : null,
revisedValue: values.base.revisedValue ? lodash.toNumber(values.base.revisedValue) : null,
revisedValueDate: values.base.revisedValueDate ? formatDate(values.base.revisedValueDate) : null,
},
target: checkObjectIsNull(values.target) ? null : {
}),
target: hasDisagg ? null : (checkObjectIsNull(values.target) ? null : {
originalValue: values.target.originalValue ? lodash.toNumber(values.target.originalValue) : null,
originalValueDate: values.target.originalValueDate ? formatDate(values.target.originalValueDate) : null,
revisedValue: values.target.revisedValue ? lodash.toNumber(values.target.revisedValue) : null,
revisedValueDate: values.target.revisedValueDate ? formatDate(values.target.revisedValueDate) : null,
},
}),
outcomeId: values.outcomeId,
outputId: values.outputId,
disaggregationValues: formattedDisaggregationValues,
disaggregationValues: hasDisagg ? formattedDisaggregationValues : [],
indicatorsCategory: indicator.indicatorsCategory || undefined,
};

Expand Down Expand Up @@ -843,7 +844,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
className={`basic-multi-select ${(props.errors.disaggregation && props.touched.disaggregation) && styles.text_is_invalid}`}
classNamePrefix="select"
value={disaggregationOptions.filter(opt => props.values.disaggregation?.includes(opt.value))}
value={(props.values.disaggregation || []).map(id => disaggregationOptions.find(opt => opt.value === id)).filter(Boolean)}
/>
</Form.Group>
</Row>
Expand Down Expand Up @@ -1208,6 +1209,15 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
{/* Value Tracking */}
<Row className={styles.view_row}><Col><h5 className={styles.sectionTitle}>{translations["amp.indicatormanager:value-tracking"]}</h5></Col></Row>
<div className={styles.sectionContainer}>
{props.values.disaggregation?.length > 0 && (
<Row className={styles.view_row}>
<Col>
<div style={{color: '#856404', background: '#fff3cd', border: '1px solid #ffc107', borderRadius: '4px', padding: '0.5rem 1rem', marginBottom: '0.5rem'}}>
{translations["amp.indicatormanager:value-tracking-disabled-disaggregation"] || "Regular base/target values are disabled when disaggregation is active and will be cleared on save."}
</div>
</Col>
</Row>
)}
<Form.Group as={Col}>
<Form.Label className={styles.view_one_item}>
<h4>{translations["amp.indicatormanager:base-values"]}</h4>
Expand All @@ -1217,13 +1227,14 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
<Form.Group className={styles.view_item}>
<Form.Label>{translations['amp.indicatormanager:original-value']}</Form.Label>
<Form.Control
defaultValue={props.values.base?.originalValue}
onChange={props.handleChange}
onBlur={props.handleBlur}
name="base.originalValue"
type="number"
className={`${styles.input_field} ${(props.errors.base?.originalValue && props.touched.base?.originalValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-original-value"]} />
defaultValue={props.values.base?.originalValue}
onChange={props.handleChange}
onBlur={props.handleBlur}
name="base.originalValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.originalValue && props.touched.base?.originalValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-original-value"]} />

<Form.Control.Feedback type="invalid" className={styles.text_is_invalid}>
{props.errors.base?.originalValue}
Expand All @@ -1245,7 +1256,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
}}
onBlur={props.handleBlur}
name="base.originalValueDate"
disabled={baseOriginalValueDateDisabled}
disabled={props.values.disaggregation?.length > 0 || baseOriginalValueDateDisabled}
className={`${styles.input_field} ${(props.errors.base?.originalValueDate && props.touched.base?.originalValueDate) && styles.text_is_invalid}`}
id="baseOriginalValueDate"
inputRef={baseOriginalValueDateRef}
Expand All @@ -1266,6 +1277,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="base.revisedValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.revisedValue && props.touched.base?.revisedValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-revised-value"]} />

Expand All @@ -1289,6 +1301,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
}}
onBlur={props.handleBlur}
name="base.revisedValueDate"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.base?.revisedValueDate && props.touched.base?.revisedValueDate) && styles.text_is_invalid}`}
id="baseRevisedValueDate"
inputRef={baseRevisedValueDateRef}
Expand All @@ -1312,6 +1325,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="target.originalValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.originalValue && props.touched.target?.originalValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-target-value"]} />

Expand All @@ -1332,7 +1346,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
onClear={() => {
props.setFieldValue("target.originalValueDate", null);
}}
disabled={targetOriginalValueDateDisabled}
disabled={props.values.disaggregation?.length > 0 || targetOriginalValueDateDisabled}
onBlur={props.handleBlur}
name="target.originalValueDate"
className={`${styles.input_field} ${(props.errors.target?.originalValueDate && props.touched.target?.originalValueDate) && styles.text_is_invalid}`}
Expand All @@ -1351,6 +1365,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
onBlur={props.handleBlur}
name="target.revisedValue"
type="number"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.revisedValue && props.touched.target?.revisedValue) && styles.text_is_invalid}`}
placeholder={translations["amp.indicatormanager:enter-revised-value"]} />

Expand All @@ -1374,6 +1389,7 @@ const EditIndicatorModal: React.FC<EditIndicatorModalProps> = (props) => {
}}
onBlur={props.handleBlur}
name="target.revisedValueDate"
disabled={props.values.disaggregation?.length > 0}
className={`${styles.input_field} ${(props.errors.target?.revisedValueDate && props.touched.target?.revisedValueDate) && styles.text_is_invalid}`}
id="targetRevisedValueDate"
inputRef={targetRevisedValueDateRef}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@
"amp.indicatormanager:indicator-type": "Indicator Type",
"amp.indicatormanager:link-logframe": "Link to Logframe (Program Scheme)",
"amp.indicatormanager:value-tracking": "Value Tracking",
"amp.indicatormanager:value-tracking-disabled-disaggregation": "Regular base/target values are disabled when disaggregation is active and will be cleared on save.",
"amp.indicatormanager:other-considerations": "Other Considerations",
"amp.indicatormanager:categorization-linkage-info": "Categorization and Linkage",
"amp.indicatormanager:output": "Output",
Expand Down
Loading