@iapps/ng-dhis2-ui 1.1.28 → 1.1.37
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.
|
@@ -2043,7 +2043,7 @@ const FixedPeriodFilter = ({ allowedPeriodTypes, excludedPeriodTypes, currentPer
|
|
|
2043
2043
|
React__default.createElement("div", { className: "leftSection" },
|
|
2044
2044
|
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectPeriodType(selected), dense: true, selected: currentPeriodType, disabled: onlyAllowedTypeIsSelected, className: "filterElement", dataTest: `${dataTest}-period-type` }, (allowedPeriodTypes
|
|
2045
2045
|
? getFixedPeriodsOptions().filter((option) => allowedPeriodTypes.some((type) => type === option.id))
|
|
2046
|
-
: filterPeriodTypesById(getFixedPeriodsOptions(), excludedPeriodTypes)).map((option) => (React__default.createElement(SingleSelectOption, { key: option.id, value: option.id, label: option.name, dataTest: `${dataTest}-period-type-option-${option.id}` }))))),
|
|
2046
|
+
: filterPeriodTypesById(getFixedPeriodsOptions(), excludedPeriodTypes)).map((option) => (React__default.createElement(SingleSelectOption, { key: crypto.randomUUID() || option.id, value: option.id, label: option.name, dataTest: `${dataTest}-period-type-option-${option.id}` }))))),
|
|
2047
2047
|
React__default.createElement("div", { className: "rightSection" },
|
|
2048
2048
|
React__default.createElement(InputField$1, { label: i18n.t('Year'), className: "filterElement", type: "number", placeholder: i18n.t('Select year'), value: currentYear, onChange: ({ value }) => onSelectYear(value), dense: true, dataTest: `${dataTest}-year` })),
|
|
2049
2049
|
React__default.createElement("style", { jsx: true }, `
|
|
@@ -2074,7 +2074,7 @@ FixedPeriodFilter.propTypes = {
|
|
|
2074
2074
|
};
|
|
2075
2075
|
|
|
2076
2076
|
const RelativePeriodFilter = ({ currentFilter, onSelectFilter, dataTest, excludedPeriodTypes, }) => (React__default.createElement("div", { className: "leftSection" },
|
|
2077
|
-
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectFilter(selected), dense: true, selected: currentFilter, className: "filterElement", dataTest: dataTest }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map((option) => (React__default.createElement(SingleSelectOption, { key: option.id, value: option.id, label: option.name, dataTest: `${dataTest}-option-${option.id}` })))),
|
|
2077
|
+
React__default.createElement(SingleSelectField, { label: i18n.t('Period type'), onChange: ({ selected }) => onSelectFilter(selected), dense: true, selected: currentFilter, className: "filterElement", dataTest: dataTest }, filterPeriodTypesById(getRelativePeriodsOptions(), excludedPeriodTypes).map((option) => (React__default.createElement(SingleSelectOption, { key: crypto.randomUUID() || option.id, value: option.id, label: option.name, dataTest: `${dataTest}-option-${option.id}` })))),
|
|
2078
2078
|
React__default.createElement("style", { jsx: true }, `
|
|
2079
2079
|
.leftSection {
|
|
2080
2080
|
flex-grow: 1;
|
|
@@ -3217,13 +3217,20 @@ const getTrackedEntityData = (response, programId, pager, filters) => {
|
|
|
3217
3217
|
let teis = response.data
|
|
3218
3218
|
.trackedEntityInstances;
|
|
3219
3219
|
let programMetaData = response.metadata.programTrackedEntityAttributes;
|
|
3220
|
+
//let progrmaMetaDataAttributesMap = programMetaData.reduce
|
|
3221
|
+
const mappedProgramMetadataAttributes = programMetaData.map((attr) => ({
|
|
3222
|
+
displayInList: attr.displayInList,
|
|
3223
|
+
searchable: attr.searchable,
|
|
3224
|
+
id: attr.trackedEntityAttribute.id,
|
|
3225
|
+
}));
|
|
3226
|
+
console.log('the mapped attributes', mappedProgramMetadataAttributes);
|
|
3220
3227
|
const programAttributesMap = programMetaData.reduce((acc, attribute) => {
|
|
3221
3228
|
if (attribute.displayInList) {
|
|
3222
3229
|
acc[attribute.id] = attribute.displayName;
|
|
3223
3230
|
}
|
|
3224
3231
|
return acc;
|
|
3225
3232
|
}, {});
|
|
3226
|
-
console.log('
|
|
3233
|
+
console.log('metadat attributes', programMetaData);
|
|
3227
3234
|
if (filters) {
|
|
3228
3235
|
teis = getFilteredTrackedEntityInstances(teis, filters);
|
|
3229
3236
|
}
|
|
@@ -3258,6 +3265,18 @@ const getTrackedEntityData = (response, programId, pager, filters) => {
|
|
|
3258
3265
|
// Check if the column label is part of any value in programAttributesMap
|
|
3259
3266
|
return Object.values(programAttributesMap).some((value) => value.includes(column.label));
|
|
3260
3267
|
});
|
|
3268
|
+
const searchableAttributes = mappedProgramMetadataAttributes
|
|
3269
|
+
.filter((attr) => attr.searchable && attr.displayInList)
|
|
3270
|
+
.map((attr) => ({
|
|
3271
|
+
// label: attr.trackedEntityAttribute.displayName,
|
|
3272
|
+
key: attr.id,
|
|
3273
|
+
}));
|
|
3274
|
+
// Extract keys from searchableAttributes for quick lookup
|
|
3275
|
+
const searchableKeys = new Set(searchableAttributes.map((attr) => attr.key));
|
|
3276
|
+
// Filter entityColumns to keep only those whose key exists in searchableAttributes
|
|
3277
|
+
const filteredEntityColumns = entityColumns.filter((column) => searchableKeys.has(column.key));
|
|
3278
|
+
console.log('show the filtered values', filteredEntityColumns);
|
|
3279
|
+
console.log('the answer is ', searchableAttributes);
|
|
3261
3280
|
const attributesData = teis.map((tei, idx) => {
|
|
3262
3281
|
let row = {
|
|
3263
3282
|
trackedEntityInstance: tei.trackedEntityInstance,
|
|
@@ -3271,7 +3290,8 @@ const getTrackedEntityData = (response, programId, pager, filters) => {
|
|
|
3271
3290
|
attributesToUse.forEach((attr) => (row[attr.attribute] = attr.value));
|
|
3272
3291
|
return row;
|
|
3273
3292
|
});
|
|
3274
|
-
|
|
3293
|
+
console.log('attributes to use', entityColumns);
|
|
3294
|
+
return { columns: entityColumns, data: attributesData, filteredEntityColumns: filteredEntityColumns };
|
|
3275
3295
|
};
|
|
3276
3296
|
const getEventData = (response, pager) => {
|
|
3277
3297
|
const events = response.data.events;
|
|
@@ -3335,6 +3355,8 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3335
3355
|
const [endDateState, setEndDateState] = useState(this.endDate);
|
|
3336
3356
|
const [loading, setLoading] = useState(false);
|
|
3337
3357
|
const [isButtonLoading, setIsButtonLoading] = useState(this.isButtonLoading);
|
|
3358
|
+
const [filteredColumns, setFilteredColumns] = useState();
|
|
3359
|
+
const [inputValues, setInputValues] = useState({});
|
|
3338
3360
|
// Store updaters in refs for Angular to access
|
|
3339
3361
|
const updateRefs = useRef({
|
|
3340
3362
|
setProgramIdState,
|
|
@@ -3364,11 +3386,14 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3364
3386
|
useEffect(() => {
|
|
3365
3387
|
setLoading(true);
|
|
3366
3388
|
this.lineListService
|
|
3367
|
-
.getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page, pager.pageSize,
|
|
3389
|
+
.getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page, pager.pageSize, attributeFiltersState,
|
|
3390
|
+
// this.attributeFilters,
|
|
3391
|
+
this.startDate, this.endDate, this.ouMode)
|
|
3368
3392
|
.subscribe((response) => {
|
|
3369
3393
|
let entityColumns = [];
|
|
3370
3394
|
let responsePager;
|
|
3371
3395
|
let entityData = [];
|
|
3396
|
+
let filteredDataColumns = [];
|
|
3372
3397
|
if (this.programStageId) {
|
|
3373
3398
|
responsePager = response.data.pager;
|
|
3374
3399
|
const { columns, data } = getProgramStageData(response, this.programStageId, pager);
|
|
@@ -3378,9 +3403,14 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3378
3403
|
else if ('trackedEntityInstances' in response.data) {
|
|
3379
3404
|
responsePager = response.data
|
|
3380
3405
|
.pager;
|
|
3381
|
-
const { columns, data } = getTrackedEntityData(response, this.programId, pager, this.filters);
|
|
3406
|
+
const { columns, data, filteredEntityColumns } = getTrackedEntityData(response, this.programId, pager, this.filters);
|
|
3382
3407
|
entityColumns = columns;
|
|
3383
3408
|
entityData = data;
|
|
3409
|
+
// setFilteredColumns(filteredEntityColumns);
|
|
3410
|
+
// Ensure filter inputs do not disappear when no data is returned
|
|
3411
|
+
// If filteredEntityColumns is empty, keep the previous columns instead of clearing them
|
|
3412
|
+
setFilteredColumns((prev) => filteredEntityColumns.length > 0 ? filteredEntityColumns : prev);
|
|
3413
|
+
filteredDataColumns = filteredEntityColumns;
|
|
3384
3414
|
}
|
|
3385
3415
|
else {
|
|
3386
3416
|
responsePager = response.data.pager;
|
|
@@ -3390,12 +3420,12 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3390
3420
|
}
|
|
3391
3421
|
const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...entityColumns], this.actionOptions);
|
|
3392
3422
|
setLoading(false);
|
|
3393
|
-
console.log('hey');
|
|
3423
|
+
// console.log('hey');
|
|
3394
3424
|
setColumns(...[finalColumns]);
|
|
3395
3425
|
setData(...[entityData]);
|
|
3396
3426
|
setPager(...[responsePager]);
|
|
3397
|
-
console.log('columns', columns);
|
|
3398
|
-
console.log('data', data);
|
|
3427
|
+
// console.log('columns', columns);
|
|
3428
|
+
// console.log('data', data);
|
|
3399
3429
|
});
|
|
3400
3430
|
}, [
|
|
3401
3431
|
programIdState,
|
|
@@ -3417,6 +3447,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3417
3447
|
}));
|
|
3418
3448
|
};
|
|
3419
3449
|
const handleApprovalClick = () => {
|
|
3450
|
+
setIsButtonLoading(true);
|
|
3420
3451
|
this.lineListService
|
|
3421
3452
|
.getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page, 1000, this.attributeFilters, this.startDate, this.endDate, this.ouMode)
|
|
3422
3453
|
.subscribe((response) => {
|
|
@@ -3436,16 +3467,74 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3436
3467
|
: null;
|
|
3437
3468
|
})
|
|
3438
3469
|
.filter((item) => item !== null); // Remove null entries (no matching enrollment)
|
|
3439
|
-
console.log('TEI and Enrollment IDs emitted:', teiEnrollmentList);
|
|
3470
|
+
// console.log('TEI and Enrollment IDs emitted:', teiEnrollmentList);
|
|
3440
3471
|
this.approvalSelected.emit(teiEnrollmentList);
|
|
3441
3472
|
}
|
|
3442
3473
|
else {
|
|
3443
|
-
console.log('No tracked entity instances found in the response');
|
|
3474
|
+
// console.log('No tracked entity instances found in the response');
|
|
3444
3475
|
this.approvalSelected.emit([]); // Emit empty array if no TEIs
|
|
3445
3476
|
}
|
|
3446
3477
|
});
|
|
3447
3478
|
};
|
|
3479
|
+
// const handleInputChange = (key: string, value: string) => {
|
|
3480
|
+
// setInputValues((prevValues) => ({
|
|
3481
|
+
// ...prevValues,
|
|
3482
|
+
// [key]: value ?? '', // Ensure no undefined values
|
|
3483
|
+
// }));
|
|
3484
|
+
// };
|
|
3485
|
+
// if (!filteredColumns || filteredColumns.length === 0) {
|
|
3486
|
+
// return <div>No fields available</div>;
|
|
3487
|
+
// }
|
|
3488
|
+
const handleInputChange = (key, value) => {
|
|
3489
|
+
setInputValues((prevValues) => ({
|
|
3490
|
+
...prevValues,
|
|
3491
|
+
[key]: value ?? '',
|
|
3492
|
+
}));
|
|
3493
|
+
setAttributeFiltersState((prevFilters = []) => {
|
|
3494
|
+
// Remove old filter for this key
|
|
3495
|
+
const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
|
|
3496
|
+
// Only add new filter if value is not empty
|
|
3497
|
+
const updatedFilters = value.trim()
|
|
3498
|
+
? [...filteredFilters, { attribute: key, operator: 'like', value }]
|
|
3499
|
+
: filteredFilters;
|
|
3500
|
+
// console.log(`Updated Filters:`, updatedFilters); // Debugging
|
|
3501
|
+
return updatedFilters;
|
|
3502
|
+
});
|
|
3503
|
+
// setAttributeFiltersState((prevFilters = []) => {
|
|
3504
|
+
// // Check if attribute already exists
|
|
3505
|
+
// const existingFilterIndex = prevFilters.findIndex(
|
|
3506
|
+
// (f) => f.attribute === key
|
|
3507
|
+
// );
|
|
3508
|
+
// // Create a new filter object
|
|
3509
|
+
// const newFilter = { attribute: key, operator: 'like', value };
|
|
3510
|
+
// if (existingFilterIndex !== -1) {
|
|
3511
|
+
// // If attribute exists, update its value
|
|
3512
|
+
// const updatedFilters = [...prevFilters];
|
|
3513
|
+
// updatedFilters[existingFilterIndex] = newFilter;
|
|
3514
|
+
// console.log(`Updated Filters:`, updatedFilters); // Log updated filter list
|
|
3515
|
+
// return updatedFilters;
|
|
3516
|
+
// } else {
|
|
3517
|
+
// // If attribute doesn't exist, add a new object
|
|
3518
|
+
// return [...prevFilters, newFilter];
|
|
3519
|
+
// }
|
|
3520
|
+
// });
|
|
3521
|
+
};
|
|
3522
|
+
// console.log(
|
|
3523
|
+
// 'these are the filtered columns which have the attributes neede',
|
|
3524
|
+
// filteredColumns
|
|
3525
|
+
// );
|
|
3448
3526
|
return (React__default.createElement("div", null,
|
|
3527
|
+
React__default.createElement("div", { style: { display: 'flex', gap: '10px', flexWrap: 'wrap' } }, (filteredColumns ?? []).map(({ label, key }) => (React__default.createElement(InputField$1, { key: key, label: label, value: inputValues[key] || '', onChange: (e) => {
|
|
3528
|
+
// console.log(`Event for key "${key}":`, e);
|
|
3529
|
+
// Check if it's a standard event with target.value
|
|
3530
|
+
if ('target' in e && e.target) {
|
|
3531
|
+
handleInputChange(key, e.target.value);
|
|
3532
|
+
}
|
|
3533
|
+
// Check if it's a DHIS2 UI event with direct value
|
|
3534
|
+
else if ('value' in e) {
|
|
3535
|
+
handleInputChange(key, e.value ?? '');
|
|
3536
|
+
}
|
|
3537
|
+
} })))),
|
|
3449
3538
|
this.showApprovalButton && (React__default.createElement("div", { style: {
|
|
3450
3539
|
width: '100%',
|
|
3451
3540
|
display: 'flex',
|
|
@@ -3467,7 +3556,14 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3467
3556
|
} }, "Loading"))) : (React__default.createElement(DataTable, null,
|
|
3468
3557
|
React__default.createElement(TableHead, null,
|
|
3469
3558
|
React__default.createElement(DataTableRow, null, columns.map((col) => (React__default.createElement(DataTableColumnHeader, { key: col.key }, col.label))))),
|
|
3470
|
-
React__default.createElement(TableBody, null, data.map((row) => (React__default.createElement(DataTableRow, { key: row.index }, columns.map((col) => (React__default.createElement(DataTableCell, { key: col.key }, col.key === 'actions' ? (React__default.createElement(DropdownMenu$1, { dropdownOptions: getDropdownOptions(row), onClick: (option) => option.onClick?.() })) : (row[col.key]
|
|
3559
|
+
React__default.createElement(TableBody, null, data.length > 0 ? (data.map((row) => (React__default.createElement(DataTableRow, { key: row.index }, columns.map((col) => (React__default.createElement(DataTableCell, { key: col.key }, col.key === 'actions' ? (React__default.createElement(DropdownMenu$1, { dropdownOptions: getDropdownOptions(row), onClick: (option) => option.onClick?.() })) : (row[col.key] || '--' // Display '--' if value is undefined or null
|
|
3560
|
+
)))))))) : (React__default.createElement(DataTableRow, null,
|
|
3561
|
+
React__default.createElement(DataTableCell, { colSpan: columns.length, style: {
|
|
3562
|
+
textAlign: 'center',
|
|
3563
|
+
fontWeight: 'bold',
|
|
3564
|
+
color: 'grey',
|
|
3565
|
+
padding: '20px',
|
|
3566
|
+
} }, "No data found")))),
|
|
3471
3567
|
React__default.createElement(TableFoot, null,
|
|
3472
3568
|
React__default.createElement(DataTableRow, null,
|
|
3473
3569
|
React__default.createElement(DataTableCell, { colSpan: columns.length.toString() },
|
|
@@ -4816,7 +4912,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
4816
4912
|
});
|
|
4817
4913
|
setValue(event.selected);
|
|
4818
4914
|
setTouched(true);
|
|
4819
|
-
} }, (this.field().options || []).map((option) => (React__default.createElement(SingleSelectOption, { key: option.key, label: option.label, value: option.value })))));
|
|
4915
|
+
} }, (this.field().options || []).map((option) => (React__default.createElement(SingleSelectOption, { key: crypto.randomUUID() || option.key, label: option.label, value: option.value })))));
|
|
4820
4916
|
case 'multi-dropdown':
|
|
4821
4917
|
return (React__default.createElement(MultiSelectField, { clearText: "Clear", clearable: true, empty: "No data found", filterable: (this.field().options || []).length > 5, filterPlaceholder: "Type to filter options", error: hasError, validationText: validationError, inputWidth: this.fieldConfig()?.inputWidth, label: this.label(), name: this.field().id, required: this.field().required, loadingText: "Loading options", noMatchText: "No options found", onChange: (event) => {
|
|
4822
4918
|
const selectedValue = (event.selected || []).join(',');
|
|
@@ -5540,6 +5636,8 @@ class SelectionFiltersComponent extends ReactWrapperModule {
|
|
|
5540
5636
|
const [touched, setTouched] = useState(false);
|
|
5541
5637
|
const [showOrgUnit, setShowOrgUnit] = useState(false);
|
|
5542
5638
|
const [value, setValue] = useState(null);
|
|
5639
|
+
const [showMoreFilters, setShowMoreFilters] = useState(false);
|
|
5640
|
+
const toggleMoreFilters = () => setShowMoreFilters((prev) => !prev);
|
|
5543
5641
|
useEffect(() => {
|
|
5544
5642
|
setFilters({
|
|
5545
5643
|
programAttributesFilters: this.programAttributesFilters,
|
|
@@ -5581,7 +5679,9 @@ class SelectionFiltersComponent extends ReactWrapperModule {
|
|
|
5581
5679
|
const handleSearch = () => {
|
|
5582
5680
|
this.actionSelected.emit({
|
|
5583
5681
|
...filters,
|
|
5584
|
-
organisationUnit: selectedOrganisationUnit ||
|
|
5682
|
+
organisationUnit: selectedOrganisationUnit ||
|
|
5683
|
+
this.organisationUnit ||
|
|
5684
|
+
filters.organisationUnit,
|
|
5585
5685
|
startDate: filters.startDate,
|
|
5586
5686
|
endDate: filters.endDate,
|
|
5587
5687
|
program: this.program || filters.program,
|
|
@@ -5656,17 +5756,14 @@ class SelectionFiltersComponent extends ReactWrapperModule {
|
|
|
5656
5756
|
} },
|
|
5657
5757
|
React__default.createElement("div", { style: {
|
|
5658
5758
|
display: 'grid',
|
|
5659
|
-
gridTemplateColumns: '
|
|
5759
|
+
gridTemplateColumns: '1fr 1fr 1fr auto', // Ensure proper button sizing
|
|
5660
5760
|
gap: '16px',
|
|
5761
|
+
alignItems: 'center', // Align inputs and button on the same row
|
|
5661
5762
|
marginBottom: '16px',
|
|
5662
5763
|
} },
|
|
5663
|
-
React__default.createElement(
|
|
5664
|
-
React__default.createElement(InputField$1, { value: displayValue, label: "Organization Unit", readOnly: false, onFocus: () => {
|
|
5665
|
-
|
|
5666
|
-
}, onBlur: () => {
|
|
5667
|
-
this.ngZone.run(() => {
|
|
5668
|
-
console.log('THIS IS IT::: ');
|
|
5669
|
-
});
|
|
5764
|
+
React__default.createElement("div", { style: { width: '100%' } },
|
|
5765
|
+
React__default.createElement(InputField$1, { value: displayValue, label: "Organization Unit", readOnly: false, onFocus: () => setShowOrgUnit(true), onBlur: () => {
|
|
5766
|
+
this.ngZone.run(() => console.log('THIS IS IT::: '));
|
|
5670
5767
|
setTouched(true);
|
|
5671
5768
|
} }),
|
|
5672
5769
|
showOrgUnit && (React__default.createElement(this.FieldOrgUnitSelector, { onCancelOrgUnit: () => {
|
|
@@ -5681,30 +5778,36 @@ class SelectionFiltersComponent extends ReactWrapperModule {
|
|
|
5681
5778
|
setValue(selectedOrgUnit.id);
|
|
5682
5779
|
setShowOrgUnit(false);
|
|
5683
5780
|
setTouched(true);
|
|
5684
|
-
// this.ngZone.run(() => {
|
|
5685
|
-
// setDisplayValue(selectedOrgUnit.name);
|
|
5686
|
-
// setSelected(selectedOrgUnit.id)
|
|
5687
|
-
// setSelectedOrganisationUnit(selectedOrgUnit.id)
|
|
5688
|
-
// setValue(selectedOrgUnit.id);
|
|
5689
|
-
// setShowOrgUnit(false);
|
|
5690
|
-
// setTouched(true);
|
|
5691
|
-
// });
|
|
5692
5781
|
}
|
|
5693
5782
|
} }))),
|
|
5694
|
-
React__default.createElement(InputField$1, { className: "input-field", label: "Start Date", type: "DATE", value: filters.startDate, onChange: (event) => setFilters({ ...filters, startDate: event.value }) }),
|
|
5695
|
-
React__default.createElement(InputField$1, { className: "input-field", label: "End Date", type: "DATE", value: filters.endDate, onChange: (event) => setFilters({ ...filters, endDate: event.value }) })
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5707
|
-
|
|
5783
|
+
React__default.createElement(InputField$1, { className: "input-field", label: "Start Date", type: "DATE", value: filters.startDate, onChange: (event) => setFilters({ ...filters, startDate: event.value }), style: { width: '100%', height: '100%' } }),
|
|
5784
|
+
React__default.createElement(InputField$1, { className: "input-field", label: "End Date", type: "DATE", value: filters.endDate, onChange: (event) => setFilters({ ...filters, endDate: event.value }), style: { width: '100%', height: '100%' } }),
|
|
5785
|
+
React__default.createElement("div", { style: {
|
|
5786
|
+
display: 'flex',
|
|
5787
|
+
flexDirection: 'column',
|
|
5788
|
+
alignItems: 'center',
|
|
5789
|
+
justifyContent: 'center',
|
|
5790
|
+
height: '100%',
|
|
5791
|
+
} },
|
|
5792
|
+
React__default.createElement("label", { style: {
|
|
5793
|
+
color: 'transparent', // Hides label text but keeps spacing
|
|
5794
|
+
fontSize: '14px',
|
|
5795
|
+
marginBottom: '4px',
|
|
5796
|
+
} }, "Toggle"),
|
|
5797
|
+
React__default.createElement(Button$1, { style: { height: '40px' }, onClick: () => setShowMoreFilters(!showMoreFilters) }, showMoreFilters ? 'Hide Filters' : 'More Filters'))),
|
|
5798
|
+
showMoreFilters && (React__default.createElement(React__default.Fragment, null,
|
|
5799
|
+
React__default.createElement("div", { style: {
|
|
5800
|
+
display: 'grid',
|
|
5801
|
+
gridTemplateColumns: 'repeat(4, 1fr)',
|
|
5802
|
+
gap: '16px',
|
|
5803
|
+
} }, filters.programAttributesFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getAttributeColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Select Option', type: filter.valueType, selected: filter.value, onChange: (event) => handleAttributeChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key: crypto.randomUUID() || i, label: option.name, value: option.code }))))) : (React__default.createElement(InputField$1, { className: "input-field", label: filter.name || 'Program name', type: filter.valueType, value: filter.value, onChange: (event) => handleAttributeChange(index, event.value) })))))),
|
|
5804
|
+
React__default.createElement("div", { style: {
|
|
5805
|
+
display: 'grid',
|
|
5806
|
+
gridTemplateColumns: 'repeat(4, 1fr)',
|
|
5807
|
+
gap: '16px',
|
|
5808
|
+
} }, filters.programStageDataElementFilters.map((filter, index) => (React__default.createElement("div", { key: index, style: { gridColumn: getDataElementColumnSpan(index) } }, filter.hasOptions && filter.options.length > 0 ? (React__default.createElement(SingleSelectField, { className: "single-select", label: filter.name || 'Aggregation type', type: filter.valueType, selected: filter.value, onChange: (event) => handleDataElementChange(index, event.selected) }, filter.options.map((option, i) => (React__default.createElement(SingleSelectOption, { key: crypto.randomUUID() || i, label: option.name, value: option.code }))))) : (React__default.createElement(InputField$1, { className: "input-field", type: filter.valueType, label: filter.name || 'Program name', value: filter.value, onChange: (event) => handleDataElementChange(index, event.value) })))))),
|
|
5809
|
+
React__default.createElement("div", { style: { textAlign: 'right', marginTop: '16px' } },
|
|
5810
|
+
React__default.createElement(Button$1, { onClick: handleSearch }, "Search"))))));
|
|
5708
5811
|
};
|
|
5709
5812
|
}
|
|
5710
5813
|
getAppConfig() {
|