@iapps/ng-dhis2-ui 1.2.70 → 1.2.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/iapps-ng-dhis2-ui.mjs +29 -171
- package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
- package/lib/modules/form/components/file-upload-field.component.d.ts +2 -0
- package/lib/modules/form/interfaces/form-field-extension.interface.d.ts +5 -0
- package/lib/modules/form/interfaces/form-field.interface.d.ts +2 -0
- package/lib/modules/form/interfaces/index.d.ts +1 -0
- package/lib/modules/form/models/form-field-group.model.d.ts +2 -0
- package/lib/modules/form/models/form-field.model.d.ts +2 -1
- package/lib/modules/form/models/form-metadata-section.model.d.ts +2 -1
- package/lib/modules/form/models/form-metadata.model.d.ts +2 -1
- package/lib/modules/form/utils/field-type.util.d.ts +1 -1
- package/lib/modules/form/utils/field.util.d.ts +1 -1
- package/lib/modules/line-list/containers/line-list.component.d.ts +1 -1
- package/lib/modules/program-entry-form/models/program-entry-form.config.d.ts +3 -0
- package/lib/modules/program-entry-form/program-entry-form.component.d.ts +4 -4
- package/package.json +1 -1
|
@@ -3305,7 +3305,7 @@ const OrgUnitSelector = ({ hide, setHide, selectedOrgUnit, setSelectedOrgUnit, s
|
|
|
3305
3305
|
const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setOrgUnitState, defaultOrgUnit, setHide, startDateState, setStartDateState, endDateState, setEndDateState, visibleFilters, dateStates, inputValues, setInputValues, handleInputChange, handleInputChangeForSelectField, handleDateSelect, prevValue, setPrevValue, showAllFilters, setShowAllFilters, handleSearch, setTempStartDateState, setTempEndDateState, setTempOrgUnitState, tempStartDateState, tempEndDateState, tempOrgUnitState, dataQueryFiltersState, setDataQueryFiltersState, SetOrgUnitModalVisible, showEnrollmentDates, }) => (React__default.createElement(DataTableToolbar, { className: "table-top-toolbar" },
|
|
3306
3306
|
React__default.createElement("div", { style: {
|
|
3307
3307
|
display: 'flex',
|
|
3308
|
-
flexDirection: 'column',
|
|
3308
|
+
// flexDirection: 'column',
|
|
3309
3309
|
gap: '10px',
|
|
3310
3310
|
flexWrap: 'wrap',
|
|
3311
3311
|
} },
|
|
@@ -3339,15 +3339,8 @@ const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setO
|
|
|
3339
3339
|
if (selectedDate.calendarDateString === null) {
|
|
3340
3340
|
setEndDateState(selectedDate.calendarDateString);
|
|
3341
3341
|
}
|
|
3342
|
-
} }))),
|
|
3343
|
-
|
|
3344
|
-
React__default.createElement(Button$1, { onClick: () => setShowAllFilters(!showAllFilters) }, showAllFilters ? 'Less Filters' : 'More Filters')),
|
|
3345
|
-
visibleFilters?.length > 0 && (React__default.createElement("div", { style: {
|
|
3346
|
-
display: 'flex',
|
|
3347
|
-
alignItems: 'center',
|
|
3348
|
-
gap: '10px',
|
|
3349
|
-
flexWrap: 'wrap',
|
|
3350
|
-
} }, (visibleFilters ?? []).map(({ label, key, valueType, options }) => {
|
|
3342
|
+
} })))),
|
|
3343
|
+
(visibleFilters ?? []).map(({ label, key, valueType, options }) => {
|
|
3351
3344
|
if (valueType === 'DATE') {
|
|
3352
3345
|
return (React__default.createElement(CalendarInput, { key: key, label: `${label}:`, calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", className: "custom-input", clearable: !!dateStates[key], date: dateStates[key], onDateSelect: (selectedDate) => {
|
|
3353
3346
|
handleDateSelect(key, selectedDate);
|
|
@@ -3388,164 +3381,15 @@ const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setO
|
|
|
3388
3381
|
setPrevValue(currentValue);
|
|
3389
3382
|
}
|
|
3390
3383
|
} }));
|
|
3391
|
-
})
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
//
|
|
3395
|
-
|
|
3396
|
-
//
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
// >
|
|
3401
|
-
// <InputField
|
|
3402
|
-
// key="location"
|
|
3403
|
-
// label={orgUnitLabel ? orgUnitLabel : 'registering unit:'}
|
|
3404
|
-
// value={selectedOrgUnit}
|
|
3405
|
-
// onFocus={() => setHide(false)}
|
|
3406
|
-
// className="custom-input"
|
|
3407
|
-
// clearable
|
|
3408
|
-
// onChange={(event: { value: string }) => {
|
|
3409
|
-
// setSelectedOrgUnit(event.value);
|
|
3410
|
-
// setOrgUnitState(defaultOrgUnit);
|
|
3411
|
-
// }}
|
|
3412
|
-
// />
|
|
3413
|
-
// <CalendarInput
|
|
3414
|
-
// label="Start date:"
|
|
3415
|
-
// calendar="gregory"
|
|
3416
|
-
// locale="en-GB"
|
|
3417
|
-
// timeZone="Africa/Dar_es_Salaam"
|
|
3418
|
-
// className="custom-input"
|
|
3419
|
-
// clearable={!!tempStartDateState}
|
|
3420
|
-
// date={tempStartDateState}
|
|
3421
|
-
// onDateSelect={(selectedDate: any) => {
|
|
3422
|
-
// // if (!(selectedDate.calendarDateString === null)) {
|
|
3423
|
-
// setTempStartDateState(selectedDate.calendarDateString);
|
|
3424
|
-
// //}
|
|
3425
|
-
// if (selectedDate.calendarDateString === null) {
|
|
3426
|
-
// setStartDateState(selectedDate.calendarDateString);
|
|
3427
|
-
// }
|
|
3428
|
-
// }}
|
|
3429
|
-
// />
|
|
3430
|
-
// <CalendarInput
|
|
3431
|
-
// label="End date:"
|
|
3432
|
-
// calendar="gregory"
|
|
3433
|
-
// locale="en-GB"
|
|
3434
|
-
// timeZone="Africa/Dar_es_Salaam"
|
|
3435
|
-
// className="custom-input"
|
|
3436
|
-
// clearable={!!tempEndDateState}
|
|
3437
|
-
// date={tempEndDateState}
|
|
3438
|
-
// onDateSelect={(selectedDate: any) => {
|
|
3439
|
-
// // if (!(selectedDate.calendarDateString === null)) {
|
|
3440
|
-
// setTempEndDateState(selectedDate.calendarDateString);
|
|
3441
|
-
// //}
|
|
3442
|
-
// if (selectedDate.calendarDateString === null) {
|
|
3443
|
-
// setEndDateState(selectedDate.calendarDateString);
|
|
3444
|
-
// }
|
|
3445
|
-
// }}
|
|
3446
|
-
// />
|
|
3447
|
-
// <Button onClick={() => handleSearch()}>Search</Button>
|
|
3448
|
-
// <Button onClick={() => setShowAllFilters(!showAllFilters)}>
|
|
3449
|
-
// {showAllFilters ? 'Less Filters' : 'More Filters'}
|
|
3450
|
-
// </Button>
|
|
3451
|
-
// {(visibleFilters ?? []).map(({ label, key, valueType, options }: any) => {
|
|
3452
|
-
// if (valueType === 'DATE') {
|
|
3453
|
-
// return (
|
|
3454
|
-
// <CalendarInput
|
|
3455
|
-
// key={key}
|
|
3456
|
-
// label={`${label}:`}
|
|
3457
|
-
// calendar="gregory"
|
|
3458
|
-
// locale="en-GB"
|
|
3459
|
-
// timeZone="Africa/Dar_es_Salaam"
|
|
3460
|
-
// className="custom-input"
|
|
3461
|
-
// clearable={!!dateStates[key]}
|
|
3462
|
-
// date={dateStates[key]}
|
|
3463
|
-
// onDateSelect={(selectedDate: any) => {
|
|
3464
|
-
// handleDateSelect(key, selectedDate);
|
|
3465
|
-
// const filteredFilters = dataQueryFiltersState.filter(
|
|
3466
|
-
// (f: { attribute: any }) => f.attribute !== key
|
|
3467
|
-
// );
|
|
3468
|
-
// if (selectedDate === null) {
|
|
3469
|
-
// setDataQueryFiltersState(filteredFilters);
|
|
3470
|
-
// }
|
|
3471
|
-
// }}
|
|
3472
|
-
// />
|
|
3473
|
-
// );
|
|
3474
|
-
// }
|
|
3475
|
-
// // const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
|
|
3476
|
-
// if (options && options.options.length > 0) {
|
|
3477
|
-
// return (
|
|
3478
|
-
// <SingleSelectField
|
|
3479
|
-
// key={key}
|
|
3480
|
-
// label={`${label}:`}
|
|
3481
|
-
// selected={inputValues[key] || ''}
|
|
3482
|
-
// className="custom-select-input"
|
|
3483
|
-
// clearable
|
|
3484
|
-
// onChange={({ selected }: { selected: string }) => {
|
|
3485
|
-
// setInputValues((prevValues: any) => ({
|
|
3486
|
-
// ...prevValues,
|
|
3487
|
-
// [key]: selected ?? '',
|
|
3488
|
-
// }));
|
|
3489
|
-
// handleInputChangeForSelectField(key, selected ?? '');
|
|
3490
|
-
// const filteredFilters = dataQueryFiltersState.filter(
|
|
3491
|
-
// (f: { attribute: any }) => f.attribute !== key
|
|
3492
|
-
// );
|
|
3493
|
-
// if (selected === '') {
|
|
3494
|
-
// setDataQueryFiltersState(filteredFilters);
|
|
3495
|
-
// }
|
|
3496
|
-
// }}
|
|
3497
|
-
// >
|
|
3498
|
-
// {(options.options ?? []).map((opt: any) => (
|
|
3499
|
-
// <SingleSelectOption
|
|
3500
|
-
// key={opt.id}
|
|
3501
|
-
// label={opt.name}
|
|
3502
|
-
// value={opt.code}
|
|
3503
|
-
// />
|
|
3504
|
-
// ))}
|
|
3505
|
-
// </SingleSelectField>
|
|
3506
|
-
// );
|
|
3507
|
-
// }
|
|
3508
|
-
// return (
|
|
3509
|
-
// <InputField
|
|
3510
|
-
// key={key}
|
|
3511
|
-
// label={`${label}:`}
|
|
3512
|
-
// className="custom-input"
|
|
3513
|
-
// value={inputValues[key] || ''}
|
|
3514
|
-
// clearable
|
|
3515
|
-
// onChange={(e: any) => {
|
|
3516
|
-
// const currentValue =
|
|
3517
|
-
// 'target' in e ? e.target.value : e.value ?? '';
|
|
3518
|
-
// setInputValues((prevValues: any) => ({
|
|
3519
|
-
// ...prevValues,
|
|
3520
|
-
// [key]: currentValue,
|
|
3521
|
-
// }));
|
|
3522
|
-
// // if (currentValue === '') {
|
|
3523
|
-
// // handleInputChange(key, '');
|
|
3524
|
-
// // }
|
|
3525
|
-
// const filteredFilters = dataQueryFiltersState.filter(
|
|
3526
|
-
// (f: { attribute: any }) => f.attribute !== key
|
|
3527
|
-
// );
|
|
3528
|
-
// if (currentValue === '') {
|
|
3529
|
-
// setDataQueryFiltersState(filteredFilters);
|
|
3530
|
-
// }
|
|
3531
|
-
// }}
|
|
3532
|
-
// onBlur={(e: any) => {
|
|
3533
|
-
// const currentValue =
|
|
3534
|
-
// 'target' in e ? e.target.value : e.value ?? '';
|
|
3535
|
-
// if (currentValue !== '' && currentValue !== prevValue) {
|
|
3536
|
-
// handleInputChange(key, currentValue);
|
|
3537
|
-
// setPrevValue(currentValue);
|
|
3538
|
-
// }
|
|
3539
|
-
// }}
|
|
3540
|
-
// />
|
|
3541
|
-
// );
|
|
3542
|
-
// })}
|
|
3543
|
-
// <div>
|
|
3544
|
-
// {/* <p>hello</p> */}
|
|
3545
|
-
// </div>
|
|
3546
|
-
// </div>
|
|
3547
|
-
// </DataTableToolbar>
|
|
3548
|
-
);
|
|
3384
|
+
}),
|
|
3385
|
+
React__default.createElement("div", { style: {
|
|
3386
|
+
display: 'flex',
|
|
3387
|
+
// alignItems: 'center',
|
|
3388
|
+
gap: '10px',
|
|
3389
|
+
// flexWrap: 'wrap',
|
|
3390
|
+
} },
|
|
3391
|
+
React__default.createElement(Button$1, { onClick: handleSearch }, "Search"),
|
|
3392
|
+
React__default.createElement(Button$1, { onClick: () => setShowAllFilters(!showAllFilters) }, showAllFilters ? 'Less Filters' : 'More Filters')))));
|
|
3549
3393
|
|
|
3550
3394
|
// export const TableHeader = ({
|
|
3551
3395
|
// columns,
|
|
@@ -4890,6 +4734,7 @@ class FormField {
|
|
|
4890
4734
|
this.selectedOptionsLabel =
|
|
4891
4735
|
options.availableOptionsLabel ?? 'Selected options';
|
|
4892
4736
|
this.allowFutureDate = options.allowFutureDate;
|
|
4737
|
+
this.extension = options.extension;
|
|
4893
4738
|
}
|
|
4894
4739
|
setMax(field) {
|
|
4895
4740
|
if (field.controlType !== 'date') {
|
|
@@ -5345,6 +5190,7 @@ class FormFieldGroup {
|
|
|
5345
5190
|
const hasOptions = (options?.length > 0 ||
|
|
5346
5191
|
dependentField !== undefined ||
|
|
5347
5192
|
fieldMetaData['hasOptions']);
|
|
5193
|
+
const extension = this.params.formFieldExtensions?.find((fieldExtension) => fieldExtension?.id === field.id);
|
|
5348
5194
|
return new FormField({
|
|
5349
5195
|
...(fieldMetaData || {}),
|
|
5350
5196
|
...field,
|
|
@@ -5372,6 +5218,7 @@ class FormFieldGroup {
|
|
|
5372
5218
|
controlType: FieldUtil.getFieldControlType(fieldMetaData['valueType'], hasOptions),
|
|
5373
5219
|
metaType: fieldMetaData['metaType'],
|
|
5374
5220
|
stepId: fieldMetaData['stepId'],
|
|
5221
|
+
extension,
|
|
5375
5222
|
});
|
|
5376
5223
|
})
|
|
5377
5224
|
.filter((field) => field);
|
|
@@ -5512,6 +5359,7 @@ class FormMetadataSection {
|
|
|
5512
5359
|
formFieldGroup,
|
|
5513
5360
|
fieldMetaData: [...this.attributes, ...this.dataElements],
|
|
5514
5361
|
locale: this.params.locale,
|
|
5362
|
+
formFieldExtensions: this.params.formFieldExtensions,
|
|
5515
5363
|
}).toJson();
|
|
5516
5364
|
});
|
|
5517
5365
|
}
|
|
@@ -5543,6 +5391,7 @@ class FormMetaData {
|
|
|
5543
5391
|
section,
|
|
5544
5392
|
program,
|
|
5545
5393
|
locale: this.params.locale,
|
|
5394
|
+
formFieldExtensions: this.params.formFieldExtensions,
|
|
5546
5395
|
}).toJson();
|
|
5547
5396
|
})
|
|
5548
5397
|
.filter((section) => section !== null);
|
|
@@ -5856,10 +5705,11 @@ class FormValue {
|
|
|
5856
5705
|
// Use of this source code is governed by a BSD-style
|
|
5857
5706
|
// license that can be found in the LICENSE file.
|
|
5858
5707
|
const FileUploadField = (props) => {
|
|
5859
|
-
const { label, id, uploadUrl, performUpload, validationText, required, hasError, onChange, onUploadSuccess, } = props;
|
|
5708
|
+
const { label, id, uploadUrl, performUpload, validationText, required, hasError, onChange, onUploadSuccess, extension } = props;
|
|
5860
5709
|
const d2 = window?.d2Web;
|
|
5861
5710
|
const [file, setFile] = useState(null);
|
|
5862
5711
|
const [uploading, setUploading] = useState();
|
|
5712
|
+
const [validationError, setValidationError] = useState(null);
|
|
5863
5713
|
const valid = useMemo(() => {
|
|
5864
5714
|
if (isUndefined(hasError)) {
|
|
5865
5715
|
return undefined;
|
|
@@ -5885,8 +5735,14 @@ const FileUploadField = (props) => {
|
|
|
5885
5735
|
}
|
|
5886
5736
|
}
|
|
5887
5737
|
};
|
|
5888
|
-
return (React__default.createElement(FileInputField, { accept:
|
|
5738
|
+
return (React__default.createElement(FileInputField, { accept: extension?.accept?.join(','), buttonLabel: "Upload a file", label: label, name: id, required: required, error: !!validationError, validationText: validationError || validationText, onChange: (event) => {
|
|
5889
5739
|
const fileItem = (event?.files || [])[0];
|
|
5740
|
+
setValidationError(null);
|
|
5741
|
+
if (extension?.sizeLimit && fileItem.size > extension?.sizeLimit) {
|
|
5742
|
+
setValidationError(`File size must not exceed ${extension.sizeLimit / (1024 * 1024)}MB`);
|
|
5743
|
+
setFile(null);
|
|
5744
|
+
return;
|
|
5745
|
+
}
|
|
5890
5746
|
setFile(fileItem);
|
|
5891
5747
|
if (performUpload) {
|
|
5892
5748
|
uploadFile(fileItem);
|
|
@@ -6313,7 +6169,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
6313
6169
|
});
|
|
6314
6170
|
setValue(fileId);
|
|
6315
6171
|
setTouched(true);
|
|
6316
|
-
} })));
|
|
6172
|
+
}, extension: this.field()?.extension })));
|
|
6317
6173
|
default:
|
|
6318
6174
|
return (React__default.createElement(InputField$1, { error: hasError, validationText: validationError, type: this.field().type, inputWidth: this.fieldConfig()?.inputWidth, required: this.field().required, name: this.field().id, label: this.label(), min: this.field().min?.toString(), max: this.field().max?.toString(), placeholder: this.placeholder(), value: value, readOnly: disabled, onChange: (event) => {
|
|
6319
6175
|
this.ngZone.run(() => {
|
|
@@ -7623,6 +7479,7 @@ class ProgramEntryFormFieldUtil {
|
|
|
7623
7479
|
.map((field) => {
|
|
7624
7480
|
const options = FieldDropdown.getDropdownOptions(field);
|
|
7625
7481
|
const hasOptions = options?.length > 0;
|
|
7482
|
+
const extension = this.config.formFieldExtensions?.find((fieldExtension) => fieldExtension?.id === field.id);
|
|
7626
7483
|
return new FormField({
|
|
7627
7484
|
...field,
|
|
7628
7485
|
id: field.id,
|
|
@@ -7638,6 +7495,7 @@ class ProgramEntryFormFieldUtil {
|
|
|
7638
7495
|
controlType: FieldUtil.getFieldControlType(field.valueType, hasOptions),
|
|
7639
7496
|
metaType: field.metaType,
|
|
7640
7497
|
stepId: field.stepId,
|
|
7498
|
+
extension,
|
|
7641
7499
|
});
|
|
7642
7500
|
})
|
|
7643
7501
|
.sort((a, b) => a.order ?? 0 - (b.order ?? 0));
|