@apia/query 5.0.3 → 5.2.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.
@@ -16,7 +16,7 @@ type ListState = {
16
16
  showPagination?: boolean;
17
17
  showRegisterAmount?: boolean;
18
18
  avoidRefreshOnClearFilters?: boolean;
19
- reachedMax?: boolean;
19
+ hasReachedMax?: boolean;
20
20
  hasMore?: boolean;
21
21
  };
22
22
  running: boolean;
@@ -68,6 +68,12 @@ type TListControllerConfiguration = {
68
68
  canSetRegistersPerPage?: boolean;
69
69
  refreshOnStartup?: boolean;
70
70
  refreshAction?: string;
71
+ /**
72
+ * Runs filter-change server events sequentially so every event is processed
73
+ * and their table reconstructions finish in the same order they were emitted.
74
+ * Defaults to true. Set to false to retain the previous latest-event behavior.
75
+ */
76
+ serializeFilterChanges?: boolean;
71
77
  };
72
78
  type Arr<T> = T extends Array<any> ? T : Array<T>;
73
79
  type TQueryFilter = Arr<TLoadStructure['filters']>[0] & {
@@ -82,12 +88,22 @@ declare class ListController {
82
88
  env: TQueryEnvironment;
83
89
  configuration?: TListControllerConfiguration | undefined;
84
90
  queue: TasksQueue;
91
+ /** Dedicated queue that preserves every filter business event in FIFO order. */
92
+ protected readonly filterChangeQueue: TasksQueue;
93
+ /** Prevents runAutomatically from scheduling extra refreshes during a bulk clear. */
94
+ protected isClearingFilters: boolean;
95
+ /** Selects the dedicated FIFO queue instead of the cancellable general queue. */
96
+ protected readonly serializeFilterChanges: boolean;
97
+ /** Reapplies required-filter errors when a clear operation rebuilds the filters. */
98
+ protected validateRequiredFiltersAfterBuild: boolean;
85
99
  readonly table: TableController;
86
100
  readonly state: ListState;
87
101
  registersPerPage: number;
88
102
  protected emitter: EventEmitter<{
89
103
  refreshFuntionality: TFuntionalityData;
90
104
  deleteFilters: any;
105
+ validationResult: boolean;
106
+ hasBuiltFromGenericTable: null;
91
107
  }>;
92
108
  constructor(env: TQueryEnvironment, configuration?: TListControllerConfiguration | undefined);
93
109
  protected handleClickAction(action: TBasicAction, ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>): void;
@@ -100,7 +116,10 @@ declare class ListController {
100
116
  protected getFilterTypesMethodParameters(defaultParams: Record<string, unknown>): Record<string, unknown>;
101
117
  clearFilters(): Promise<void>;
102
118
  page(pageNumber: number): Promise<void>;
103
- validateFilters(): boolean;
119
+ validateFilters(props?: {
120
+ showError?: boolean;
121
+ notify?: boolean;
122
+ }): boolean;
104
123
  protected buildRefreshPostData(): Parameters<(typeof ApiaApi)['post']>[2];
105
124
  protected buildExportConfirmData(): Record<string, unknown>;
106
125
  protected filterChange(parameters?: Partial<{
@@ -110,19 +129,24 @@ declare class ListController {
110
129
  refresh(parameters?: Partial<{
111
130
  action: string;
112
131
  clearBefore?: boolean;
132
+ keepStartingCustomLabel?: boolean;
133
+ /** Starts a new result set on page one instead of reloading the current page. */
134
+ resetPage?: boolean;
113
135
  }>): Promise<false | undefined>;
114
136
  protected refreshFuntionality(data: Omit<TListRefreshResponse, 'list'>): void;
115
- on: <K extends "refreshFuntionality" | "deleteFilters">(event: K, cb: _apia_util.Callback<{
137
+ on: <K extends "refreshFuntionality" | "deleteFilters" | "validationResult" | "hasBuiltFromGenericTable">(event: K, cb: _apia_util.Callback<{
116
138
  refreshFuntionality: TFuntionalityData;
117
139
  deleteFilters: any;
140
+ validationResult: boolean;
141
+ hasBuiltFromGenericTable: null;
118
142
  }, K>) => _apia_util.UnSubscriber;
119
143
  print(): Promise<false | undefined>;
120
144
  filterTypes(): Promise<false | undefined>;
121
145
  export(): Promise<false | undefined>;
122
146
  kill(): void;
123
147
  protected parseResultBeforeBuild(result: ListState & TLoadStructure): ListState & TLoadStructure;
124
- protected processRefreshResult(result: TListRefreshResponse): void;
125
- processStructureResult(result: TLoadStructure): void;
148
+ protected processRefreshResult(result: TListRefreshResponse, keepStartingCustomLabel?: boolean): void;
149
+ processStructureResult(result: TLoadStructure, keepStartingCustomLabel?: boolean): void;
126
150
  setRegistersPerPage(_n: number): void;
127
151
  }
128
152
 
@@ -22,6 +22,14 @@ class ListController {
22
22
  this.env = env;
23
23
  this.configuration = configuration;
24
24
  __publicField(this, "queue", new TasksQueue());
25
+ /** Dedicated queue that preserves every filter business event in FIFO order. */
26
+ __publicField(this, "filterChangeQueue", new TasksQueue());
27
+ /** Prevents runAutomatically from scheduling extra refreshes during a bulk clear. */
28
+ __publicField(this, "isClearingFilters", false);
29
+ /** Selects the dedicated FIFO queue instead of the cancellable general queue. */
30
+ __publicField(this, "serializeFilterChanges");
31
+ /** Reapplies required-filter errors when a clear operation rebuilds the filters. */
32
+ __publicField(this, "validateRequiredFiltersAfterBuild", false);
25
33
  __publicField(this, "table");
26
34
  __publicField(this, "state", {
27
35
  areAllFiltersApplied: true,
@@ -32,7 +40,7 @@ class ListController {
32
40
  showPagination: true,
33
41
  showRegisterAmount: true,
34
42
  avoidRefreshOnClearFilters: false,
35
- reachedMax: false,
43
+ hasReachedMax: false,
36
44
  hasMore: false
37
45
  },
38
46
  running: true,
@@ -46,37 +54,38 @@ class ListController {
46
54
  __publicField(this, "emitter", new EventEmitter());
47
55
  __publicField(this, "refreshTimeout", -1);
48
56
  __publicField(this, "on", this.emitter.on.bind(this.emitter));
57
+ this.serializeFilterChanges = configuration?.serializeFilterChanges !== false;
49
58
  this.table = new TableController({
50
59
  labels: env.context.labels,
51
60
  getDateFromString: env.getDateFromString,
52
61
  getStringFromDate: env.getStringFromDate
53
62
  });
54
- this.table.setState("customLabel", window.MSG_FIRST_TIME);
55
63
  this.table.head.getFiltersRow()?.setState("isHidden", true);
56
64
  if (configuration?.refreshOnStartup !== false) {
57
- this.refresh();
65
+ this.refresh({ keepStartingCustomLabel: true });
58
66
  }
59
67
  this.table.on("filterChange", async (filter) => {
68
+ const isPartOfClearFilters = this.isClearingFilters;
60
69
  runInAction(() => {
61
70
  this.state.areAllFiltersApplied = false;
62
71
  });
63
72
  await this.filterChange({ fireFilterName: filter.getState("name") });
64
- if (filter.getState("runAutomatically")) {
73
+ if (filter.getState("runAutomatically") && !isPartOfClearFilters) {
65
74
  await this.throttleRefresh();
66
75
  }
67
76
  });
68
77
  this.table.on("filterPressEnter", (filter) => {
69
78
  if (filter.getState("type") !== "DATE") {
70
- this.refresh();
79
+ this.refresh({ resetPage: true });
71
80
  }
72
81
  });
73
82
  this.table.on("filterBlur", (filter) => {
74
83
  if (filter instanceof DateFilter) {
75
- this.refresh();
84
+ this.refresh({ resetPage: true });
76
85
  }
77
86
  });
78
87
  this.table.on("columnSort", () => {
79
- this.refresh();
88
+ this.refresh({ resetPage: true });
80
89
  });
81
90
  this.table.on("rowDblClick", ({ action, ev }) => {
82
91
  this.handleDblClickAction(action, ev);
@@ -101,7 +110,7 @@ class ListController {
101
110
  throttleRefresh() {
102
111
  clearTimeout(this.refreshTimeout);
103
112
  this.refreshTimeout = setTimeout(() => {
104
- this.refresh();
113
+ this.refresh({ resetPage: true });
105
114
  }, 300);
106
115
  }
107
116
  getPageMethodParameters(defaultParams) {
@@ -142,19 +151,22 @@ class ListController {
142
151
  }
143
152
  });
144
153
  }
145
- validateFilters() {
146
- const invalidFilters = this.table.getFilters().filter((c) => !c.validate());
154
+ validateFilters(props) {
155
+ const invalidFilters = this.table.getFilters().filter((c) => !c.validate(props?.showError !== false));
147
156
  if (invalidFilters.length) {
148
157
  this.table.setState("customLabel", "");
149
- notify({
150
- title: getLabel("titWarning").text,
151
- message: getLabel("msgQryFilterRequiredList", {
152
- text: {
153
- TOK1: invalidFilters.map((c) => c.getState("title")).join(", ")
154
- }
155
- }).text
156
- });
158
+ if (props?.notify !== false) {
159
+ notify({
160
+ title: getLabel("titWarning").text,
161
+ message: getLabel("msgQryFilterRequiredList", {
162
+ text: {
163
+ TOK1: invalidFilters.map((c) => c.getState("title")).join(", ")
164
+ }
165
+ }).text
166
+ });
167
+ }
157
168
  }
169
+ this.emitter.emit("validationResult", invalidFilters.length === 0);
158
170
  return invalidFilters.length === 0;
159
171
  }
160
172
  buildRefreshPostData() {
@@ -196,8 +208,11 @@ class ListController {
196
208
  if (!parameters?.fireFilterName && !this.table.getFilters().find((c) => c.getState("hasEvents"))) {
197
209
  return;
198
210
  }
199
- this.queue.clear();
200
- await this.queue.run(async () => {
211
+ const queue = this.serializeFilterChanges ? this.filterChangeQueue : this.queue;
212
+ if (!this.serializeFilterChanges) {
213
+ queue.clear();
214
+ }
215
+ await queue.run(async () => {
201
216
  const result = await ApiaApi.post(
202
217
  { ...this.env.context },
203
218
  this.getRefreshMethodParameters({
@@ -222,6 +237,8 @@ class ListController {
222
237
  this.state.areAllFiltersApplied = false;
223
238
  }
224
239
  this.queue.clear();
240
+ const refreshAction = parameters?.action ?? (this.configuration?.refreshAction || "refresh");
241
+ const page = parameters?.resetPage || parameters?.clearBefore ? 1 : Math.max(1, this.state.navigation.currentPage);
225
242
  await this.queue.run(async () => {
226
243
  if (this.validateFilters()) {
227
244
  runInAction(() => {
@@ -230,14 +247,19 @@ class ListController {
230
247
  const result = await ApiaApi.post(
231
248
  { ...this.env.context },
232
249
  this.getRefreshMethodParameters({
233
- action: parameters?.action ?? (this.configuration?.refreshAction || "refresh")
250
+ action: refreshAction,
251
+ page,
252
+ forceDataRefresh: true
234
253
  }),
235
254
  this.buildRefreshPostData()
236
255
  );
237
256
  if (result?.data?.list) {
238
- this.processRefreshResult(result.data);
257
+ this.processRefreshResult(
258
+ result.data,
259
+ parameters?.keepStartingCustomLabel
260
+ );
239
261
  }
240
- if (result?.data?.list.attributes) {
262
+ if (result?.data?.list?.attributes) {
241
263
  this.handleAttributes(result?.data?.list.attributes);
242
264
  }
243
265
  if (result?.data) {
@@ -245,6 +267,11 @@ class ListController {
245
267
  }
246
268
  } else {
247
269
  this.table.body.setState("rows", []);
270
+ this.state.navigation.hasMore = false;
271
+ this.state.navigation.hasReachedMax = false;
272
+ this.state.navigation.pagesCount = 0;
273
+ this.state.navigation.registers = 0;
274
+ this.state.navigation.currentPage = 1;
248
275
  }
249
276
  });
250
277
  }
@@ -329,14 +356,17 @@ class ListController {
329
356
  parseResultBeforeBuild(result) {
330
357
  return result;
331
358
  }
332
- processRefreshResult(result) {
359
+ processRefreshResult(result, keepStartingCustomLabel) {
333
360
  runInAction(() => {
334
- this.processStructureResult({
335
- behavior: result.list.behavior,
336
- columns: result.list.columns,
337
- filters: result.list.filters,
338
- rows: result.list.rows
339
- });
361
+ this.processStructureResult(
362
+ {
363
+ behavior: result.list.behavior,
364
+ columns: result.list.columns,
365
+ filters: result.list.filters,
366
+ rows: result.list.rows
367
+ },
368
+ keepStartingCustomLabel
369
+ );
340
370
  if (arrayOrArray(result.list.rows).length === 0 && this.table.body.rows.length > 0 || this.state.customLabel === window.MSG_FILTER_REQUIRED || !this.state.avoidExecuteFirstRefresh && this.state.hasBuiltFromGenericTable || this.state.avoidExecuteFirstRefresh && this.state.hasBuiltFromGenericTable) {
341
371
  this.table.setState("customLabel", window.FINDER_NO_DATA);
342
372
  }
@@ -344,6 +374,9 @@ class ListController {
344
374
  getDateFromString,
345
375
  getStringFromDate
346
376
  });
377
+ if (this.validateRequiredFiltersAfterBuild) {
378
+ this.validateFilters({ notify: false });
379
+ }
347
380
  const filters = this.table.head.getFilters();
348
381
  if (filters) {
349
382
  if (Array.from(filters.filters.values()).some(
@@ -375,10 +408,14 @@ class ListController {
375
408
  if (this.configuration) {
376
409
  this.configuration.refreshOnDeleteFilters = !result.list.navigation.avoidRefreshOnClearFilters;
377
410
  }
411
+ if (!this.state.hasBuiltFromGenericTable) {
412
+ this.validateFilters({ showError: false });
413
+ }
378
414
  this.state.hasBuiltFromGenericTable = true;
415
+ this.emitter.emit("hasBuiltFromGenericTable", null);
379
416
  });
380
417
  }
381
- processStructureResult(result) {
418
+ processStructureResult(result, keepStartingCustomLabel) {
382
419
  runInAction(() => {
383
420
  this.table.setState("allowEdition", result.behavior.allowEdition);
384
421
  this.table.setState("allowSelection", result.behavior.allowSelection);
@@ -391,6 +428,10 @@ class ListController {
391
428
  "avoidExecuteFirstRefresh",
392
429
  !!result.behavior.avoidExecuteFirstRefresh
393
430
  );
431
+ this.state.avoidExecuteFirstRefresh = !!result.behavior.avoidExecuteFirstRefresh;
432
+ if (result.behavior.avoidExecuteFirstRefresh && !keepStartingCustomLabel) {
433
+ this.table.setState("customLabel", "");
434
+ }
394
435
  this.table.head.build({
395
436
  columns: arrayOrArray(result.columns).map(({ attributes, ...c }) => {
396
437
  return {
@@ -400,7 +441,7 @@ class ListController {
400
441
  sortable: c.isSortable,
401
442
  isHidden: c.isHidden,
402
443
  properties: c,
403
- content: c.title,
444
+ content: c.title === "" ? c.name : c.title,
404
445
  className: c.className,
405
446
  sortState: c.sortType,
406
447
  showInAccordionTitle: c.showInAccordionTitle,
@@ -408,7 +449,8 @@ class ListController {
408
449
  style: {
409
450
  width: c.width
410
451
  }
411
- }
452
+ },
453
+ ...attributes
412
454
  };
413
455
  }),
414
456
  filters: arrayOrArray(result.filters).map(({ attributes, ...f }) => {
@@ -423,8 +465,9 @@ class ListController {
423
465
  properties: f,
424
466
  runAutomatically: f.runAutomatically,
425
467
  columnName: f.columnName,
426
- value: Array.isArray(f.options) || arrayOrArray(f.options)[0].label !== "" ? f.initialValue : "",
427
- asAdditional: f.asAdditional
468
+ value: Array.isArray(f.options) || arrayOrArray(f.options)[0]?.label !== "" ? f.initialValue : "",
469
+ asAdditional: f.asAdditional,
470
+ ...attributes
428
471
  };
429
472
  }
430
473
  return {
@@ -438,10 +481,14 @@ class ListController {
438
481
  runAutomatically: f.runAutomatically,
439
482
  columnName: f.columnName,
440
483
  value: f.initialValue,
441
- asAdditional: f.asAdditional
484
+ asAdditional: f.asAdditional,
485
+ ...attributes
442
486
  };
443
487
  })
444
488
  });
489
+ if (this.validateRequiredFiltersAfterBuild || this.state.hasBuiltFromGenericTable && this.table.getFilters().some((f) => f.getState("runAutomatically"))) {
490
+ this.validateFilters({ notify: false });
491
+ }
445
492
  });
446
493
  }
447
494
  setRegistersPerPage(_n) {
@@ -1 +1 @@
1
- {"version":3,"file":"ListController.js","sources":["../src/ListController.tsx"],"sourcesContent":["import { TQueryEnvironment } from './types';\r\nimport { ApiaApi } from '@apia/api2';\r\nimport {\r\n arrayOrArray,\r\n downloadUrl,\r\n EventEmitter,\r\n getLabel,\r\n handleAction,\r\n TasksQueue,\r\n TBasicAction,\r\n TLoadStructure,\r\n} from '@apia/util';\r\nimport { makeObservable, observable, runInAction } from 'mobx';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n Cell,\r\n DateFilter,\r\n FilterRenderer,\r\n TableController,\r\n} from '@apia/table2-controller';\r\nimport { getDateFromString } from './utils/getStringFromDate';\r\nimport { getStringFromDate } from './utils/getDateFromString';\r\nimport { ApiaUtil } from '@apia/components';\r\nimport { FilterTypes } from './components/modals/FilterTypes';\r\nimport { ExportModal } from './components/modals/ExportModal';\r\nimport { ExportController } from './components/modals/controllers/ExportController';\r\nimport {\r\n PivotTableConfig,\r\n TApiaChartDefinition,\r\n} from './QueriesFunctionalityController';\r\nimport { FC } from 'react';\r\n\r\nexport type ListState = {\r\n areAllFiltersApplied: boolean;\r\n attributes?: Record<string, unknown>;\r\n navigation: {\r\n pagesCount: number;\r\n registers: number;\r\n currentPage: number;\r\n showPagination?: boolean;\r\n showRegisterAmount?: boolean;\r\n avoidRefreshOnClearFilters?: boolean;\r\n reachedMax?: boolean;\r\n hasMore?: boolean;\r\n };\r\n running: boolean;\r\n title?: string;\r\n description?: string;\r\n customLabel?: string;\r\n avoidExecuteFirstRefresh?: boolean;\r\n hasBuiltFromGenericTable?: boolean;\r\n};\r\n\r\nexport type ListFunctionalityState = {\r\n fncId: number;\r\n isFavorite: boolean;\r\n isMaximized: boolean;\r\n};\r\n\r\nexport type TFuntionalityData = {\r\n chart?: {\r\n charts: { chart: TApiaChartDefinition } | { chart: TApiaChartDefinition }[];\r\n };\r\n chartButton?: {\r\n chartsbuttons:\r\n | { chartbutton: { qryChtId: string; title: string } }\r\n | { chartbutton: { qryChtId: string; title: string } }[];\r\n };\r\n pivot?: {\r\n pivots: { pivot: PivotTableConfig } | { pivot: PivotTableConfig }[];\r\n };\r\n};\r\n\r\nexport type TListRefreshResponse = {\r\n list: ListState & TLoadStructure;\r\n} & TFuntionalityData;\r\n\r\nexport type TListControllerConfiguration = {\r\n refreshOnDeleteFilters?: boolean;\r\n canSetRegistersPerPage?: boolean;\r\n refreshOnStartup?: boolean;\r\n refreshAction?: string;\r\n};\r\n\r\ntype Arr<T> = T extends Array<any> ? T : Array<T>;\r\nexport type TQueryFilter = Arr<TLoadStructure['filters']>[0] & {\r\n Renderer?: FilterRenderer;\r\n};\r\n\r\nexport type TQueryColumn = Arr<TLoadStructure['columns']>[0] & {\r\n Renderer?: FC<{ cell: Cell }>;\r\n};\r\n\r\nexport class ListController {\r\n queue = new TasksQueue();\r\n public readonly table: TableController;\r\n public readonly state: ListState = {\r\n areAllFiltersApplied: true,\r\n navigation: {\r\n currentPage: 0,\r\n pagesCount: 0,\r\n registers: 0,\r\n showPagination: true,\r\n showRegisterAmount: true,\r\n avoidRefreshOnClearFilters: false,\r\n reachedMax: false,\r\n hasMore: false,\r\n },\r\n running: true,\r\n title: '',\r\n description: '',\r\n customLabel: window.MSG_FIRST_TIME,\r\n avoidExecuteFirstRefresh: false,\r\n hasBuiltFromGenericTable: false,\r\n };\r\n registersPerPage = 30;\r\n\r\n protected emitter = new EventEmitter<{\r\n refreshFuntionality: TFuntionalityData;\r\n deleteFilters: any;\r\n }>();\r\n\r\n constructor(\r\n public env: TQueryEnvironment,\r\n public configuration?: TListControllerConfiguration,\r\n ) {\r\n this.table = new TableController({\r\n labels: env.context.labels,\r\n getDateFromString: env.getDateFromString,\r\n getStringFromDate: env.getStringFromDate,\r\n });\r\n this.table.setState('customLabel', window.MSG_FIRST_TIME);\r\n\r\n this.table.head.getFiltersRow()?.setState('isHidden', true);\r\n if (configuration?.refreshOnStartup !== false) {\r\n this.refresh();\r\n }\r\n\r\n this.table.on('filterChange', async (filter) => {\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = false;\r\n });\r\n\r\n await this.filterChange({ fireFilterName: filter.getState('name') });\r\n\r\n if (filter.getState('runAutomatically')) {\r\n await this.throttleRefresh();\r\n }\r\n });\r\n\r\n this.table.on('filterPressEnter', (filter) => {\r\n if (filter.getState('type') !== 'DATE') {\r\n this.refresh();\r\n }\r\n });\r\n\r\n this.table.on('filterBlur', (filter) => {\r\n if (filter instanceof DateFilter) {\r\n this.refresh();\r\n }\r\n });\r\n\r\n this.table.on('columnSort', () => {\r\n this.refresh();\r\n });\r\n this.table.on('rowDblClick', ({ action, ev }) => {\r\n this.handleDblClickAction(action, ev);\r\n });\r\n\r\n this.table.on('rowClick', ({ action, ev }) => {\r\n this.handleClickAction(action, ev);\r\n });\r\n makeObservable(this, { state: observable, table: observable });\r\n }\r\n\r\n protected handleClickAction(\r\n action: TBasicAction,\r\n ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>,\r\n ) {\r\n handleAction({}, ev, action);\r\n }\r\n\r\n protected handleDblClickAction(\r\n action: TBasicAction,\r\n ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>,\r\n ) {\r\n handleAction({}, ev, action);\r\n }\r\n\r\n protected handleAttributes(attributes: Pick<ListState, 'attributes'>): void {\r\n runInAction(() => {\r\n this.state.attributes = attributes;\r\n });\r\n return;\r\n }\r\n\r\n protected refreshTimeout = -1;\r\n protected throttleRefresh() {\r\n clearTimeout(this.refreshTimeout);\r\n this.refreshTimeout = setTimeout(() => {\r\n this.refresh();\r\n }, 300) as any;\r\n }\r\n\r\n protected getPageMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n protected getRefreshMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n protected getFilterTypesMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n async clearFilters() {\r\n this.table.getFilters().forEach((c) => c.clear(false));\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = false;\r\n });\r\n\r\n this.emitter.emit('deleteFilters', null);\r\n await this.filterChange({ subAction: 'clearFilters' });\r\n\r\n if (this.configuration?.refreshOnDeleteFilters) {\r\n this.throttleRefresh();\r\n }\r\n }\r\n\r\n async page(pageNumber: number) {\r\n this.queue.clear();\r\n await this.queue.run(async () => {\r\n if (this.validateFilters()) {\r\n const result = await ApiaApi.post<TListRefreshResponse>(\r\n { ...this.env.context },\r\n this.getPageMethodParameters({\r\n action: this.configuration?.refreshAction || 'refresh',\r\n page: pageNumber,\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processRefreshResult(result.data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public validateFilters() {\r\n const invalidFilters = this.table.getFilters().filter((c) => !c.validate());\r\n if (invalidFilters.length) {\r\n this.table.setState('customLabel', ''); //window.MSG_FILTER_REQUIRED);\r\n notify({\r\n title: getLabel('titWarning').text,\r\n message: getLabel('msgQryFilterRequiredList', {\r\n text: {\r\n TOK1: invalidFilters.map((c) => c.getState('title')).join(', '),\r\n },\r\n }).text,\r\n });\r\n }\r\n return invalidFilters.length === 0;\r\n }\r\n\r\n protected buildRefreshPostData(): Parameters<(typeof ApiaApi)['post']>[2] {\r\n return {\r\n postData: {\r\n ...this.table.getFilters().reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [`filter_${cur.getState('name')}`]: cur.getValueForSubmit(),\r\n }),\r\n {},\r\n ),\r\n ...this.table.getColumns().reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [`sort_${cur.getState('colName')}`]: cur.getState('sortState'),\r\n }),\r\n {},\r\n ),\r\n amount: this.table.getState('registersToShow'),\r\n },\r\n postDataTreatement: 'stringify',\r\n postDataStringifyOptions: { arrayFormat: 'repeat' },\r\n };\r\n }\r\n\r\n protected buildExportConfirmData(): Record<string, unknown> {\r\n return {\r\n format: ExportController.getInstance().getFormat(),\r\n amount: ExportController.getInstance().getAmount(),\r\n };\r\n }\r\n\r\n protected async filterChange(\r\n parameters?: Partial<{\r\n fireFilterName?: string;\r\n subAction?: string;\r\n }>,\r\n ) {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n\r\n if (\r\n parameters?.fireFilterName &&\r\n !this.table.getFilter(parameters.fireFilterName)?.getState('hasEvents')\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !parameters?.fireFilterName &&\r\n !this.table.getFilters().find((c) => c.getState('hasEvents'))\r\n ) {\r\n return;\r\n }\r\n\r\n this.queue.clear();\r\n await this.queue.run(async () => {\r\n const result = await ApiaApi.post<{ list: TLoadStructure }>(\r\n { ...this.env.context },\r\n this.getRefreshMethodParameters({\r\n action: 'newLoadStructure', //this.configuration?.refreshAction || 'refresh',\r\n subAction: parameters?.subAction ?? null,\r\n fireFilterName: parameters?.fireFilterName ?? null,\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processStructureResult(result.data.list);\r\n }\r\n });\r\n }\r\n\r\n async refresh(\r\n parameters?: Partial<{ action: string; clearBefore?: boolean }>,\r\n ) {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n\r\n if (parameters?.clearBefore) {\r\n this.table.getFilters().forEach((c) => c.clear(false));\r\n this.state.areAllFiltersApplied = false;\r\n }\r\n\r\n this.queue.clear();\r\n await this.queue.run(async () => {\r\n if (this.validateFilters()) {\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = true;\r\n });\r\n\r\n const result = await ApiaApi.post<TListRefreshResponse>(\r\n { ...this.env.context },\r\n this.getRefreshMethodParameters({\r\n action:\r\n parameters?.action ??\r\n (this.configuration?.refreshAction || 'refresh'),\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processRefreshResult(result.data);\r\n }\r\n if (result?.data?.list.attributes) {\r\n this.handleAttributes(result?.data?.list.attributes);\r\n }\r\n\r\n if (result?.data) {\r\n this.refreshFuntionality(result?.data);\r\n }\r\n } else {\r\n this.table.body.setState('rows', []);\r\n }\r\n });\r\n }\r\n\r\n protected refreshFuntionality(data: Omit<TListRefreshResponse, 'list'>) {\r\n if (data?.chart || data?.chartButton || data?.pivot) {\r\n this.emitter.emit('refreshFuntionality', data);\r\n }\r\n }\r\n\r\n on = this.emitter.on.bind(this.emitter);\r\n\r\n async print() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n\r\n const w = window.open(\r\n `${window.CONTEXT}/react/generic/print.jsp?printComponent=print/query/PrintQuery`,\r\n '_blank',\r\n `height=${screen.height}, width=${screen.width},location=no,menubar=yes,resizable=yes,scrollbars=yes,titlebar=yes,toolbar=no`,\r\n );\r\n if (w) {\r\n w.onload = () => {\r\n w.printData = this as unknown as string;\r\n };\r\n w.printData = this as unknown as string;\r\n }\r\n }\r\n\r\n async filterTypes() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n // await this.queue.run(async () => {\r\n // await ApiaApi.post({ ...this.env.context }, { action: 'filterOptions' });\r\n // });\r\n ApiaUtil.instance.modals.open({\r\n children: <FilterTypes controller={this} />,\r\n title: getLabel('sbtQryFilType').text,\r\n onConfirm: async () => {\r\n await this.queue.run(async () => {\r\n await ApiaApi.post(\r\n { ...this.env.context },\r\n // TODO: cuando se implementen las consultas de lista de tareas hay que manejar correctamente el working mode\r\n this.getFilterTypesMethodParameters({\r\n action: 'setFilterOptions',\r\n workingMode: 'R',\r\n }),\r\n {\r\n postData: this.table\r\n .getFilters()\r\n .reduce<Record<string, string>>((acc, filter, i) => {\r\n acc[filter.getState('id') ?? `filter_${i}`] =\r\n filter.getState('conditionValue') ?? '1';\r\n return acc;\r\n }, {}),\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n });\r\n return true;\r\n },\r\n size: 'md-fixed',\r\n });\r\n }\r\n\r\n async export() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n ApiaUtil.instance.modals.open({\r\n children: <ExportModal />,\r\n title: getLabel('titExport').text,\r\n onConfirm: async () => {\r\n const url = ApiaApi.makeUrl(this.env.context, {\r\n action: 'doExport',\r\n ...this.buildExportConfirmData(),\r\n });\r\n downloadUrl(url);\r\n return true;\r\n },\r\n size: 'md-fixed',\r\n });\r\n }\r\n\r\n public kill() {\r\n runInAction(() => {\r\n this.state.running = false;\r\n });\r\n this.queue.clear();\r\n }\r\n\r\n protected parseResultBeforeBuild(\r\n result: ListState & TLoadStructure,\r\n ): ListState & TLoadStructure {\r\n return result;\r\n }\r\n\r\n protected processRefreshResult(result: TListRefreshResponse) {\r\n runInAction(() => {\r\n this.processStructureResult({\r\n behavior: result.list.behavior,\r\n columns: result.list.columns,\r\n filters: result.list.filters,\r\n rows: result.list.rows,\r\n });\r\n if (\r\n (arrayOrArray(result.list.rows).length === 0 &&\r\n this.table.body.rows.length > 0) ||\r\n this.state.customLabel === window.MSG_FILTER_REQUIRED ||\r\n (!this.state.avoidExecuteFirstRefresh &&\r\n this.state.hasBuiltFromGenericTable) ||\r\n (this.state.avoidExecuteFirstRefresh &&\r\n this.state.hasBuiltFromGenericTable)\r\n ) {\r\n this.table.setState('customLabel', window.FINDER_NO_DATA);\r\n }\r\n this.table.fromGenericTable(this.parseResultBeforeBuild(result.list), {\r\n getDateFromString,\r\n getStringFromDate,\r\n });\r\n\r\n const filters = this.table.head.getFilters();\r\n if (filters) {\r\n if (\r\n Array.from(filters.filters.values()).some((f) =>\r\n f.getState('isRequired'),\r\n ) &&\r\n !this.state.hasBuiltFromGenericTable\r\n ) {\r\n this.table.setState('customLabel', '');\r\n }\r\n const headerFilters = Array.from(filters.filters.values()).filter(\r\n (f) => !f.asAdditional() || f.getCorrespondingColumn(),\r\n );\r\n\r\n const requiredHeaderFilters = headerFilters.filter((f) =>\r\n f.getState('isRequired'),\r\n );\r\n\r\n if (!this.state.hasBuiltFromGenericTable) {\r\n this.table.head\r\n .getFiltersRow()\r\n ?.setState(\r\n 'isHidden',\r\n requiredHeaderFilters.length > 0 ? false : true,\r\n );\r\n }\r\n }\r\n if (result.list.title) {\r\n this.state.title = result.list.title;\r\n this.table.setState('tableName', result.list.title);\r\n }\r\n if (result.list.description) {\r\n this.state.description = result.list.description;\r\n }\r\n this.state.navigation = result.list.navigation;\r\n if (this.configuration) {\r\n this.configuration.refreshOnDeleteFilters =\r\n !result.list.navigation.avoidRefreshOnClearFilters;\r\n }\r\n this.state.hasBuiltFromGenericTable = true;\r\n });\r\n }\r\n\r\n public processStructureResult(result: TLoadStructure) {\r\n runInAction(() => {\r\n this.table.setState('allowEdition', result.behavior.allowEdition);\r\n this.table.setState('allowSelection', result.behavior.allowSelection);\r\n this.table.setState(\r\n 'isSelectionMultiple',\r\n result.behavior.isMultipleSelection,\r\n );\r\n this.table.setState('fetchRowExpand', !!result.behavior.fetchRowExpand);\r\n this.table.setState(\r\n 'avoidExecuteFirstRefresh',\r\n !!result.behavior.avoidExecuteFirstRefresh,\r\n );\r\n this.table.head.build({\r\n columns: arrayOrArray(result.columns).map(({ attributes, ...c }) => {\r\n return {\r\n ...c,\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n sortState: c.sortType,\r\n showInAccordionTitle: c.showInAccordionTitle,\r\n domProperties: {\r\n style: {\r\n width: c.width,\r\n },\r\n },\r\n };\r\n }),\r\n filters: arrayOrArray(result.filters).map(({ attributes, ...f }) => {\r\n if (f.type === 'COMBO') {\r\n return {\r\n ...f,\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value:\r\n Array.isArray(f.options) ||\r\n arrayOrArray(f.options)[0].label !== ''\r\n ? f.initialValue\r\n : '',\r\n asAdditional: f.asAdditional,\r\n };\r\n }\r\n return {\r\n ...f,\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n });\r\n });\r\n }\r\n\r\n public setRegistersPerPage(_n: number) {\r\n throw new Error('Not implemented');\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListController.js","sources":["../src/ListController.tsx"],"sourcesContent":["import { TQueryEnvironment } from './types';\r\nimport { ApiaApi } from '@apia/api2';\r\nimport {\r\n arrayOrArray,\r\n downloadUrl,\r\n EventEmitter,\r\n getLabel,\r\n handleAction,\r\n TasksQueue,\r\n TBasicAction,\r\n TLoadStructure,\r\n} from '@apia/util';\r\nimport { makeObservable, observable, runInAction } from 'mobx';\r\nimport { notify } from '@apia/notifications';\r\nimport {\r\n Cell,\r\n DateFilter,\r\n FilterRenderer,\r\n TableController,\r\n} from '@apia/table2-controller';\r\nimport { getDateFromString } from './utils/getStringFromDate';\r\nimport { getStringFromDate } from './utils/getDateFromString';\r\nimport { ApiaUtil } from '@apia/components';\r\nimport { FilterTypes } from './components/modals/FilterTypes';\r\nimport { ExportModal } from './components/modals/ExportModal';\r\nimport { ExportController } from './components/modals/controllers/ExportController';\r\nimport {\r\n PivotTableConfig,\r\n TApiaChartDefinition,\r\n} from './QueriesFunctionalityController';\r\nimport { FC } from 'react';\r\n\r\nexport type ListState = {\r\n areAllFiltersApplied: boolean;\r\n attributes?: Record<string, unknown>;\r\n navigation: {\r\n pagesCount: number;\r\n registers: number;\r\n currentPage: number;\r\n showPagination?: boolean;\r\n showRegisterAmount?: boolean;\r\n avoidRefreshOnClearFilters?: boolean;\r\n hasReachedMax?: boolean;\r\n hasMore?: boolean;\r\n };\r\n running: boolean;\r\n title?: string;\r\n description?: string;\r\n customLabel?: string;\r\n avoidExecuteFirstRefresh?: boolean;\r\n hasBuiltFromGenericTable?: boolean;\r\n};\r\n\r\nexport type ListFunctionalityState = {\r\n fncId: number;\r\n isFavorite: boolean;\r\n isMaximized: boolean;\r\n};\r\n\r\nexport type TFuntionalityData = {\r\n chart?: {\r\n charts: { chart: TApiaChartDefinition } | { chart: TApiaChartDefinition }[];\r\n };\r\n chartButton?: {\r\n chartsbuttons:\r\n | { chartbutton: { qryChtId: string; title: string } }\r\n | { chartbutton: { qryChtId: string; title: string } }[];\r\n };\r\n pivot?: {\r\n pivots: { pivot: PivotTableConfig } | { pivot: PivotTableConfig }[];\r\n };\r\n};\r\n\r\nexport type TListRefreshResponse = {\r\n list: ListState & TLoadStructure;\r\n} & TFuntionalityData;\r\n\r\nexport type TListControllerConfiguration = {\r\n refreshOnDeleteFilters?: boolean;\r\n canSetRegistersPerPage?: boolean;\r\n refreshOnStartup?: boolean;\r\n refreshAction?: string;\r\n /**\r\n * Runs filter-change server events sequentially so every event is processed\r\n * and their table reconstructions finish in the same order they were emitted.\r\n * Defaults to true. Set to false to retain the previous latest-event behavior.\r\n */\r\n serializeFilterChanges?: boolean;\r\n};\r\n\r\ntype Arr<T> = T extends Array<any> ? T : Array<T>;\r\nexport type TQueryFilter = Arr<TLoadStructure['filters']>[0] & {\r\n Renderer?: FilterRenderer;\r\n};\r\n\r\nexport type TQueryColumn = Arr<TLoadStructure['columns']>[0] & {\r\n Renderer?: FC<{ cell: Cell }>;\r\n};\r\n\r\nexport class ListController {\r\n queue = new TasksQueue();\r\n /** Dedicated queue that preserves every filter business event in FIFO order. */\r\n protected readonly filterChangeQueue = new TasksQueue();\r\n /** Prevents runAutomatically from scheduling extra refreshes during a bulk clear. */\r\n protected isClearingFilters = false;\r\n /** Selects the dedicated FIFO queue instead of the cancellable general queue. */\r\n protected readonly serializeFilterChanges: boolean;\r\n /** Reapplies required-filter errors when a clear operation rebuilds the filters. */\r\n protected validateRequiredFiltersAfterBuild = false;\r\n public readonly table: TableController;\r\n public readonly state: ListState = {\r\n areAllFiltersApplied: true,\r\n navigation: {\r\n currentPage: 0,\r\n pagesCount: 0,\r\n registers: 0,\r\n showPagination: true,\r\n showRegisterAmount: true,\r\n avoidRefreshOnClearFilters: false,\r\n hasReachedMax: false,\r\n hasMore: false,\r\n },\r\n running: true,\r\n title: '',\r\n description: '',\r\n customLabel: window.MSG_FIRST_TIME,\r\n avoidExecuteFirstRefresh: false,\r\n hasBuiltFromGenericTable: false,\r\n };\r\n registersPerPage = 30;\r\n\r\n protected emitter = new EventEmitter<{\r\n refreshFuntionality: TFuntionalityData;\r\n deleteFilters: any;\r\n validationResult: boolean;\r\n hasBuiltFromGenericTable: null;\r\n }>();\r\n\r\n constructor(\r\n public env: TQueryEnvironment,\r\n public configuration?: TListControllerConfiguration,\r\n ) {\r\n // Serialization is the safe default: filter events may execute business\r\n // logic on the server, so dropping or reordering them can produce stale builds.\r\n this.serializeFilterChanges =\r\n configuration?.serializeFilterChanges !== false;\r\n this.table = new TableController({\r\n labels: env.context.labels,\r\n getDateFromString: env.getDateFromString,\r\n getStringFromDate: env.getStringFromDate,\r\n });\r\n\r\n this.table.head.getFiltersRow()?.setState('isHidden', true);\r\n if (configuration?.refreshOnStartup !== false) {\r\n this.refresh({ keepStartingCustomLabel: true });\r\n }\r\n\r\n this.table.on('filterChange', async (filter) => {\r\n const isPartOfClearFilters = this.isClearingFilters;\r\n\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = false;\r\n });\r\n\r\n await this.filterChange({ fireFilterName: filter.getState('name') });\r\n\r\n if (filter.getState('runAutomatically') && !isPartOfClearFilters) {\r\n await this.throttleRefresh();\r\n }\r\n });\r\n\r\n this.table.on('filterPressEnter', (filter) => {\r\n if (filter.getState('type') !== 'DATE') {\r\n this.refresh({ resetPage: true });\r\n }\r\n });\r\n\r\n this.table.on('filterBlur', (filter) => {\r\n if (filter instanceof DateFilter) {\r\n this.refresh({ resetPage: true });\r\n }\r\n });\r\n\r\n this.table.on('columnSort', () => {\r\n this.refresh({ resetPage: true });\r\n });\r\n\r\n this.table.on('rowDblClick', ({ action, ev }) => {\r\n this.handleDblClickAction(action, ev);\r\n });\r\n\r\n this.table.on('rowClick', ({ action, ev }) => {\r\n this.handleClickAction(action, ev);\r\n });\r\n makeObservable(this, { state: observable, table: observable });\r\n }\r\n\r\n protected handleClickAction(\r\n action: TBasicAction,\r\n ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>,\r\n ) {\r\n handleAction({}, ev, action);\r\n }\r\n\r\n protected handleDblClickAction(\r\n action: TBasicAction,\r\n ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>,\r\n ) {\r\n handleAction({}, ev, action);\r\n }\r\n\r\n protected handleAttributes(attributes: Pick<ListState, 'attributes'>): void {\r\n runInAction(() => {\r\n this.state.attributes = attributes;\r\n });\r\n return;\r\n }\r\n\r\n protected refreshTimeout = -1;\r\n protected throttleRefresh() {\r\n clearTimeout(this.refreshTimeout);\r\n this.refreshTimeout = setTimeout(() => {\r\n this.refresh({ resetPage: true });\r\n }, 300) as any;\r\n }\r\n\r\n protected getPageMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n protected getRefreshMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n protected getFilterTypesMethodParameters(\r\n defaultParams: Record<string, unknown>,\r\n ): Record<string, unknown> {\r\n return defaultParams;\r\n }\r\n\r\n async clearFilters() {\r\n this.table.getFilters().forEach((c) => c.clear(false));\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = false;\r\n });\r\n\r\n this.emitter.emit('deleteFilters', null);\r\n await this.filterChange({ subAction: 'clearFilters' });\r\n\r\n if (this.configuration?.refreshOnDeleteFilters) {\r\n this.throttleRefresh();\r\n }\r\n }\r\n\r\n async page(pageNumber: number) {\r\n this.queue.clear();\r\n await this.queue.run(async () => {\r\n if (this.validateFilters()) {\r\n const result = await ApiaApi.post<TListRefreshResponse>(\r\n { ...this.env.context },\r\n this.getPageMethodParameters({\r\n action: this.configuration?.refreshAction || 'refresh',\r\n page: pageNumber,\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processRefreshResult(result.data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public validateFilters(props?: { showError?: boolean; notify?: boolean }) {\r\n const invalidFilters = this.table\r\n .getFilters()\r\n .filter((c) => !c.validate(props?.showError !== false));\r\n if (invalidFilters.length) {\r\n this.table.setState('customLabel', ''); //window.MSG_FILTER_REQUIRED);\r\n if (props?.notify !== false) {\r\n notify({\r\n title: getLabel('titWarning').text,\r\n message: getLabel('msgQryFilterRequiredList', {\r\n text: {\r\n TOK1: invalidFilters.map((c) => c.getState('title')).join(', '),\r\n },\r\n }).text,\r\n });\r\n }\r\n }\r\n this.emitter.emit('validationResult', invalidFilters.length === 0);\r\n return invalidFilters.length === 0;\r\n }\r\n\r\n protected buildRefreshPostData(): Parameters<(typeof ApiaApi)['post']>[2] {\r\n return {\r\n postData: {\r\n ...this.table.getFilters().reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [`filter_${cur.getState('name')}`]: cur.getValueForSubmit(),\r\n }),\r\n {},\r\n ),\r\n ...this.table.getColumns().reduce(\r\n (acc, cur) => ({\r\n ...acc,\r\n [`sort_${cur.getState('colName')}`]: cur.getState('sortState'),\r\n }),\r\n {},\r\n ),\r\n amount: this.table.getState('registersToShow'),\r\n },\r\n postDataTreatement: 'stringify',\r\n postDataStringifyOptions: { arrayFormat: 'repeat' },\r\n };\r\n }\r\n\r\n protected buildExportConfirmData(): Record<string, unknown> {\r\n return {\r\n format: ExportController.getInstance().getFormat(),\r\n amount: ExportController.getInstance().getAmount(),\r\n };\r\n }\r\n\r\n protected async filterChange(\r\n parameters?: Partial<{\r\n fireFilterName?: string;\r\n subAction?: string;\r\n }>,\r\n ) {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n\r\n if (\r\n parameters?.fireFilterName &&\r\n !this.table.getFilter(parameters.fireFilterName)?.getState('hasEvents')\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !parameters?.fireFilterName &&\r\n !this.table.getFilters().find((c) => c.getState('hasEvents'))\r\n ) {\r\n return;\r\n }\r\n\r\n // Serialized mode never clears this queue: the explicit clearFilters event\r\n // is enqueued last, so awaiting it also waits for all prior filter events.\r\n const queue = this.serializeFilterChanges\r\n ? this.filterChangeQueue\r\n : this.queue;\r\n\r\n // Opt-out mode preserves the former behavior, where only the latest queued\r\n // filter change is kept and pending changes are cancelled.\r\n if (!this.serializeFilterChanges) {\r\n queue.clear();\r\n }\r\n\r\n await queue.run(async () => {\r\n const result = await ApiaApi.post<{ list: TLoadStructure }>(\r\n { ...this.env.context },\r\n this.getRefreshMethodParameters({\r\n action: 'newLoadStructure', //this.configuration?.refreshAction || 'refresh',\r\n subAction: parameters?.subAction ?? null,\r\n fireFilterName: parameters?.fireFilterName ?? null,\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processStructureResult(result.data.list);\r\n }\r\n });\r\n }\r\n\r\n async refresh(\r\n parameters?: Partial<{\r\n action: string;\r\n clearBefore?: boolean;\r\n keepStartingCustomLabel?: boolean;\r\n /** Starts a new result set on page one instead of reloading the current page. */\r\n resetPage?: boolean;\r\n }>,\r\n ) {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n\r\n if (parameters?.clearBefore) {\r\n this.table.getFilters().forEach((c) => c.clear(false));\r\n this.state.areAllFiltersApplied = false;\r\n }\r\n\r\n this.queue.clear();\r\n const refreshAction =\r\n parameters?.action ?? (this.configuration?.refreshAction || 'refresh');\r\n const page =\r\n parameters?.resetPage || parameters?.clearBefore\r\n ? 1\r\n : Math.max(1, this.state.navigation.currentPage);\r\n\r\n await this.queue.run(async () => {\r\n if (this.validateFilters()) {\r\n runInAction(() => {\r\n this.state.areAllFiltersApplied = true;\r\n });\r\n\r\n const result = await ApiaApi.post<TListRefreshResponse>(\r\n { ...this.env.context },\r\n this.getRefreshMethodParameters({\r\n action: refreshAction,\r\n page,\r\n forceDataRefresh: true,\r\n }),\r\n this.buildRefreshPostData(),\r\n );\r\n\r\n if (result?.data?.list) {\r\n this.processRefreshResult(\r\n result.data,\r\n parameters?.keepStartingCustomLabel,\r\n );\r\n }\r\n if (result?.data?.list?.attributes) {\r\n this.handleAttributes(result?.data?.list.attributes);\r\n }\r\n\r\n if (result?.data) {\r\n this.refreshFuntionality(result?.data);\r\n }\r\n } else {\r\n this.table.body.setState('rows', []);\r\n this.state.navigation.hasMore = false;\r\n this.state.navigation.hasReachedMax = false;\r\n this.state.navigation.pagesCount = 0;\r\n this.state.navigation.registers = 0;\r\n this.state.navigation.currentPage = 1;\r\n }\r\n });\r\n }\r\n\r\n protected refreshFuntionality(data: Omit<TListRefreshResponse, 'list'>) {\r\n if (data?.chart || data?.chartButton || data?.pivot) {\r\n this.emitter.emit('refreshFuntionality', data);\r\n }\r\n }\r\n\r\n on = this.emitter.on.bind(this.emitter);\r\n\r\n async print() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n\r\n const w = window.open(\r\n `${window.CONTEXT}/react/generic/print.jsp?printComponent=print/query/PrintQuery`,\r\n '_blank',\r\n `height=${screen.height}, width=${screen.width},location=no,menubar=yes,resizable=yes,scrollbars=yes,titlebar=yes,toolbar=no`,\r\n );\r\n if (w) {\r\n w.onload = () => {\r\n w.printData = this as unknown as string;\r\n };\r\n w.printData = this as unknown as string;\r\n }\r\n }\r\n\r\n async filterTypes() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n // await this.queue.run(async () => {\r\n // await ApiaApi.post({ ...this.env.context }, { action: 'filterOptions' });\r\n // });\r\n ApiaUtil.instance.modals.open({\r\n children: <FilterTypes controller={this} />,\r\n title: getLabel('sbtQryFilType').text,\r\n onConfirm: async () => {\r\n await this.queue.run(async () => {\r\n await ApiaApi.post(\r\n { ...this.env.context },\r\n // TODO: cuando se implementen las consultas de lista de tareas hay que manejar correctamente el working mode\r\n this.getFilterTypesMethodParameters({\r\n action: 'setFilterOptions',\r\n workingMode: 'R',\r\n }),\r\n {\r\n postData: this.table\r\n .getFilters()\r\n .reduce<Record<string, string>>((acc, filter, i) => {\r\n acc[filter.getState('id') ?? `filter_${i}`] =\r\n filter.getState('conditionValue') ?? '1';\r\n return acc;\r\n }, {}),\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n });\r\n return true;\r\n },\r\n size: 'md-fixed',\r\n });\r\n }\r\n\r\n async export() {\r\n if (!this.state.running) {\r\n return false;\r\n }\r\n this.queue.clear();\r\n ApiaUtil.instance.modals.open({\r\n children: <ExportModal />,\r\n title: getLabel('titExport').text,\r\n onConfirm: async () => {\r\n const url = ApiaApi.makeUrl(this.env.context, {\r\n action: 'doExport',\r\n ...this.buildExportConfirmData(),\r\n });\r\n downloadUrl(url);\r\n return true;\r\n },\r\n size: 'md-fixed',\r\n });\r\n }\r\n\r\n public kill() {\r\n runInAction(() => {\r\n this.state.running = false;\r\n });\r\n this.queue.clear();\r\n }\r\n\r\n protected parseResultBeforeBuild(\r\n result: ListState & TLoadStructure,\r\n ): ListState & TLoadStructure {\r\n return result;\r\n }\r\n\r\n protected processRefreshResult(\r\n result: TListRefreshResponse,\r\n keepStartingCustomLabel?: boolean,\r\n ) {\r\n runInAction(() => {\r\n this.processStructureResult(\r\n {\r\n behavior: result.list.behavior,\r\n columns: result.list.columns,\r\n filters: result.list.filters,\r\n rows: result.list.rows,\r\n },\r\n keepStartingCustomLabel,\r\n );\r\n if (\r\n (arrayOrArray(result.list.rows).length === 0 &&\r\n this.table.body.rows.length > 0) ||\r\n this.state.customLabel === window.MSG_FILTER_REQUIRED ||\r\n (!this.state.avoidExecuteFirstRefresh &&\r\n this.state.hasBuiltFromGenericTable) ||\r\n (this.state.avoidExecuteFirstRefresh &&\r\n this.state.hasBuiltFromGenericTable)\r\n ) {\r\n this.table.setState('customLabel', window.FINDER_NO_DATA);\r\n }\r\n this.table.fromGenericTable(this.parseResultBeforeBuild(result.list), {\r\n getDateFromString,\r\n getStringFromDate,\r\n });\r\n\r\n if (this.validateRequiredFiltersAfterBuild) {\r\n this.validateFilters({ notify: false });\r\n }\r\n\r\n const filters = this.table.head.getFilters();\r\n if (filters) {\r\n if (\r\n Array.from(filters.filters.values()).some((f) =>\r\n f.getState('isRequired'),\r\n ) &&\r\n !this.state.hasBuiltFromGenericTable\r\n ) {\r\n this.table.setState('customLabel', '');\r\n }\r\n const headerFilters = Array.from(filters.filters.values()).filter(\r\n (f) => !f.asAdditional() || f.getCorrespondingColumn(),\r\n );\r\n\r\n const requiredHeaderFilters = headerFilters.filter((f) =>\r\n f.getState('isRequired'),\r\n );\r\n\r\n if (!this.state.hasBuiltFromGenericTable) {\r\n this.table.head\r\n .getFiltersRow()\r\n ?.setState(\r\n 'isHidden',\r\n requiredHeaderFilters.length > 0 ? false : true,\r\n );\r\n }\r\n }\r\n if (result.list.title) {\r\n this.state.title = result.list.title;\r\n this.table.setState('tableName', result.list.title);\r\n }\r\n if (result.list.description) {\r\n this.state.description = result.list.description;\r\n }\r\n this.state.navigation = result.list.navigation;\r\n if (this.configuration) {\r\n this.configuration.refreshOnDeleteFilters =\r\n !result.list.navigation.avoidRefreshOnClearFilters;\r\n }\r\n if (!this.state.hasBuiltFromGenericTable) {\r\n this.validateFilters({ showError: false });\r\n }\r\n this.state.hasBuiltFromGenericTable = true;\r\n this.emitter.emit('hasBuiltFromGenericTable', null);\r\n });\r\n }\r\n\r\n public processStructureResult(\r\n result: TLoadStructure,\r\n keepStartingCustomLabel?: boolean,\r\n ) {\r\n runInAction(() => {\r\n this.table.setState('allowEdition', result.behavior.allowEdition);\r\n this.table.setState('allowSelection', result.behavior.allowSelection);\r\n this.table.setState(\r\n 'isSelectionMultiple',\r\n result.behavior.isMultipleSelection,\r\n );\r\n this.table.setState('fetchRowExpand', !!result.behavior.fetchRowExpand);\r\n this.table.setState(\r\n 'avoidExecuteFirstRefresh',\r\n !!result.behavior.avoidExecuteFirstRefresh,\r\n );\r\n this.state.avoidExecuteFirstRefresh =\r\n !!result.behavior.avoidExecuteFirstRefresh;\r\n if (\r\n result.behavior.avoidExecuteFirstRefresh &&\r\n !keepStartingCustomLabel\r\n ) {\r\n this.table.setState('customLabel', '');\r\n }\r\n this.table.head.build({\r\n columns: arrayOrArray(result.columns).map(({ attributes, ...c }) => {\r\n return {\r\n ...c,\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title === '' ? c.name : c.title,\r\n className: c.className,\r\n sortState: c.sortType,\r\n showInAccordionTitle: c.showInAccordionTitle,\r\n domProperties: {\r\n style: {\r\n width: c.width,\r\n },\r\n },\r\n ...attributes,\r\n };\r\n }),\r\n filters: arrayOrArray(result.filters).map(({ attributes, ...f }) => {\r\n if (f.type === 'COMBO') {\r\n return {\r\n ...f,\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value:\r\n Array.isArray(f.options) ||\r\n arrayOrArray(f.options)[0]?.label !== ''\r\n ? f.initialValue\r\n : '',\r\n asAdditional: f.asAdditional,\r\n ...attributes,\r\n };\r\n }\r\n return {\r\n ...f,\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n ...attributes,\r\n };\r\n }),\r\n });\r\n if (\r\n this.validateRequiredFiltersAfterBuild ||\r\n (this.state.hasBuiltFromGenericTable &&\r\n this.table.getFilters().some((f) => f.getState('runAutomatically')))\r\n ) {\r\n this.validateFilters({ notify: false });\r\n }\r\n });\r\n }\r\n\r\n public setRegistersPerPage(_n: number) {\r\n throw new Error('Not implemented');\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
+ import * as _apia_util from '@apia/util';
2
+ import { EventEmitter } from '@apia/util';
1
3
  import { ListFunctionalityController } from './ListFunctionalityController.js';
2
4
  import { TApiaChartColumn, TPivotTableData, ColumnSort, Pivot, TQuerySort, PivotTableUIProps } from '@apia/charts';
3
5
  import { TQueryEnvironment } from './types.js';
4
- import { EventEmitter } from '@apia/util';
6
+ import { QueryPivotPresentationState } from './QueryPivotPresentationState.js';
5
7
  import { TTab, TabsController, TabsControllerProps } from '@apia/components';
6
8
 
7
9
  type PivotTableConfig = {
@@ -211,13 +213,20 @@ declare class QueriesFunctionalityController extends ListFunctionalityController
211
213
  currentPivot?: TPivotTableData & {
212
214
  pivotId: string;
213
215
  };
216
+ currentPivotState?: QueryPivotPresentationState;
214
217
  defaultChart?: string;
215
218
  defaultPivot?: string;
216
219
  isLoading: boolean;
217
220
  };
218
221
  protected emitter: EventEmitter<{
219
222
  changeTab: string;
223
+ presentationStateChange: undefined;
220
224
  }>;
225
+ private pivotRevision;
226
+ private pivotFilterCaptureSequence;
227
+ private pivotStateProtectionSequence;
228
+ private protectedPivotState?;
229
+ private replaceProtectedPivotFilters;
221
230
  constructor(env: TQueryEnvironment, tabs?: TTab[] | undefined);
222
231
  loadChart(chartId: string): Promise<TChartData>;
223
232
  loadMainChart(): Promise<void>;
@@ -249,13 +258,27 @@ declare class QueriesFunctionalityController extends ListFunctionalityController
249
258
  };
250
259
  }>;
251
260
  loadMainPivot(): Promise<void>;
261
+ activatePivot(retrievedPivot: TPivotTableData, pivotId: string): void;
252
262
  private static stripHtml;
253
263
  handleCloseChart(): void;
254
264
  handleClosePivot(): void;
255
265
  openAndReadFile(pivot: Pivot, accept?: string): void;
256
266
  convertColumnSortToTQuerySort(sort: ColumnSort): TQuerySort;
257
267
  parsePivotProps(pivot: Pivot): Omit<PivotTableUIProps, "onChange">;
258
- pivotRefresh(): Promise<void>;
268
+ parseCurrentPivotProps(pivot: Pivot): Omit<PivotTableUIProps, "onChange">;
269
+ /**
270
+ * Captures user changes made directly in the interactive pivot controls.
271
+ */
272
+ capturePivotState(state: PivotTableUIProps): void;
273
+ onPresentationStateChange(callback: () => void): _apia_util.UnSubscriber;
274
+ applyPivotState(state?: QueryPivotPresentationState, replacePivotFilters?: boolean, previousState?: QueryPivotPresentationState | undefined): void;
275
+ /**
276
+ * Ignores transient all-selected callbacks emitted while a server state is rendered.
277
+ */
278
+ private protectPivotState;
279
+ pivotRefresh(rowId?: string): Promise<void>;
280
+ private createPivotState;
281
+ private capturePivotFiltersWhenIdle;
259
282
  }
260
283
 
261
284
  export { type PivotTableConfig, QueriesFunctionalityController, type TApiaChartDefinition, type TChartData };