@iapps/ng-dhis2-ui 1.2.97 → 1.2.99

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.
@@ -25,7 +25,7 @@ import { Layer } from '@dhis2-ui/layer';
25
25
  import { CircularLoader } from '@dhis2-ui/loader';
26
26
  import { MenuItem, MenuDivider } from '@dhis2-ui/menu';
27
27
  import parse from 'html-react-parser';
28
- import { Button as Button$1, IconDimensionData16, IconClock16, IconDimensionOrgUnit16, spacers as spacers$1, colors as colors$1, IconEdit16, theme as theme$1, Tooltip, IconChevronRight16, SingleSelectField, SingleSelectOption, InputField as InputField$1, TabBar, Tab, Transfer, Modal as Modal$1, ModalTitle as ModalTitle$1, ModalContent as ModalContent$1, ModalActions as ModalActions$1, ButtonStrip as ButtonStrip$1, Checkbox, OrganisationUnitTree, MultiSelect, MultiSelectOption, IconWarningFilled16, CircularLoader as CircularLoader$1, Chip, DataTableToolbar, CalendarInput, TableHead, DataTableRow, DataTableColumnHeader, Layer as Layer$1, Popper, FlyoutMenu, MenuItem as MenuItem$1, IconMore24, DataTableCell, TableBody as TableBody$1, Pagination as Pagination$1, TableFoot, DataTable, DropdownButton, FileInputField, FileListItem, MultiSelectField, TextAreaField } from '@dhis2/ui';
28
+ import { Button as Button$1, IconDimensionData16, IconClock16, IconDimensionOrgUnit16, spacers as spacers$1, colors as colors$1, IconEdit16, theme as theme$1, Tooltip, IconChevronRight16, SingleSelectField, SingleSelectOption, InputField as InputField$1, TabBar, Tab, Transfer, Modal as Modal$1, ModalTitle as ModalTitle$1, ModalContent as ModalContent$1, ModalActions as ModalActions$1, ButtonStrip as ButtonStrip$1, Checkbox, OrganisationUnitTree, MultiSelect, MultiSelectOption, IconWarningFilled16, CircularLoader as CircularLoader$1, Chip, DataTableToolbar, DropdownButton, FlyoutMenu, CalendarInput, TableHead, DataTableRow, DataTableColumnHeader, Layer as Layer$1, Popper, MenuItem as MenuItem$1, IconMore24, DataTableCell, TableBody as TableBody$1, Pagination as Pagination$1, TableFoot, DataTable, FileInputField, FileListItem, MultiSelectField, TextAreaField } from '@dhis2/ui';
29
29
  import { isObject, isString, debounce, sortBy, isArray, find, camelCase, flatten, isUndefined, head, isEmpty } from 'lodash';
30
30
  import cx from 'classnames';
31
31
  import { getNowInCalendar, generateFixedPeriods } from '@dhis2/multi-calendar-dates';
@@ -3303,96 +3303,299 @@ const OrgUnitSelector = ({ hide, setHide, selectedOrgUnit, setSelectedOrgUnit, s
3303
3303
  React__default.createElement(ButtonStrip$1, { end: true },
3304
3304
  React__default.createElement(Button$1, { onClick: () => setHide(true), secondary: true }, "Close")))));
3305
3305
 
3306
- 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" },
3307
- React__default.createElement("div", { style: {
3308
- display: 'flex',
3309
- // flexDirection: 'column',
3310
- gap: '10px',
3311
- flexWrap: 'wrap',
3312
- } },
3306
+ const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setOrgUnitState, defaultOrgUnit, setHide, startDateState, setStartDateState, endDateState, setEndDateState, visibleFilters, dateStates, inputValues, setInputValues, handleInputChange, handleInputChangeForSelectField, handleDateSelect, showAllFilters, setShowAllFilters, setTempStartDateState, setTempEndDateState, setTempOrgUnitState, tempStartDateState, tempEndDateState, tempOrgUnitState, dataQueryFiltersState, setDataQueryFiltersState, SetOrgUnitModalVisible, showEnrollmentDates, handleAdditionalFilters, handleStartDateFilter, handleEndDateFilter, handleOrgUnitFilter, setDateStates, prevInputValues, setPrevInputValues, setTempDataQueryFiltersState, prevDateStates, setPrevDateStates, prevSelectedOrgUnit, setPrevSelectedOrgUnit, }) => {
3307
+ const [isOpen, setIsOpen] = useState(false);
3308
+ const [isOpenOrgUnitDropdown, setIsOpenOrgUnitDropdown] = useState(false);
3309
+ const [openDropdownKey, setOpenDropdownKey] = useState(null);
3310
+ //TODO: I HAVE DUPLICATED DROPDOWN AND CLEAR ICON IN MULTIPLE PLACES REQUIRED TO CREATE A REUSABLE DROPDOWN COMPONENT WITH THE CLEAR ICON TO AVOID DUPLICATION
3311
+ const ClearIcon = ({ className, ...props }) => (React__default.createElement("svg", { className: className, ...props, viewBox: "0 0 24 24", width: 16, height: 16 },
3312
+ React__default.createElement("path", { d: "M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z" })));
3313
+ return (React__default.createElement(DataTableToolbar, { className: "table-top-toolbar" },
3313
3314
  React__default.createElement("div", { style: {
3314
3315
  display: 'flex',
3315
- alignItems: 'center',
3316
3316
  gap: '10px',
3317
3317
  flexWrap: 'wrap',
3318
3318
  } },
3319
- React__default.createElement(InputField$1, { key: "location", label: orgUnitLabel ? orgUnitLabel : 'registering unit:', value: selectedOrgUnit, onFocus: () => {
3320
- SetOrgUnitModalVisible(true);
3321
- setHide(false);
3322
- }, className: "custom-input", clearable: true, onChange: (event) => {
3323
- setSelectedOrgUnit(event.value);
3324
- setOrgUnitState(defaultOrgUnit);
3325
- } }),
3326
- showEnrollmentDates && (React__default.createElement(React__default.Fragment, null,
3327
- React__default.createElement(CalendarInput, { label: "Start date:", calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", className: "custom-input",
3328
- //clearable={!!tempStartDateState}
3329
- //date={tempStartDateState || undefined}
3330
- //date={tempStartDateState || "yyyy-mm-dd"}
3331
- clearable: !!tempStartDateState && tempStartDateState !== 'dd-mm-yyyy',
3332
- // date={tempStartDateState || 'dd-mm-yyyy'}
3333
- date: formatDateForDisplay(tempStartDateState), onDateSelect: (selectedDate) => {
3334
- setTempStartDateState(selectedDate.calendarDateString);
3335
- if (selectedDate.calendarDateString === null) {
3336
- setStartDateState(selectedDate.calendarDateString);
3337
- }
3338
- } }),
3339
- React__default.createElement(CalendarInput, { label: "End date:", calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", className: "custom-input", clearable: !!tempEndDateState && tempEndDateState !== 'dd-mm-yyyy',
3340
- // date={tempEndDateState || 'dd-mm-yyyy'}
3341
- date: formatDateForDisplay(tempEndDateState), onDateSelect: (selectedDate) => {
3342
- setTempEndDateState(selectedDate.calendarDateString);
3343
- if (selectedDate.calendarDateString === null) {
3344
- setEndDateState(selectedDate.calendarDateString);
3345
- }
3346
- } })))),
3347
- (visibleFilters ?? []).map(({ label, key, valueType, options }) => {
3348
- if (valueType === 'DATE') {
3349
- 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) => {
3350
- handleDateSelect(key, selectedDate);
3351
- const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3352
- if (selectedDate.calendarDateString === null) {
3353
- setDataQueryFiltersState(filteredFilters);
3354
- }
3355
- } }));
3356
- }
3357
- if (options && options.options.length > 0) {
3358
- return (React__default.createElement(SingleSelectField, { key: key, label: `${label}:`, selected: inputValues[key] || '', className: "custom-select-input", clearable: true, onChange: ({ selected }) => {
3359
- setInputValues((prevValues) => ({
3360
- ...prevValues,
3361
- [key]: selected ?? '',
3362
- }));
3363
- handleInputChangeForSelectField(key, selected ?? '');
3364
- const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3365
- if (selected === '') {
3319
+ React__default.createElement("div", { style: {
3320
+ display: 'flex',
3321
+ alignItems: 'center',
3322
+ gap: '10px',
3323
+ flexWrap: 'wrap',
3324
+ } },
3325
+ React__default.createElement(DropdownButton, { name: "customDropdown", open: isOpenOrgUnitDropdown, onClick: () => setIsOpenOrgUnitDropdown(!isOpenOrgUnitDropdown), component: React__default.createElement("div", null,
3326
+ React__default.createElement(FlyoutMenu, null,
3327
+ React__default.createElement("div", { style: { padding: '16px' } },
3328
+ React__default.createElement(InputField$1, { key: "location", placeholder: orgUnitLabel ? orgUnitLabel : 'registering unit', value: selectedOrgUnit, onFocus: () => {
3329
+ SetOrgUnitModalVisible(true);
3330
+ setHide(false);
3331
+ } }),
3332
+ React__default.createElement("div", { style: {
3333
+ paddingTop: '8px',
3334
+ display: 'flex',
3335
+ justifyContent: 'flex-end',
3336
+ } },
3337
+ React__default.createElement(ButtonStrip$1, null,
3338
+ React__default.createElement(Button$1, { primary: true, disabled: !selectedOrgUnit, onClick: () => {
3339
+ setPrevSelectedOrgUnit(selectedOrgUnit);
3340
+ handleOrgUnitFilter();
3341
+ setIsOpenOrgUnitDropdown(false);
3342
+ } }, "update"),
3343
+ React__default.createElement(Button$1, { disabled: !selectedOrgUnit, onClick: () => {
3344
+ setSelectedOrgUnit('');
3345
+ setPrevSelectedOrgUnit('');
3346
+ setOrgUnitState(defaultOrgUnit);
3347
+ setTempOrgUnitState(defaultOrgUnit);
3348
+ setIsOpenOrgUnitDropdown(false);
3349
+ } }, "reset filter")))))) },
3350
+ orgUnitLabel ? orgUnitLabel : 'registering unit',
3351
+ ' ',
3352
+ prevSelectedOrgUnit && ':',
3353
+ " ",
3354
+ prevSelectedOrgUnit,
3355
+ prevSelectedOrgUnit && (React__default.createElement("span", { onClick: (event) => {
3356
+ event.stopPropagation();
3357
+ setSelectedOrgUnit('');
3358
+ setPrevSelectedOrgUnit('');
3359
+ setOrgUnitState(defaultOrgUnit);
3360
+ setTempOrgUnitState(defaultOrgUnit);
3361
+ setIsOpenOrgUnitDropdown(false);
3362
+ }, style: { display: 'inline-flex', alignItems: 'center' } },
3363
+ React__default.createElement(ClearIcon, { className: "my-icon-class" })))),
3364
+ showEnrollmentDates && (React__default.createElement(React__default.Fragment, null,
3365
+ React__default.createElement(DropdownButton, { name: "customDropdown", open: isOpen, onClick: () => setIsOpen(!isOpen), component: React__default.createElement("div", null,
3366
+ React__default.createElement(FlyoutMenu, null,
3367
+ React__default.createElement("div", { style: { padding: '16px' } },
3368
+ React__default.createElement("div", { style: {
3369
+ display: 'flex',
3370
+ alignItems: 'flex-end',
3371
+ gap: '16px',
3372
+ } },
3373
+ React__default.createElement(CalendarInput, { calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: formatDateForDisplay(tempStartDateState), onDateSelect: (selectedDate) => {
3374
+ setTempStartDateState(selectedDate.calendarDateString);
3375
+ } }),
3376
+ React__default.createElement("span", { style: { paddingBottom: '8px' } }, "to"),
3377
+ React__default.createElement(CalendarInput, { calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: formatDateForDisplay(tempEndDateState), onDateSelect: (selectedDate) => {
3378
+ setTempEndDateState(selectedDate.calendarDateString);
3379
+ } })),
3380
+ React__default.createElement("div", { style: {
3381
+ paddingTop: '8px',
3382
+ display: 'flex',
3383
+ justifyContent: 'flex-end',
3384
+ } },
3385
+ React__default.createElement(ButtonStrip$1, null,
3386
+ React__default.createElement(Button$1, { primary: true, onClick: () => {
3387
+ handleStartDateFilter();
3388
+ handleEndDateFilter();
3389
+ setIsOpen(false);
3390
+ } }, "update"),
3391
+ React__default.createElement(Button$1, { onClick: () => {
3392
+ setStartDateState(null);
3393
+ setTempEndDateState(null);
3394
+ setTempStartDateState(null);
3395
+ setEndDateState(null);
3396
+ setIsOpen(false);
3397
+ } }, "reset")))))) },
3398
+ "registration dates ",
3399
+ (startDateState || endDateState) && ':',
3400
+ ' ',
3401
+ startDateState,
3402
+ endDateState && ` - ${endDateState}`,
3403
+ (startDateState || endDateState) && (React__default.createElement("span", { onClick: (event) => {
3404
+ event.stopPropagation();
3405
+ setStartDateState(null);
3406
+ setTempEndDateState(null);
3407
+ setTempStartDateState(null);
3408
+ setEndDateState(null);
3409
+ setIsOpen(false);
3410
+ }, style: { display: 'inline-flex', alignItems: 'center' } },
3411
+ React__default.createElement(ClearIcon, { className: "my-icon-class" }))))))),
3412
+ (visibleFilters ?? []).map(({ label, key, valueType, options, type }) => {
3413
+ if (valueType === 'DATE') {
3414
+ return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
3415
+ setOpenDropdownKey(openDropdownKey === key ? null : key);
3416
+ }, component: React__default.createElement("div", null,
3417
+ React__default.createElement(FlyoutMenu, null,
3418
+ React__default.createElement("div", { style: { padding: '16px' } },
3419
+ React__default.createElement(CalendarInput, { key: key, calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: dateStates[key], onDateSelect: (selectedDate) => {
3420
+ handleDateSelect(key, selectedDate, type);
3421
+ } }),
3422
+ React__default.createElement("div", { style: {
3423
+ paddingTop: '8px',
3424
+ display: 'flex',
3425
+ justifyContent: 'flex-end',
3426
+ } },
3427
+ React__default.createElement(ButtonStrip$1, null,
3428
+ React__default.createElement(Button$1, { primary: true, onClick: () => {
3429
+ setPrevDateStates((prev) => ({
3430
+ ...prev,
3431
+ [key]: dateStates[key],
3432
+ }));
3433
+ handleAdditionalFilters();
3434
+ setOpenDropdownKey(null);
3435
+ } }, "update"),
3436
+ React__default.createElement(Button$1, { onClick: () => {
3437
+ setIsOpen(false);
3438
+ } }, "reset")))))) },
3439
+ label,
3440
+ " ",
3441
+ prevDateStates[key] && ':',
3442
+ " ",
3443
+ prevDateStates[key],
3444
+ prevDateStates[key] && (React__default.createElement("span", { onClick: (event) => {
3445
+ event.stopPropagation();
3446
+ setDateStates((prev) => ({
3447
+ ...prev,
3448
+ [key]: '',
3449
+ }));
3450
+ setPrevDateStates((prev) => ({
3451
+ ...prev,
3452
+ [key]: '',
3453
+ }));
3454
+ const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3455
+ setDataQueryFiltersState(filteredFilters);
3456
+ setTempDataQueryFiltersState(filteredFilters);
3457
+ setOpenDropdownKey(null);
3458
+ }, style: { display: 'inline-flex', alignItems: 'center' } },
3459
+ React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
3460
+ }
3461
+ if (options && options.options.length > 0) {
3462
+ return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
3463
+ setOpenDropdownKey(openDropdownKey === key ? null : key);
3464
+ }, component: React__default.createElement("div", null,
3465
+ React__default.createElement(FlyoutMenu, null,
3466
+ React__default.createElement("div", { style: { padding: '16px' } },
3467
+ React__default.createElement(SingleSelectField, { key: key, placeholder: `${label}`, selected: inputValues[key] || '', onChange: ({ selected }) => {
3468
+ setInputValues((prevValues) => ({
3469
+ ...prevValues,
3470
+ [key]: selected ?? '',
3471
+ }));
3472
+ handleInputChangeForSelectField(key, selected ?? '', type);
3473
+ } }, (options.options ?? []).map((opt) => (React__default.createElement(SingleSelectOption, { key: opt.id, label: opt.name, value: opt.code })))),
3474
+ React__default.createElement("div", { style: {
3475
+ paddingTop: '8px',
3476
+ display: 'flex',
3477
+ justifyContent: 'flex-end',
3478
+ } },
3479
+ React__default.createElement(ButtonStrip$1, null,
3480
+ React__default.createElement(Button$1, { primary: true, disabled: !inputValues[key] ||
3481
+ inputValues[key] === prevInputValues[key], onClick: () => {
3482
+ setPrevInputValues((prev) => ({
3483
+ ...prev,
3484
+ [key]: inputValues[key],
3485
+ }));
3486
+ handleAdditionalFilters();
3487
+ setOpenDropdownKey(null);
3488
+ } }, "update"),
3489
+ React__default.createElement(Button$1, { disabled: !inputValues[key], onClick: () => {
3490
+ setInputValues((prevValues) => ({
3491
+ ...prevValues,
3492
+ [key]: '',
3493
+ }));
3494
+ setPrevInputValues((prevValues) => ({
3495
+ ...prevValues,
3496
+ [key]: '',
3497
+ }));
3498
+ handleInputChangeForSelectField(key, '', type);
3499
+ const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3500
+ setDataQueryFiltersState(filteredFilters);
3501
+ setTempDataQueryFiltersState(filteredFilters);
3502
+ setOpenDropdownKey(null);
3503
+ } }, "reset")))))) },
3504
+ label,
3505
+ " ",
3506
+ prevInputValues[key] && ':',
3507
+ " ",
3508
+ prevInputValues[key],
3509
+ prevInputValues[key] && (React__default.createElement("span", { onClick: (event) => {
3510
+ event.stopPropagation();
3511
+ setInputValues((prevValues) => ({
3512
+ ...prevValues,
3513
+ [key]: '',
3514
+ }));
3515
+ setPrevInputValues((prevValues) => ({
3516
+ ...prevValues,
3517
+ [key]: '',
3518
+ }));
3519
+ handleInputChangeForSelectField(key, '', type);
3520
+ const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3521
+ setDataQueryFiltersState(filteredFilters);
3522
+ setTempDataQueryFiltersState(filteredFilters);
3523
+ setOpenDropdownKey(null);
3524
+ }, style: { display: 'inline-flex', alignItems: 'center' } },
3525
+ React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
3526
+ }
3527
+ return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
3528
+ setOpenDropdownKey(openDropdownKey === key ? null : key);
3529
+ }, component: React__default.createElement("div", null,
3530
+ React__default.createElement(FlyoutMenu, null,
3531
+ React__default.createElement("div", { style: { padding: '16px' } },
3532
+ React__default.createElement(InputField$1, { key: key, placeholder: `${label}`, value: inputValues[key] || '', onChange: (e) => {
3533
+ const currentValue = 'target' in e ? e.target.value : e.value ?? '';
3534
+ setInputValues((prevValues) => ({
3535
+ ...prevValues,
3536
+ [key]: currentValue,
3537
+ }));
3538
+ handleInputChange(key, currentValue, type);
3539
+ } }),
3540
+ React__default.createElement("div", { style: {
3541
+ paddingTop: '8px',
3542
+ display: 'flex',
3543
+ justifyContent: 'flex-end',
3544
+ } },
3545
+ React__default.createElement(ButtonStrip$1, null,
3546
+ React__default.createElement(Button$1, { primary: true, disabled: !inputValues[key] ||
3547
+ inputValues[key] === prevInputValues[key], onClick: () => {
3548
+ setPrevInputValues((prev) => ({
3549
+ ...prev,
3550
+ [key]: inputValues[key],
3551
+ }));
3552
+ handleAdditionalFilters();
3553
+ setOpenDropdownKey(null);
3554
+ } }, "update"),
3555
+ React__default.createElement(Button$1, { disabled: !inputValues[key], onClick: () => {
3556
+ setInputValues((prevValues) => ({
3557
+ ...prevValues,
3558
+ [key]: '',
3559
+ }));
3560
+ setPrevInputValues((prevValues) => ({
3561
+ ...prevValues,
3562
+ [key]: '',
3563
+ }));
3564
+ // Remove the filter for this key
3565
+ const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3566
+ setDataQueryFiltersState(filteredFilters);
3567
+ setTempDataQueryFiltersState(filteredFilters);
3568
+ setOpenDropdownKey(null);
3569
+ } }, "reset")))))) },
3570
+ label,
3571
+ " ",
3572
+ prevInputValues[key] && ':',
3573
+ " ",
3574
+ prevInputValues[key],
3575
+ prevInputValues[key] && (React__default.createElement("span", { onClick: (event) => {
3576
+ event.stopPropagation();
3577
+ // Clear the input value for this key
3578
+ setInputValues((prevValues) => ({
3579
+ ...prevValues,
3580
+ [key]: '',
3581
+ }));
3582
+ setPrevInputValues((prevValues) => ({
3583
+ ...prevValues,
3584
+ [key]: '',
3585
+ }));
3586
+ // Remove the filter for this key
3587
+ const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3366
3588
  setDataQueryFiltersState(filteredFilters);
3367
- }
3368
- } }, (options.options ?? []).map((opt) => (React__default.createElement(SingleSelectOption, { key: opt.id, label: opt.name, value: opt.code })))));
3369
- }
3370
- return (React__default.createElement(InputField$1, { key: key, label: `${label}:`, className: "custom-input", value: inputValues[key] || '', clearable: true, onChange: (e) => {
3371
- const currentValue = 'target' in e ? e.target.value : e.value ?? '';
3372
- setInputValues((prevValues) => ({
3373
- ...prevValues,
3374
- [key]: currentValue,
3375
- }));
3376
- const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
3377
- if (currentValue === '') {
3378
- setDataQueryFiltersState(filteredFilters);
3379
- }
3380
- }, onBlur: (e) => {
3381
- const currentValue = 'target' in e ? e.target.value : e.value ?? '';
3382
- if (currentValue !== '' && currentValue !== prevValue) {
3383
- handleInputChange(key, currentValue);
3384
- setPrevValue(currentValue);
3385
- }
3386
- } }));
3387
- }),
3388
- React__default.createElement("div", { style: {
3389
- display: 'flex',
3390
- // alignItems: 'center',
3391
- gap: '10px',
3392
- // flexWrap: 'wrap',
3393
- } },
3394
- React__default.createElement(Button$1, { onClick: handleSearch }, "Search"),
3395
- React__default.createElement(Button$1, { onClick: () => setShowAllFilters(!showAllFilters) }, showAllFilters ? 'Less Filters' : 'More Filters')))));
3589
+ setTempDataQueryFiltersState(filteredFilters);
3590
+ }, style: { display: 'inline-flex', alignItems: 'center' } },
3591
+ React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
3592
+ }),
3593
+ React__default.createElement("div", { style: {
3594
+ display: 'flex',
3595
+ gap: '10px',
3596
+ } },
3597
+ React__default.createElement(Button$1, { onClick: () => setShowAllFilters(!showAllFilters) }, showAllFilters ? 'Less Filters' : 'More Filters')))));
3598
+ };
3396
3599
  function formatDateForDisplay(dateString) {
3397
3600
  if (!dateString || dateString === 'dd-mm-yyyy')
3398
3601
  return 'dd-mm-yyyy';
@@ -3639,7 +3842,13 @@ const TableRow = ({ row, columns, getTextColorFromBackGround, actionOptions, act
3639
3842
  // )}
3640
3843
  // </DHISTableBody>
3641
3844
  // );
3642
- const TableBody = ({ data, columns, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectedRows, onRowToggle, selectable, showActionButtons }) => (React__default.createElement(TableBody$1, null, data.length > 0 ? (data.map((row) => (React__default.createElement(TableRow, { key: row.index.value, row: row, columns: columns, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: actionOptions, actionOptionOrientation: actionOptionOrientation, actionSelected: actionSelected, isChecked: selectedRows.some((r) => r.index?.value === row.index?.value), onToggle: onRowToggle, selectable: selectable, showActionButtons: showActionButtons })))) : (React__default.createElement(DataTableRow, null,
3845
+ const TableBody = ({ data, columns, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectedRows, onRowToggle, selectable, showActionButtons, error, }) => (React__default.createElement(TableBody$1, null, error ? (React__default.createElement(DataTableRow, null,
3846
+ React__default.createElement(DataTableCell, { colSpan: columns.length.toString(), style: {
3847
+ textAlign: 'center',
3848
+ fontWeight: 'bold',
3849
+ color: 'red',
3850
+ padding: '20px',
3851
+ } }, error))) : data.length > 0 ? (data.map((row) => (React__default.createElement(TableRow, { key: row.index.value, row: row, columns: columns, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: actionOptions, actionOptionOrientation: actionOptionOrientation, actionSelected: actionSelected, isChecked: selectedRows.some((r) => r.index?.value === row.index?.value), onToggle: onRowToggle, selectable: selectable, showActionButtons: showActionButtons })))) : (React__default.createElement(DataTableRow, null,
3643
3852
  React__default.createElement(DataTableCell, { colSpan: columns.length.toString(), style: {
3644
3853
  textAlign: 'center',
3645
3854
  fontWeight: 'bold',
@@ -3696,7 +3905,7 @@ const TableFooter = ({ pager, setPager, columns }) => {
3696
3905
  // </DataTable>
3697
3906
  // );
3698
3907
  // };
3699
- const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectable, rowsSelected, showActionButtons }) => {
3908
+ const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectable, rowsSelected, showActionButtons, error }) => {
3700
3909
  const [selectedRows, setSelectedRows] = useState([]);
3701
3910
  const handleRowToggle = (row) => {
3702
3911
  const exists = selectedRows.find((r) => r.index?.value === row.index?.value);
@@ -3713,7 +3922,7 @@ const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGro
3713
3922
  };
3714
3923
  return (React__default.createElement(DataTable, null,
3715
3924
  React__default.createElement(TableHeader, { columns: columns, allSelected: selectedRows.length === data.length && data.length > 0, onSelectAll: handleSelectAll, selectable: selectable, showActionButtons: showActionButtons }),
3716
- React__default.createElement(TableBody, { data: data, columns: columns, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: actionOptions, actionOptionOrientation: actionOptionOrientation, actionSelected: actionSelected, selectedRows: selectedRows, onRowToggle: handleRowToggle, selectable: selectable, showActionButtons: showActionButtons }),
3925
+ React__default.createElement(TableBody, { data: data, columns: columns, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: actionOptions, actionOptionOrientation: actionOptionOrientation, actionSelected: actionSelected, selectedRows: selectedRows, onRowToggle: handleRowToggle, selectable: selectable, showActionButtons: showActionButtons, error: error }),
3717
3926
  React__default.createElement(TableFooter, { columns: columns, pager: pager, setPager: setPager })));
3718
3927
  };
3719
3928
 
@@ -3743,7 +3952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
3743
3952
  type: Injectable
3744
3953
  }], ctorParameters: () => [{ type: i1.NgxDhis2HttpClientService }] });
3745
3954
 
3746
- const getTrackedEntityTableData = (response, programId, pager, metaData) => {
3955
+ const getTrackedEntityTableData = (response, programId, pager, metaData, searcheableDataElements) => {
3747
3956
  const teisRaw = response.data
3748
3957
  .trackedEntityInstances;
3749
3958
  const teis = Array.isArray(teisRaw)
@@ -3758,12 +3967,19 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
3758
3967
  label: trackedEntityAttribute.formName ?? trackedEntityAttribute.name,
3759
3968
  key: trackedEntityAttribute.id,
3760
3969
  }));
3761
- // const dataElementColumns = metaData.displayInListDataElements
3762
- // .sort((a, b) => a.sortOrder! - b.sortOrder!)
3763
- // .map((dataElement) => ({
3764
- // label: dataElement.formName || dataElement.name,
3765
- // key: dataElement.id,
3766
- // }));
3970
+ const tableSearcheableDataElements = metaData
3971
+ .programStages.sort((a, b) => a.sortOrder - b.sortOrder)
3972
+ .flatMap((stage) => stage
3973
+ .programStageDataElements.filter((psde) => psde.displayInReports)
3974
+ .sort((a, b) => a.sortOrder - b.sortOrder)
3975
+ .map((psde) => ({
3976
+ label: psde.dataElement.formName || psde.dataElement.name,
3977
+ key: psde.dataElement.id,
3978
+ valueType: psde.dataElement.valueType,
3979
+ options: psde.dataElement.optionSet,
3980
+ type: 'dataElement',
3981
+ }))
3982
+ .filter((col) => searcheableDataElements.includes(col.key)));
3767
3983
  const dataElementColumns = metaData
3768
3984
  .programStages.sort((a, b) => a.sortOrder - b.sortOrder) // Sorts stages by sortOrder
3769
3985
  .flatMap((stage) => stage
@@ -3795,6 +4011,7 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
3795
4011
  key: attr.id,
3796
4012
  valueType: attr.valueType,
3797
4013
  options: attr.optionSet ?? undefined,
4014
+ type: 'attribute',
3798
4015
  }));
3799
4016
  const tableData = teis.map((tei, idx) => {
3800
4017
  const row = {
@@ -3881,7 +4098,7 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
3881
4098
  return {
3882
4099
  columns: tableColumns,
3883
4100
  data: tableData,
3884
- filteredEntityColumns: tableFilters,
4101
+ filteredEntityColumns: [...tableFilters, ...tableSearcheableDataElements],
3885
4102
  orgUnitLabel: orgUnitLabel,
3886
4103
  };
3887
4104
  };
@@ -3962,6 +4179,7 @@ class LineListTableComponent extends ReactWrapperModule {
3962
4179
  this.showActionButtons = true;
3963
4180
  this.showEnrollmentDates = true;
3964
4181
  this.showDownloadButton = false;
4182
+ this.searcheableDataElements = [];
3965
4183
  this.reactStateUpdaters = null;
3966
4184
  this.setReactStateUpdaters = (updaters) => {
3967
4185
  this.reactStateUpdaters = updaters;
@@ -3990,27 +4208,29 @@ class LineListTableComponent extends ReactWrapperModule {
3990
4208
  const [endDateState, setEndDateState] = useState(this.endDate);
3991
4209
  const [tempEndDateState, setTempEndDateState] = useState(this.endDate);
3992
4210
  const [loading, setLoading] = useState(false);
3993
- const [metaDataLoadng, setMetaDataLoading] = useState(false);
3994
4211
  const [filteredColumns, setFilteredColumns] = useState();
3995
4212
  const [inputValues, setInputValues] = useState({});
3996
4213
  const [orgUnitLabel, setOrgUnitLabel] = useState('');
3997
4214
  const [selectedOrgUnit, setSelectedOrgUnit] = useState('');
4215
+ const [prevSelectedOrgUnit, setPrevSelectedOrgUnit] = useState('');
3998
4216
  const [hide, setHide] = useState(true);
3999
4217
  const [showAllFilters, setShowAllFilters] = useState(false);
4000
4218
  const visibleFilters = showAllFilters
4001
4219
  ? filteredColumns ?? []
4002
- : (filteredColumns ?? []).slice(0, 0);
4220
+ : (filteredColumns ?? []).slice(0, 5);
4003
4221
  // const visibleFilters = showAllFilters
4004
4222
  // ? filteredColumns ?? []
4005
4223
  // : filteredColumns ?? []).slice(0, 2);
4006
4224
  const defaultOrgUnit = this.orgUnit;
4007
- const [prevValue, setPrevValue] = useState();
4008
4225
  const [dateStates, setDateStates] = useState({});
4226
+ const [prevDateStates, setPrevDateStates] = useState({});
4009
4227
  const [metaData, setMetaData] = useState(null);
4010
4228
  const [selectable, setSelectable] = useState(this.allowRowsSelection);
4011
4229
  const [triggerRefetch, setTriggerRefetch] = useState(this.triggerRefetch);
4012
4230
  const [showActionButtons, setShowActionButtons] = useState(this.showActionButtons);
4013
4231
  const [orgUnitModalVisible, setOrgUnitModalVisible] = useState(false);
4232
+ const [error, setError] = useState(null);
4233
+ const [prevInputValues, setPrevInputValues] = useState({});
4014
4234
  const d2 = window.d2Web;
4015
4235
  // Stores updaters in refs for Angular to access
4016
4236
  const updateRefs = useRef({
@@ -4027,24 +4247,30 @@ class LineListTableComponent extends ReactWrapperModule {
4027
4247
  });
4028
4248
  useEffect(() => {
4029
4249
  this.setReactStateUpdaters?.(updateRefs.current);
4030
- }, []);
4031
- useEffect(() => {
4032
- setLoading(true);
4033
4250
  const fetchmetaData = async () => {
4251
+ setLoading(true);
4252
+ if (!this.programId) {
4253
+ setMetaData(null);
4254
+ setLoading(false);
4255
+ return;
4256
+ }
4257
+ setError(null);
4034
4258
  try {
4035
4259
  const trackerResponse = (await d2.trackerModule.trackedEntity
4036
4260
  .setProgram(this.programId)
4037
4261
  .getMetaData({ skipProgramRules: true }));
4262
+ if (!trackerResponse || !trackerResponse.programType) {
4263
+ throw new Error('failed to load data.');
4264
+ }
4038
4265
  const data = trackerResponse;
4039
4266
  setMetaData(data);
4040
4267
  }
4041
4268
  catch (error) {
4042
- console.error('Failed to metadata:', error);
4269
+ setError(error);
4270
+ setLoading(false);
4043
4271
  }
4044
4272
  };
4045
- if (this.programId) {
4046
- fetchmetaData();
4047
- }
4273
+ fetchmetaData();
4048
4274
  }, []);
4049
4275
  useEffect(() => {
4050
4276
  if (!metaData) {
@@ -4054,122 +4280,141 @@ class LineListTableComponent extends ReactWrapperModule {
4054
4280
  const isEvent = metaData.programType === 'WITHOUT_REGISTRATION';
4055
4281
  const endDate = endDateState ?? format(addDays(new Date(), 1), 'yyyy-MM-dd');
4056
4282
  if (this.programStageId || isEvent) {
4057
- setLoading(true);
4058
- d2.eventModule.event
4059
- .setEndDate(endDate)
4060
- .setStartDate(startDateState)
4061
- .setProgram(this.programId)
4062
- .setProgramStage(this.programStageId)
4063
- .setOrgUnit(orgUnitState)
4064
- .setOuMode(this.ouMode)
4065
- .setPagination(new Pager({
4066
- pageSize: pager.pageSize,
4067
- page: pager.page,
4068
- }))
4069
- .get()
4070
- .then((response) => {
4071
- const eventsResponse = {
4072
- events: response.data,
4073
- pager: pager,
4074
- // orgUnitsMap: fetchedOrgUnits,
4075
- };
4076
- const { columns, data } = getEvents({ data: eventsResponse }, this.programStageId, pager, metaData);
4077
- // const filterableColumnIdsSet = new Set(
4078
- // this.filterableColumnIds
4079
- // );
4080
- // const updatedFilterableColumnIds: ColumnDefinition[] =
4081
- // columns.filter((column) =>
4082
- // filterableColumnIdsSet.has(column.key)
4083
- // );
4084
- // const finalColumns: ColumnDefinition[] = addActionsColumn(
4085
- // [{ label: '#', key: 'index' }, ...updatedFilterableColumnIds],
4086
- // this.actionOptions
4087
- // );
4088
- let updatedFilterableColumnIds;
4089
- if (Array.isArray(this.filterableColumnIds) && this.filterableColumnIds.length > 0) {
4090
- const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4091
- updatedFilterableColumnIds = columns.filter(column => filterableColumnIdsSet.has(column.key));
4283
+ const fetchEventData = async () => {
4284
+ try {
4285
+ setError(null);
4286
+ setLoading(true);
4287
+ const response = await d2.eventModule.event
4288
+ .setEndDate(endDate)
4289
+ .setStartDate(startDateState)
4290
+ .setProgram(this.programId)
4291
+ .setProgramStage(this.programStageId)
4292
+ .setOrgUnit(orgUnitState)
4293
+ .setOuMode(this.ouMode)
4294
+ .setPagination(new Pager({
4295
+ pageSize: pager.pageSize,
4296
+ page: pager.page,
4297
+ }))
4298
+ .get();
4299
+ if (response.responseStatus.status !== 200) {
4300
+ throw new Error('failed to load data.');
4301
+ }
4302
+ const eventsResponse = {
4303
+ events: response.data,
4304
+ pager: pager,
4305
+ // orgUnitsMap: fetchedOrgUnits,
4306
+ };
4307
+ const { columns, data } = getEvents({ data: eventsResponse }, this.programStageId, pager, metaData);
4308
+ // const filterableColumnIdsSet = new Set(
4309
+ // this.filterableColumnIds
4310
+ // );
4311
+ // const updatedFilterableColumnIds: ColumnDefinition[] =
4312
+ // columns.filter((column) =>
4313
+ // filterableColumnIdsSet.has(column.key)
4314
+ // );
4315
+ // const finalColumns: ColumnDefinition[] = addActionsColumn(
4316
+ // [{ label: '#', key: 'index' }, ...updatedFilterableColumnIds],
4317
+ // this.actionOptions
4318
+ // );
4319
+ let updatedFilterableColumnIds;
4320
+ if (Array.isArray(this.filterableColumnIds) &&
4321
+ this.filterableColumnIds.length > 0) {
4322
+ const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4323
+ updatedFilterableColumnIds = columns.filter((column) => filterableColumnIdsSet.has(column.key));
4324
+ }
4325
+ else {
4326
+ updatedFilterableColumnIds = columns;
4327
+ }
4328
+ const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4329
+ const pagerResponse = response.pagination;
4330
+ setColumns(finalColumns);
4331
+ setData(data);
4332
+ setPager(new Pager(pagerResponse || {}));
4092
4333
  }
4093
- else {
4094
- updatedFilterableColumnIds = columns;
4334
+ catch {
4335
+ console.error('Failed to fetch event data:', error);
4336
+ setError('Could not load records. Please reload.');
4095
4337
  }
4096
- const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4097
- const pagerResponse = response.pagination;
4098
- setLoading(false);
4099
- setColumns(finalColumns);
4100
- setData(data);
4101
- setPager(new Pager(pagerResponse || {}));
4102
- });
4338
+ finally {
4339
+ setLoading(false);
4340
+ }
4341
+ };
4342
+ fetchEventData();
4103
4343
  }
4104
4344
  else if (isTracker) {
4105
- setLoading(true);
4106
- d2.trackerModule.trackedEntity
4107
- .setEndDate(endDate)
4108
- .setStartDate(startDateState)
4109
- .setProgram(this.programId)
4110
- .setProgramStage(this.programStageId)
4111
- .setOrgUnit(orgUnitState)
4112
- .setOuMode(this.ouMode)
4113
- .setStatus(this.enrollmentStatus)
4114
- .setEventStatus(this.eventStatus?.status, this.eventStatus?.programStage)
4115
- .setFilters(dataQueryFiltersState)
4116
- .setPagination(new Pager({
4117
- pageSize: pager.pageSize,
4118
- page: pager.page,
4119
- }))
4120
- .setOrderCriterias([
4121
- new DataOrderCriteria().setField('createdAt').setOrder('desc'),
4122
- ])
4123
- .get()
4124
- .then((response) => {
4125
- const trackedEntityInstances = Array.isArray(response.data)
4126
- ? response.data
4127
- : [response.data];
4128
- const orgUnitIdsFromEnrollments = new Set(trackedEntityInstances.map((tei) => tei.latestEnrollment.orgUnit));
4129
- const orgUnitsFromAttributes = new Set(trackedEntityInstances.flatMap((tei) => tei.attributes
4130
- ?.filter((attr) => attr.valueType === 'ORGANISATION_UNIT')
4131
- .map((attr) => attr.value) || []));
4132
- const uniqueOrgUnitIds = [
4133
- ...orgUnitIdsFromEnrollments,
4134
- ...orgUnitsFromAttributes,
4135
- ];
4136
- this.lineListService.fetchOrgUnits(uniqueOrgUnitIds).subscribe({
4137
- next: (fetchedOrgUnits) => {
4138
- const trackedEntityResponse = {
4139
- trackedEntityInstances: response.data,
4140
- pager: pager,
4141
- orgUnitsMap: fetchedOrgUnits,
4142
- };
4143
- const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData);
4144
- setFilteredColumns((prev) => filteredEntityColumns.length > 0
4145
- ? filteredEntityColumns
4146
- : prev);
4147
- let updatedFilterableColumnIds;
4148
- if (Array.isArray(this.filterableColumnIds) && this.filterableColumnIds.length > 0) {
4149
- const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4150
- updatedFilterableColumnIds = columns.filter(column => filterableColumnIdsSet.has(column.key));
4151
- }
4152
- else {
4153
- updatedFilterableColumnIds = columns;
4154
- }
4155
- const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4156
- // const finalColumns: ColumnDefinition[] = addActionsColumn(
4157
- // [{ label: '#', key: 'index' }, ...columns],
4158
- // this.actionOptions
4159
- // );
4160
- const pagerResponse = response.pagination;
4161
- setLoading(false);
4162
- setColumns(finalColumns);
4163
- setData(data);
4164
- setPager(new Pager(pagerResponse || {}));
4165
- setOrgUnitLabel(orgUnitLabel);
4166
- },
4167
- error: (err) => {
4168
- console.error('Error fetching org units:', err);
4169
- setLoading(false);
4170
- },
4171
- });
4172
- });
4345
+ const fetchTrackerData = async () => {
4346
+ try {
4347
+ setError(null);
4348
+ setLoading(true);
4349
+ const response = await d2.trackerModule.trackedEntity
4350
+ .setEndDate(endDate)
4351
+ .setStartDate(startDateState)
4352
+ .setProgram(this.programId)
4353
+ .setProgramStage(this.programStageId)
4354
+ .setOrgUnit(orgUnitState)
4355
+ .setOuMode(this.ouMode)
4356
+ .setStatus(this.enrollmentStatus)
4357
+ .setEventStatus(this.eventStatus?.status, this.eventStatus?.programStage)
4358
+ .setFilters(dataQueryFiltersState)
4359
+ .setPagination(new Pager({
4360
+ pageSize: pager.pageSize,
4361
+ page: pager.page,
4362
+ }))
4363
+ .setOrderCriterias([
4364
+ new DataOrderCriteria().setField('createdAt').setOrder('desc'),
4365
+ ])
4366
+ .get();
4367
+ if (response.responseStatus.status !== 200) {
4368
+ throw new Error('failed to load data.');
4369
+ }
4370
+ const trackedEntityInstances = Array.isArray(response.data)
4371
+ ? response.data
4372
+ : [response.data];
4373
+ const orgUnitIdsFromEnrollments = new Set(trackedEntityInstances.map((tei) => tei.latestEnrollment.orgUnit));
4374
+ const orgUnitsFromAttributes = new Set(trackedEntityInstances.flatMap((tei) => tei.attributes
4375
+ ?.filter((attr) => attr.valueType === 'ORGANISATION_UNIT')
4376
+ .map((attr) => attr.value) || []));
4377
+ const uniqueOrgUnitIds = [
4378
+ ...orgUnitIdsFromEnrollments,
4379
+ ...orgUnitsFromAttributes,
4380
+ ];
4381
+ const fetchedOrgUnits = await firstValueFrom(this.lineListService.fetchOrgUnits(uniqueOrgUnitIds));
4382
+ const trackedEntityResponse = {
4383
+ trackedEntityInstances: response.data,
4384
+ pager: pager,
4385
+ orgUnitsMap: fetchedOrgUnits,
4386
+ };
4387
+ const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData, this.searcheableDataElements);
4388
+ setFilteredColumns((prev) => filteredEntityColumns.length > 0 ? filteredEntityColumns : prev);
4389
+ let updatedFilterableColumnIds;
4390
+ if (Array.isArray(this.filterableColumnIds) &&
4391
+ this.filterableColumnIds.length > 0) {
4392
+ const filterableColumnIdsSet = new Set(this.filterableColumnIds);
4393
+ updatedFilterableColumnIds = columns.filter((column) => filterableColumnIdsSet.has(column.key));
4394
+ }
4395
+ else {
4396
+ updatedFilterableColumnIds = columns;
4397
+ }
4398
+ const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
4399
+ // const finalColumns: ColumnDefinition[] = addActionsColumn(
4400
+ // [{ label: '#', key: 'index' }, ...columns],
4401
+ // this.actionOptions
4402
+ // );
4403
+ const pagerResponse = response.pagination;
4404
+ setColumns(finalColumns);
4405
+ setData(data);
4406
+ setPager(new Pager(pagerResponse || {}));
4407
+ setOrgUnitLabel(orgUnitLabel);
4408
+ }
4409
+ catch (error) {
4410
+ console.error('Failed to fetch tracker data:', error);
4411
+ setError('Could not load records. Please reload.');
4412
+ }
4413
+ finally {
4414
+ setLoading(false);
4415
+ }
4416
+ };
4417
+ fetchTrackerData();
4173
4418
  }
4174
4419
  }, [
4175
4420
  metaData,
@@ -4198,7 +4443,6 @@ class LineListTableComponent extends ReactWrapperModule {
4198
4443
  : cell;
4199
4444
  }));
4200
4445
  const worksheetData = [header, ...rows];
4201
- // Creates worksheet and workbook, then writes to file
4202
4446
  const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
4203
4447
  const workbook = XLSX.utils.book_new();
4204
4448
  XLSX.utils.book_append_sheet(workbook, worksheet, 'LineListData');
@@ -4220,7 +4464,6 @@ class LineListTableComponent extends ReactWrapperModule {
4220
4464
  const header = filteredColumns.map((col) => `"${col.label}"`).join(',');
4221
4465
  const csvData = data.map((row) => filteredColumns.map((col) => `"${safeValue(row[col.key])}"`).join(','));
4222
4466
  const csvContent = [header, ...csvData].join('\n');
4223
- // Creates a Blob and triggers the download
4224
4467
  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
4225
4468
  const url = URL.createObjectURL(blob);
4226
4469
  const link = document.createElement('a');
@@ -4230,7 +4473,7 @@ class LineListTableComponent extends ReactWrapperModule {
4230
4473
  link.click();
4231
4474
  document.body.removeChild(link);
4232
4475
  };
4233
- const handleInputChange = (key, value) => {
4476
+ const handleInputChange = (key, value, type) => {
4234
4477
  setInputValues((prevValues) => ({
4235
4478
  ...prevValues,
4236
4479
  [key]: value ?? '',
@@ -4239,20 +4482,36 @@ class LineListTableComponent extends ReactWrapperModule {
4239
4482
  // Removes old filter for this key
4240
4483
  const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
4241
4484
  // adds new filter only if value is not empty
4242
- const updatedFilters = value.trim()
4243
- ? [
4244
- ...filteredFilters,
4245
- new DataQueryFilter()
4246
- .setAttribute(key)
4247
- .setCondition(DataFilterCondition.Like)
4248
- .setValue(value),
4249
- ]
4250
- : filteredFilters;
4485
+ let updatedFilters;
4486
+ if (type === 'dataElement') {
4487
+ updatedFilters =
4488
+ value && value.length
4489
+ ? [
4490
+ ...filteredFilters,
4491
+ new DataQueryFilter()
4492
+ .setAttribute(key)
4493
+ .setCondition(DataFilterCondition.Like)
4494
+ .setValue(value)
4495
+ .setType('DATA_ELEMENT'),
4496
+ ]
4497
+ : filteredFilters;
4498
+ }
4499
+ else {
4500
+ updatedFilters = value.trim()
4501
+ ? [
4502
+ ...filteredFilters,
4503
+ new DataQueryFilter()
4504
+ .setAttribute(key)
4505
+ .setCondition(DataFilterCondition.Like)
4506
+ .setValue(value),
4507
+ ]
4508
+ : filteredFilters;
4509
+ }
4251
4510
  return updatedFilters;
4252
4511
  });
4253
4512
  };
4254
4513
  //TODO: MERGE THIS WITH HANDLE INPUT CHANGE PUT A CHECK FOR IF ITS A SELECT FIELD TO USE EQ
4255
- const handleInputChangeForSelectField = (key, value) => {
4514
+ const handleInputChangeForSelectField = (key, value, type) => {
4256
4515
  setInputValues((prevValues) => ({
4257
4516
  ...prevValues,
4258
4517
  [key]: value ?? '',
@@ -4261,19 +4520,35 @@ class LineListTableComponent extends ReactWrapperModule {
4261
4520
  // Removes existing filter for the same key (attribute)
4262
4521
  const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
4263
4522
  // adds new filter only if value is not empty
4264
- const updatedFilters = value.trim()
4265
- ? [
4266
- ...filteredFilters,
4267
- new DataQueryFilter()
4268
- .setAttribute(key)
4269
- .setCondition(DataFilterCondition.Equal)
4270
- .setValue(value),
4271
- ]
4272
- : filteredFilters;
4523
+ let updatedFilters;
4524
+ if (type === 'dataElement') {
4525
+ updatedFilters =
4526
+ value && value.length
4527
+ ? [
4528
+ ...filteredFilters,
4529
+ new DataQueryFilter()
4530
+ .setAttribute(key)
4531
+ .setCondition(DataFilterCondition.Equal)
4532
+ .setValue(value)
4533
+ .setType('DATA_ELEMENT'),
4534
+ ]
4535
+ : filteredFilters;
4536
+ }
4537
+ else {
4538
+ updatedFilters = value.trim()
4539
+ ? [
4540
+ ...filteredFilters,
4541
+ new DataQueryFilter()
4542
+ .setAttribute(key)
4543
+ .setCondition(DataFilterCondition.Equal)
4544
+ .setValue(value),
4545
+ ]
4546
+ : filteredFilters;
4547
+ }
4273
4548
  return updatedFilters;
4274
4549
  });
4275
4550
  };
4276
- const handleDateSelect = (key, selectedDate) => {
4551
+ const handleDateSelect = (key, selectedDate, type) => {
4277
4552
  const selectedDateString = selectedDate?.calendarDateString ?? '';
4278
4553
  // Updates dateStates
4279
4554
  setDateStates((prevDateStates) => ({
@@ -4283,30 +4558,51 @@ class LineListTableComponent extends ReactWrapperModule {
4283
4558
  // Updates dataQueryFilters
4284
4559
  setTempDataQueryFiltersState((prevFilters) => {
4285
4560
  const filteredFilters = (prevFilters || []).filter((f) => f.attribute !== key);
4286
- const updatedFilters = selectedDateString.trim()
4287
- ? [
4288
- ...filteredFilters,
4289
- new DataQueryFilter()
4290
- .setAttribute(key)
4291
- .setCondition(DataFilterCondition.Equal)
4292
- .setValue(selectedDateString),
4293
- ]
4294
- : filteredFilters;
4561
+ // const updatedFilters = selectedDateString.trim()
4562
+ // ? [
4563
+ // ...filteredFilters,
4564
+ // new DataQueryFilter()
4565
+ // .setAttribute(key)
4566
+ // .setCondition(DataFilterCondition.Equal)
4567
+ // .setValue(selectedDateString),
4568
+ // ]
4569
+ // : filteredFilters;
4570
+ let updatedFilters;
4571
+ if (type === 'dataElement') {
4572
+ updatedFilters = selectedDateString.trim()
4573
+ ? [
4574
+ ...filteredFilters,
4575
+ new DataQueryFilter()
4576
+ .setAttribute(key)
4577
+ .setCondition(DataFilterCondition.Equal)
4578
+ .setValue(selectedDateString)
4579
+ .setType('DATA_ELEMENT'),
4580
+ ]
4581
+ : filteredFilters;
4582
+ }
4583
+ else {
4584
+ updatedFilters = selectedDateString.trim()
4585
+ ? [
4586
+ ...filteredFilters,
4587
+ new DataQueryFilter()
4588
+ .setAttribute(key)
4589
+ .setCondition(DataFilterCondition.Equal)
4590
+ .setValue(selectedDateString),
4591
+ ]
4592
+ : filteredFilters;
4593
+ }
4295
4594
  return updatedFilters;
4296
4595
  });
4297
4596
  };
4298
- const handleSearch = () => (setDataQueryFiltersState(tempDataQueryFiltersState),
4299
- setStartDateState(tempStartDateState),
4300
- setEndDateState(tempEndDateState),
4301
- setOrgUnitState(tempOrgUnitState));
4597
+ const handleAdditionalFilters = () => setDataQueryFiltersState(tempDataQueryFiltersState);
4598
+ const handleStartDateFilter = () => setStartDateState(tempStartDateState);
4599
+ const handleEndDateFilter = () => setEndDateState(tempEndDateState);
4600
+ const handleOrgUnitFilter = () => setOrgUnitState(tempOrgUnitState);
4302
4601
  function getTextColorFromBackGround(hex) {
4303
- // Removes the hash if present
4304
4602
  hex = hex.replace('#', '');
4305
- // Converts to RGB
4306
4603
  const r = parseInt(hex.substr(0, 2), 16);
4307
4604
  const g = parseInt(hex.substr(2, 2), 16);
4308
4605
  const b = parseInt(hex.substr(4, 2), 16);
4309
- // YIQ formula to calculate brightness
4310
4606
  const yiq = (r * 299 + g * 587 + b * 114) / 1000;
4311
4607
  // Returns black for light backgrounds, white for dark backgrounds
4312
4608
  return yiq >= 128 ? colors$1.grey700 : '#FFFFFF';
@@ -4331,8 +4627,8 @@ class LineListTableComponent extends ReactWrapperModule {
4331
4627
  React__default.createElement(MenuItem$1, { label: "Download Csv", onClick: handleCsvDownload }),
4332
4628
  React__default.createElement(MenuItem$1, { label: "Download Excel", onClick: handleExcelDownload })), value: "Download" }, "Download"))),
4333
4629
  orgUnitModalVisible && (React__default.createElement(OrgUnitSelector, { hide: hide, setHide: setHide, selectedOrgUnit: selectedOrgUnit, setSelectedOrgUnit: setSelectedOrgUnit, setOrgUnitState: setOrgUnitState, setTempOrgUnitState: setTempOrgUnitState, tempOrgUnitState: tempOrgUnitState })),
4334
- this.showFilters && (React__default.createElement(FilterToolbar, { orgUnitLabel: orgUnitLabel, selectedOrgUnit: selectedOrgUnit, setSelectedOrgUnit: setSelectedOrgUnit, setOrgUnitState: setOrgUnitState, defaultOrgUnit: defaultOrgUnit, setHide: setHide, startDateState: startDateState, setStartDateState: setStartDateState, endDateState: endDateState, setEndDateState: setEndDateState, visibleFilters: visibleFilters, dateStates: dateStates, inputValues: inputValues, setInputValues: setInputValues, handleInputChange: handleInputChange, handleInputChangeForSelectField: handleInputChangeForSelectField, handleDateSelect: handleDateSelect, prevValue: prevValue, setPrevValue: setPrevValue, showAllFilters: showAllFilters, setShowAllFilters: setShowAllFilters, handleSearch: handleSearch, setTempStartDateState: setTempStartDateState, setTempEndDateState: setTempEndDateState, setTempOrgUnitState: setTempOrgUnitState, tempStartDateState: tempStartDateState, tempEndDateState: tempEndDateState, tempOrgUnitState: tempOrgUnitState, dataQueryFiltersState: dataQueryFiltersState, setDataQueryFiltersState: setDataQueryFiltersState, SetOrgUnitModalVisible: setOrgUnitModalVisible, showEnrollmentDates: this.showEnrollmentDates })),
4335
- React__default.createElement(LineListTable, { columns: columns, data: data, pager: pager, setPager: setPager, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: this.actionOptions, actionOptionOrientation: this.actionOptionOrientation, actionSelected: this.actionSelected, selectable: selectable, rowsSelected: this.rowsSelected, showActionButtons: showActionButtons })))));
4630
+ this.showFilters && (React__default.createElement(FilterToolbar, { orgUnitLabel: orgUnitLabel, selectedOrgUnit: selectedOrgUnit, setSelectedOrgUnit: setSelectedOrgUnit, setOrgUnitState: setOrgUnitState, defaultOrgUnit: defaultOrgUnit, setHide: setHide, startDateState: startDateState, setStartDateState: setStartDateState, endDateState: endDateState, setEndDateState: setEndDateState, visibleFilters: visibleFilters, dateStates: dateStates, inputValues: inputValues, setInputValues: setInputValues, handleInputChange: handleInputChange, handleInputChangeForSelectField: handleInputChangeForSelectField, handleDateSelect: handleDateSelect, showAllFilters: showAllFilters, setShowAllFilters: setShowAllFilters, setTempStartDateState: setTempStartDateState, setTempEndDateState: setTempEndDateState, setTempOrgUnitState: setTempOrgUnitState, tempStartDateState: tempStartDateState, tempEndDateState: tempEndDateState, tempOrgUnitState: tempOrgUnitState, dataQueryFiltersState: dataQueryFiltersState, setDataQueryFiltersState: setDataQueryFiltersState, SetOrgUnitModalVisible: setOrgUnitModalVisible, showEnrollmentDates: this.showEnrollmentDates, handleAdditionalFilters: handleAdditionalFilters, handleStartDateFilter: handleStartDateFilter, handleEndDateFilter: handleEndDateFilter, handleOrgUnitFilter: handleOrgUnitFilter, setDateStates: setDateStates, prevInputValues: prevInputValues, setPrevInputValues: setPrevInputValues, setTempDataQueryFiltersState: setTempDataQueryFiltersState, prevDateStates: prevDateStates, setPrevDateStates: setPrevDateStates, prevSelectedOrgUnit: prevSelectedOrgUnit, setPrevSelectedOrgUnit: setPrevSelectedOrgUnit })),
4631
+ React__default.createElement(LineListTable, { columns: columns, data: data, pager: pager, setPager: setPager, getTextColorFromBackGround: getTextColorFromBackGround, actionOptions: this.actionOptions, actionOptionOrientation: this.actionOptionOrientation, actionSelected: this.actionSelected, selectable: selectable, rowsSelected: this.rowsSelected, showActionButtons: showActionButtons, error: error })))));
4336
4632
  };
4337
4633
  }
4338
4634
  ngOnChanges(changes) {
@@ -4381,7 +4677,7 @@ class LineListTableComponent extends ReactWrapperModule {
4381
4677
  this.render();
4382
4678
  }
4383
4679
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: LineListTableComponent, isStandalone: false, selector: "ng-dhis2-ui-line-list", inputs: { triggerToken: "triggerToken", programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", actionOptionOrientation: "actionOptionOrientation", attributeFilters: "attributeFilters", useOuModeWithOlderDHIS2Instance: "useOuModeWithOlderDHIS2Instance", startDate: "startDate", endDate: "endDate", dataQueryFilters: "dataQueryFilters", ouMode: "ouMode", isButtonLoading: "isButtonLoading", buttonFilter: "buttonFilter", filterRootOrgUnit: "filterRootOrgUnit", showFilters: "showFilters", isOptionSetNameVisible: "isOptionSetNameVisible", allowRowsSelection: "allowRowsSelection", enrollmentStatus: "enrollmentStatus", filterableColumnIds: "filterableColumnIds", triggerRefetch: "triggerRefetch", eventStatus: "eventStatus", showActionButtons: "showActionButtons", showEnrollmentDates: "showEnrollmentDates", showDownloadButton: "showDownloadButton" }, outputs: { actionSelected: "actionSelected", rowsSelected: "rowsSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@charset \"UTF-8\";::ng-deep .custom-input{display:flex!important;gap:4px!important;align-items:center!important;border:1px solid #9fadba!important;border-radius:4px!important;margin:0;padding:0 0 0 8px;background-color:#fff!important}::ng-deep .custom-input div{margin:0!important}::ng-deep .custom-input label{font-size:12px;padding-right:0}::ng-deep .custom-input input{border:none!important;font-size:12px!important;display:flex;align-items:center;padding-left:4px;height:40px;outline:none!important;box-shadow:none!important}::ng-deep .custom-input input:focus{border:none!important;box-shadow:none!important}::ng-deep .custom-input [data-test=calendar-clear-button]{background-color:#f2f2f2!important;color:#870808!important;border-radius:6px!important;padding:4px 10px!important;font-size:0!important}::ng-deep .custom-input [data-test=calendar-clear-button]:before{content:\"\\2715\";font-size:14px;color:#870808}::ng-deep .custom-input [data-test=calendar-clear-button]:hover{background-color:#ddd}::ng-deep .calendar-input-wrapper{position:relative}::ng-deep .calendar-input-wrapper .custom-input{position:relative;width:100%;display:flex;align-items:center}::ng-deep .calendar-input-wrapper [data-test=calendar-clear-button]{right:8px;bottom:14px;margin:auto;display:flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:0!important;background-color:#a0adba!important;border-radius:50%;padding:2px;cursor:pointer}::ng-deep .calendar-input-wrapper [data-test=calendar-clear-button]:before{content:\"\\2715\";font-size:10px;color:#f0f0f0}::ng-deep .calendar-input-wrapper input{padding-right:40px!important;height:40px;line-height:40px;box-sizing:border-box}::ng-deep .custom-input label{color:gray!important;opacity:1}::ng-deep .table-top-toolbar{background-color:var(--colors-grey100)!important;color:var(--colors-grey900)!important}::ng-deep .custom-select-input{display:flex!important;gap:4px!important;align-items:center!important;border:1px solid #9fadba!important;border-radius:4px!important;margin:0;padding:0 0 0 8px;background-color:#fff!important}::ng-deep .custom-select-input div{margin:0!important}::ng-deep .custom-select-input [data-test=dhis2-uiwidgets-singleselectfield-label]{font-size:12px;color:gray!important}::ng-deep .custom-select-input [data-test=dhis2-uicore-select-input]{border:none!important;font-size:12px!important;display:flex;align-items:center;padding-left:4px;height:40px;outline:none!important;box-shadow:none!important}::ng-deep .custom-select-input [data-test=dhis2-uicore-select-input]:focus-within{box-shadow:none!important}::ng-deep .custom-select-input input:focus{border:none!important;box-shadow:none!important}\n"] }); }
4680
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: LineListTableComponent, isStandalone: false, selector: "ng-dhis2-ui-line-list", inputs: { triggerToken: "triggerToken", programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", actionOptionOrientation: "actionOptionOrientation", attributeFilters: "attributeFilters", useOuModeWithOlderDHIS2Instance: "useOuModeWithOlderDHIS2Instance", startDate: "startDate", endDate: "endDate", dataQueryFilters: "dataQueryFilters", ouMode: "ouMode", isButtonLoading: "isButtonLoading", buttonFilter: "buttonFilter", filterRootOrgUnit: "filterRootOrgUnit", showFilters: "showFilters", isOptionSetNameVisible: "isOptionSetNameVisible", allowRowsSelection: "allowRowsSelection", enrollmentStatus: "enrollmentStatus", filterableColumnIds: "filterableColumnIds", triggerRefetch: "triggerRefetch", eventStatus: "eventStatus", showActionButtons: "showActionButtons", showEnrollmentDates: "showEnrollmentDates", showDownloadButton: "showDownloadButton", searcheableDataElements: "searcheableDataElements" }, outputs: { actionSelected: "actionSelected", rowsSelected: "rowsSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["@charset \"UTF-8\";::ng-deep .custom-input{display:flex!important;gap:4px!important;align-items:center!important;border:1px solid #9fadba!important;border-radius:4px!important;margin:0;padding:0 0 0 8px;background-color:#fff!important}::ng-deep .custom-input div{margin:0!important}::ng-deep .custom-input label{font-size:12px;padding-right:0}::ng-deep .custom-input input{border:none!important;font-size:12px!important;display:flex;align-items:center;padding-left:4px;height:40px;outline:none!important;box-shadow:none!important}::ng-deep .custom-input input:focus{border:none!important;box-shadow:none!important}::ng-deep .custom-input [data-test=calendar-clear-button]{background-color:#f2f2f2!important;color:#870808!important;border-radius:6px!important;padding:4px 10px!important;font-size:0!important}::ng-deep .custom-input [data-test=calendar-clear-button]:before{content:\"\\2715\";font-size:14px;color:#870808}::ng-deep .custom-input [data-test=calendar-clear-button]:hover{background-color:#ddd}::ng-deep .calendar-input-wrapper{position:relative}::ng-deep .calendar-input-wrapper .custom-input{position:relative;width:100%;display:flex;align-items:center}::ng-deep .calendar-input-wrapper [data-test=calendar-clear-button]{right:8px;bottom:14px;margin:auto;display:flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:0!important;background-color:#a0adba!important;border-radius:50%;padding:2px;cursor:pointer}::ng-deep .calendar-input-wrapper [data-test=calendar-clear-button]:before{content:\"\\2715\";font-size:10px;color:#f0f0f0}::ng-deep .calendar-input-wrapper input{padding-right:40px!important;height:40px;line-height:40px;box-sizing:border-box}::ng-deep .custom-input label{color:gray!important;opacity:1}::ng-deep .table-top-toolbar{background-color:var(--colors-grey100)!important;color:var(--colors-grey900)!important}::ng-deep .custom-select-input{display:flex!important;gap:4px!important;align-items:center!important;border:1px solid #9fadba!important;border-radius:4px!important;margin:0;padding:0 0 0 8px;background-color:#fff!important}::ng-deep .custom-select-input div{margin:0!important}::ng-deep .custom-select-input [data-test=dhis2-uiwidgets-singleselectfield-label]{font-size:12px;color:gray!important}::ng-deep .custom-select-input [data-test=dhis2-uicore-select-input]{border:none!important;font-size:12px!important;display:flex;align-items:center;padding-left:4px;height:40px;outline:none!important;box-shadow:none!important}::ng-deep .custom-select-input [data-test=dhis2-uicore-select-input]:focus-within{box-shadow:none!important}::ng-deep .custom-select-input input:focus{border:none!important;box-shadow:none!important}\n"] }); }
4385
4681
  }
4386
4682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, decorators: [{
4387
4683
  type: Component,
@@ -4440,6 +4736,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
4440
4736
  type: Input
4441
4737
  }], showDownloadButton: [{
4442
4738
  type: Input
4739
+ }], searcheableDataElements: [{
4740
+ type: Input
4443
4741
  }] } });
4444
4742
 
4445
4743
  class LineListModule {
@@ -6202,7 +6500,11 @@ class BaseFormFieldComponent extends ReactWrapperModule {
6202
6500
  setTouched(true);
6203
6501
  };
6204
6502
  const checkValueUniqueness = async () => {
6205
- if (this.field().unique || (this.field().extension?.isDataElementUnique ?? false) && value && value.length > 0 && touched) {
6503
+ if (this.field().unique ||
6504
+ ((this.field().extension?.isDataElementUnique ?? false) &&
6505
+ value &&
6506
+ value.length > 0 &&
6507
+ touched)) {
6206
6508
  // if (this.field().unique && value && value.length > 0 && touched) {
6207
6509
  setCheckingUniqueness(true);
6208
6510
  setRecordExistError(undefined);
@@ -6266,6 +6568,13 @@ class BaseFormFieldComponent extends ReactWrapperModule {
6266
6568
  }, onBlur: () => {
6267
6569
  checkValueUniqueness();
6268
6570
  }, selected: arrayValue }, (this.field().options || []).map((option) => (React__default.createElement(MultiSelectOption, { key: option.key, label: option.label, value: option.value })))));
6571
+ case 'date':
6572
+ case 'date-time':
6573
+ return (React__default.createElement(InputField$1, { error: hasError, validationText: validationError, type: this.field().type, inputWidth: 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) => {
6574
+ onValueChange(event.value);
6575
+ }, onBlur: () => {
6576
+ checkValueUniqueness();
6577
+ } }));
6269
6578
  case 'file':
6270
6579
  return (React__default.createElement(React__default.Fragment, null,
6271
6580
  React__default.createElement(FileUploadField, { label: this.label(), id: this.field().id, hasError: hasError, required: this.field().required, validationText: validationError, performUpload: true, uploadUrl: 'fileResources', onUploadSuccess: (fileId) => {