@iapps/ng-dhis2-ui 1.2.98 → 1.2.100
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 +519 -216
- package/fesm2022/iapps-ng-dhis2-ui.mjs.map +1 -1
- 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/modules/line-list/components/table/filterToolbar.d.ts +1 -1
- package/lib/modules/line-list/components/table/lineListTable.d.ts +1 -1
- package/lib/modules/line-list/components/table/tableBody.d.ts +1 -1
- package/lib/modules/line-list/containers/line-list.component.d.ts +3 -2
- package/lib/modules/line-list/utils/tei-table-data-utils.d.ts +1 -1
- package/lib/modules/organisation-unit-selector/containers/organisation-unit-selector/organisation-unit-selector.component.d.ts +2 -3
- package/lib/modules/organisation-unit-selector/models/organisation-unit-config.model.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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,
|
|
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';
|
|
@@ -2891,6 +2891,7 @@ class OrganisationUnitSelectionConfig {
|
|
|
2891
2891
|
this.allowSingleSelection = params?.allowSingleSelection || false;
|
|
2892
2892
|
this.batchSize = params?.batchSize;
|
|
2893
2893
|
this.additionalQueryFields = params?.additionalQueryFields;
|
|
2894
|
+
this.allowCaching = params?.allowCaching;
|
|
2894
2895
|
}
|
|
2895
2896
|
}
|
|
2896
2897
|
|
|
@@ -2899,10 +2900,10 @@ class OrganisationUnitSelectionConfig {
|
|
|
2899
2900
|
// license that can be found in the LICENSE file.
|
|
2900
2901
|
|
|
2901
2902
|
class OrganisationUnitSelectorComponent extends ReactWrapperModule {
|
|
2902
|
-
constructor(elementRef,
|
|
2903
|
+
constructor(elementRef, ngZone) {
|
|
2903
2904
|
super(elementRef);
|
|
2904
|
-
this.httpClient = httpClient;
|
|
2905
2905
|
this.ngZone = ngZone;
|
|
2906
|
+
this.d2 = window.d2Web;
|
|
2906
2907
|
this.selectedOrgUnits = [];
|
|
2907
2908
|
this.orgUnitSelectionConfig = new OrganisationUnitSelectionConfig();
|
|
2908
2909
|
this.selectOrgUnits = new EventEmitter();
|
|
@@ -2918,18 +2919,23 @@ class OrganisationUnitSelectorComponent extends ReactWrapperModule {
|
|
|
2918
2919
|
this.reactDomRoot = ReactDOM.createRoot(this.elementRef.nativeElement);
|
|
2919
2920
|
const rootOrgUnits = await this.getRootOrgUnits();
|
|
2920
2921
|
const config = await this.getAppConfig();
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2922
|
+
if (config) {
|
|
2923
|
+
this.component = () => (React__default.createElement(Provider, { config: config, plugin: false, parentAlertsAdd: undefined, showAlertsInPlugin: false }, React__default.createElement(OrgUnitDimension, { selected: this.selectedOrgUnits, hideGroupSelect: this.orgUnitSelectionConfig.hideGroupSelect, hideLevelSelect: this.orgUnitSelectionConfig.hideLevelSelect, hideUserOrgUnits: this.orgUnitSelectionConfig.hideUserOrgUnits, onSelect: (selectionEvent) => this.ngZone.run(() => {
|
|
2924
|
+
this.onSelectItems(selectionEvent);
|
|
2925
|
+
}), orgUnitGroupPromise: this.getOrgUnitGroups(), orgUnitLevelPromise: this.getOrgUnitLevels(), roots: rootOrgUnits })));
|
|
2926
|
+
this.render();
|
|
2927
|
+
}
|
|
2925
2928
|
}
|
|
2926
2929
|
async getAppConfig() {
|
|
2927
|
-
const systemInfo =
|
|
2930
|
+
const systemInfo = this.d2.systemInfo;
|
|
2931
|
+
if (!systemInfo) {
|
|
2932
|
+
return systemInfo;
|
|
2933
|
+
}
|
|
2928
2934
|
return {
|
|
2929
|
-
baseUrl:
|
|
2935
|
+
baseUrl: document?.location?.host?.includes('localhost')
|
|
2930
2936
|
? `${document.location.protocol}//${document.location.host}`
|
|
2931
|
-
: systemInfo
|
|
2932
|
-
apiVersion:
|
|
2937
|
+
: systemInfo.contextPath,
|
|
2938
|
+
apiVersion: systemInfo.apiVersion,
|
|
2933
2939
|
};
|
|
2934
2940
|
}
|
|
2935
2941
|
getOrgUnitAttributeByUsage(usageType) {
|
|
@@ -2942,26 +2948,27 @@ class OrganisationUnitSelectorComponent extends ReactWrapperModule {
|
|
|
2942
2948
|
return 'organisationUnits';
|
|
2943
2949
|
}
|
|
2944
2950
|
}
|
|
2945
|
-
getRootOrgUnits() {
|
|
2951
|
+
async getRootOrgUnits() {
|
|
2946
2952
|
const orgUnitAttribute = this.getOrgUnitAttributeByUsage(this.orgUnitSelectionConfig.usageType);
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
.pipe(map((user) => (user ? user[orgUnitAttribute] : []).map((orgUnit) => orgUnit.id))));
|
|
2953
|
+
const currentUser = this.d2?.currentUser;
|
|
2954
|
+
return (currentUser ? currentUser[orgUnitAttribute] : []).map((orgUnit) => orgUnit.id);
|
|
2950
2955
|
}
|
|
2951
|
-
getOrgUnitGroups() {
|
|
2952
|
-
|
|
2953
|
-
.
|
|
2954
|
-
|
|
2956
|
+
async getOrgUnitGroups() {
|
|
2957
|
+
const orgUnitGroupResponse = await this.d2?.httpInstance?.get('organisationUnitGroups.json?fields=id,displayName,name&paging=false', {
|
|
2958
|
+
useIndexDb: this.orgUnitSelectionConfig?.allowCaching,
|
|
2959
|
+
});
|
|
2960
|
+
return orgUnitGroupResponse?.data?.['organisationUnitGroups'] ?? [];
|
|
2955
2961
|
}
|
|
2956
|
-
getOrgUnitLevels() {
|
|
2957
|
-
|
|
2958
|
-
.
|
|
2959
|
-
|
|
2962
|
+
async getOrgUnitLevels() {
|
|
2963
|
+
const orgUnitLevelResponse = await this.d2?.httpInstance?.get('organisationUnitLevels.json?fields=id,level,displayName,name&paging=false', {
|
|
2964
|
+
useIndexDb: this.orgUnitSelectionConfig?.allowCaching,
|
|
2965
|
+
});
|
|
2966
|
+
return orgUnitLevelResponse?.data?.['organisationUnitLevels'] ?? [];
|
|
2960
2967
|
}
|
|
2961
2968
|
onSelectItems(selectionEvent) {
|
|
2962
2969
|
this.selectOrgUnits.emit(selectionEvent.items);
|
|
2963
2970
|
}
|
|
2964
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: OrganisationUnitSelectorComponent, deps: [{ token: i0.ElementRef }, { token:
|
|
2971
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: OrganisationUnitSelectorComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2965
2972
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: OrganisationUnitSelectorComponent, isStandalone: false, selector: "ng-dhis2-ui-org-unit-selector", inputs: { selectedOrgUnits: "selectedOrgUnits", orgUnitSelectionConfig: "orgUnitSelectionConfig" }, outputs: { selectOrgUnits: "selectOrgUnits" }, usesInheritance: true, ngImport: i0, template: '<ng-container><ng-container>', isInline: true }); }
|
|
2966
2973
|
}
|
|
2967
2974
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: OrganisationUnitSelectorComponent, decorators: [{
|
|
@@ -2971,7 +2978,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
2971
2978
|
template: '<ng-container><ng-container>',
|
|
2972
2979
|
standalone: false,
|
|
2973
2980
|
}]
|
|
2974
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type:
|
|
2981
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { selectedOrgUnits: [{
|
|
2975
2982
|
type: Input
|
|
2976
2983
|
}], orgUnitSelectionConfig: [{
|
|
2977
2984
|
type: Input
|
|
@@ -3303,96 +3310,299 @@ const OrgUnitSelector = ({ hide, setHide, selectedOrgUnit, setSelectedOrgUnit, s
|
|
|
3303
3310
|
React__default.createElement(ButtonStrip$1, { end: true },
|
|
3304
3311
|
React__default.createElement(Button$1, { onClick: () => setHide(true), secondary: true }, "Close")))));
|
|
3305
3312
|
|
|
3306
|
-
const FilterToolbar = ({ orgUnitLabel, selectedOrgUnit, setSelectedOrgUnit, setOrgUnitState, defaultOrgUnit, setHide, startDateState, setStartDateState, endDateState, setEndDateState, visibleFilters, dateStates, inputValues, setInputValues, handleInputChange, handleInputChangeForSelectField, handleDateSelect,
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
+
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, }) => {
|
|
3314
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
3315
|
+
const [isOpenOrgUnitDropdown, setIsOpenOrgUnitDropdown] = useState(false);
|
|
3316
|
+
const [openDropdownKey, setOpenDropdownKey] = useState(null);
|
|
3317
|
+
//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
|
|
3318
|
+
const ClearIcon = ({ className, ...props }) => (React__default.createElement("svg", { className: className, ...props, viewBox: "0 0 24 24", width: 16, height: 16 },
|
|
3319
|
+
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" })));
|
|
3320
|
+
return (React__default.createElement(DataTableToolbar, { className: "table-top-toolbar" },
|
|
3313
3321
|
React__default.createElement("div", { style: {
|
|
3314
3322
|
display: 'flex',
|
|
3315
|
-
alignItems: 'center',
|
|
3316
3323
|
gap: '10px',
|
|
3317
3324
|
flexWrap: 'wrap',
|
|
3318
3325
|
} },
|
|
3319
|
-
React__default.createElement(
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
}
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3326
|
+
React__default.createElement("div", { style: {
|
|
3327
|
+
display: 'flex',
|
|
3328
|
+
alignItems: 'center',
|
|
3329
|
+
gap: '10px',
|
|
3330
|
+
flexWrap: 'wrap',
|
|
3331
|
+
} },
|
|
3332
|
+
React__default.createElement(DropdownButton, { name: "customDropdown", open: isOpenOrgUnitDropdown, onClick: () => setIsOpenOrgUnitDropdown(!isOpenOrgUnitDropdown), component: React__default.createElement("div", null,
|
|
3333
|
+
React__default.createElement(FlyoutMenu, null,
|
|
3334
|
+
React__default.createElement("div", { style: { padding: '16px' } },
|
|
3335
|
+
React__default.createElement(InputField$1, { key: "location", placeholder: orgUnitLabel ? orgUnitLabel : 'registering unit', value: selectedOrgUnit, onFocus: () => {
|
|
3336
|
+
SetOrgUnitModalVisible(true);
|
|
3337
|
+
setHide(false);
|
|
3338
|
+
} }),
|
|
3339
|
+
React__default.createElement("div", { style: {
|
|
3340
|
+
paddingTop: '8px',
|
|
3341
|
+
display: 'flex',
|
|
3342
|
+
justifyContent: 'flex-end',
|
|
3343
|
+
} },
|
|
3344
|
+
React__default.createElement(ButtonStrip$1, null,
|
|
3345
|
+
React__default.createElement(Button$1, { primary: true, disabled: !selectedOrgUnit, onClick: () => {
|
|
3346
|
+
setPrevSelectedOrgUnit(selectedOrgUnit);
|
|
3347
|
+
handleOrgUnitFilter();
|
|
3348
|
+
setIsOpenOrgUnitDropdown(false);
|
|
3349
|
+
} }, "update"),
|
|
3350
|
+
React__default.createElement(Button$1, { disabled: !selectedOrgUnit, onClick: () => {
|
|
3351
|
+
setSelectedOrgUnit('');
|
|
3352
|
+
setPrevSelectedOrgUnit('');
|
|
3353
|
+
setOrgUnitState(defaultOrgUnit);
|
|
3354
|
+
setTempOrgUnitState(defaultOrgUnit);
|
|
3355
|
+
setIsOpenOrgUnitDropdown(false);
|
|
3356
|
+
} }, "reset filter")))))) },
|
|
3357
|
+
orgUnitLabel ? orgUnitLabel : 'registering unit',
|
|
3358
|
+
' ',
|
|
3359
|
+
prevSelectedOrgUnit && ':',
|
|
3360
|
+
" ",
|
|
3361
|
+
prevSelectedOrgUnit,
|
|
3362
|
+
prevSelectedOrgUnit && (React__default.createElement("span", { onClick: (event) => {
|
|
3363
|
+
event.stopPropagation();
|
|
3364
|
+
setSelectedOrgUnit('');
|
|
3365
|
+
setPrevSelectedOrgUnit('');
|
|
3366
|
+
setOrgUnitState(defaultOrgUnit);
|
|
3367
|
+
setTempOrgUnitState(defaultOrgUnit);
|
|
3368
|
+
setIsOpenOrgUnitDropdown(false);
|
|
3369
|
+
}, style: { display: 'inline-flex', alignItems: 'center' } },
|
|
3370
|
+
React__default.createElement(ClearIcon, { className: "my-icon-class" })))),
|
|
3371
|
+
showEnrollmentDates && (React__default.createElement(React__default.Fragment, null,
|
|
3372
|
+
React__default.createElement(DropdownButton, { name: "customDropdown", open: isOpen, onClick: () => setIsOpen(!isOpen), component: React__default.createElement("div", null,
|
|
3373
|
+
React__default.createElement(FlyoutMenu, null,
|
|
3374
|
+
React__default.createElement("div", { style: { padding: '16px' } },
|
|
3375
|
+
React__default.createElement("div", { style: {
|
|
3376
|
+
display: 'flex',
|
|
3377
|
+
alignItems: 'flex-end',
|
|
3378
|
+
gap: '16px',
|
|
3379
|
+
} },
|
|
3380
|
+
React__default.createElement(CalendarInput, { calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: formatDateForDisplay(tempStartDateState), onDateSelect: (selectedDate) => {
|
|
3381
|
+
setTempStartDateState(selectedDate.calendarDateString);
|
|
3382
|
+
} }),
|
|
3383
|
+
React__default.createElement("span", { style: { paddingBottom: '8px' } }, "to"),
|
|
3384
|
+
React__default.createElement(CalendarInput, { calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: formatDateForDisplay(tempEndDateState), onDateSelect: (selectedDate) => {
|
|
3385
|
+
setTempEndDateState(selectedDate.calendarDateString);
|
|
3386
|
+
} })),
|
|
3387
|
+
React__default.createElement("div", { style: {
|
|
3388
|
+
paddingTop: '8px',
|
|
3389
|
+
display: 'flex',
|
|
3390
|
+
justifyContent: 'flex-end',
|
|
3391
|
+
} },
|
|
3392
|
+
React__default.createElement(ButtonStrip$1, null,
|
|
3393
|
+
React__default.createElement(Button$1, { primary: true, onClick: () => {
|
|
3394
|
+
handleStartDateFilter();
|
|
3395
|
+
handleEndDateFilter();
|
|
3396
|
+
setIsOpen(false);
|
|
3397
|
+
} }, "update"),
|
|
3398
|
+
React__default.createElement(Button$1, { onClick: () => {
|
|
3399
|
+
setStartDateState(null);
|
|
3400
|
+
setTempEndDateState(null);
|
|
3401
|
+
setTempStartDateState(null);
|
|
3402
|
+
setEndDateState(null);
|
|
3403
|
+
setIsOpen(false);
|
|
3404
|
+
} }, "reset")))))) },
|
|
3405
|
+
"registration dates ",
|
|
3406
|
+
(startDateState || endDateState) && ':',
|
|
3407
|
+
' ',
|
|
3408
|
+
startDateState,
|
|
3409
|
+
endDateState && ` - ${endDateState}`,
|
|
3410
|
+
(startDateState || endDateState) && (React__default.createElement("span", { onClick: (event) => {
|
|
3411
|
+
event.stopPropagation();
|
|
3412
|
+
setStartDateState(null);
|
|
3413
|
+
setTempEndDateState(null);
|
|
3414
|
+
setTempStartDateState(null);
|
|
3415
|
+
setEndDateState(null);
|
|
3416
|
+
setIsOpen(false);
|
|
3417
|
+
}, style: { display: 'inline-flex', alignItems: 'center' } },
|
|
3418
|
+
React__default.createElement(ClearIcon, { className: "my-icon-class" }))))))),
|
|
3419
|
+
(visibleFilters ?? []).map(({ label, key, valueType, options, type }) => {
|
|
3420
|
+
if (valueType === 'DATE') {
|
|
3421
|
+
return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
|
|
3422
|
+
setOpenDropdownKey(openDropdownKey === key ? null : key);
|
|
3423
|
+
}, component: React__default.createElement("div", null,
|
|
3424
|
+
React__default.createElement(FlyoutMenu, null,
|
|
3425
|
+
React__default.createElement("div", { style: { padding: '16px' } },
|
|
3426
|
+
React__default.createElement(CalendarInput, { key: key, calendar: "gregory", locale: "en-GB", timeZone: "Africa/Dar_es_Salaam", date: dateStates[key], onDateSelect: (selectedDate) => {
|
|
3427
|
+
handleDateSelect(key, selectedDate, type);
|
|
3428
|
+
} }),
|
|
3429
|
+
React__default.createElement("div", { style: {
|
|
3430
|
+
paddingTop: '8px',
|
|
3431
|
+
display: 'flex',
|
|
3432
|
+
justifyContent: 'flex-end',
|
|
3433
|
+
} },
|
|
3434
|
+
React__default.createElement(ButtonStrip$1, null,
|
|
3435
|
+
React__default.createElement(Button$1, { primary: true, onClick: () => {
|
|
3436
|
+
setPrevDateStates((prev) => ({
|
|
3437
|
+
...prev,
|
|
3438
|
+
[key]: dateStates[key],
|
|
3439
|
+
}));
|
|
3440
|
+
handleAdditionalFilters();
|
|
3441
|
+
setOpenDropdownKey(null);
|
|
3442
|
+
} }, "update"),
|
|
3443
|
+
React__default.createElement(Button$1, { onClick: () => {
|
|
3444
|
+
setIsOpen(false);
|
|
3445
|
+
} }, "reset")))))) },
|
|
3446
|
+
label,
|
|
3447
|
+
" ",
|
|
3448
|
+
prevDateStates[key] && ':',
|
|
3449
|
+
" ",
|
|
3450
|
+
prevDateStates[key],
|
|
3451
|
+
prevDateStates[key] && (React__default.createElement("span", { onClick: (event) => {
|
|
3452
|
+
event.stopPropagation();
|
|
3453
|
+
setDateStates((prev) => ({
|
|
3454
|
+
...prev,
|
|
3455
|
+
[key]: '',
|
|
3456
|
+
}));
|
|
3457
|
+
setPrevDateStates((prev) => ({
|
|
3458
|
+
...prev,
|
|
3459
|
+
[key]: '',
|
|
3460
|
+
}));
|
|
3461
|
+
const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
|
|
3462
|
+
setDataQueryFiltersState(filteredFilters);
|
|
3463
|
+
setTempDataQueryFiltersState(filteredFilters);
|
|
3464
|
+
setOpenDropdownKey(null);
|
|
3465
|
+
}, style: { display: 'inline-flex', alignItems: 'center' } },
|
|
3466
|
+
React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
|
|
3467
|
+
}
|
|
3468
|
+
if (options && options.options.length > 0) {
|
|
3469
|
+
return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
|
|
3470
|
+
setOpenDropdownKey(openDropdownKey === key ? null : key);
|
|
3471
|
+
}, component: React__default.createElement("div", null,
|
|
3472
|
+
React__default.createElement(FlyoutMenu, null,
|
|
3473
|
+
React__default.createElement("div", { style: { padding: '16px' } },
|
|
3474
|
+
React__default.createElement(SingleSelectField, { key: key, placeholder: `${label}`, selected: inputValues[key] || '', onChange: ({ selected }) => {
|
|
3475
|
+
setInputValues((prevValues) => ({
|
|
3476
|
+
...prevValues,
|
|
3477
|
+
[key]: selected ?? '',
|
|
3478
|
+
}));
|
|
3479
|
+
handleInputChangeForSelectField(key, selected ?? '', type);
|
|
3480
|
+
} }, (options.options ?? []).map((opt) => (React__default.createElement(SingleSelectOption, { key: opt.id, label: opt.name, value: opt.code })))),
|
|
3481
|
+
React__default.createElement("div", { style: {
|
|
3482
|
+
paddingTop: '8px',
|
|
3483
|
+
display: 'flex',
|
|
3484
|
+
justifyContent: 'flex-end',
|
|
3485
|
+
} },
|
|
3486
|
+
React__default.createElement(ButtonStrip$1, null,
|
|
3487
|
+
React__default.createElement(Button$1, { primary: true, disabled: !inputValues[key] ||
|
|
3488
|
+
inputValues[key] === prevInputValues[key], onClick: () => {
|
|
3489
|
+
setPrevInputValues((prev) => ({
|
|
3490
|
+
...prev,
|
|
3491
|
+
[key]: inputValues[key],
|
|
3492
|
+
}));
|
|
3493
|
+
handleAdditionalFilters();
|
|
3494
|
+
setOpenDropdownKey(null);
|
|
3495
|
+
} }, "update"),
|
|
3496
|
+
React__default.createElement(Button$1, { disabled: !inputValues[key], onClick: () => {
|
|
3497
|
+
setInputValues((prevValues) => ({
|
|
3498
|
+
...prevValues,
|
|
3499
|
+
[key]: '',
|
|
3500
|
+
}));
|
|
3501
|
+
setPrevInputValues((prevValues) => ({
|
|
3502
|
+
...prevValues,
|
|
3503
|
+
[key]: '',
|
|
3504
|
+
}));
|
|
3505
|
+
handleInputChangeForSelectField(key, '', type);
|
|
3506
|
+
const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
|
|
3507
|
+
setDataQueryFiltersState(filteredFilters);
|
|
3508
|
+
setTempDataQueryFiltersState(filteredFilters);
|
|
3509
|
+
setOpenDropdownKey(null);
|
|
3510
|
+
} }, "reset")))))) },
|
|
3511
|
+
label,
|
|
3512
|
+
" ",
|
|
3513
|
+
prevInputValues[key] && ':',
|
|
3514
|
+
" ",
|
|
3515
|
+
prevInputValues[key],
|
|
3516
|
+
prevInputValues[key] && (React__default.createElement("span", { onClick: (event) => {
|
|
3517
|
+
event.stopPropagation();
|
|
3518
|
+
setInputValues((prevValues) => ({
|
|
3519
|
+
...prevValues,
|
|
3520
|
+
[key]: '',
|
|
3521
|
+
}));
|
|
3522
|
+
setPrevInputValues((prevValues) => ({
|
|
3523
|
+
...prevValues,
|
|
3524
|
+
[key]: '',
|
|
3525
|
+
}));
|
|
3526
|
+
handleInputChangeForSelectField(key, '', type);
|
|
3527
|
+
const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
|
|
3528
|
+
setDataQueryFiltersState(filteredFilters);
|
|
3529
|
+
setTempDataQueryFiltersState(filteredFilters);
|
|
3530
|
+
setOpenDropdownKey(null);
|
|
3531
|
+
}, style: { display: 'inline-flex', alignItems: 'center' } },
|
|
3532
|
+
React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
|
|
3533
|
+
}
|
|
3534
|
+
return (React__default.createElement(DropdownButton, { name: "customDropdown", open: openDropdownKey === key, onClick: () => {
|
|
3535
|
+
setOpenDropdownKey(openDropdownKey === key ? null : key);
|
|
3536
|
+
}, component: React__default.createElement("div", null,
|
|
3537
|
+
React__default.createElement(FlyoutMenu, null,
|
|
3538
|
+
React__default.createElement("div", { style: { padding: '16px' } },
|
|
3539
|
+
React__default.createElement(InputField$1, { key: key, placeholder: `${label}`, value: inputValues[key] || '', onChange: (e) => {
|
|
3540
|
+
const currentValue = 'target' in e ? e.target.value : e.value ?? '';
|
|
3541
|
+
setInputValues((prevValues) => ({
|
|
3542
|
+
...prevValues,
|
|
3543
|
+
[key]: currentValue,
|
|
3544
|
+
}));
|
|
3545
|
+
handleInputChange(key, currentValue, type);
|
|
3546
|
+
} }),
|
|
3547
|
+
React__default.createElement("div", { style: {
|
|
3548
|
+
paddingTop: '8px',
|
|
3549
|
+
display: 'flex',
|
|
3550
|
+
justifyContent: 'flex-end',
|
|
3551
|
+
} },
|
|
3552
|
+
React__default.createElement(ButtonStrip$1, null,
|
|
3553
|
+
React__default.createElement(Button$1, { primary: true, disabled: !inputValues[key] ||
|
|
3554
|
+
inputValues[key] === prevInputValues[key], onClick: () => {
|
|
3555
|
+
setPrevInputValues((prev) => ({
|
|
3556
|
+
...prev,
|
|
3557
|
+
[key]: inputValues[key],
|
|
3558
|
+
}));
|
|
3559
|
+
handleAdditionalFilters();
|
|
3560
|
+
setOpenDropdownKey(null);
|
|
3561
|
+
} }, "update"),
|
|
3562
|
+
React__default.createElement(Button$1, { disabled: !inputValues[key], onClick: () => {
|
|
3563
|
+
setInputValues((prevValues) => ({
|
|
3564
|
+
...prevValues,
|
|
3565
|
+
[key]: '',
|
|
3566
|
+
}));
|
|
3567
|
+
setPrevInputValues((prevValues) => ({
|
|
3568
|
+
...prevValues,
|
|
3569
|
+
[key]: '',
|
|
3570
|
+
}));
|
|
3571
|
+
// Remove the filter for this key
|
|
3572
|
+
const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
|
|
3573
|
+
setDataQueryFiltersState(filteredFilters);
|
|
3574
|
+
setTempDataQueryFiltersState(filteredFilters);
|
|
3575
|
+
setOpenDropdownKey(null);
|
|
3576
|
+
} }, "reset")))))) },
|
|
3577
|
+
label,
|
|
3578
|
+
" ",
|
|
3579
|
+
prevInputValues[key] && ':',
|
|
3580
|
+
" ",
|
|
3581
|
+
prevInputValues[key],
|
|
3582
|
+
prevInputValues[key] && (React__default.createElement("span", { onClick: (event) => {
|
|
3583
|
+
event.stopPropagation();
|
|
3584
|
+
// Clear the input value for this key
|
|
3585
|
+
setInputValues((prevValues) => ({
|
|
3586
|
+
...prevValues,
|
|
3587
|
+
[key]: '',
|
|
3588
|
+
}));
|
|
3589
|
+
setPrevInputValues((prevValues) => ({
|
|
3590
|
+
...prevValues,
|
|
3591
|
+
[key]: '',
|
|
3592
|
+
}));
|
|
3593
|
+
// Remove the filter for this key
|
|
3594
|
+
const filteredFilters = dataQueryFiltersState.filter((f) => f.attribute !== key);
|
|
3366
3595
|
setDataQueryFiltersState(filteredFilters);
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
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')))));
|
|
3596
|
+
setTempDataQueryFiltersState(filteredFilters);
|
|
3597
|
+
}, style: { display: 'inline-flex', alignItems: 'center' } },
|
|
3598
|
+
React__default.createElement(ClearIcon, { className: "my-icon-class" })))));
|
|
3599
|
+
}),
|
|
3600
|
+
React__default.createElement("div", { style: {
|
|
3601
|
+
display: 'flex',
|
|
3602
|
+
gap: '10px',
|
|
3603
|
+
} },
|
|
3604
|
+
React__default.createElement(Button$1, { onClick: () => setShowAllFilters(!showAllFilters) }, showAllFilters ? 'Less Filters' : 'More Filters')))));
|
|
3605
|
+
};
|
|
3396
3606
|
function formatDateForDisplay(dateString) {
|
|
3397
3607
|
if (!dateString || dateString === 'dd-mm-yyyy')
|
|
3398
3608
|
return 'dd-mm-yyyy';
|
|
@@ -3639,7 +3849,13 @@ const TableRow = ({ row, columns, getTextColorFromBackGround, actionOptions, act
|
|
|
3639
3849
|
// )}
|
|
3640
3850
|
// </DHISTableBody>
|
|
3641
3851
|
// );
|
|
3642
|
-
const TableBody = ({ data, columns, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectedRows, onRowToggle, selectable, showActionButtons }) => (React__default.createElement(TableBody$1, null,
|
|
3852
|
+
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,
|
|
3853
|
+
React__default.createElement(DataTableCell, { colSpan: columns.length.toString(), style: {
|
|
3854
|
+
textAlign: 'center',
|
|
3855
|
+
fontWeight: 'bold',
|
|
3856
|
+
color: 'red',
|
|
3857
|
+
padding: '20px',
|
|
3858
|
+
} }, 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
3859
|
React__default.createElement(DataTableCell, { colSpan: columns.length.toString(), style: {
|
|
3644
3860
|
textAlign: 'center',
|
|
3645
3861
|
fontWeight: 'bold',
|
|
@@ -3696,7 +3912,7 @@ const TableFooter = ({ pager, setPager, columns }) => {
|
|
|
3696
3912
|
// </DataTable>
|
|
3697
3913
|
// );
|
|
3698
3914
|
// };
|
|
3699
|
-
const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectable, rowsSelected, showActionButtons }) => {
|
|
3915
|
+
const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGround, actionOptions, actionOptionOrientation, actionSelected, selectable, rowsSelected, showActionButtons, error }) => {
|
|
3700
3916
|
const [selectedRows, setSelectedRows] = useState([]);
|
|
3701
3917
|
const handleRowToggle = (row) => {
|
|
3702
3918
|
const exists = selectedRows.find((r) => r.index?.value === row.index?.value);
|
|
@@ -3713,7 +3929,7 @@ const LineListTable = ({ columns, data, pager, setPager, getTextColorFromBackGro
|
|
|
3713
3929
|
};
|
|
3714
3930
|
return (React__default.createElement(DataTable, null,
|
|
3715
3931
|
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 }),
|
|
3932
|
+
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
3933
|
React__default.createElement(TableFooter, { columns: columns, pager: pager, setPager: setPager })));
|
|
3718
3934
|
};
|
|
3719
3935
|
|
|
@@ -3743,7 +3959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
3743
3959
|
type: Injectable
|
|
3744
3960
|
}], ctorParameters: () => [{ type: i1.NgxDhis2HttpClientService }] });
|
|
3745
3961
|
|
|
3746
|
-
const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
3962
|
+
const getTrackedEntityTableData = (response, programId, pager, metaData, searcheableDataElements) => {
|
|
3747
3963
|
const teisRaw = response.data
|
|
3748
3964
|
.trackedEntityInstances;
|
|
3749
3965
|
const teis = Array.isArray(teisRaw)
|
|
@@ -3758,12 +3974,19 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3758
3974
|
label: trackedEntityAttribute.formName ?? trackedEntityAttribute.name,
|
|
3759
3975
|
key: trackedEntityAttribute.id,
|
|
3760
3976
|
}));
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3977
|
+
const tableSearcheableDataElements = metaData
|
|
3978
|
+
.programStages.sort((a, b) => a.sortOrder - b.sortOrder)
|
|
3979
|
+
.flatMap((stage) => stage
|
|
3980
|
+
.programStageDataElements.filter((psde) => psde.displayInReports)
|
|
3981
|
+
.sort((a, b) => a.sortOrder - b.sortOrder)
|
|
3982
|
+
.map((psde) => ({
|
|
3983
|
+
label: psde.dataElement.formName || psde.dataElement.name,
|
|
3984
|
+
key: psde.dataElement.id,
|
|
3985
|
+
valueType: psde.dataElement.valueType,
|
|
3986
|
+
options: psde.dataElement.optionSet,
|
|
3987
|
+
type: 'dataElement',
|
|
3988
|
+
}))
|
|
3989
|
+
.filter((col) => searcheableDataElements.includes(col.key)));
|
|
3767
3990
|
const dataElementColumns = metaData
|
|
3768
3991
|
.programStages.sort((a, b) => a.sortOrder - b.sortOrder) // Sorts stages by sortOrder
|
|
3769
3992
|
.flatMap((stage) => stage
|
|
@@ -3795,6 +4018,7 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3795
4018
|
key: attr.id,
|
|
3796
4019
|
valueType: attr.valueType,
|
|
3797
4020
|
options: attr.optionSet ?? undefined,
|
|
4021
|
+
type: 'attribute',
|
|
3798
4022
|
}));
|
|
3799
4023
|
const tableData = teis.map((tei, idx) => {
|
|
3800
4024
|
const row = {
|
|
@@ -3881,7 +4105,7 @@ const getTrackedEntityTableData = (response, programId, pager, metaData) => {
|
|
|
3881
4105
|
return {
|
|
3882
4106
|
columns: tableColumns,
|
|
3883
4107
|
data: tableData,
|
|
3884
|
-
filteredEntityColumns: tableFilters,
|
|
4108
|
+
filteredEntityColumns: [...tableFilters, ...tableSearcheableDataElements],
|
|
3885
4109
|
orgUnitLabel: orgUnitLabel,
|
|
3886
4110
|
};
|
|
3887
4111
|
};
|
|
@@ -3962,6 +4186,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3962
4186
|
this.showActionButtons = true;
|
|
3963
4187
|
this.showEnrollmentDates = true;
|
|
3964
4188
|
this.showDownloadButton = false;
|
|
4189
|
+
this.searcheableDataElements = [];
|
|
3965
4190
|
this.reactStateUpdaters = null;
|
|
3966
4191
|
this.setReactStateUpdaters = (updaters) => {
|
|
3967
4192
|
this.reactStateUpdaters = updaters;
|
|
@@ -3990,28 +4215,29 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
3990
4215
|
const [endDateState, setEndDateState] = useState(this.endDate);
|
|
3991
4216
|
const [tempEndDateState, setTempEndDateState] = useState(this.endDate);
|
|
3992
4217
|
const [loading, setLoading] = useState(false);
|
|
3993
|
-
const [metaDataLoadng, setMetaDataLoading] = useState(false);
|
|
3994
4218
|
const [filteredColumns, setFilteredColumns] = useState();
|
|
3995
4219
|
const [inputValues, setInputValues] = useState({});
|
|
3996
4220
|
const [orgUnitLabel, setOrgUnitLabel] = useState('');
|
|
3997
4221
|
const [selectedOrgUnit, setSelectedOrgUnit] = useState('');
|
|
4222
|
+
const [prevSelectedOrgUnit, setPrevSelectedOrgUnit] = useState('');
|
|
3998
4223
|
const [hide, setHide] = useState(true);
|
|
3999
4224
|
const [showAllFilters, setShowAllFilters] = useState(false);
|
|
4000
4225
|
const visibleFilters = showAllFilters
|
|
4001
4226
|
? filteredColumns ?? []
|
|
4002
|
-
: (filteredColumns ?? []).slice(0,
|
|
4227
|
+
: (filteredColumns ?? []).slice(0, 5);
|
|
4003
4228
|
// const visibleFilters = showAllFilters
|
|
4004
4229
|
// ? filteredColumns ?? []
|
|
4005
4230
|
// : filteredColumns ?? []).slice(0, 2);
|
|
4006
4231
|
const defaultOrgUnit = this.orgUnit;
|
|
4007
|
-
const [prevValue, setPrevValue] = useState();
|
|
4008
4232
|
const [dateStates, setDateStates] = useState({});
|
|
4233
|
+
const [prevDateStates, setPrevDateStates] = useState({});
|
|
4009
4234
|
const [metaData, setMetaData] = useState(null);
|
|
4010
4235
|
const [selectable, setSelectable] = useState(this.allowRowsSelection);
|
|
4011
4236
|
const [triggerRefetch, setTriggerRefetch] = useState(this.triggerRefetch);
|
|
4012
4237
|
const [showActionButtons, setShowActionButtons] = useState(this.showActionButtons);
|
|
4013
4238
|
const [orgUnitModalVisible, setOrgUnitModalVisible] = useState(false);
|
|
4014
4239
|
const [error, setError] = useState(null);
|
|
4240
|
+
const [prevInputValues, setPrevInputValues] = useState({});
|
|
4015
4241
|
const d2 = window.d2Web;
|
|
4016
4242
|
// Stores updaters in refs for Angular to access
|
|
4017
4243
|
const updateRefs = useRef({
|
|
@@ -4026,9 +4252,6 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4026
4252
|
setTriggerRefetch,
|
|
4027
4253
|
setTriggerTokenState,
|
|
4028
4254
|
});
|
|
4029
|
-
// useEffect(() => {
|
|
4030
|
-
// this.setReactStateUpdaters?.(updateRefs.current);
|
|
4031
|
-
// }, []);
|
|
4032
4255
|
useEffect(() => {
|
|
4033
4256
|
this.setReactStateUpdaters?.(updateRefs.current);
|
|
4034
4257
|
const fetchmetaData = async () => {
|
|
@@ -4064,57 +4287,71 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4064
4287
|
const isEvent = metaData.programType === 'WITHOUT_REGISTRATION';
|
|
4065
4288
|
const endDate = endDateState ?? format(addDays(new Date(), 1), 'yyyy-MM-dd');
|
|
4066
4289
|
if (this.programStageId || isEvent) {
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4290
|
+
const fetchEventData = async () => {
|
|
4291
|
+
try {
|
|
4292
|
+
setError(null);
|
|
4293
|
+
setLoading(true);
|
|
4294
|
+
const response = await d2.eventModule.event
|
|
4295
|
+
.setEndDate(endDate)
|
|
4296
|
+
.setStartDate(startDateState)
|
|
4297
|
+
.setProgram(this.programId)
|
|
4298
|
+
.setProgramStage(this.programStageId)
|
|
4299
|
+
.setOrgUnit(orgUnitState)
|
|
4300
|
+
.setOuMode(this.ouMode)
|
|
4301
|
+
.setPagination(new Pager({
|
|
4302
|
+
pageSize: pager.pageSize,
|
|
4303
|
+
page: pager.page,
|
|
4304
|
+
}))
|
|
4305
|
+
.get();
|
|
4306
|
+
if (response.responseStatus.status !== 200) {
|
|
4307
|
+
throw new Error('failed to load data.');
|
|
4308
|
+
}
|
|
4309
|
+
const eventsResponse = {
|
|
4310
|
+
events: response.data,
|
|
4311
|
+
pager: pager,
|
|
4312
|
+
// orgUnitsMap: fetchedOrgUnits,
|
|
4313
|
+
};
|
|
4314
|
+
const { columns, data } = getEvents({ data: eventsResponse }, this.programStageId, pager, metaData);
|
|
4315
|
+
// const filterableColumnIdsSet = new Set(
|
|
4316
|
+
// this.filterableColumnIds
|
|
4317
|
+
// );
|
|
4318
|
+
// const updatedFilterableColumnIds: ColumnDefinition[] =
|
|
4319
|
+
// columns.filter((column) =>
|
|
4320
|
+
// filterableColumnIdsSet.has(column.key)
|
|
4321
|
+
// );
|
|
4322
|
+
// const finalColumns: ColumnDefinition[] = addActionsColumn(
|
|
4323
|
+
// [{ label: '#', key: 'index' }, ...updatedFilterableColumnIds],
|
|
4324
|
+
// this.actionOptions
|
|
4325
|
+
// );
|
|
4326
|
+
let updatedFilterableColumnIds;
|
|
4327
|
+
if (Array.isArray(this.filterableColumnIds) &&
|
|
4328
|
+
this.filterableColumnIds.length > 0) {
|
|
4329
|
+
const filterableColumnIdsSet = new Set(this.filterableColumnIds);
|
|
4330
|
+
updatedFilterableColumnIds = columns.filter((column) => filterableColumnIdsSet.has(column.key));
|
|
4331
|
+
}
|
|
4332
|
+
else {
|
|
4333
|
+
updatedFilterableColumnIds = columns;
|
|
4334
|
+
}
|
|
4335
|
+
const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...updatedFilterableColumnIds], this.actionOptions);
|
|
4336
|
+
const pagerResponse = response.pagination;
|
|
4337
|
+
setColumns(finalColumns);
|
|
4338
|
+
setData(data);
|
|
4339
|
+
setPager(new Pager(pagerResponse || {}));
|
|
4103
4340
|
}
|
|
4104
|
-
|
|
4105
|
-
|
|
4341
|
+
catch {
|
|
4342
|
+
console.error('Failed to fetch event data:', error);
|
|
4343
|
+
setError('Could not load records. Please reload.');
|
|
4106
4344
|
}
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
setPager(new Pager(pagerResponse || {}));
|
|
4113
|
-
});
|
|
4345
|
+
finally {
|
|
4346
|
+
setLoading(false);
|
|
4347
|
+
}
|
|
4348
|
+
};
|
|
4349
|
+
fetchEventData();
|
|
4114
4350
|
}
|
|
4115
4351
|
else if (isTracker) {
|
|
4116
4352
|
const fetchTrackerData = async () => {
|
|
4117
4353
|
try {
|
|
4354
|
+
setError(null);
|
|
4118
4355
|
setLoading(true);
|
|
4119
4356
|
const response = await d2.trackerModule.trackedEntity
|
|
4120
4357
|
.setEndDate(endDate)
|
|
@@ -4134,6 +4371,9 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4134
4371
|
new DataOrderCriteria().setField('createdAt').setOrder('desc'),
|
|
4135
4372
|
])
|
|
4136
4373
|
.get();
|
|
4374
|
+
if (response.responseStatus.status !== 200) {
|
|
4375
|
+
throw new Error('failed to load data.');
|
|
4376
|
+
}
|
|
4137
4377
|
const trackedEntityInstances = Array.isArray(response.data)
|
|
4138
4378
|
? response.data
|
|
4139
4379
|
: [response.data];
|
|
@@ -4151,7 +4391,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4151
4391
|
pager: pager,
|
|
4152
4392
|
orgUnitsMap: fetchedOrgUnits,
|
|
4153
4393
|
};
|
|
4154
|
-
const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData);
|
|
4394
|
+
const { columns, data, filteredEntityColumns, orgUnitLabel } = getTrackedEntityTableData({ data: trackedEntityResponse }, this.programId, pager, metaData, this.searcheableDataElements);
|
|
4155
4395
|
setFilteredColumns((prev) => filteredEntityColumns.length > 0 ? filteredEntityColumns : prev);
|
|
4156
4396
|
let updatedFilterableColumnIds;
|
|
4157
4397
|
if (Array.isArray(this.filterableColumnIds) &&
|
|
@@ -4168,7 +4408,6 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4168
4408
|
// this.actionOptions
|
|
4169
4409
|
// );
|
|
4170
4410
|
const pagerResponse = response.pagination;
|
|
4171
|
-
// setLoading(false);
|
|
4172
4411
|
setColumns(finalColumns);
|
|
4173
4412
|
setData(data);
|
|
4174
4413
|
setPager(new Pager(pagerResponse || {}));
|
|
@@ -4211,7 +4450,6 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4211
4450
|
: cell;
|
|
4212
4451
|
}));
|
|
4213
4452
|
const worksheetData = [header, ...rows];
|
|
4214
|
-
// Creates worksheet and workbook, then writes to file
|
|
4215
4453
|
const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);
|
|
4216
4454
|
const workbook = XLSX.utils.book_new();
|
|
4217
4455
|
XLSX.utils.book_append_sheet(workbook, worksheet, 'LineListData');
|
|
@@ -4233,7 +4471,6 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4233
4471
|
const header = filteredColumns.map((col) => `"${col.label}"`).join(',');
|
|
4234
4472
|
const csvData = data.map((row) => filteredColumns.map((col) => `"${safeValue(row[col.key])}"`).join(','));
|
|
4235
4473
|
const csvContent = [header, ...csvData].join('\n');
|
|
4236
|
-
// Creates a Blob and triggers the download
|
|
4237
4474
|
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
|
|
4238
4475
|
const url = URL.createObjectURL(blob);
|
|
4239
4476
|
const link = document.createElement('a');
|
|
@@ -4243,7 +4480,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4243
4480
|
link.click();
|
|
4244
4481
|
document.body.removeChild(link);
|
|
4245
4482
|
};
|
|
4246
|
-
const handleInputChange = (key, value) => {
|
|
4483
|
+
const handleInputChange = (key, value, type) => {
|
|
4247
4484
|
setInputValues((prevValues) => ({
|
|
4248
4485
|
...prevValues,
|
|
4249
4486
|
[key]: value ?? '',
|
|
@@ -4252,20 +4489,36 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4252
4489
|
// Removes old filter for this key
|
|
4253
4490
|
const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
|
|
4254
4491
|
// adds new filter only if value is not empty
|
|
4255
|
-
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4492
|
+
let updatedFilters;
|
|
4493
|
+
if (type === 'dataElement') {
|
|
4494
|
+
updatedFilters =
|
|
4495
|
+
value && value.length
|
|
4496
|
+
? [
|
|
4497
|
+
...filteredFilters,
|
|
4498
|
+
new DataQueryFilter()
|
|
4499
|
+
.setAttribute(key)
|
|
4500
|
+
.setCondition(DataFilterCondition.Like)
|
|
4501
|
+
.setValue(value)
|
|
4502
|
+
.setType('DATA_ELEMENT'),
|
|
4503
|
+
]
|
|
4504
|
+
: filteredFilters;
|
|
4505
|
+
}
|
|
4506
|
+
else {
|
|
4507
|
+
updatedFilters = value.trim()
|
|
4508
|
+
? [
|
|
4509
|
+
...filteredFilters,
|
|
4510
|
+
new DataQueryFilter()
|
|
4511
|
+
.setAttribute(key)
|
|
4512
|
+
.setCondition(DataFilterCondition.Like)
|
|
4513
|
+
.setValue(value),
|
|
4514
|
+
]
|
|
4515
|
+
: filteredFilters;
|
|
4516
|
+
}
|
|
4264
4517
|
return updatedFilters;
|
|
4265
4518
|
});
|
|
4266
4519
|
};
|
|
4267
4520
|
//TODO: MERGE THIS WITH HANDLE INPUT CHANGE PUT A CHECK FOR IF ITS A SELECT FIELD TO USE EQ
|
|
4268
|
-
const handleInputChangeForSelectField = (key, value) => {
|
|
4521
|
+
const handleInputChangeForSelectField = (key, value, type) => {
|
|
4269
4522
|
setInputValues((prevValues) => ({
|
|
4270
4523
|
...prevValues,
|
|
4271
4524
|
[key]: value ?? '',
|
|
@@ -4274,19 +4527,35 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4274
4527
|
// Removes existing filter for the same key (attribute)
|
|
4275
4528
|
const filteredFilters = prevFilters.filter((f) => f.attribute !== key);
|
|
4276
4529
|
// adds new filter only if value is not empty
|
|
4277
|
-
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4530
|
+
let updatedFilters;
|
|
4531
|
+
if (type === 'dataElement') {
|
|
4532
|
+
updatedFilters =
|
|
4533
|
+
value && value.length
|
|
4534
|
+
? [
|
|
4535
|
+
...filteredFilters,
|
|
4536
|
+
new DataQueryFilter()
|
|
4537
|
+
.setAttribute(key)
|
|
4538
|
+
.setCondition(DataFilterCondition.Equal)
|
|
4539
|
+
.setValue(value)
|
|
4540
|
+
.setType('DATA_ELEMENT'),
|
|
4541
|
+
]
|
|
4542
|
+
: filteredFilters;
|
|
4543
|
+
}
|
|
4544
|
+
else {
|
|
4545
|
+
updatedFilters = value.trim()
|
|
4546
|
+
? [
|
|
4547
|
+
...filteredFilters,
|
|
4548
|
+
new DataQueryFilter()
|
|
4549
|
+
.setAttribute(key)
|
|
4550
|
+
.setCondition(DataFilterCondition.Equal)
|
|
4551
|
+
.setValue(value),
|
|
4552
|
+
]
|
|
4553
|
+
: filteredFilters;
|
|
4554
|
+
}
|
|
4286
4555
|
return updatedFilters;
|
|
4287
4556
|
});
|
|
4288
4557
|
};
|
|
4289
|
-
const handleDateSelect = (key, selectedDate) => {
|
|
4558
|
+
const handleDateSelect = (key, selectedDate, type) => {
|
|
4290
4559
|
const selectedDateString = selectedDate?.calendarDateString ?? '';
|
|
4291
4560
|
// Updates dateStates
|
|
4292
4561
|
setDateStates((prevDateStates) => ({
|
|
@@ -4296,30 +4565,51 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4296
4565
|
// Updates dataQueryFilters
|
|
4297
4566
|
setTempDataQueryFiltersState((prevFilters) => {
|
|
4298
4567
|
const filteredFilters = (prevFilters || []).filter((f) => f.attribute !== key);
|
|
4299
|
-
const updatedFilters = selectedDateString.trim()
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4568
|
+
// const updatedFilters = selectedDateString.trim()
|
|
4569
|
+
// ? [
|
|
4570
|
+
// ...filteredFilters,
|
|
4571
|
+
// new DataQueryFilter()
|
|
4572
|
+
// .setAttribute(key)
|
|
4573
|
+
// .setCondition(DataFilterCondition.Equal)
|
|
4574
|
+
// .setValue(selectedDateString),
|
|
4575
|
+
// ]
|
|
4576
|
+
// : filteredFilters;
|
|
4577
|
+
let updatedFilters;
|
|
4578
|
+
if (type === 'dataElement') {
|
|
4579
|
+
updatedFilters = selectedDateString.trim()
|
|
4580
|
+
? [
|
|
4581
|
+
...filteredFilters,
|
|
4582
|
+
new DataQueryFilter()
|
|
4583
|
+
.setAttribute(key)
|
|
4584
|
+
.setCondition(DataFilterCondition.Equal)
|
|
4585
|
+
.setValue(selectedDateString)
|
|
4586
|
+
.setType('DATA_ELEMENT'),
|
|
4587
|
+
]
|
|
4588
|
+
: filteredFilters;
|
|
4589
|
+
}
|
|
4590
|
+
else {
|
|
4591
|
+
updatedFilters = selectedDateString.trim()
|
|
4592
|
+
? [
|
|
4593
|
+
...filteredFilters,
|
|
4594
|
+
new DataQueryFilter()
|
|
4595
|
+
.setAttribute(key)
|
|
4596
|
+
.setCondition(DataFilterCondition.Equal)
|
|
4597
|
+
.setValue(selectedDateString),
|
|
4598
|
+
]
|
|
4599
|
+
: filteredFilters;
|
|
4600
|
+
}
|
|
4308
4601
|
return updatedFilters;
|
|
4309
4602
|
});
|
|
4310
4603
|
};
|
|
4311
|
-
const
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
|
|
4604
|
+
const handleAdditionalFilters = () => setDataQueryFiltersState(tempDataQueryFiltersState);
|
|
4605
|
+
const handleStartDateFilter = () => setStartDateState(tempStartDateState);
|
|
4606
|
+
const handleEndDateFilter = () => setEndDateState(tempEndDateState);
|
|
4607
|
+
const handleOrgUnitFilter = () => setOrgUnitState(tempOrgUnitState);
|
|
4315
4608
|
function getTextColorFromBackGround(hex) {
|
|
4316
|
-
// Removes the hash if present
|
|
4317
4609
|
hex = hex.replace('#', '');
|
|
4318
|
-
// Converts to RGB
|
|
4319
4610
|
const r = parseInt(hex.substr(0, 2), 16);
|
|
4320
4611
|
const g = parseInt(hex.substr(2, 2), 16);
|
|
4321
4612
|
const b = parseInt(hex.substr(4, 2), 16);
|
|
4322
|
-
// YIQ formula to calculate brightness
|
|
4323
4613
|
const yiq = (r * 299 + g * 587 + b * 114) / 1000;
|
|
4324
4614
|
// Returns black for light backgrounds, white for dark backgrounds
|
|
4325
4615
|
return yiq >= 128 ? colors$1.grey700 : '#FFFFFF';
|
|
@@ -4344,8 +4634,8 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4344
4634
|
React__default.createElement(MenuItem$1, { label: "Download Csv", onClick: handleCsvDownload }),
|
|
4345
4635
|
React__default.createElement(MenuItem$1, { label: "Download Excel", onClick: handleExcelDownload })), value: "Download" }, "Download"))),
|
|
4346
4636
|
orgUnitModalVisible && (React__default.createElement(OrgUnitSelector, { hide: hide, setHide: setHide, selectedOrgUnit: selectedOrgUnit, setSelectedOrgUnit: setSelectedOrgUnit, setOrgUnitState: setOrgUnitState, setTempOrgUnitState: setTempOrgUnitState, tempOrgUnitState: tempOrgUnitState })),
|
|
4347
|
-
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,
|
|
4348
|
-
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 })))));
|
|
4637
|
+
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 })),
|
|
4638
|
+
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 })))));
|
|
4349
4639
|
};
|
|
4350
4640
|
}
|
|
4351
4641
|
ngOnChanges(changes) {
|
|
@@ -4394,7 +4684,7 @@ class LineListTableComponent extends ReactWrapperModule {
|
|
|
4394
4684
|
this.render();
|
|
4395
4685
|
}
|
|
4396
4686
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
4397
|
-
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"] }); }
|
|
4687
|
+
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"] }); }
|
|
4398
4688
|
}
|
|
4399
4689
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: LineListTableComponent, decorators: [{
|
|
4400
4690
|
type: Component,
|
|
@@ -4453,6 +4743,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
|
4453
4743
|
type: Input
|
|
4454
4744
|
}], showDownloadButton: [{
|
|
4455
4745
|
type: Input
|
|
4746
|
+
}], searcheableDataElements: [{
|
|
4747
|
+
type: Input
|
|
4456
4748
|
}] } });
|
|
4457
4749
|
|
|
4458
4750
|
class LineListModule {
|
|
@@ -6215,7 +6507,11 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
6215
6507
|
setTouched(true);
|
|
6216
6508
|
};
|
|
6217
6509
|
const checkValueUniqueness = async () => {
|
|
6218
|
-
if (this.field().unique ||
|
|
6510
|
+
if (this.field().unique ||
|
|
6511
|
+
((this.field().extension?.isDataElementUnique ?? false) &&
|
|
6512
|
+
value &&
|
|
6513
|
+
value.length > 0 &&
|
|
6514
|
+
touched)) {
|
|
6219
6515
|
// if (this.field().unique && value && value.length > 0 && touched) {
|
|
6220
6516
|
setCheckingUniqueness(true);
|
|
6221
6517
|
setRecordExistError(undefined);
|
|
@@ -6279,6 +6575,13 @@ class BaseFormFieldComponent extends ReactWrapperModule {
|
|
|
6279
6575
|
}, onBlur: () => {
|
|
6280
6576
|
checkValueUniqueness();
|
|
6281
6577
|
}, selected: arrayValue }, (this.field().options || []).map((option) => (React__default.createElement(MultiSelectOption, { key: option.key, label: option.label, value: option.value })))));
|
|
6578
|
+
case 'date':
|
|
6579
|
+
case 'date-time':
|
|
6580
|
+
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) => {
|
|
6581
|
+
onValueChange(event.value);
|
|
6582
|
+
}, onBlur: () => {
|
|
6583
|
+
checkValueUniqueness();
|
|
6584
|
+
} }));
|
|
6282
6585
|
case 'file':
|
|
6283
6586
|
return (React__default.createElement(React__default.Fragment, null,
|
|
6284
6587
|
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) => {
|