@iapps/ng-dhis2-ui 1.1.29 → 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('metadata', programAttributesMap);
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
- return { columns: entityColumns, data: attributesData };
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, this.attributeFilters, this.startDate, this.endDate, this.ouMode)
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,
@@ -3437,16 +3467,74 @@ class LineListTableComponent extends ReactWrapperModule {
3437
3467
  : null;
3438
3468
  })
3439
3469
  .filter((item) => item !== null); // Remove null entries (no matching enrollment)
3440
- console.log('TEI and Enrollment IDs emitted:', teiEnrollmentList);
3470
+ // console.log('TEI and Enrollment IDs emitted:', teiEnrollmentList);
3441
3471
  this.approvalSelected.emit(teiEnrollmentList);
3442
3472
  }
3443
3473
  else {
3444
- console.log('No tracked entity instances found in the response');
3474
+ // console.log('No tracked entity instances found in the response');
3445
3475
  this.approvalSelected.emit([]); // Emit empty array if no TEIs
3446
3476
  }
3447
3477
  });
3448
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
+ // );
3449
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
+ } })))),
3450
3538
  this.showApprovalButton && (React__default.createElement("div", { style: {
3451
3539
  width: '100%',
3452
3540
  display: 'flex',
@@ -3468,7 +3556,14 @@ class LineListTableComponent extends ReactWrapperModule {
3468
3556
  } }, "Loading"))) : (React__default.createElement(DataTable, null,
3469
3557
  React__default.createElement(TableHead, null,
3470
3558
  React__default.createElement(DataTableRow, null, columns.map((col) => (React__default.createElement(DataTableColumnHeader, { key: col.key }, col.label))))),
3471
- 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")))),
3472
3567
  React__default.createElement(TableFoot, null,
3473
3568
  React__default.createElement(DataTableRow, null,
3474
3569
  React__default.createElement(DataTableCell, { colSpan: columns.length.toString() },
@@ -4817,7 +4912,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4817
4912
  });
4818
4913
  setValue(event.selected);
4819
4914
  setTouched(true);
4820
- } }, (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 })))));
4821
4916
  case 'multi-dropdown':
4822
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) => {
4823
4918
  const selectedValue = (event.selected || []).join(',');
@@ -5541,6 +5636,8 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5541
5636
  const [touched, setTouched] = useState(false);
5542
5637
  const [showOrgUnit, setShowOrgUnit] = useState(false);
5543
5638
  const [value, setValue] = useState(null);
5639
+ const [showMoreFilters, setShowMoreFilters] = useState(false);
5640
+ const toggleMoreFilters = () => setShowMoreFilters((prev) => !prev);
5544
5641
  useEffect(() => {
5545
5642
  setFilters({
5546
5643
  programAttributesFilters: this.programAttributesFilters,
@@ -5582,7 +5679,9 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5582
5679
  const handleSearch = () => {
5583
5680
  this.actionSelected.emit({
5584
5681
  ...filters,
5585
- organisationUnit: selectedOrganisationUnit || this.organisationUnit || filters.organisationUnit,
5682
+ organisationUnit: selectedOrganisationUnit ||
5683
+ this.organisationUnit ||
5684
+ filters.organisationUnit,
5586
5685
  startDate: filters.startDate,
5587
5686
  endDate: filters.endDate,
5588
5687
  program: this.program || filters.program,
@@ -5657,17 +5756,14 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5657
5756
  } },
5658
5757
  React__default.createElement("div", { style: {
5659
5758
  display: 'grid',
5660
- gridTemplateColumns: 'repeat(3, 1fr)',
5759
+ gridTemplateColumns: '1fr 1fr 1fr auto', // Ensure proper button sizing
5661
5760
  gap: '16px',
5761
+ alignItems: 'center', // Align inputs and button on the same row
5662
5762
  marginBottom: '16px',
5663
5763
  } },
5664
- React__default.createElement(React__default.Fragment, null,
5665
- React__default.createElement(InputField$1, { value: displayValue, label: "Organization Unit", readOnly: false, onFocus: () => {
5666
- setShowOrgUnit(true);
5667
- }, onBlur: () => {
5668
- this.ngZone.run(() => {
5669
- console.log('THIS IS IT::: ');
5670
- });
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::: '));
5671
5767
  setTouched(true);
5672
5768
  } }),
5673
5769
  showOrgUnit && (React__default.createElement(this.FieldOrgUnitSelector, { onCancelOrgUnit: () => {
@@ -5682,30 +5778,36 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5682
5778
  setValue(selectedOrgUnit.id);
5683
5779
  setShowOrgUnit(false);
5684
5780
  setTouched(true);
5685
- // this.ngZone.run(() => {
5686
- // setDisplayValue(selectedOrgUnit.name);
5687
- // setSelected(selectedOrgUnit.id)
5688
- // setSelectedOrganisationUnit(selectedOrgUnit.id)
5689
- // setValue(selectedOrgUnit.id);
5690
- // setShowOrgUnit(false);
5691
- // setTouched(true);
5692
- // });
5693
5781
  }
5694
5782
  } }))),
5695
- React__default.createElement(InputField$1, { className: "input-field", label: "Start Date", type: "DATE", value: filters.startDate, onChange: (event) => setFilters({ ...filters, startDate: event.value }) }),
5696
- React__default.createElement(InputField$1, { className: "input-field", label: "End Date", type: "DATE", value: filters.endDate, onChange: (event) => setFilters({ ...filters, endDate: event.value }) })),
5697
- React__default.createElement("div", { style: {
5698
- display: 'grid',
5699
- gridTemplateColumns: 'repeat(4, 1fr)',
5700
- gap: '16px',
5701
- } }, 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: 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) })))))),
5702
- React__default.createElement("div", { style: {
5703
- display: 'grid',
5704
- gridTemplateColumns: 'repeat(4, 1fr)',
5705
- gap: '16px',
5706
- } }, 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: 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) })))))),
5707
- React__default.createElement("div", { style: { textAlign: 'right', marginTop: '16px' } },
5708
- React__default.createElement(Button$1, { onClick: handleSearch }, "Search"))));
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"))))));
5709
5811
  };
5710
5812
  }
5711
5813
  getAppConfig() {