@apia/query 4.0.102 → 5.0.1

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.
Files changed (41) hide show
  1. package/dist/ListController.d.ts +130 -0
  2. package/dist/ListController.d.ts.map +1 -0
  3. package/dist/ListController.js +453 -0
  4. package/dist/ListController.js.map +1 -0
  5. package/dist/ListFunctionalityController.d.ts +13 -0
  6. package/dist/ListFunctionalityController.d.ts.map +1 -0
  7. package/dist/ListFunctionalityController.js +54 -0
  8. package/dist/ListFunctionalityController.js.map +1 -0
  9. package/dist/ModalListController.d.ts +14 -0
  10. package/dist/ModalListController.d.ts.map +1 -0
  11. package/dist/ModalListController.js +29 -0
  12. package/dist/ModalListController.js.map +1 -0
  13. package/dist/QueriesFunctionalityController.d.ts +262 -0
  14. package/dist/QueriesFunctionalityController.d.ts.map +1 -0
  15. package/dist/QueriesFunctionalityController.js +340 -0
  16. package/dist/QueriesFunctionalityController.js.map +1 -0
  17. package/dist/components/Pagination.d.ts +14 -0
  18. package/dist/components/Pagination.d.ts.map +1 -0
  19. package/dist/components/Pagination.js +65 -0
  20. package/dist/components/Pagination.js.map +1 -0
  21. package/dist/components/modals/ExportModal.js +146 -0
  22. package/dist/components/modals/ExportModal.js.map +1 -0
  23. package/dist/components/modals/FilterTypes.js +53 -0
  24. package/dist/components/modals/FilterTypes.js.map +1 -0
  25. package/dist/components/modals/controllers/ExportController.js +38 -0
  26. package/dist/components/modals/controllers/ExportController.js.map +1 -0
  27. package/dist/index.d.ts +8 -210
  28. package/dist/index.js +7 -624
  29. package/dist/index.js.map +1 -1
  30. package/dist/types.d.ts +10 -0
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/utils/getDateFromString.d.ts +4 -0
  33. package/dist/utils/getDateFromString.d.ts.map +1 -0
  34. package/dist/utils/getDateFromString.js +8 -0
  35. package/dist/utils/getDateFromString.js.map +1 -0
  36. package/dist/utils/getStringFromDate.d.ts +4 -0
  37. package/dist/utils/getStringFromDate.d.ts.map +1 -0
  38. package/dist/utils/getStringFromDate.js +8 -0
  39. package/dist/utils/getStringFromDate.js.map +1 -0
  40. package/package.json +8 -8
  41. package/LICENSE.md +0 -6
@@ -0,0 +1,130 @@
1
+ import * as _apia_util from '@apia/util';
2
+ import { TasksQueue, EventEmitter, TBasicAction, TLoadStructure } from '@apia/util';
3
+ import { TQueryEnvironment } from './types.js';
4
+ import { ApiaApi } from '@apia/api2';
5
+ import { TableController, Cell, FilterRenderer } from '@apia/table2-controller';
6
+ import { TApiaChartDefinition, PivotTableConfig } from './QueriesFunctionalityController.js';
7
+ import { FC } from 'react';
8
+
9
+ type ListState = {
10
+ areAllFiltersApplied: boolean;
11
+ attributes?: Record<string, unknown>;
12
+ navigation: {
13
+ pagesCount: number;
14
+ registers: number;
15
+ currentPage: number;
16
+ showPagination?: boolean;
17
+ showRegisterAmount?: boolean;
18
+ avoidRefreshOnClearFilters?: boolean;
19
+ reachedMax?: boolean;
20
+ hasMore?: boolean;
21
+ };
22
+ running: boolean;
23
+ title?: string;
24
+ description?: string;
25
+ customLabel?: string;
26
+ avoidExecuteFirstRefresh?: boolean;
27
+ hasBuiltFromGenericTable?: boolean;
28
+ };
29
+ type ListFunctionalityState = {
30
+ fncId: number;
31
+ isFavorite: boolean;
32
+ isMaximized: boolean;
33
+ };
34
+ type TFuntionalityData = {
35
+ chart?: {
36
+ charts: {
37
+ chart: TApiaChartDefinition;
38
+ } | {
39
+ chart: TApiaChartDefinition;
40
+ }[];
41
+ };
42
+ chartButton?: {
43
+ chartsbuttons: {
44
+ chartbutton: {
45
+ qryChtId: string;
46
+ title: string;
47
+ };
48
+ } | {
49
+ chartbutton: {
50
+ qryChtId: string;
51
+ title: string;
52
+ };
53
+ }[];
54
+ };
55
+ pivot?: {
56
+ pivots: {
57
+ pivot: PivotTableConfig;
58
+ } | {
59
+ pivot: PivotTableConfig;
60
+ }[];
61
+ };
62
+ };
63
+ type TListRefreshResponse = {
64
+ list: ListState & TLoadStructure;
65
+ } & TFuntionalityData;
66
+ type TListControllerConfiguration = {
67
+ refreshOnDeleteFilters?: boolean;
68
+ canSetRegistersPerPage?: boolean;
69
+ refreshOnStartup?: boolean;
70
+ refreshAction?: string;
71
+ };
72
+ type Arr<T> = T extends Array<any> ? T : Array<T>;
73
+ type TQueryFilter = Arr<TLoadStructure['filters']>[0] & {
74
+ Renderer?: FilterRenderer;
75
+ };
76
+ type TQueryColumn = Arr<TLoadStructure['columns']>[0] & {
77
+ Renderer?: FC<{
78
+ cell: Cell;
79
+ }>;
80
+ };
81
+ declare class ListController {
82
+ env: TQueryEnvironment;
83
+ configuration?: TListControllerConfiguration | undefined;
84
+ queue: TasksQueue;
85
+ readonly table: TableController;
86
+ readonly state: ListState;
87
+ registersPerPage: number;
88
+ protected emitter: EventEmitter<{
89
+ refreshFuntionality: TFuntionalityData;
90
+ deleteFilters: any;
91
+ }>;
92
+ constructor(env: TQueryEnvironment, configuration?: TListControllerConfiguration | undefined);
93
+ protected handleClickAction(action: TBasicAction, ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>): void;
94
+ protected handleDblClickAction(action: TBasicAction, ev: React.KeyboardEvent<Element> | React.MouseEvent<Element, MouseEvent>): void;
95
+ protected handleAttributes(attributes: Pick<ListState, 'attributes'>): void;
96
+ protected refreshTimeout: number;
97
+ protected throttleRefresh(): void;
98
+ protected getPageMethodParameters(defaultParams: Record<string, unknown>): Record<string, unknown>;
99
+ protected getRefreshMethodParameters(defaultParams: Record<string, unknown>): Record<string, unknown>;
100
+ protected getFilterTypesMethodParameters(defaultParams: Record<string, unknown>): Record<string, unknown>;
101
+ clearFilters(): Promise<void>;
102
+ page(pageNumber: number): Promise<void>;
103
+ validateFilters(): boolean;
104
+ protected buildRefreshPostData(): Parameters<(typeof ApiaApi)['post']>[2];
105
+ protected buildExportConfirmData(): Record<string, unknown>;
106
+ protected filterChange(parameters?: Partial<{
107
+ fireFilterName?: string;
108
+ subAction?: string;
109
+ }>): Promise<false | undefined>;
110
+ refresh(parameters?: Partial<{
111
+ action: string;
112
+ clearBefore?: boolean;
113
+ }>): Promise<false | undefined>;
114
+ protected refreshFuntionality(data: Omit<TListRefreshResponse, 'list'>): void;
115
+ on: <K extends "refreshFuntionality" | "deleteFilters">(event: K, cb: _apia_util.Callback<{
116
+ refreshFuntionality: TFuntionalityData;
117
+ deleteFilters: any;
118
+ }, K>) => _apia_util.UnSubscriber;
119
+ print(): Promise<false | undefined>;
120
+ filterTypes(): Promise<false | undefined>;
121
+ export(): Promise<false | undefined>;
122
+ kill(): void;
123
+ protected parseResultBeforeBuild(result: ListState & TLoadStructure): ListState & TLoadStructure;
124
+ protected processRefreshResult(result: TListRefreshResponse): void;
125
+ processStructureResult(result: TLoadStructure): void;
126
+ setRegistersPerPage(_n: number): void;
127
+ }
128
+
129
+ export { ListController, type ListFunctionalityState, type ListState, type TFuntionalityData, type TListControllerConfiguration, type TListRefreshResponse, type TQueryColumn, type TQueryFilter };
130
+ //# sourceMappingURL=ListController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListController.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,453 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { ApiaApi } from '@apia/api2';
3
+ import { TasksQueue, EventEmitter, handleAction, getLabel, downloadUrl, arrayOrArray } from '@apia/util';
4
+ import { runInAction, makeObservable, observable } from 'mobx';
5
+ import { notify } from '@apia/notifications';
6
+ import { TableController, DateFilter } from '@apia/table2-controller';
7
+ import { getDateFromString } from './utils/getStringFromDate.js';
8
+ import { getStringFromDate } from './utils/getDateFromString.js';
9
+ import { ApiaUtil } from '@apia/components';
10
+ import { FilterTypes } from './components/modals/FilterTypes.js';
11
+ import { ExportModal } from './components/modals/ExportModal.js';
12
+ import { ExportController } from './components/modals/controllers/ExportController.js';
13
+
14
+ var __defProp = Object.defineProperty;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __publicField = (obj, key, value) => {
17
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
18
+ return value;
19
+ };
20
+ class ListController {
21
+ constructor(env, configuration) {
22
+ this.env = env;
23
+ this.configuration = configuration;
24
+ __publicField(this, "queue", new TasksQueue());
25
+ __publicField(this, "table");
26
+ __publicField(this, "state", {
27
+ areAllFiltersApplied: true,
28
+ navigation: {
29
+ currentPage: 0,
30
+ pagesCount: 0,
31
+ registers: 0,
32
+ showPagination: true,
33
+ showRegisterAmount: true,
34
+ avoidRefreshOnClearFilters: false,
35
+ reachedMax: false,
36
+ hasMore: false
37
+ },
38
+ running: true,
39
+ title: "",
40
+ description: "",
41
+ customLabel: window.MSG_FIRST_TIME,
42
+ avoidExecuteFirstRefresh: false,
43
+ hasBuiltFromGenericTable: false
44
+ });
45
+ __publicField(this, "registersPerPage", 30);
46
+ __publicField(this, "emitter", new EventEmitter());
47
+ __publicField(this, "refreshTimeout", -1);
48
+ __publicField(this, "on", this.emitter.on.bind(this.emitter));
49
+ this.table = new TableController({
50
+ labels: env.context.labels,
51
+ getDateFromString: env.getDateFromString,
52
+ getStringFromDate: env.getStringFromDate
53
+ });
54
+ this.table.setState("customLabel", window.MSG_FIRST_TIME);
55
+ this.table.head.getFiltersRow()?.setState("isHidden", true);
56
+ if (configuration?.refreshOnStartup !== false) {
57
+ this.refresh();
58
+ }
59
+ this.table.on("filterChange", async (filter) => {
60
+ runInAction(() => {
61
+ this.state.areAllFiltersApplied = false;
62
+ });
63
+ await this.filterChange({ fireFilterName: filter.getState("name") });
64
+ if (filter.getState("runAutomatically")) {
65
+ await this.throttleRefresh();
66
+ }
67
+ });
68
+ this.table.on("filterPressEnter", (filter) => {
69
+ if (filter.getState("type") !== "DATE") {
70
+ this.refresh();
71
+ }
72
+ });
73
+ this.table.on("filterBlur", (filter) => {
74
+ if (filter instanceof DateFilter) {
75
+ this.refresh();
76
+ }
77
+ });
78
+ this.table.on("columnSort", () => {
79
+ this.refresh();
80
+ });
81
+ this.table.on("rowDblClick", ({ action, ev }) => {
82
+ this.handleDblClickAction(action, ev);
83
+ });
84
+ this.table.on("rowClick", ({ action, ev }) => {
85
+ this.handleClickAction(action, ev);
86
+ });
87
+ makeObservable(this, { state: observable, table: observable });
88
+ }
89
+ handleClickAction(action, ev) {
90
+ handleAction({}, ev, action);
91
+ }
92
+ handleDblClickAction(action, ev) {
93
+ handleAction({}, ev, action);
94
+ }
95
+ handleAttributes(attributes) {
96
+ runInAction(() => {
97
+ this.state.attributes = attributes;
98
+ });
99
+ return;
100
+ }
101
+ throttleRefresh() {
102
+ clearTimeout(this.refreshTimeout);
103
+ this.refreshTimeout = setTimeout(() => {
104
+ this.refresh();
105
+ }, 300);
106
+ }
107
+ getPageMethodParameters(defaultParams) {
108
+ return defaultParams;
109
+ }
110
+ getRefreshMethodParameters(defaultParams) {
111
+ return defaultParams;
112
+ }
113
+ getFilterTypesMethodParameters(defaultParams) {
114
+ return defaultParams;
115
+ }
116
+ async clearFilters() {
117
+ this.table.getFilters().forEach((c) => c.clear(false));
118
+ runInAction(() => {
119
+ this.state.areAllFiltersApplied = false;
120
+ });
121
+ this.emitter.emit("deleteFilters", null);
122
+ await this.filterChange({ subAction: "clearFilters" });
123
+ if (this.configuration?.refreshOnDeleteFilters) {
124
+ this.throttleRefresh();
125
+ }
126
+ }
127
+ async page(pageNumber) {
128
+ this.queue.clear();
129
+ await this.queue.run(async () => {
130
+ if (this.validateFilters()) {
131
+ const result = await ApiaApi.post(
132
+ { ...this.env.context },
133
+ this.getPageMethodParameters({
134
+ action: this.configuration?.refreshAction || "refresh",
135
+ page: pageNumber
136
+ }),
137
+ this.buildRefreshPostData()
138
+ );
139
+ if (result?.data?.list) {
140
+ this.processRefreshResult(result.data);
141
+ }
142
+ }
143
+ });
144
+ }
145
+ validateFilters() {
146
+ const invalidFilters = this.table.getFilters().filter((c) => !c.validate());
147
+ if (invalidFilters.length) {
148
+ 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
+ });
157
+ }
158
+ return invalidFilters.length === 0;
159
+ }
160
+ buildRefreshPostData() {
161
+ return {
162
+ postData: {
163
+ ...this.table.getFilters().reduce(
164
+ (acc, cur) => ({
165
+ ...acc,
166
+ [`filter_${cur.getState("name")}`]: cur.getValueForSubmit()
167
+ }),
168
+ {}
169
+ ),
170
+ ...this.table.getColumns().reduce(
171
+ (acc, cur) => ({
172
+ ...acc,
173
+ [`sort_${cur.getState("colName")}`]: cur.getState("sortState")
174
+ }),
175
+ {}
176
+ ),
177
+ amount: this.table.getState("registersToShow")
178
+ },
179
+ postDataTreatement: "stringify",
180
+ postDataStringifyOptions: { arrayFormat: "repeat" }
181
+ };
182
+ }
183
+ buildExportConfirmData() {
184
+ return {
185
+ format: ExportController.getInstance().getFormat(),
186
+ amount: ExportController.getInstance().getAmount()
187
+ };
188
+ }
189
+ async filterChange(parameters) {
190
+ if (!this.state.running) {
191
+ return false;
192
+ }
193
+ if (parameters?.fireFilterName && !this.table.getFilter(parameters.fireFilterName)?.getState("hasEvents")) {
194
+ return;
195
+ }
196
+ if (!parameters?.fireFilterName && !this.table.getFilters().find((c) => c.getState("hasEvents"))) {
197
+ return;
198
+ }
199
+ this.queue.clear();
200
+ await this.queue.run(async () => {
201
+ const result = await ApiaApi.post(
202
+ { ...this.env.context },
203
+ this.getRefreshMethodParameters({
204
+ action: "newLoadStructure",
205
+ //this.configuration?.refreshAction || 'refresh',
206
+ subAction: parameters?.subAction ?? null,
207
+ fireFilterName: parameters?.fireFilterName ?? null
208
+ }),
209
+ this.buildRefreshPostData()
210
+ );
211
+ if (result?.data?.list) {
212
+ this.processStructureResult(result.data.list);
213
+ }
214
+ });
215
+ }
216
+ async refresh(parameters) {
217
+ if (!this.state.running) {
218
+ return false;
219
+ }
220
+ if (parameters?.clearBefore) {
221
+ this.table.getFilters().forEach((c) => c.clear(false));
222
+ this.state.areAllFiltersApplied = false;
223
+ }
224
+ this.queue.clear();
225
+ await this.queue.run(async () => {
226
+ if (this.validateFilters()) {
227
+ runInAction(() => {
228
+ this.state.areAllFiltersApplied = true;
229
+ });
230
+ const result = await ApiaApi.post(
231
+ { ...this.env.context },
232
+ this.getRefreshMethodParameters({
233
+ action: parameters?.action ?? (this.configuration?.refreshAction || "refresh")
234
+ }),
235
+ this.buildRefreshPostData()
236
+ );
237
+ if (result?.data?.list) {
238
+ this.processRefreshResult(result.data);
239
+ }
240
+ if (result?.data?.list.attributes) {
241
+ this.handleAttributes(result?.data?.list.attributes);
242
+ }
243
+ if (result?.data) {
244
+ this.refreshFuntionality(result?.data);
245
+ }
246
+ } else {
247
+ this.table.body.setState("rows", []);
248
+ }
249
+ });
250
+ }
251
+ refreshFuntionality(data) {
252
+ if (data?.chart || data?.chartButton || data?.pivot) {
253
+ this.emitter.emit("refreshFuntionality", data);
254
+ }
255
+ }
256
+ async print() {
257
+ if (!this.state.running) {
258
+ return false;
259
+ }
260
+ this.queue.clear();
261
+ const w = window.open(
262
+ `${window.CONTEXT}/react/generic/print.jsp?printComponent=print/query/PrintQuery`,
263
+ "_blank",
264
+ `height=${screen.height}, width=${screen.width},location=no,menubar=yes,resizable=yes,scrollbars=yes,titlebar=yes,toolbar=no`
265
+ );
266
+ if (w) {
267
+ w.onload = () => {
268
+ w.printData = this;
269
+ };
270
+ w.printData = this;
271
+ }
272
+ }
273
+ async filterTypes() {
274
+ if (!this.state.running) {
275
+ return false;
276
+ }
277
+ this.queue.clear();
278
+ ApiaUtil.instance.modals.open({
279
+ children: /* @__PURE__ */ jsx(FilterTypes, { controller: this }),
280
+ title: getLabel("sbtQryFilType").text,
281
+ onConfirm: async () => {
282
+ await this.queue.run(async () => {
283
+ await ApiaApi.post(
284
+ { ...this.env.context },
285
+ // TODO: cuando se implementen las consultas de lista de tareas hay que manejar correctamente el working mode
286
+ this.getFilterTypesMethodParameters({
287
+ action: "setFilterOptions",
288
+ workingMode: "R"
289
+ }),
290
+ {
291
+ postData: this.table.getFilters().reduce((acc, filter, i) => {
292
+ acc[filter.getState("id") ?? `filter_${i}`] = filter.getState("conditionValue") ?? "1";
293
+ return acc;
294
+ }, {}),
295
+ postDataTreatement: "stringify"
296
+ }
297
+ );
298
+ });
299
+ return true;
300
+ },
301
+ size: "md-fixed"
302
+ });
303
+ }
304
+ async export() {
305
+ if (!this.state.running) {
306
+ return false;
307
+ }
308
+ this.queue.clear();
309
+ ApiaUtil.instance.modals.open({
310
+ children: /* @__PURE__ */ jsx(ExportModal, {}),
311
+ title: getLabel("titExport").text,
312
+ onConfirm: async () => {
313
+ const url = ApiaApi.makeUrl(this.env.context, {
314
+ action: "doExport",
315
+ ...this.buildExportConfirmData()
316
+ });
317
+ downloadUrl(url);
318
+ return true;
319
+ },
320
+ size: "md-fixed"
321
+ });
322
+ }
323
+ kill() {
324
+ runInAction(() => {
325
+ this.state.running = false;
326
+ });
327
+ this.queue.clear();
328
+ }
329
+ parseResultBeforeBuild(result) {
330
+ return result;
331
+ }
332
+ processRefreshResult(result) {
333
+ 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
+ });
340
+ 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
+ this.table.setState("customLabel", window.FINDER_NO_DATA);
342
+ }
343
+ this.table.fromGenericTable(this.parseResultBeforeBuild(result.list), {
344
+ getDateFromString,
345
+ getStringFromDate
346
+ });
347
+ const filters = this.table.head.getFilters();
348
+ if (filters) {
349
+ if (Array.from(filters.filters.values()).some(
350
+ (f) => f.getState("isRequired")
351
+ ) && !this.state.hasBuiltFromGenericTable) {
352
+ this.table.setState("customLabel", "");
353
+ }
354
+ const headerFilters = Array.from(filters.filters.values()).filter(
355
+ (f) => !f.asAdditional() || f.getCorrespondingColumn()
356
+ );
357
+ const requiredHeaderFilters = headerFilters.filter(
358
+ (f) => f.getState("isRequired")
359
+ );
360
+ if (!this.state.hasBuiltFromGenericTable) {
361
+ this.table.head.getFiltersRow()?.setState(
362
+ "isHidden",
363
+ requiredHeaderFilters.length > 0 ? false : true
364
+ );
365
+ }
366
+ }
367
+ if (result.list.title) {
368
+ this.state.title = result.list.title;
369
+ this.table.setState("tableName", result.list.title);
370
+ }
371
+ if (result.list.description) {
372
+ this.state.description = result.list.description;
373
+ }
374
+ this.state.navigation = result.list.navigation;
375
+ if (this.configuration) {
376
+ this.configuration.refreshOnDeleteFilters = !result.list.navigation.avoidRefreshOnClearFilters;
377
+ }
378
+ this.state.hasBuiltFromGenericTable = true;
379
+ });
380
+ }
381
+ processStructureResult(result) {
382
+ runInAction(() => {
383
+ this.table.setState("allowEdition", result.behavior.allowEdition);
384
+ this.table.setState("allowSelection", result.behavior.allowSelection);
385
+ this.table.setState(
386
+ "isSelectionMultiple",
387
+ result.behavior.isMultipleSelection
388
+ );
389
+ this.table.setState("fetchRowExpand", !!result.behavior.fetchRowExpand);
390
+ this.table.setState(
391
+ "avoidExecuteFirstRefresh",
392
+ !!result.behavior.avoidExecuteFirstRefresh
393
+ );
394
+ this.table.head.build({
395
+ columns: arrayOrArray(result.columns).map(({ attributes, ...c }) => {
396
+ return {
397
+ ...c,
398
+ colName: c.name,
399
+ asAdditional: c.showAsAdditional,
400
+ sortable: c.isSortable,
401
+ isHidden: c.isHidden,
402
+ properties: c,
403
+ content: c.title,
404
+ className: c.className,
405
+ sortState: c.sortType,
406
+ showInAccordionTitle: c.showInAccordionTitle,
407
+ domProperties: {
408
+ style: {
409
+ width: c.width
410
+ }
411
+ }
412
+ };
413
+ }),
414
+ filters: arrayOrArray(result.filters).map(({ attributes, ...f }) => {
415
+ if (f.type === "COMBO") {
416
+ return {
417
+ ...f,
418
+ name: f.name,
419
+ title: f.title,
420
+ tooltip: "no tooltip",
421
+ type: f.type,
422
+ isRequired: f.isRequired,
423
+ properties: f,
424
+ runAutomatically: f.runAutomatically,
425
+ columnName: f.columnName,
426
+ value: Array.isArray(f.options) || arrayOrArray(f.options)[0].label !== "" ? f.initialValue : "",
427
+ asAdditional: f.asAdditional
428
+ };
429
+ }
430
+ return {
431
+ ...f,
432
+ name: f.name,
433
+ title: f.title,
434
+ tooltip: "no tooltip",
435
+ type: f.type,
436
+ isRequired: f.isRequired,
437
+ properties: f,
438
+ runAutomatically: f.runAutomatically,
439
+ columnName: f.columnName,
440
+ value: f.initialValue,
441
+ asAdditional: f.asAdditional
442
+ };
443
+ })
444
+ });
445
+ });
446
+ }
447
+ setRegistersPerPage(_n) {
448
+ throw new Error("Not implemented");
449
+ }
450
+ }
451
+
452
+ export { ListController };
453
+ //# sourceMappingURL=ListController.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,13 @@
1
+ import { ListFunctionalityState } from './ListController.js';
2
+ import { TQueryEnvironment } from './types.js';
3
+
4
+ declare class ListFunctionalityController {
5
+ protected env: TQueryEnvironment;
6
+ readonly state: ListFunctionalityState;
7
+ constructor(env: TQueryEnvironment);
8
+ protected initializeFavoriteAction(): Promise<void>;
9
+ toggleFavoriteFunctionality(): Promise<void>;
10
+ }
11
+
12
+ export { ListFunctionalityController };
13
+ //# sourceMappingURL=ListFunctionalityController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListFunctionalityController.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}