@iapps/ng-dhis2-ui 1.1.50 → 1.1.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/iapps-ng-dhis2-ui.mjs +169 -65
- package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/modules/breadcrumb/breadcrumb.module.d.ts +8 -0
- package/lib/modules/breadcrumb/components/breadcrumb-item.component.d.ts +6 -0
- package/lib/modules/breadcrumb/containers/breadcrumb.component.d.ts +12 -0
- package/lib/modules/breadcrumb/index.d.ts +3 -0
- package/lib/modules/breadcrumb/models/breadcrumb-item.model.d.ts +6 -0
- package/lib/modules/breadcrumb/models/index.d.ts +1 -0
- package/lib/modules/form/utils/field-type.util.d.ts +1 -1
- package/lib/modules/form/utils/field.util.d.ts +1 -1
- package/lib/shared/hooks/dynamic-styles.hook.d.ts +1 -1
- package/lib/shared/utils/predefinedDimensions.d.ts +6 -6
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1$1 from '@angular/common';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { NgModule, Directive, Input, ContentChild, Component, EventEmitter, Output,
|
|
4
|
+
import { NgModule, Directive, Input, ContentChild, Component, EventEmitter, Output, inject, NgZone, input, ChangeDetectionStrategy, Injectable, model, signal, computed, ViewChildren } from '@angular/core';
|
|
5
5
|
import { useDataQuery, useConfig, useAlert, clearSensitiveCaches, DataProvider, useDataEngine, Provider } from '@dhis2/app-runtime';
|
|
6
6
|
import * as i1 from '@iapps/ngx-dhis2-http-client';
|
|
7
7
|
import { NgxDhis2HttpClientService } from '@iapps/ngx-dhis2-http-client';
|
|
@@ -25,10 +25,10 @@ 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, IconFilter16, DataTable, TableHead, DataTableRow, DataTableColumnHeader, TableBody, DataTableCell, TableFoot, Pagination, Chip, FileInputField, FileListItem, MultiSelectField, TextAreaField } from '@dhis2/ui';
|
|
29
|
-
import { getNowInCalendar, generateFixedPeriods } from '@dhis2/multi-calendar-dates';
|
|
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, Layer as Layer$1, Popper, FlyoutMenu, MenuItem as MenuItem$1, IconMore24, CircularLoader as CircularLoader$1, IconFilter16, DataTable, TableHead, DataTableRow, DataTableColumnHeader, TableBody, DataTableCell, TableFoot, Pagination, Chip, FileInputField, FileListItem, MultiSelectField, TextAreaField } from '@dhis2/ui';
|
|
30
29
|
import { isObject, isString, sortBy, isArray, find, camelCase, flatten, debounce, isUndefined, head, isEmpty } from 'lodash';
|
|
31
30
|
import cx from 'classnames';
|
|
31
|
+
import { getNowInCalendar, generateFixedPeriods } from '@dhis2/multi-calendar-dates';
|
|
32
32
|
import { map as map$1, switchMap } from 'rxjs/operators';
|
|
33
33
|
import * as i2 from '@angular/forms';
|
|
34
34
|
import { Validators, UntypedFormControl, UntypedFormGroup, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -1183,6 +1183,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
1183
1183
|
// Use of this source code is governed by a BSD-style
|
|
1184
1184
|
// license that can be found in the LICENSE file.
|
|
1185
1185
|
|
|
1186
|
+
// Copyright 2025 UDSM DHIS2 Lab. All rights reserved.
|
|
1187
|
+
// Use of this source code is governed by a BSD-style
|
|
1188
|
+
// license that can be found in the LICENSE file.
|
|
1189
|
+
|
|
1190
|
+
const TRANSFER_OPTIONS_WIDTH = '420px';
|
|
1191
|
+
const TRANSFER_SELECTED_WIDTH = '298px';
|
|
1192
|
+
const TRANSFER_HEIGHT = '512px';
|
|
1193
|
+
|
|
1186
1194
|
const AssignedCategoriesIcon = () => {
|
|
1187
1195
|
return (React__default.createElement("svg", { height: "16", viewBox: "0 0 16 16", width: "16" },
|
|
1188
1196
|
React__default.createElement("g", { fill: "#212934", fillRule: "evenodd" },
|
|
@@ -1238,10 +1246,6 @@ const filterOutPredefinedDimensions = (dimensionIds) => dimensionIds.filter((dim
|
|
|
1238
1246
|
const getPredefinedDimensionProp = (dimensionId, propName) => (getPredefinedDimensions()[dimensionId] || {})[propName];
|
|
1239
1247
|
const getDimensionById = (dimensionId) => getPredefinedDimensions()[dimensionId];
|
|
1240
1248
|
|
|
1241
|
-
const TRANSFER_OPTIONS_WIDTH = '420px';
|
|
1242
|
-
const TRANSFER_SELECTED_WIDTH = '298px';
|
|
1243
|
-
const TRANSFER_HEIGHT = '512px';
|
|
1244
|
-
|
|
1245
1249
|
const formatList = (items) => {
|
|
1246
1250
|
// Wrap Intl.ListFormat in try/catch as DHIS2 locales are not always ISO 639 compliant
|
|
1247
1251
|
try {
|
|
@@ -1392,7 +1396,7 @@ const dimensionGetItems = (dimension) => dimensionIsValid(dimension, { requireIt
|
|
|
1392
1396
|
// Use of this source code is governed by a BSD-style
|
|
1393
1397
|
// license that can be found in the LICENSE file.
|
|
1394
1398
|
|
|
1395
|
-
var styles$
|
|
1399
|
+
var styles$2 = `
|
|
1396
1400
|
.filterContainer {
|
|
1397
1401
|
display: flex;
|
|
1398
1402
|
margin-bottom: ${spacers$1.dp12};
|
|
@@ -1564,55 +1568,55 @@ TransferOption.propTypes = {
|
|
|
1564
1568
|
// Use of this source code is governed by a BSD-style
|
|
1565
1569
|
// license that can be found in the LICENSE file.
|
|
1566
1570
|
|
|
1567
|
-
// Helper function to generate a unique class name
|
|
1568
1571
|
const generateClassName$2 = (base) => `${base}-${Math.random().toString(36).substr(2, 9)}`;
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
let
|
|
1572
|
+
const convertStylesToCSS$2 = (className, styles, parentSelector = '') => {
|
|
1573
|
+
let cssString = '';
|
|
1574
|
+
let mainBlock = parentSelector ? `${parentSelector} {` : `.${className} {`;
|
|
1572
1575
|
for (const key in styles) {
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1576
|
+
const value = styles[key];
|
|
1577
|
+
if (typeof value === 'object') {
|
|
1578
|
+
if (key.startsWith('@media')) {
|
|
1579
|
+
// Handle media queries
|
|
1580
|
+
cssString += `${key} { ${convertStylesToCSS$2(className, value, `.${className}`)} }`;
|
|
1581
|
+
}
|
|
1582
|
+
else if (key.startsWith('&')) {
|
|
1583
|
+
// Handle pseudo-classes and nested selectors
|
|
1584
|
+
const selector = key.replace('&', `.${className}`);
|
|
1585
|
+
cssString += convertStylesToCSS$2(className, value, selector);
|
|
1586
|
+
}
|
|
1587
|
+
else {
|
|
1588
|
+
// Handle nested elements (e.g., '& > div')
|
|
1589
|
+
cssString += convertStylesToCSS$2(className, value, `.${className} ${key}`);
|
|
1590
|
+
}
|
|
1580
1591
|
}
|
|
1581
1592
|
else {
|
|
1593
|
+
// Convert camelCase to kebab-case
|
|
1582
1594
|
const cssKey = key.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
|
|
1583
|
-
|
|
1595
|
+
mainBlock += `${cssKey}: ${value}; `;
|
|
1584
1596
|
}
|
|
1585
1597
|
}
|
|
1586
|
-
|
|
1587
|
-
return cssString;
|
|
1598
|
+
mainBlock += '}';
|
|
1599
|
+
return mainBlock + ' ' + cssString;
|
|
1588
1600
|
};
|
|
1589
|
-
// Custom hook for dynamic styles
|
|
1601
|
+
// Custom hook for dynamic styles
|
|
1590
1602
|
const useDynamicStyles$2 = (stylesObj) => {
|
|
1591
1603
|
const [classNames, setClassNames] = useState({});
|
|
1592
1604
|
useEffect(() => {
|
|
1593
|
-
const
|
|
1605
|
+
const styleElements = [];
|
|
1606
|
+
const generatedClassNames = Object.keys(stylesObj).reduce((acc, key) => {
|
|
1594
1607
|
const className = generateClassName$2(key);
|
|
1595
1608
|
const styleElement = document.createElement('style');
|
|
1596
1609
|
styleElement.innerHTML = convertStylesToCSS$2(className, stylesObj[key]);
|
|
1597
1610
|
document.head.appendChild(styleElement);
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
});
|
|
1604
|
-
setClassNames(convertedStyles.reduce((classNameEntity, convertedStyle) => {
|
|
1605
|
-
return {
|
|
1606
|
-
...classNameEntity,
|
|
1607
|
-
[convertedStyle.key]: convertedStyle.className,
|
|
1608
|
-
};
|
|
1609
|
-
}, {}));
|
|
1611
|
+
styleElements.push(styleElement);
|
|
1612
|
+
acc[key] = className;
|
|
1613
|
+
return acc;
|
|
1614
|
+
}, {});
|
|
1615
|
+
setClassNames(generatedClassNames);
|
|
1610
1616
|
return () => {
|
|
1611
|
-
|
|
1612
|
-
document.head.removeChild(convertedStyle.styleElement);
|
|
1613
|
-
});
|
|
1617
|
+
styleElements.forEach((el) => document.head.removeChild(el));
|
|
1614
1618
|
};
|
|
1615
|
-
}, []);
|
|
1619
|
+
}, [stylesObj]);
|
|
1616
1620
|
return classNames;
|
|
1617
1621
|
};
|
|
1618
1622
|
|
|
@@ -1624,6 +1628,104 @@ const useDynamicStyles$2 = (stylesObj) => {
|
|
|
1624
1628
|
// Use of this source code is governed by a BSD-style
|
|
1625
1629
|
// license that can be found in the LICENSE file.
|
|
1626
1630
|
|
|
1631
|
+
// Copyright 2025 UDSM DHIS2 Lab. All rights reserved.
|
|
1632
|
+
// Use of this source code is governed by a BSD-style
|
|
1633
|
+
// license that can be found in the LICENSE file.
|
|
1634
|
+
const styles$1 = {
|
|
1635
|
+
button: {
|
|
1636
|
+
// Reset button styles
|
|
1637
|
+
background: 'none',
|
|
1638
|
+
border: 'none',
|
|
1639
|
+
cursor: 'pointer',
|
|
1640
|
+
font: 'inherit',
|
|
1641
|
+
// Custom button styles
|
|
1642
|
+
fontSize: '14px',
|
|
1643
|
+
padding: '6px 4px',
|
|
1644
|
+
color: colors$1.grey800,
|
|
1645
|
+
borderRadius: '3px',
|
|
1646
|
+
'&:hover': {
|
|
1647
|
+
textDecoration: 'underline',
|
|
1648
|
+
color: 'black',
|
|
1649
|
+
},
|
|
1650
|
+
'&.selected': {
|
|
1651
|
+
color: 'black',
|
|
1652
|
+
},
|
|
1653
|
+
},
|
|
1654
|
+
};
|
|
1655
|
+
const BreadcrumbItemComponent = (props) => {
|
|
1656
|
+
const { breadcrumb, onClick } = props;
|
|
1657
|
+
const classes = useDynamicStyles$2(styles$1);
|
|
1658
|
+
return (React__default.createElement("button", { type: "button", title: breadcrumb.label, className: [
|
|
1659
|
+
classes.button,
|
|
1660
|
+
breadcrumb.selected ? classes.button + '.selected' : null,
|
|
1661
|
+
]
|
|
1662
|
+
.filter((cssClass) => cssClass !== null)
|
|
1663
|
+
.join(' '), onClick: onClick }, breadcrumb.label));
|
|
1664
|
+
};
|
|
1665
|
+
|
|
1666
|
+
class BreadcrumbComponent extends ReactWrapperModule {
|
|
1667
|
+
constructor() {
|
|
1668
|
+
super(...arguments);
|
|
1669
|
+
this.#ngZone = inject(NgZone);
|
|
1670
|
+
this.breadcrumbs = input.required();
|
|
1671
|
+
this.selectBreadcrumb = new EventEmitter();
|
|
1672
|
+
}
|
|
1673
|
+
#ngZone;
|
|
1674
|
+
async ngAfterViewInit() {
|
|
1675
|
+
if (!this.elementRef)
|
|
1676
|
+
throw new Error('No element ref');
|
|
1677
|
+
this.reactDomRoot = ReactDOM.createRoot(this.elementRef.nativeElement);
|
|
1678
|
+
const breadcrumbStyles = {
|
|
1679
|
+
container: {
|
|
1680
|
+
display: 'flex',
|
|
1681
|
+
alignItems: 'center',
|
|
1682
|
+
},
|
|
1683
|
+
};
|
|
1684
|
+
this.component = () => {
|
|
1685
|
+
const classes = useDynamicStyles$2(breadcrumbStyles);
|
|
1686
|
+
return (React__default.createElement("div", { className: classes.container }, this.breadcrumbs().map((breadcrumb, index) => (React__default.createElement(React__default.Fragment, { key: index },
|
|
1687
|
+
React__default.createElement(BreadcrumbItemComponent, { key: index, breadcrumb: breadcrumb, onClick: () => {
|
|
1688
|
+
this.#ngZone.run(() => {
|
|
1689
|
+
this.selectBreadcrumb.emit(breadcrumb);
|
|
1690
|
+
});
|
|
1691
|
+
} }),
|
|
1692
|
+
index < this.breadcrumbs().length - 1 && (React__default.createElement(IconChevronRight16, { color: colors$1.grey800 })))))));
|
|
1693
|
+
};
|
|
1694
|
+
this.render();
|
|
1695
|
+
}
|
|
1696
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1697
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.8", type: BreadcrumbComponent, isStandalone: false, selector: "ng-dhis2-ui-breadcrumb", inputs: { breadcrumbs: { classPropertyName: "breadcrumbs", publicName: "breadcrumbs", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectBreadcrumb: "selectBreadcrumb" }, usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1698
|
+
}
|
|
1699
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
1700
|
+
type: Component,
|
|
1701
|
+
args: [{
|
|
1702
|
+
selector: 'ng-dhis2-ui-breadcrumb',
|
|
1703
|
+
template: '<ng-content></ng-content>',
|
|
1704
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1705
|
+
standalone: false,
|
|
1706
|
+
}]
|
|
1707
|
+
}], propDecorators: { selectBreadcrumb: [{
|
|
1708
|
+
type: Output
|
|
1709
|
+
}] } });
|
|
1710
|
+
|
|
1711
|
+
class BreadcrumbModule {
|
|
1712
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1713
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbModule, declarations: [BreadcrumbComponent], imports: [CommonModule], exports: [BreadcrumbComponent] }); }
|
|
1714
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbModule, imports: [CommonModule] }); }
|
|
1715
|
+
}
|
|
1716
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: BreadcrumbModule, decorators: [{
|
|
1717
|
+
type: NgModule,
|
|
1718
|
+
args: [{
|
|
1719
|
+
declarations: [BreadcrumbComponent],
|
|
1720
|
+
imports: [CommonModule],
|
|
1721
|
+
exports: [BreadcrumbComponent],
|
|
1722
|
+
}]
|
|
1723
|
+
}] });
|
|
1724
|
+
|
|
1725
|
+
// Copyright 2025 UDSM DHIS2 Lab. All rights reserved.
|
|
1726
|
+
// Use of this source code is governed by a BSD-style
|
|
1727
|
+
// license that can be found in the LICENSE file.
|
|
1728
|
+
|
|
1627
1729
|
// Copyright 2023 UDSM DHIS2 Lab. All rights reserved.
|
|
1628
1730
|
// Use of this source code is governed by a BSD-style
|
|
1629
1731
|
// license that can be found in the LICENSE file.
|
|
@@ -2206,17 +2308,17 @@ const PeriodTransfer = ({ onSelect, dataTest, initialSelectedPeriods, rightFoote
|
|
|
2206
2308
|
year,
|
|
2207
2309
|
});
|
|
2208
2310
|
}, dataTest: `${dataTest}-fixed-period-filter`, excludedPeriodTypes: excludedPeriodTypes }))),
|
|
2209
|
-
React__default.createElement("style", { jsx: true }, styles$
|
|
2311
|
+
React__default.createElement("style", { jsx: true }, styles$2)));
|
|
2210
2312
|
const renderRightHeader = () => (React__default.createElement(React__default.Fragment, null,
|
|
2211
2313
|
React__default.createElement("p", { className: "rightHeader" }, i18n.t('Selected Periods')),
|
|
2212
|
-
React__default.createElement("style", { jsx: true }, styles$
|
|
2314
|
+
React__default.createElement("style", { jsx: true }, styles$2)));
|
|
2213
2315
|
const onSelectFixedPeriods = (filter) => {
|
|
2214
2316
|
setFixedFilter(filter);
|
|
2215
2317
|
setAllPeriods((getFixedPeriodsOptionsById(filter.periodType, periodsSettings)?.getPeriods(fixedPeriodConfig(Number(filter.year))) || []));
|
|
2216
2318
|
};
|
|
2217
2319
|
const renderEmptySelection = () => (React__default.createElement(React__default.Fragment, null,
|
|
2218
2320
|
React__default.createElement("p", { className: "emptyList" }, i18n.t('No periods selected')),
|
|
2219
|
-
React__default.createElement("style", { jsx: true }, styles$
|
|
2321
|
+
React__default.createElement("style", { jsx: true }, styles$2)));
|
|
2220
2322
|
return (React__default.createElement(Transfer, { onChange: ({ selected }) => {
|
|
2221
2323
|
const formattedItems = selected.map((id) => ({
|
|
2222
2324
|
id,
|
|
@@ -3564,15 +3666,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3564
3666
|
});
|
|
3565
3667
|
};
|
|
3566
3668
|
return (React__default.createElement("div", null,
|
|
3567
|
-
React__default.createElement("div",
|
|
3568
|
-
width: '100%',
|
|
3569
|
-
display: 'flex',
|
|
3570
|
-
justifyContent: 'flex-end',
|
|
3571
|
-
alignItems: 'center',
|
|
3572
|
-
gap: 8,
|
|
3573
|
-
padding: 8,
|
|
3574
|
-
marginBottom: 16,
|
|
3575
|
-
} },
|
|
3669
|
+
React__default.createElement("div", null,
|
|
3576
3670
|
valueMatch &&
|
|
3577
3671
|
this.dispatchTeis &&
|
|
3578
3672
|
(isButtonLoading ? (React__default.createElement(CircularLoader$1, { small: true })) : (
|
|
@@ -4996,14 +5090,14 @@ const OrgUnitFormField = (props) => {
|
|
|
4996
5090
|
const [loading, setLoading] = useState(true);
|
|
4997
5091
|
const [searchLoading, setSearchLoading] = useState();
|
|
4998
5092
|
const [searchData, setSearchData] = useState();
|
|
4999
|
-
const [selectedOrgUnit, setSelectedOrgUnit] =
|
|
5000
|
-
const [expanded, setExpanded] =
|
|
5093
|
+
const [selectedOrgUnit, setSelectedOrgUnit] = useState();
|
|
5094
|
+
const [expanded, setExpanded] = useState(initiallyExpanded);
|
|
5001
5095
|
const [showOrgUnitTree, setShowOrgUnitTree] = useState(!selected);
|
|
5002
5096
|
useEffect(() => {
|
|
5003
5097
|
setLoading(true);
|
|
5004
5098
|
if (selected) {
|
|
5005
5099
|
d2.httpInstance
|
|
5006
|
-
.get(`organisationUnits/${selected}.json?fields=id,
|
|
5100
|
+
.get(`organisationUnits/${selected}.json?fields=id,displayName,path,code,ancestors[id,displayName]`)
|
|
5007
5101
|
.then((response) => {
|
|
5008
5102
|
if (response.data) {
|
|
5009
5103
|
setSelectedOrgUnit(response.data);
|
|
@@ -5013,9 +5107,10 @@ const OrgUnitFormField = (props) => {
|
|
|
5013
5107
|
});
|
|
5014
5108
|
}
|
|
5015
5109
|
else {
|
|
5110
|
+
setShowOrgUnitTree(true);
|
|
5016
5111
|
setLoading(false);
|
|
5017
5112
|
}
|
|
5018
|
-
}, [
|
|
5113
|
+
}, []);
|
|
5019
5114
|
const highlighted = useMemo(() => {
|
|
5020
5115
|
if (selectedOrgUnit) {
|
|
5021
5116
|
return [selectedOrgUnit['path']];
|
|
@@ -5028,7 +5123,7 @@ const OrgUnitFormField = (props) => {
|
|
|
5028
5123
|
...(selectedOrgUnit['ancestors'] || []),
|
|
5029
5124
|
selectedOrgUnit,
|
|
5030
5125
|
]
|
|
5031
|
-
.map((orgUnit) => orgUnit['
|
|
5126
|
+
.map((orgUnit) => orgUnit['displayName'])
|
|
5032
5127
|
.join(' / ');
|
|
5033
5128
|
}
|
|
5034
5129
|
return '';
|
|
@@ -5076,11 +5171,13 @@ const OrgUnitFormField = (props) => {
|
|
|
5076
5171
|
}
|
|
5077
5172
|
return (ready && (React__default.createElement(OrganisationUnitTree, { key: `${key}-search`, roots: searchData?.map((orgUnit) => orgUnit.id) || [], singleSelection: true, expanded: expanded, handleExpand: handleExpand, handleCollapse: handleCollapse, selected: highlighted, onChange: (event) => {
|
|
5078
5173
|
setSelectedOrgUnit(event);
|
|
5174
|
+
setShowOrgUnitTree(false);
|
|
5079
5175
|
onSelectOrgUnit(event.id);
|
|
5080
5176
|
} })));
|
|
5081
5177
|
}
|
|
5082
5178
|
return (React__default.createElement(OrganisationUnitTree, { key: key, roots: rootOrgUnits?.map((orgUnit) => orgUnit.id) || [], singleSelection: true, expanded: expanded, handleExpand: handleExpand, handleCollapse: handleCollapse, selected: highlighted, onChange: (event) => {
|
|
5083
5179
|
setSelectedOrgUnit(event);
|
|
5180
|
+
setShowOrgUnitTree(false);
|
|
5084
5181
|
onSelectOrgUnit(event.id);
|
|
5085
5182
|
} }));
|
|
5086
5183
|
};
|
|
@@ -5092,10 +5189,11 @@ const OrgUnitFormField = (props) => {
|
|
|
5092
5189
|
label && (React__default.createElement("div", { className: classes.orgUnitFieldLabel },
|
|
5093
5190
|
React__default.createElement("span", null, label),
|
|
5094
5191
|
required ? (React__default.createElement("span", { className: classes.orgUnitFieldRequiredLabel }, "*")) : (React__default.createElement(React__default.Fragment, null)))),
|
|
5095
|
-
|
|
5096
|
-
React__default.createElement(
|
|
5097
|
-
|
|
5098
|
-
|
|
5192
|
+
!showOrgUnitTree ? (selectedOrgUnit ? (React__default.createElement(React__default.Fragment, null,
|
|
5193
|
+
React__default.createElement(Tooltip, { content: selectedOrgUnitLabel },
|
|
5194
|
+
React__default.createElement(Chip, { onRemove: () => {
|
|
5195
|
+
setShowOrgUnitTree(true);
|
|
5196
|
+
} }, selectedOrgUnit.displayName)))) : (React__default.createElement("div", { className: classes.orgUnitTreeLoader },
|
|
5099
5197
|
React__default.createElement(CircularLoader$1, { small: true })))) : (React__default.createElement("div", { className: classes.container },
|
|
5100
5198
|
React__default.createElement("div", { className: classes.debounceFieldContainer },
|
|
5101
5199
|
React__default.createElement(InputField$1, { placeholder: "Search", value: searchText, disabled: disabled, onChange: handleFilterChange })),
|
|
@@ -5136,7 +5234,7 @@ const FileUploadField = (props) => {
|
|
|
5136
5234
|
}
|
|
5137
5235
|
}
|
|
5138
5236
|
};
|
|
5139
|
-
return (React__default.createElement(FileInputField, { accept: "*", buttonLabel: "Upload a file", label: label, name: id,
|
|
5237
|
+
return (React__default.createElement(FileInputField, { accept: "*", buttonLabel: "Upload a file", label: label, name: id, required: required, validationText: validationText, onChange: (event) => {
|
|
5140
5238
|
const fileItem = (event?.files || [])[0];
|
|
5141
5239
|
setFile(fileItem);
|
|
5142
5240
|
if (performUpload) {
|
|
@@ -5277,10 +5375,16 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
5277
5375
|
} }));
|
|
5278
5376
|
case 'org-unit':
|
|
5279
5377
|
return (React__default.createElement(OrgUnitFormField, { label: this.label(), key: this.field().id, required: this.field().required, onSelectOrgUnit: (selectedOrgUnit) => {
|
|
5280
|
-
setValue(selectedOrgUnit);
|
|
5281
5378
|
this.ngZone.run(() => {
|
|
5282
|
-
this.
|
|
5379
|
+
(this.form().get(this.field().id) ||
|
|
5380
|
+
this.form().get(this.field().key))?.setValue(selectedOrgUnit);
|
|
5381
|
+
this.update.emit({
|
|
5382
|
+
form: this.form(),
|
|
5383
|
+
value: selectedOrgUnit,
|
|
5384
|
+
});
|
|
5283
5385
|
});
|
|
5386
|
+
setValue(selectedOrgUnit);
|
|
5387
|
+
setTouched(true);
|
|
5284
5388
|
}, selected: value }));
|
|
5285
5389
|
case 'transfer':
|
|
5286
5390
|
return (React__default.createElement(Transfer, { filterable: true, filterPlaceholder: "Search", selected: selected, leftHeader: React__default.createElement("div", { style: {
|
|
@@ -6372,5 +6476,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
6372
6476
|
* Generated bundle index. Do not edit.
|
|
6373
6477
|
*/
|
|
6374
6478
|
|
|
6375
|
-
export { Boolean$1 as Boolean, ButtonComponent, ButtonModule, CheckBox, D2FormModule, DataTableUIComponent, DataTableUIModule, DateField, DateRangeValue, Dropdown, FieldConfig, FieldControlTypeUtil, FieldDropdown, FieldType, FieldUtil, FormComponent, FormConfig, FormField, FormFieldComponent, FormFieldGroup, FormFieldTypeUtil, FormMetaData, FormMetadataSection, FormUtil, FormValue, FormValueUtil, HeaderBarComponent, HeaderBarModule, LineListModule, LineListTableComponent, MetadataRule, MetadataRuleAction, OrganisationUnitSelectionConfig, OrganisationUnitSelectorComponent, OrganisationUnitSelectorModalComponent, OrganisationUnitSelectorModule, PeriodSelectorComponent, PeriodSelectorModalComponent, PeriodSelectorModule, ReactWrapperModule, RepeatableFormComponent, SectionFormComponent, SelectionFiltersComponent, SelectionFiltersUiModule, TrackerFormComponent, TrackerFormModule, TranslationUtil };
|
|
6479
|
+
export { Boolean$1 as Boolean, BreadcrumbComponent, BreadcrumbModule, ButtonComponent, ButtonModule, CheckBox, D2FormModule, DataTableUIComponent, DataTableUIModule, DateField, DateRangeValue, Dropdown, FieldConfig, FieldControlTypeUtil, FieldDropdown, FieldType, FieldUtil, FormComponent, FormConfig, FormField, FormFieldComponent, FormFieldGroup, FormFieldTypeUtil, FormMetaData, FormMetadataSection, FormUtil, FormValue, FormValueUtil, HeaderBarComponent, HeaderBarModule, LineListModule, LineListTableComponent, MetadataRule, MetadataRuleAction, OrganisationUnitSelectionConfig, OrganisationUnitSelectorComponent, OrganisationUnitSelectorModalComponent, OrganisationUnitSelectorModule, PeriodSelectorComponent, PeriodSelectorModalComponent, PeriodSelectorModule, ReactWrapperModule, RepeatableFormComponent, SectionFormComponent, SelectionFiltersComponent, SelectionFiltersUiModule, TrackerFormComponent, TrackerFormModule, TranslationUtil };
|
|
6376
6480
|
//# sourceMappingURL=iapps-ng-dhis2-ui.mjs.map
|