@iapps/ng-dhis2-ui 1.0.9 → 1.1.0

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.
@@ -1,7 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { NgModule, Directive, Input, ContentChild, Component, EventEmitter, Output, Injectable, inject } from '@angular/core';
4
- import { IconEdit16, spacers, colors, theme, Tooltip, Button as Button$1, IconDimensionData16, IconClock16, IconDimensionOrgUnit16, 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, DataTable, TableHead, DataTableRow, DataTableColumnHeader, TableBody, DataTableCell, TableFoot, Pagination } from '@dhis2/ui';
4
+ import { IconEdit16, spacers, colors, theme, Tooltip, Button as Button$1, IconDimensionData16, IconClock16, IconDimensionOrgUnit16, 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 } from '@dhis2/ui';
5
5
  import cx from 'classnames';
6
6
  import PropTypes from 'prop-types';
7
7
  import * as React from 'react';
@@ -27,7 +27,7 @@ import { MenuItem, MenuDivider } from '@dhis2-ui/menu';
27
27
  import parse from 'html-react-parser';
28
28
  import { getNowInCalendar, generateFixedPeriods } from '@dhis2/multi-calendar-dates';
29
29
  import { isObject, isString } from 'lodash';
30
- import { switchMap, map as map$1 } from 'rxjs/operators';
30
+ import { map as map$1, switchMap } from 'rxjs/operators';
31
31
 
32
32
  const TransferOption = ({ disabled, label, highlighted, selected, onClick, onDoubleClick, value, icon, active, tooltipText, dataTest, onEditClick, }) => {
33
33
  const renderContent = () => (React__default.createElement("div", { className: cx('chip', {
@@ -1151,9 +1151,6 @@ class ReactWrapperComponent {
1151
1151
  this.reactDomRoot = ReactDOM.createRoot(this.elementRef.nativeElement);
1152
1152
  this.render();
1153
1153
  }
1154
- ngOnChanges() {
1155
- // if (this.elementRef) this.render();
1156
- }
1157
1154
  ngOnDestroy() {
1158
1155
  this.reactDomRoot?.unmount();
1159
1156
  }
@@ -1174,7 +1171,7 @@ class ReactWrapperComponent {
1174
1171
  }
1175
1172
  }
1176
1173
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ReactWrapperComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1177
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.7", type: ReactWrapperComponent, isStandalone: false, selector: "ng-dhis2-ui-wrapper", inputs: { props: "props", component: "component" }, queries: [{ propertyName: "content", first: true, predicate: ["ngDhis2UiContent"], descendants: true }], usesOnChanges: true, ngImport: i0 }); }
1174
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.7", type: ReactWrapperComponent, isStandalone: false, selector: "ng-dhis2-ui-wrapper", inputs: { props: "props", component: "component" }, queries: [{ propertyName: "content", first: true, predicate: ["ngDhis2UiContent"], descendants: true }], ngImport: i0 }); }
1178
1175
  }
1179
1176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ReactWrapperComponent, decorators: [{
1180
1177
  type: Directive,
@@ -2964,11 +2961,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
2964
2961
  // Use of this source code is governed by a BSD-style
2965
2962
  // license that can be found in the LICENSE file.
2966
2963
 
2964
+ // export function buildFilters(filters: AttributeFilter[]): string {
2965
+ // return filters
2966
+ // .map(({ attribute, operator, value }) => `filter=${attribute}:${operator}:${value}`)
2967
+ // .join('&');
2968
+ // }
2967
2969
  function buildFilters(filters) {
2968
2970
  return filters
2969
- .map(({ attribute, operator, value }) => `filter=${attribute}:${operator}:${value}`)
2971
+ .map(({ attribute, dataElement, operator, value }) => {
2972
+ // Check if attribute is defined, otherwise use dataElement
2973
+ const field = attribute || dataElement;
2974
+ return field ? `filter=${field}:${operator}:${value}` : '';
2975
+ })
2976
+ .filter(Boolean) // Remove any empty strings
2970
2977
  .join('&');
2971
2978
  }
2979
+ const matchesCondition = (eventValue, operator, filterValue) => {
2980
+ if (typeof eventValue === 'number' && typeof filterValue === 'number') {
2981
+ switch (operator) {
2982
+ case '=':
2983
+ return eventValue === filterValue;
2984
+ case '!=':
2985
+ return eventValue !== filterValue;
2986
+ case '>':
2987
+ return eventValue > filterValue;
2988
+ case '<':
2989
+ return eventValue < filterValue;
2990
+ case '>=':
2991
+ return eventValue >= filterValue;
2992
+ case '<=':
2993
+ return eventValue <= filterValue;
2994
+ default:
2995
+ return false;
2996
+ }
2997
+ }
2998
+ const strEventValue = String(eventValue);
2999
+ const strFilterValue = String(filterValue);
3000
+ switch (operator) {
3001
+ case '=':
3002
+ return strEventValue === strFilterValue;
3003
+ case '!=':
3004
+ return strEventValue !== strFilterValue;
3005
+ case 'contains':
3006
+ return strEventValue.includes(strFilterValue);
3007
+ case 'startsWith':
3008
+ return strEventValue.startsWith(strFilterValue);
3009
+ case 'endsWith':
3010
+ return strEventValue.endsWith(strFilterValue);
3011
+ case 'regex':
3012
+ return new RegExp(strFilterValue).test(strEventValue);
3013
+ default:
3014
+ return false;
3015
+ }
3016
+ };
3017
+ const getFilteredTrackedEntityInstances = (trackedEntityInstance, filters) => {
3018
+ return trackedEntityInstance.filter((trackedEntityInstance) => trackedEntityInstance.enrollments.some((enrollment) => enrollment.events.some((event) => filters.every((filter) => event.programStage === filter.programStage &&
3019
+ event.dataValues.some((dataValue) => dataValue.dataElement === filter.dataElement &&
3020
+ matchesCondition(dataValue.value, filter.operator, filter.value))))));
3021
+ };
2972
3022
 
2973
3023
  class LineListService {
2974
3024
  constructor(httpClient) {
@@ -2980,18 +3030,28 @@ class LineListService {
2980
3030
  getTrackedEntityInstances(programId, orgUnit, page, pageSize, filters = [], startDate, endDate) {
2981
3031
  const filterParams = buildFilters(filters);
2982
3032
  const dateFilter = startDate && endDate ? `&programStartDate=${startDate}&programEndDate=${endDate}` : '';
2983
- return this.httpClient.get(`trackedEntityInstances.json?program=${programId}&ou=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=trackedEntityInstance,attributes[*],enrollments[*]&totalPages=true&${filterParams}${dateFilter}`);
3033
+ return this.httpClient.get(`trackedEntityInstances.json?program=${programId}&ou=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=trackedEntityInstance,attributes[*],enrollments[*]&totalPages=true&${filterParams}${dateFilter}`).pipe(map$1((response) => {
3034
+ response.trackedEntityInstances.forEach((tei) => {
3035
+ // Filter attributes to only include those with displayInList=true
3036
+ tei.attributes = tei.attributes.filter((attr) => attr.displayInList);
3037
+ });
3038
+ return response;
3039
+ }));
2984
3040
  }
2985
- getEvents(programId, orgUnit, page, pageSize) {
2986
- return this.httpClient.get(`events.json?program=${programId}&orgUnit=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=event,programStage,dataValues[dataElement,value]&totalPages=true`);
3041
+ getEvents(programId, orgUnit, page, pageSize, filters = [], startDate, endDate) {
3042
+ const filterParams = buildFilters(filters);
3043
+ const dateFilter = startDate && endDate ? `&startDate=${startDate}&endDate=${endDate}` : '';
3044
+ return this.httpClient.get(`events.json?program=${programId}&orgUnit=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=*&totalPages=true&${filterParams}${dateFilter}`);
2987
3045
  }
2988
- getEventsByProgramStage(programStageId, orgUnit, page, pageSize) {
2989
- return this.httpClient.get(`events.json?programStage=${programStageId}&orgUnit=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=event,dataValues[dataElement,value]&totalPages=true`);
3046
+ getEventsByProgramStage(programStageId, orgUnit, page, pageSize, filters = [], startDate, endDate) {
3047
+ const filterParams = buildFilters(filters);
3048
+ const dateFilter = startDate && endDate ? `&startDate=${startDate}&endDate=${endDate}` : '';
3049
+ return this.httpClient.get(`events.json?programStage=${programStageId}&orgUnit=${orgUnit}&page=${page}&pageSize=${pageSize}&fields=*&totalPages=true&${filterParams}${dateFilter}`);
2990
3050
  }
2991
3051
  getLineListData(programId, orgUnit = '', programStageId, page = 1, pageSize = 10, filters = [], startDate, endDate) {
2992
3052
  return this.getProgramMetadata(programId).pipe(switchMap((programMetadata) => {
2993
3053
  if (programStageId) {
2994
- return this.getEventsByProgramStage(programStageId, orgUnit, page, pageSize).pipe(map$1((events) => ({
3054
+ return this.getEventsByProgramStage(programStageId, orgUnit, page, pageSize, filters, startDate, endDate).pipe(map$1((events) => ({
2995
3055
  metadata: programMetadata,
2996
3056
  data: events,
2997
3057
  })));
@@ -3003,7 +3063,7 @@ class LineListService {
3003
3063
  })));
3004
3064
  }
3005
3065
  else {
3006
- return this.getEvents(programId, orgUnit, page, pageSize).pipe(map$1((events) => ({
3066
+ return this.getEvents(programId, orgUnit, page, pageSize, filters, startDate, endDate).pipe(map$1((events) => ({
3007
3067
  metadata: programMetadata,
3008
3068
  data: events,
3009
3069
  })));
@@ -3091,11 +3151,11 @@ const ContextMenu = (params) => {
3091
3151
  const [CurrentModal, setCurrentModal] = useCurrentModal();
3092
3152
  const styles = useDynamicStyles(dropdownStyles);
3093
3153
  return (React__default.createElement(React__default.Fragment, null,
3094
- React__default.createElement(Layer$1, { onBackdropClick: onClose, className: styles.layer },
3154
+ React__default.createElement(Layer$1, { onBackdropClick: (event, data) => onClose(event, data), className: styles.layer },
3095
3155
  React__default.createElement(Popper, { reference: anchorRef, placement: "bottom-start" },
3096
3156
  React__default.createElement(FlyoutMenu, null, dropDownOptions.map((dropDownOption, index) => (React__default.createElement(MenuItem$1, { key: index, destructive: dropDownOption.destructive, label: dropDownOption.label, icon: dropDownOption.icon, onClick: () => {
3097
- // onMenuClick(dropDownOption);
3098
- //onClose();
3157
+ onMenuClick(dropDownOption);
3158
+ onClose();
3099
3159
  }, dense: true })))))),
3100
3160
  CurrentModal && (React__default.createElement(CurrentModal, { onClose: () => {
3101
3161
  onClose();
@@ -3138,8 +3198,12 @@ const getProgramStageData = (response, programStageId, pager) => {
3138
3198
  });
3139
3199
  return { columns: entityColumns, data: dataElementsData };
3140
3200
  };
3141
- const getTrackedEntityData = (response, programId, pager) => {
3142
- const teis = response.data.trackedEntityInstances;
3201
+ const getTrackedEntityData = (response, programId, pager, filters) => {
3202
+ let teis = response.data
3203
+ .trackedEntityInstances;
3204
+ if (filters) {
3205
+ teis = getFilteredTrackedEntityInstances(teis, filters);
3206
+ }
3143
3207
  const allAttributes = new Set();
3144
3208
  teis.forEach((tei) => {
3145
3209
  const matchingEnrollment = tei.enrollments.find((enrollment) => enrollment.program === programId);
@@ -3207,9 +3271,15 @@ const addActionsColumn = (columns, actionOptions) => {
3207
3271
  ];
3208
3272
  };
3209
3273
 
3274
+ // src/app/line-list-table.component.ts
3210
3275
  class LineListTableComponent extends ReactWrapperComponent {
3211
3276
  constructor() {
3212
3277
  super(...arguments);
3278
+ this.actionSelected = new EventEmitter();
3279
+ this.reactStateUpdaters = null;
3280
+ this.setReactStateUpdaters = (updaters) => {
3281
+ this.reactStateUpdaters = updaters;
3282
+ };
3213
3283
  this.lineListService = inject(LineListService);
3214
3284
  this.LineList = () => {
3215
3285
  const [columns, setColumns] = useState([]);
@@ -3221,20 +3291,40 @@ class LineListTableComponent extends ReactWrapperComponent {
3221
3291
  pageCount: 1,
3222
3292
  });
3223
3293
  const paginationRef = useRef(null);
3294
+ const [programIdState, setProgramIdState] = useState(this.programId);
3295
+ const [orgUnitState, setOrgUnitState] = useState(this.orgUnit);
3296
+ const [programStageIdState, setProgramStageIdState] = useState(this.programStageId);
3297
+ const [attributeFiltersState, setAttributeFiltersState] = useState(this.attributeFilters);
3298
+ const [startDateState, setStartDateState] = useState(this.startDate);
3299
+ const [endDateState, setEndDateState] = useState(this.endDate);
3300
+ const [loading, setLoading] = useState(false);
3301
+ // Store updaters in refs for Angular to access
3302
+ const updateRefs = useRef({
3303
+ setProgramIdState,
3304
+ setOrgUnitState,
3305
+ setProgramStageIdState,
3306
+ setAttributeFiltersState,
3307
+ setStartDateState,
3308
+ setEndDateState,
3309
+ });
3224
3310
  useEffect(() => {
3225
- setTimeout(() => {
3226
- const paginationContainer = document.querySelector('[data-test="dhis2-uiwidgets-pagination"]');
3227
- if (paginationContainer) {
3228
- paginationContainer.style.setProperty('display', 'flex', 'important');
3229
- paginationContainer.style.setProperty('flex-direction', 'row', 'important');
3230
- paginationContainer.style.setProperty('justify-content', 'space-between', 'important');
3231
- paginationContainer.style.setProperty('align-items', 'center', 'important');
3232
- }
3233
- }, 1000);
3234
- if (paginationRef.current) {
3235
- paginationRef.current.style.setProperty('display', 'flex', 'important');
3236
- paginationRef.current.style.setProperty('flex-direction', 'row', 'important');
3311
+ this.setReactStateUpdaters?.(updateRefs.current);
3312
+ }, []);
3313
+ useEffect(() => {
3314
+ if (!loading) {
3315
+ setTimeout(() => {
3316
+ const paginationContainer = document.querySelector('[data-test="dhis2-uiwidgets-pagination"]');
3317
+ if (paginationContainer) {
3318
+ paginationContainer.style.display = 'flex';
3319
+ paginationContainer.style.flexDirection = 'row';
3320
+ paginationContainer.style.justifyContent = 'space-between';
3321
+ paginationContainer.style.alignItems = 'center';
3322
+ }
3323
+ }, 500); // Short delay to ensure styles apply after data renders
3237
3324
  }
3325
+ }, [loading]);
3326
+ useEffect(() => {
3327
+ setLoading(true);
3238
3328
  this.lineListService
3239
3329
  .getLineListData(this.programId, this.orgUnit, this.programStageId, pager.page, pager.pageSize, this.attributeFilters, this.startDate, this.endDate)
3240
3330
  .subscribe((response) => {
@@ -3250,7 +3340,7 @@ class LineListTableComponent extends ReactWrapperComponent {
3250
3340
  else if ('trackedEntityInstances' in response.data) {
3251
3341
  responsePager = response.data
3252
3342
  .pager;
3253
- const { columns, data } = getTrackedEntityData(response, this.programId, pager);
3343
+ const { columns, data } = getTrackedEntityData(response, this.programId, pager, this.filters);
3254
3344
  entityColumns = columns;
3255
3345
  entityData = data;
3256
3346
  }
@@ -3261,27 +3351,41 @@ class LineListTableComponent extends ReactWrapperComponent {
3261
3351
  entityData = data;
3262
3352
  }
3263
3353
  const finalColumns = addActionsColumn([{ label: '#', key: 'index' }, ...entityColumns], this.actionOptions);
3264
- setColumns(finalColumns);
3265
- setData(entityData);
3266
- setPager(responsePager);
3354
+ setLoading(false);
3355
+ console.log('hey');
3356
+ setColumns(...[finalColumns]);
3357
+ setData(...[entityData]);
3358
+ setPager(...[responsePager]);
3359
+ console.log('columns', columns);
3360
+ console.log('data', data);
3267
3361
  });
3268
- }, [pager.page, pager.pageSize]);
3269
- console.log('columns', columns);
3270
- console.log('data', data);
3362
+ }, [
3363
+ programIdState,
3364
+ orgUnitState,
3365
+ programStageIdState,
3366
+ attributeFiltersState,
3367
+ startDateState,
3368
+ endDateState,
3369
+ pager.page,
3370
+ pager.pageSize,
3371
+ ]);
3271
3372
  const getDropdownOptions = (row) => {
3272
3373
  return (this.actionOptions || []).map((option) => ({
3273
3374
  ...option,
3274
- onClick: () => option.onClick?.(row),
3375
+ onClick: () => {
3376
+ option.onClick?.(row);
3377
+ this.actionSelected.emit({ action: option.label, row });
3378
+ },
3275
3379
  }));
3276
3380
  };
3277
- return (React__default.createElement("div", null,
3278
- React__default.createElement(DataTable, null,
3381
+ return (React__default.createElement("div", null, loading ? (React__default.createElement(CircularLoader$1, null)) :
3382
+ (React__default.createElement(DataTable, null,
3279
3383
  React__default.createElement(TableHead, null,
3280
3384
  React__default.createElement(DataTableRow, null, columns.map((col) => (React__default.createElement(DataTableColumnHeader, { key: col.key }, col.label))))),
3281
3385
  React__default.createElement(TableBody, null, data.map((row) => (React__default.createElement(DataTableRow, { key: row.index }, columns.map((col) => (React__default.createElement(DataTableCell, { key: col.key }, col.key === 'actions' ? (React__default.createElement(DropdownMenu, { dropdownOptions: getDropdownOptions(row), onClick: (option) => option.onClick?.() })) : (row[col.key])))))))),
3282
3386
  React__default.createElement(TableFoot, null,
3283
3387
  React__default.createElement(DataTableRow, null,
3284
- React__default.createElement(DataTableCell, { colSpan: columns.length },
3388
+ React__default.createElement(DataTableCell, { colSpan: columns.length.toString() },
3285
3389
  React__default.createElement("div", null,
3286
3390
  React__default.createElement(Pagination, { page: pager.page, pageCount: pager.pageCount, pageSize: pager.pageSize, total: pager.total, onPageChange: (page) => setPager((prev) => ({ ...prev, page })), onPageSizeChange: (pageSize) => {
3287
3391
  const newPageSize = Number(pageSize);
@@ -3290,9 +3394,31 @@ class LineListTableComponent extends ReactWrapperComponent {
3290
3394
  page: 1,
3291
3395
  pageSize: newPageSize,
3292
3396
  }));
3293
- }, pageSizes: ['5', '10', '20', '50'] }))))))));
3397
+ }, pageSizes: ['5', '10', '20', '50'] })))))))));
3294
3398
  };
3295
3399
  }
3400
+ ngOnChanges(changes) {
3401
+ if (this.reactStateUpdaters) {
3402
+ if (changes['programId']) {
3403
+ this.reactStateUpdaters.setProgramIdState(this.programId);
3404
+ }
3405
+ if (changes['orgUnit']) {
3406
+ this.reactStateUpdaters.setOrgUnitState(this.orgUnit);
3407
+ }
3408
+ if (changes['programStageId']) {
3409
+ this.reactStateUpdaters.setProgramStageIdState(this.programStageId);
3410
+ }
3411
+ if (changes['attributeFilters']) {
3412
+ this.reactStateUpdaters.setAttributeFiltersState(this.attributeFilters);
3413
+ }
3414
+ if (changes['startDate']) {
3415
+ this.reactStateUpdaters.setStartDateState(this.startDate);
3416
+ }
3417
+ if (changes['endDate']) {
3418
+ this.reactStateUpdaters.setEndDateState(this.endDate);
3419
+ }
3420
+ }
3421
+ }
3296
3422
  async ngAfterViewInit() {
3297
3423
  if (!this.elementRef)
3298
3424
  throw new Error('No element ref');
@@ -3301,11 +3427,11 @@ class LineListTableComponent extends ReactWrapperComponent {
3301
3427
  this.render();
3302
3428
  }
3303
3429
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LineListTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3304
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: LineListTableComponent, isStandalone: false, selector: "app-line-list", inputs: { programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", attributeFilters: "attributeFilters", startDate: "startDate", endDate: "endDate" }, usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [""] }); }
3430
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: LineListTableComponent, isStandalone: false, selector: "app-line-list", inputs: { programId: "programId", orgUnit: "orgUnit", programStageId: "programStageId", actionOptions: "actionOptions", attributeFilters: "attributeFilters", startDate: "startDate", endDate: "endDate", filters: "filters" }, outputs: { actionSelected: "actionSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["[data-test=dhis2-uiwidgets-pagination]{display:flex!important;flex-direction:row!important;justify-content:space-between!important;align-items:center!important}\n"] }); }
3305
3431
  }
3306
3432
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LineListTableComponent, decorators: [{
3307
3433
  type: Component,
3308
- args: [{ selector: 'app-line-list', template: '<ng-content></ng-content>', standalone: false }]
3434
+ args: [{ selector: 'app-line-list', template: '<ng-content></ng-content>', standalone: false, styles: ["[data-test=dhis2-uiwidgets-pagination]{display:flex!important;flex-direction:row!important;justify-content:space-between!important;align-items:center!important}\n"] }]
3309
3435
  }], propDecorators: { programId: [{
3310
3436
  type: Input
3311
3437
  }], orgUnit: [{
@@ -3320,6 +3446,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
3320
3446
  type: Input
3321
3447
  }], endDate: [{
3322
3448
  type: Input
3449
+ }], filters: [{
3450
+ type: Input
3451
+ }], actionSelected: [{
3452
+ type: Output
3323
3453
  }] } });
3324
3454
 
3325
3455
  class LineListModule {