@iapps/ng-dhis2-ui 1.1.6 → 1.1.8

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, 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, Layer as Layer$1, Popper, FlyoutMenu, MenuItem as MenuItem$1, IconMore24, CircularLoader as CircularLoader$1, DataTable, TableHead, DataTableRow, DataTableColumnHeader, TableBody, DataTableCell, TableFoot, Pagination, FileInputField, FileListItem, 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, 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, Layer as Layer$1, Popper, FlyoutMenu, MenuItem as MenuItem$1, IconMore24, CircularLoader as CircularLoader$1, DataTable, TableHead, DataTableRow, DataTableColumnHeader, TableBody, DataTableCell, TableFoot, Pagination, FileInputField, FileListItem, MultiSelectField, TextAreaField } from '@dhis2/ui';
29
29
  import { getNowInCalendar, generateFixedPeriods } from '@dhis2/multi-calendar-dates';
30
30
  import { isObject, isString, sortBy, isArray, find, camelCase, flatten, head, isEmpty } from 'lodash';
31
31
  import cx from 'classnames';
@@ -2661,7 +2661,7 @@ const OrgUnitDimension = ({ roots, selected, onSelect, hideGroupSelect, hideLeve
2661
2661
  React__default.createElement("div", { className: cx('orgUnitTreeWrapper', {
2662
2662
  disabled: selectedItems.some((item) => DYNAMIC_ORG_UNITS.includes(item.id)),
2663
2663
  }) },
2664
- React__default.createElement(OrganisationUnitTree, { roots: roots, initiallyExpanded: [
2664
+ React__default.createElement(OrganisationUnitTree, { roots: roots, singleSelection: allowSingleSelection, initiallyExpanded: [
2665
2665
  ...(roots.length === 1 ? [`/${roots[0]}`] : []),
2666
2666
  ...selectedItems
2667
2667
  .filter((item) => !DYNAMIC_ORG_UNITS.includes(item.id) &&
@@ -3778,6 +3778,7 @@ class DateRangeValue {
3778
3778
  var FieldType;
3779
3779
  (function (FieldType) {
3780
3780
  FieldType["TEXT"] = "TEXT";
3781
+ FieldType["MULTI_TEXT"] = "MULTI_TEXT";
3781
3782
  FieldType["TRUE_ONLY"] = "TRUE_ONLY";
3782
3783
  FieldType["LONG_TEXT"] = "LONG_TEXT";
3783
3784
  FieldType["BOOLEAN"] = "BOOLEAN";
@@ -3937,11 +3938,16 @@ class FieldUtil {
3937
3938
  class FieldControlTypeUtil {
3938
3939
  static getFieldControlType(valueType, hasOptions) {
3939
3940
  if (hasOptions) {
3941
+ if (valueType === FieldType.MULTI_TEXT) {
3942
+ return 'multi-dropdown';
3943
+ }
3940
3944
  return 'dropdown';
3941
3945
  }
3942
3946
  switch (valueType) {
3943
3947
  case FieldType.TEXT:
3944
3948
  return 'textbox';
3949
+ case FieldType.MULTI_TEXT:
3950
+ return 'multi-dropdown';
3945
3951
  case FieldType.BOOLEAN:
3946
3952
  return 'dropdown';
3947
3953
  case FieldType.LONG_TEXT:
@@ -4169,7 +4175,9 @@ class FormFieldGroup {
4169
4175
  type: FieldUtil.getFieldType(fieldMetaData['valueType']),
4170
4176
  dependentField,
4171
4177
  options,
4172
- disabled: field.disabled ?? fieldMetaData['disabled'],
4178
+ disabled: field.disabled ??
4179
+ fieldMetaData['disabled'] ??
4180
+ fieldMetaData['generated'],
4173
4181
  min: field.min ?? fieldMetaData['min'],
4174
4182
  max: field.max ?? fieldMetaData['max'],
4175
4183
  order: field.order ??
@@ -4331,7 +4339,8 @@ class FormMetaData {
4331
4339
  #getSectionFromPrograms(programs) {
4332
4340
  const sections = flatten(programs.map((program) => {
4333
4341
  return [
4334
- this.#getReportingDetailsSection(program),
4342
+ this.#getRegisteringUnitSection(program),
4343
+ this.#getReportingDateSection(program),
4335
4344
  new FormMetadataSection({
4336
4345
  section: {
4337
4346
  id: 'registration',
@@ -4406,25 +4415,44 @@ class FormMetaData {
4406
4415
  }
4407
4416
  return sections;
4408
4417
  }
4409
- #getReportingDetailsSection(program) {
4418
+ #getRegisteringUnitSection(program) {
4410
4419
  return new FormMetadataSection({
4411
4420
  section: {
4412
- id: 'reporting_details',
4413
- name: 'Reporting details',
4421
+ id: 'registering_unit_details',
4422
+ name: 'Registering unit details',
4414
4423
  fieldGroups: [
4415
4424
  {
4416
- id: 'reporting_details',
4425
+ id: 'registering_unit_details',
4417
4426
  sortOrder: 1,
4418
- isFormHorizontal: true,
4427
+ isFormHorizontal: false,
4419
4428
  fields: [
4420
4429
  new FormField({
4421
4430
  id: 'orgUnit',
4422
4431
  key: 'orgUnit',
4423
- label: 'Organisation unit',
4432
+ label: program.orgUnitLabel || 'Registering unit',
4424
4433
  code: 'orgUnit',
4425
4434
  required: true,
4426
4435
  controlType: 'org-unit',
4427
4436
  }),
4437
+ ],
4438
+ },
4439
+ ],
4440
+ },
4441
+ program,
4442
+ locale: this.params.locale,
4443
+ }).toJson();
4444
+ }
4445
+ #getReportingDateSection(program) {
4446
+ return new FormMetadataSection({
4447
+ section: {
4448
+ id: 'reporting_dates',
4449
+ name: 'Reporting dates',
4450
+ fieldGroups: [
4451
+ {
4452
+ id: 'reporting_dates',
4453
+ sortOrder: 1,
4454
+ isFormHorizontal: false,
4455
+ fields: [
4428
4456
  new DateField({
4429
4457
  id: 'enrollmentDate',
4430
4458
  label: program.enrollmentDateLabel || 'Enrollment date',
@@ -4512,8 +4540,8 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4512
4540
  this.value = model();
4513
4541
  this.value$ = toObservable(this.value);
4514
4542
  this.FieldOrgUnitSelector = (props) => {
4515
- const { onSelectOrgUnit, onCancelOrgUnit } = props;
4516
- const [selected, setSelected] = useState([]);
4543
+ const { onSelectOrgUnit, selectedOrgUnits } = props;
4544
+ const [selected, setSelected] = useState(selectedOrgUnits);
4517
4545
  const [rootOrgUnits, setRootOrgUnits] = useState();
4518
4546
  const [config, setConfig] = useState();
4519
4547
  useEffect(() => {
@@ -4526,19 +4554,14 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4526
4554
  });
4527
4555
  }, []);
4528
4556
  return config ? (React__default.createElement(Provider, { config: config, plugin: false, parentAlertsAdd: undefined, showAlertsInPlugin: false }, React__default.createElement(Modal$1, { position: "middle", large: true },
4529
- React__default.createElement(ModalTitle$1, null, "Organisation unit"),
4557
+ React__default.createElement(ModalTitle$1, null,
4558
+ "Select ",
4559
+ this.field().label),
4530
4560
  React__default.createElement(ModalContent$1, null,
4531
- React__default.createElement(OrgUnitDimension, { selected: selected, hideGroupSelect: this.orgUnitSelectionConfig.hideGroupSelect, hideLevelSelect: this.orgUnitSelectionConfig.hideLevelSelect, hideUserOrgUnits: this.orgUnitSelectionConfig.hideUserOrgUnits, onSelect: (selectionEvent) => {
4561
+ React__default.createElement(OrgUnitDimension, { selected: selected, allowSingleSelection: true, hideGroupSelect: this.orgUnitSelectionConfig.hideGroupSelect, hideLevelSelect: this.orgUnitSelectionConfig.hideLevelSelect, hideUserOrgUnits: this.orgUnitSelectionConfig.hideUserOrgUnits, onSelect: (selectionEvent) => {
4532
4562
  setSelected(selectionEvent.items);
4533
- }, orgUnitGroupPromise: this.getOrgUnitGroups(), orgUnitLevelPromise: this.getOrgUnitLevels(), roots: rootOrgUnits })),
4534
- React__default.createElement(ModalActions$1, null,
4535
- React__default.createElement(ButtonStrip$1, { end: true },
4536
- React__default.createElement(Button$1, { onClick: () => {
4537
- onCancelOrgUnit();
4538
- } }, "Cancel"),
4539
- React__default.createElement(Button$1, { primary: true, disabled: selected.length === 0, onClick: () => {
4540
- onSelectOrgUnit(selected);
4541
- } }, "Confirm")))))) : (React__default.createElement(CircularLoader$1, { small: true }));
4563
+ onSelectOrgUnit(selectionEvent.items);
4564
+ }, orgUnitGroupPromise: this.getOrgUnitGroups(), orgUnitLevelPromise: this.getOrgUnitLevels(), roots: rootOrgUnits }))))) : (React__default.createElement(CircularLoader$1, { small: true }));
4542
4565
  };
4543
4566
  this.showOrgUnitTree = signal(false);
4544
4567
  this.orgUnitSelectionConfig = {
@@ -4583,6 +4606,12 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4583
4606
  const [touched, setTouched] = useState(false);
4584
4607
  const [showOrgUnit, setShowOrgUnit] = useState(false);
4585
4608
  const onChange = (payload) => setSelected(payload.selected);
4609
+ const arrayValue = useMemo(() => {
4610
+ if (value && value.length > 0) {
4611
+ return value.split(',');
4612
+ }
4613
+ return [];
4614
+ }, [value]);
4586
4615
  const hasError = useMemo(() => {
4587
4616
  return (touched &&
4588
4617
  (this.form().get(this.field().id) ||
@@ -4647,10 +4676,7 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4647
4676
  });
4648
4677
  setTouched(true);
4649
4678
  } }),
4650
- showOrgUnit && (React__default.createElement(this.FieldOrgUnitSelector, { onCancelOrgUnit: () => {
4651
- setShowOrgUnit(false);
4652
- setTouched(true);
4653
- }, onSelectOrgUnit: (selectedOrgUnits) => {
4679
+ showOrgUnit && (React__default.createElement(this.FieldOrgUnitSelector, { selectedOrgUnits: [], onSelectOrgUnit: (selectedOrgUnits) => {
4654
4680
  if ((selectedOrgUnits || [])[0]) {
4655
4681
  const selectedOrgUnit = selectedOrgUnits[0];
4656
4682
  setDisplayValue(selectedOrgUnit.name);
@@ -4710,6 +4736,20 @@ class BaseFormFieldComponent extends ReactWrapperModule {
4710
4736
  setValue(event.selected);
4711
4737
  setTouched(true);
4712
4738
  } }, (this.field().options || []).map((option) => (React__default.createElement(SingleSelectOption, { key: option.key, label: option.label, value: option.value })))));
4739
+ case 'multi-dropdown':
4740
+ 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) => {
4741
+ const selectedValue = (event.selected || []).join(',');
4742
+ this.ngZone.run(() => {
4743
+ (this.form().get(this.field().id) ||
4744
+ this.form().get(this.field().key))?.setValue(selectedValue);
4745
+ this.update.emit({
4746
+ form: this.form(),
4747
+ value: selectedValue,
4748
+ });
4749
+ });
4750
+ setValue(selectedValue);
4751
+ setTouched(true);
4752
+ }, selected: arrayValue }, (this.field().options || []).map((option) => (React__default.createElement(MultiSelectOption, { key: option.key, label: option.label, value: option.value })))));
4713
4753
  case 'file':
4714
4754
  return (React__default.createElement(FileInputField, { accept: "*", buttonLabel: "Upload a file", label: this.label(), name: this.field().id, files: this.uploadedFiles, onChange: (event) => {
4715
4755
  this.uploadedFiles.push((event?.files || [])[0]);
@@ -5363,105 +5403,163 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5363
5403
  this.attributeFilters = [];
5364
5404
  this.dataElementFilters = [];
5365
5405
  this.actionSelected = new EventEmitter();
5406
+ this.httpClient = inject(NgxDhis2HttpClientService);
5407
+ this.ngZone = inject(NgZone);
5408
+ this.FieldOrgUnitSelector = (props) => {
5409
+ const { onSelectOrgUnit, onCancelOrgUnit } = props;
5410
+ const [selected, setSelected] = useState([]);
5411
+ const [rootOrgUnits, setRootOrgUnits] = useState();
5412
+ const [config, setConfig] = useState();
5413
+ useEffect(() => {
5414
+ zip(this.getAppConfig(), this.getRootOrgUnits()).subscribe({
5415
+ next: ([appConfig, rootOrgUnits]) => {
5416
+ setConfig(appConfig);
5417
+ setRootOrgUnits(rootOrgUnits);
5418
+ },
5419
+ error: (error) => console.error(error),
5420
+ });
5421
+ }, []);
5422
+ return config ? (React__default.createElement(Provider, { config: config, plugin: false, parentAlertsAdd: undefined, showAlertsInPlugin: false }, React__default.createElement(Modal$1, { position: "middle", large: true },
5423
+ React__default.createElement(ModalTitle$1, null, "Organisation unit"),
5424
+ React__default.createElement(ModalContent$1, null,
5425
+ React__default.createElement(OrgUnitDimension, { selected: selected, hideGroupSelect: this.orgUnitSelectionConfig.hideGroupSelect, hideLevelSelect: this.orgUnitSelectionConfig.hideLevelSelect, hideUserOrgUnits: this.orgUnitSelectionConfig.hideUserOrgUnits, onSelect: (selectionEvent) => {
5426
+ setSelected(selectionEvent.items);
5427
+ }, orgUnitGroupPromise: this.getOrgUnitGroups(), orgUnitLevelPromise: this.getOrgUnitLevels(), roots: rootOrgUnits })),
5428
+ React__default.createElement(ModalActions$1, null,
5429
+ React__default.createElement(ButtonStrip$1, { end: true },
5430
+ React__default.createElement(Button$1, { onClick: () => {
5431
+ onCancelOrgUnit();
5432
+ } }, "Cancel"),
5433
+ React__default.createElement(Button$1, { primary: true, disabled: selected.length === 0, onClick: () => {
5434
+ onSelectOrgUnit(selected);
5435
+ } }, "Confirm")))))) : (React__default.createElement(CircularLoader$1, { small: true }));
5436
+ };
5437
+ this.showOrgUnitTree = signal(false);
5438
+ this.orgUnitSelectionConfig = {
5439
+ hideGroupSelect: true,
5440
+ hideLevelSelect: true,
5441
+ hideUserOrgUnits: true,
5442
+ allowSingleSelection: true,
5443
+ usageType: 'DATA_ENTRY',
5444
+ };
5445
+ this.selectedOrgUnit = signal(null);
5446
+ this.selectedOrgUnit$ = toObservable(this.selectedOrgUnit);
5366
5447
  this.SelectionFiltersUI = () => {
5367
5448
  const [filters, setFilters] = useState({
5368
5449
  attributeFilters: this.attributeFilters || [],
5369
5450
  dataElementFilters: this.dataElementFilters || [],
5451
+ organizationUnitId: '',
5452
+ startDate: this.startDate || '',
5453
+ endDate: this.endDate || '',
5370
5454
  });
5455
+ const [displayValue, setDisplayValue] = useState(null);
5456
+ const [selected, setSelected] = useState();
5457
+ const [selectedOrganisationUnit, setSelectedOrganisationUnit] = useState();
5458
+ const [touched, setTouched] = useState(false);
5459
+ const [showOrgUnit, setShowOrgUnit] = useState(false);
5460
+ const [value, setValue] = useState(null);
5371
5461
  useEffect(() => {
5372
5462
  setFilters({
5373
5463
  attributeFilters: this.attributeFilters,
5374
5464
  dataElementFilters: this.dataElementFilters,
5465
+ organizationUnitId: '',
5466
+ startDate: this.startDate || '',
5467
+ endDate: this.endDate || '',
5375
5468
  });
5376
- }, [this.attributeFilters, this.dataElementFilters]);
5469
+ }, [
5470
+ this.attributeFilters,
5471
+ this.dataElementFilters,
5472
+ this.startDate,
5473
+ this.endDate,
5474
+ ]);
5377
5475
  const handleAttributeChange = (index, selectedValue) => {
5378
5476
  setFilters((prevFilters) => {
5379
5477
  const updatedFilters = [...prevFilters.attributeFilters];
5380
- updatedFilters[index] = { ...updatedFilters[index], value: selectedValue };
5478
+ updatedFilters[index] = {
5479
+ ...updatedFilters[index],
5480
+ value: selectedValue,
5481
+ };
5381
5482
  return { ...prevFilters, attributeFilters: updatedFilters };
5382
5483
  });
5383
5484
  };
5384
5485
  const handleDataElementChange = (index, selectedValue) => {
5385
5486
  setFilters((prevFilters) => {
5386
5487
  const updatedFilters = [...prevFilters.dataElementFilters];
5387
- updatedFilters[index] = { ...updatedFilters[index], value: selectedValue };
5488
+ updatedFilters[index] = {
5489
+ ...updatedFilters[index],
5490
+ value: selectedValue,
5491
+ };
5388
5492
  return { ...prevFilters, dataElementFilters: updatedFilters };
5389
5493
  });
5390
5494
  };
5391
5495
  const handleSearch = () => {
5392
- this.actionSelected.emit(filters);
5496
+ this.actionSelected.emit({
5497
+ ...filters,
5498
+ organizationUnit: selectedOrganisationUnit,
5499
+ organizationUnitId: selectedOrganisationUnit,
5500
+ startDate: filters.startDate,
5501
+ endDate: filters.endDate,
5502
+ });
5393
5503
  };
5394
- // Grid Column Span Logic for Attribute Filters
5395
5504
  const getAttributeColumnSpan = (index) => {
5396
5505
  const totalItems = filters.attributeFilters.length;
5397
5506
  if (totalItems <= 4) {
5398
- // If 1 to 4 items, place them in a single row (span all columns if there's only one item)
5399
5507
  if (totalItems === 1) {
5400
- return 'span 4'; // One item spans all four columns
5508
+ return 'span 4';
5401
5509
  }
5402
5510
  if (totalItems === 2) {
5403
- return 'span 2'; // Two items, each spans 2 columns
5511
+ return 'span 2';
5404
5512
  }
5405
5513
  if (totalItems === 3) {
5406
- return 'span 1'; // Three items, each spans one column
5514
+ return 'span 1';
5407
5515
  }
5408
5516
  if (totalItems === 4) {
5409
- return 'span 1'; // Four items, each spans one column
5517
+ return 'span 1';
5410
5518
  }
5411
5519
  }
5412
5520
  else {
5413
- // More than 4 items, recursively adjust the placement
5414
- const rowIndex = Math.floor(index / 2); // Calculate row by pairs
5521
+ const rowIndex = Math.floor(index / 2);
5415
5522
  if (index % 2 === 0) {
5416
- // For first item in each row, span 2 columns
5417
5523
  return 'span 2';
5418
5524
  }
5419
5525
  else if (index === totalItems - 1) {
5420
- // Last item, spans the full row (4 columns)
5421
5526
  return 'span 4';
5422
5527
  }
5423
5528
  else {
5424
- // For other items, span 2 columns
5425
5529
  return 'span 2';
5426
5530
  }
5427
5531
  }
5428
- return 'span 1'; // Default behavior
5532
+ return 'span 1';
5429
5533
  };
5430
- // Grid Column Span Logic for Data Element Filters
5431
5534
  const getDataElementColumnSpan = (index) => {
5432
5535
  const totalItems = filters.dataElementFilters.length;
5433
5536
  if (totalItems <= 4) {
5434
- // If 1 to 4 items, place them in a single row (span all columns if there's only one item)
5435
5537
  if (totalItems === 1) {
5436
- return 'span 4'; // One item spans all four columns
5538
+ return 'span 4';
5437
5539
  }
5438
5540
  if (totalItems === 2) {
5439
- return 'span 2'; // Two items, each spans 2 columns
5541
+ return 'span 2';
5440
5542
  }
5441
5543
  if (totalItems === 3) {
5442
- return 'span 1'; // Three items, each spans one column
5544
+ return 'span 1';
5443
5545
  }
5444
5546
  if (totalItems === 4) {
5445
- return 'span 1'; // Four items, each spans one column
5547
+ return 'span 1';
5446
5548
  }
5447
5549
  }
5448
5550
  else {
5449
- // More than 4 items, recursively adjust the placement
5450
- const rowIndex = Math.floor(index / 2); // Calculate row by pairs
5551
+ const rowIndex = Math.floor(index / 2);
5451
5552
  if (index % 2 === 0) {
5452
- // For first item in each row, span 2 columns
5453
5553
  return 'span 2';
5454
5554
  }
5455
5555
  else if (index === totalItems - 1) {
5456
- // Last item, spans the full row (4 columns)
5457
5556
  return 'span 4';
5458
5557
  }
5459
5558
  else {
5460
- // For other items, span 2 columns
5461
5559
  return 'span 2';
5462
5560
  }
5463
5561
  }
5464
- return 'span 1'; // Default behavior
5562
+ return 'span 1';
5465
5563
  };
5466
5564
  return (React__default.createElement("div", { style: {
5467
5565
  fontFamily: 'Arial, sans-serif',
@@ -5470,6 +5568,45 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5470
5568
  borderRadius: '8px',
5471
5569
  boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',
5472
5570
  } },
5571
+ React__default.createElement("div", { style: {
5572
+ display: 'grid',
5573
+ gridTemplateColumns: 'repeat(3, 1fr)',
5574
+ gap: '16px',
5575
+ marginBottom: '16px',
5576
+ } },
5577
+ React__default.createElement(React__default.Fragment, null,
5578
+ React__default.createElement(InputField$1, { value: displayValue, label: "Organization Unit", readOnly: false, onFocus: () => {
5579
+ setShowOrgUnit(true);
5580
+ }, onBlur: () => {
5581
+ this.ngZone.run(() => {
5582
+ console.log('THIS IS IT::: ');
5583
+ });
5584
+ setTouched(true);
5585
+ } }),
5586
+ showOrgUnit && (React__default.createElement(this.FieldOrgUnitSelector, { onCancelOrgUnit: () => {
5587
+ setShowOrgUnit(false);
5588
+ setTouched(true);
5589
+ }, onSelectOrgUnit: (selectedOrgUnits) => {
5590
+ if ((selectedOrgUnits || [])[0]) {
5591
+ const selectedOrgUnit = selectedOrgUnits[0];
5592
+ setDisplayValue(selectedOrgUnit.name);
5593
+ setSelected(selectedOrgUnit.id);
5594
+ setSelectedOrganisationUnit(selectedOrgUnit.id);
5595
+ setValue(selectedOrgUnit.id);
5596
+ setShowOrgUnit(false);
5597
+ setTouched(true);
5598
+ // this.ngZone.run(() => {
5599
+ // setDisplayValue(selectedOrgUnit.name);
5600
+ // setSelected(selectedOrgUnit.id)
5601
+ // setSelectedOrganisationUnit(selectedOrgUnit.id)
5602
+ // setValue(selectedOrgUnit.id);
5603
+ // setShowOrgUnit(false);
5604
+ // setTouched(true);
5605
+ // });
5606
+ }
5607
+ } }))),
5608
+ React__default.createElement(InputField$1, { className: "input-field", label: "Start Date", type: "date", value: filters.startDate, onChange: (event) => setFilters({ ...filters, startDate: event.value }) }),
5609
+ React__default.createElement(InputField$1, { className: "input-field", label: "End Date", type: "date", value: filters.endDate, onChange: (event) => setFilters({ ...filters, endDate: event.value }) })),
5473
5610
  React__default.createElement("div", { style: {
5474
5611
  display: 'grid',
5475
5612
  gridTemplateColumns: 'repeat(4, 1fr)',
@@ -5484,6 +5621,49 @@ class SelectionFiltersComponent extends ReactWrapperModule {
5484
5621
  React__default.createElement(Button$1, { onClick: handleSearch }, "Search"))));
5485
5622
  };
5486
5623
  }
5624
+ getAppConfig() {
5625
+ return this.httpClient.systemInfo().pipe(map((response) => {
5626
+ const systemInfo = response;
5627
+ return {
5628
+ baseUrl: (document?.location?.host?.includes('localhost')
5629
+ ? `${document.location.protocol}//${document.location.host}`
5630
+ : systemInfo['contextPath']),
5631
+ apiVersion: Number(((systemInfo['version'] || '')?.split('.') || [])[1]),
5632
+ };
5633
+ }));
5634
+ }
5635
+ getRootOrgUnits() {
5636
+ const orgUnitAttribute = this.getOrgUnitAttributeByUsage(this.orgUnitSelectionConfig.usageType);
5637
+ return this.httpClient
5638
+ .me()
5639
+ .pipe(map((user) => (user ? user[orgUnitAttribute] : []).map((orgUnit) => orgUnit.id)));
5640
+ }
5641
+ getOrgUnitLevels() {
5642
+ return firstValueFrom(this.httpClient
5643
+ .get('organisationUnitLevels.json?fields=id,level,displayName,name&paging=false')
5644
+ .pipe(map((res) => res?.['organisationUnitLevels'])));
5645
+ }
5646
+ onSelectOrgUnit(selectedOrgUnits) {
5647
+ this.showOrgUnitTree.set(false);
5648
+ if ((selectedOrgUnits || [])[0]) {
5649
+ this.selectedOrgUnit.set(selectedOrgUnits[0]);
5650
+ }
5651
+ }
5652
+ getOrgUnitGroups() {
5653
+ return firstValueFrom(this.httpClient
5654
+ .get('organisationUnitGroups.json?fields=id,displayName,name&paging=false')
5655
+ .pipe(map((res) => res?.['organisationUnitGroups'])));
5656
+ }
5657
+ getOrgUnitAttributeByUsage(usageType) {
5658
+ switch (usageType) {
5659
+ case 'DATA_ENTRY':
5660
+ return 'organisationUnits';
5661
+ case 'DATA_VIEW':
5662
+ return 'dataViewOrganisationUnits';
5663
+ default:
5664
+ return 'organisationUnits';
5665
+ }
5666
+ }
5487
5667
  async ngAfterViewInit() {
5488
5668
  if (!this.elementRef)
5489
5669
  throw new Error('No element ref');
@@ -5513,14 +5693,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
5513
5693
 
5514
5694
  class SelectionFiltersUiModule {
5515
5695
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5516
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, declarations: [SelectionFiltersComponent], imports: [CommonModule, SharedDhis2UiModule, ReactWrapperModule], exports: [SelectionFiltersComponent] }); }
5517
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, imports: [CommonModule, SharedDhis2UiModule] }); }
5696
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, declarations: [SelectionFiltersComponent], imports: [CommonModule, SharedDhis2UiModule, ReactWrapperModule, OrganisationUnitSelectorModule], exports: [SelectionFiltersComponent] }); }
5697
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, imports: [CommonModule, SharedDhis2UiModule, OrganisationUnitSelectorModule] }); }
5518
5698
  }
5519
5699
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: SelectionFiltersUiModule, decorators: [{
5520
5700
  type: NgModule,
5521
5701
  args: [{
5522
5702
  declarations: [SelectionFiltersComponent],
5523
- imports: [CommonModule, SharedDhis2UiModule, ReactWrapperModule],
5703
+ imports: [CommonModule, SharedDhis2UiModule, ReactWrapperModule, OrganisationUnitSelectorModule],
5524
5704
  exports: [SelectionFiltersComponent],
5525
5705
  }]
5526
5706
  }] });