@apia/api 4.0.31 → 4.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { jsx, jsxs, Fragment } from '@apia/theme/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { createContext, useState, useCallback, useEffect, useId, useRef, useMemo } from 'react';
4
- import { Box, Label, spacing, getVariant, Input as Input$1, Select as Select$1 } from '@apia/theme';
4
+ import { Box, Label, spacing, getVariant, Input as Input$1, Select as Select$1, Spinner } from '@apia/theme';
5
5
  import { debugDispatcher, parseXmlAsync, arrayOrArray, EventEmitter, useMount, encrypt, noNaN, getIndex, getLabel, StatefulEmitter, focus, focusSelector, useLatest, useIntermediateValue, formatMessage, getDateFormat, Mutex, uniqueId as uniqueId$1 } from '@apia/util';
6
6
  import { notify, getNotificationMessageObj, dispatchNotifications } from '@apia/notifications';
7
7
  import { classToValidate, Checkbox, FileInput, classToValidationFunction, Input, Radio, Select, Textarea, useFormContext, validationsStore, hasSucceedFormValidation, Form } from '@apia/validations';
8
- import { Accordion, AccordionItem, useModal, LabelBox, SimpleButton, ApiaUtil, Modal, ProgressBar, DateInput } from '@apia/components';
8
+ import { Accordion, AccordionItem, useModal, LabelBox, SimpleButton, ApiaUtil, Modal, ProgressBar, DateInput, AutocompleteController, Autocomplete, IconButton } from '@apia/components';
9
9
  import axios, { AxiosError } from 'axios';
10
10
  import merge from 'lodash-es/merge';
11
11
  import QueryString from 'qs';
12
12
  import { session } from '@apia/session';
13
13
  import uniqueId from 'lodash-es/uniqueId';
14
- import { ResponsiveTableContext, ResponsiveTable, Pagination, Sort, Responsive, Additional, responsiveTableStore, useResponsiveTableContext, getResponsiveTableContext, TableLoadingContext, defaultLabels, makeController2, responsiveTableActions, TableContextReproducer, Grouped } from '@apia/table';
14
+ import { ResponsiveTableContext, ResponsiveTable, Pagination, Sort, Responsive, Additional, responsiveTableStore, useResponsiveTableContext, getResponsiveTableContext, TableLoadingContext, defaultLabels, makeController2, responsiveTableActions, TableContextReproducer, Grouped, makeAsyncRenderer } from '@apia/table';
15
15
  import { makeObservable, observable, reaction, toJS, action, computed } from 'mobx';
16
16
  import { observer } from 'mobx-react-lite';
17
17
  import dayjs from 'dayjs';
@@ -479,7 +479,7 @@ function makeApiaUrl(props) {
479
479
  if (props?.queryString && props.queryString.includes("timestamp=") || queryString?.includes("timestamp=")) {
480
480
  timestamp = "";
481
481
  }
482
- const contextWord = CONTEXT.replaceAll("/", "");
482
+ const contextWord = CONTEXT.replace(/^\/?(.+?)\/?$/, "$1");
483
483
  actualAjaxUrl = actualAjaxUrl.match(
484
484
  new RegExp(`^(?:(?:/?${contextWord})?/)?(.+)$`)
485
485
  )?.[1];
@@ -3237,149 +3237,143 @@ const ApiaApiHandlerNonMemoized = () => {
3237
3237
  const ApiaApiHandler = React.memo(ApiaApiHandlerNonMemoized);
3238
3238
 
3239
3239
  const units = ["B", "KB", "MB", "GB"];
3240
- const RangeFilterRenderer = observer(
3241
- ({ filter, state }) => {
3242
- const multiplier = useRef(1);
3243
- const lastEmittedHigh = useRef(null);
3244
- const lastEmittedLow = useRef(null);
3245
- const lastEmittedMultiplier = useRef(1);
3246
- if (lastEmittedLow.current !== state.value) {
3247
- lastEmittedLow.current = state.value;
3248
- lastEmittedHigh.current = state.valueTo || "";
3249
- }
3250
- const emitLow = (currentValue) => {
3251
- const numberValue = currentValue ?? "";
3252
- if (lastEmittedLow.current === numberValue && lastEmittedMultiplier.current === multiplier.current) {
3253
- return;
3254
- }
3255
- lastEmittedLow.current = numberValue;
3256
- lastEmittedMultiplier.current = multiplier.current;
3257
- const emitValue = numberValue;
3258
- state.value = emitValue;
3259
- state.multiplier = multiplier.current;
3260
- };
3261
- const emitHigh = (currentValue) => {
3262
- const numberValue = currentValue ?? "";
3263
- if (lastEmittedHigh.current === numberValue && lastEmittedMultiplier.current === multiplier.current) {
3264
- return;
3265
- }
3266
- lastEmittedHigh.current = numberValue;
3267
- lastEmittedMultiplier.current = multiplier.current;
3268
- const emitValue = numberValue;
3269
- state.valueTo = emitValue;
3270
- state.multiplier = multiplier.current;
3271
- };
3272
- const [lowValue, setLowValue] = useIntermediateValue(state.value);
3273
- const [highValue, setHighValue] = useIntermediateValue(state.valueTo);
3274
- const [unit, setUnit] = useIntermediateValue(state.multiplier);
3275
- return /* @__PURE__ */ jsxs(
3276
- Box,
3277
- {
3278
- className: `ApiaFilter__Range`,
3279
- ...getVariant("layout.common.components.filters.rangeFilter"),
3280
- children: [
3281
- /* @__PURE__ */ jsx(Box, { className: "ApiaFilter__Range__Low", children: /* @__PURE__ */ jsx(
3282
- Input$1,
3283
- {
3284
- disabled: state.readonly,
3285
- onChange: ({ target: { value: currentValue } }) => {
3286
- setLowValue(currentValue);
3287
- emitLow(currentValue);
3288
- },
3289
- onBlur: ({ target: { value: currentValue } }) => {
3290
- emitLow(currentValue);
3291
- },
3292
- onKeyDown: ({ code, target }) => {
3293
- if (code === "Enter") {
3294
- emitLow(target.value);
3295
- }
3296
- },
3297
- value: lowValue
3298
- }
3299
- ) }),
3300
- " - ",
3301
- /* @__PURE__ */ jsx(Box, { className: "ApiaFilter__Range__High", children: /* @__PURE__ */ jsx(
3302
- Input$1,
3303
- {
3304
- disabled: state.readonly,
3305
- onChange: ({ target: { value: currentValue } }) => {
3306
- setHighValue(currentValue);
3307
- emitHigh(currentValue);
3308
- },
3309
- onBlur: ({ target: { value: currentValue } }) => {
3310
- emitHigh(currentValue);
3311
- },
3312
- onKeyDown: ({ code, target }) => {
3313
- if (code === "Enter") {
3314
- emitHigh(target.value);
3315
- }
3316
- },
3317
- value: highValue
3318
- }
3319
- ) }),
3320
- filter.isSize && /* @__PURE__ */ jsx(
3321
- Select$1,
3322
- {
3323
- disabled: state.readonly,
3324
- className: "ApiaFilter__Range__UnitSelector",
3325
- onChange: (ev) => {
3326
- const unit2 = ev.target.value;
3327
- const index = units.indexOf(unit2);
3328
- if (index !== -1) {
3329
- multiplier.current = 2 ** (index * 10);
3330
- setUnit(multiplier.current);
3331
- emitLow(lastEmittedLow.current ?? "");
3332
- }
3333
- },
3334
- value: units[Math.log2(unit || 1) / 10],
3335
- children: units.map((c) => /* @__PURE__ */ jsx("option", { value: c, children: c }, c))
3336
- }
3337
- )
3338
- ]
3339
- }
3340
- );
3240
+ const RangeFilterRenderer = observer(({ state }) => {
3241
+ const multiplier = useRef(1);
3242
+ const lastEmittedHigh = useRef(null);
3243
+ const lastEmittedLow = useRef(null);
3244
+ const lastEmittedMultiplier = useRef(1);
3245
+ if (lastEmittedLow.current !== state.value) {
3246
+ lastEmittedLow.current = state.value;
3247
+ lastEmittedHigh.current = state.valueTo || "";
3341
3248
  }
3342
- );
3249
+ const emitLow = (currentValue) => {
3250
+ const numberValue = currentValue ?? "";
3251
+ if (lastEmittedLow.current === numberValue && lastEmittedMultiplier.current === multiplier.current) {
3252
+ return;
3253
+ }
3254
+ lastEmittedLow.current = numberValue;
3255
+ lastEmittedMultiplier.current = multiplier.current;
3256
+ const emitValue = numberValue;
3257
+ state.value = emitValue;
3258
+ state.multiplier = multiplier.current;
3259
+ };
3260
+ const emitHigh = (currentValue) => {
3261
+ const numberValue = currentValue ?? "";
3262
+ if (lastEmittedHigh.current === numberValue && lastEmittedMultiplier.current === multiplier.current) {
3263
+ return;
3264
+ }
3265
+ lastEmittedHigh.current = numberValue;
3266
+ lastEmittedMultiplier.current = multiplier.current;
3267
+ const emitValue = numberValue;
3268
+ state.valueTo = emitValue;
3269
+ state.multiplier = multiplier.current;
3270
+ };
3271
+ const [lowValue, setLowValue] = useIntermediateValue(state.value);
3272
+ const [highValue, setHighValue] = useIntermediateValue(state.valueTo);
3273
+ const [unit, setUnit] = useIntermediateValue(state.multiplier);
3274
+ return /* @__PURE__ */ jsxs(
3275
+ Box,
3276
+ {
3277
+ className: `ApiaFilter__Range`,
3278
+ ...getVariant("layout.common.components.filters.rangeFilter"),
3279
+ children: [
3280
+ /* @__PURE__ */ jsx(Box, { className: "ApiaFilter__Range__Low", children: /* @__PURE__ */ jsx(
3281
+ Input$1,
3282
+ {
3283
+ disabled: state.readonly,
3284
+ onChange: ({ target: { value: currentValue } }) => {
3285
+ setLowValue(currentValue);
3286
+ emitLow(currentValue);
3287
+ },
3288
+ onBlur: ({ target: { value: currentValue } }) => {
3289
+ emitLow(currentValue);
3290
+ },
3291
+ onKeyDown: ({ code, target }) => {
3292
+ if (code === "Enter") {
3293
+ emitLow(target.value);
3294
+ }
3295
+ },
3296
+ value: lowValue
3297
+ }
3298
+ ) }),
3299
+ " - ",
3300
+ /* @__PURE__ */ jsx(Box, { className: "ApiaFilter__Range__High", children: /* @__PURE__ */ jsx(
3301
+ Input$1,
3302
+ {
3303
+ disabled: state.readonly,
3304
+ onChange: ({ target: { value: currentValue } }) => {
3305
+ setHighValue(currentValue);
3306
+ emitHigh(currentValue);
3307
+ },
3308
+ onBlur: ({ target: { value: currentValue } }) => {
3309
+ emitHigh(currentValue);
3310
+ },
3311
+ onKeyDown: ({ code, target }) => {
3312
+ if (code === "Enter") {
3313
+ emitHigh(target.value);
3314
+ }
3315
+ },
3316
+ value: highValue
3317
+ }
3318
+ ) }),
3319
+ state.isSize && /* @__PURE__ */ jsx(
3320
+ Select$1,
3321
+ {
3322
+ disabled: state.readonly,
3323
+ className: "ApiaFilter__Range__UnitSelector",
3324
+ onChange: (ev) => {
3325
+ const unit2 = ev.target.value;
3326
+ const index = units.indexOf(unit2);
3327
+ if (index !== -1) {
3328
+ multiplier.current = 2 ** (index * 10);
3329
+ setUnit(multiplier.current);
3330
+ emitLow(lastEmittedLow.current ?? "");
3331
+ }
3332
+ },
3333
+ value: units[Math.log2(unit || 1) / 10],
3334
+ children: units.map((c) => /* @__PURE__ */ jsx("option", { value: c, children: c }, c))
3335
+ }
3336
+ )
3337
+ ]
3338
+ }
3339
+ );
3340
+ });
3343
3341
 
3344
- const SelectFilterRenderer = observer(
3345
- ({ filter, state }) => {
3346
- return /* @__PURE__ */ jsx(
3347
- Select$1,
3348
- {
3349
- disabled: state.readonly,
3350
- value: state.value,
3351
- onChange: (ev) => {
3352
- state.value = ev.target.value;
3353
- },
3354
- children: arrayOrArray(filter.options).map((c) => /* @__PURE__ */ jsx("option", { value: c.value, children: c.label }, c.value))
3355
- }
3356
- );
3357
- }
3358
- );
3342
+ const SelectFilterRenderer = observer(({ state }) => {
3343
+ return /* @__PURE__ */ jsx(
3344
+ Select$1,
3345
+ {
3346
+ disabled: state.readonly,
3347
+ value: state.value,
3348
+ onChange: (ev) => {
3349
+ state.value = ev.target.value;
3350
+ },
3351
+ children: arrayOrArray(state.options).map((c) => /* @__PURE__ */ jsx("option", { value: c.value, children: c.label }, c.value))
3352
+ }
3353
+ );
3354
+ });
3359
3355
 
3360
- const InputFilterRenderer = observer(
3361
- ({ filter, state }) => {
3362
- const { onFilterBlur, onFilterPressEnter } = useResponsiveTableContext();
3363
- return /* @__PURE__ */ jsx(
3364
- Input$1,
3365
- {
3366
- disabled: state.readonly,
3367
- value: state.value,
3368
- onChange: (ev) => {
3369
- state.value = ev.target.value;
3370
- },
3371
- onKeyDown: (ev) => {
3372
- if (ev.code === "Enter") {
3373
- onFilterPressEnter?.(filter);
3374
- }
3375
- },
3376
- onBlur: () => {
3377
- onFilterBlur?.(filter);
3356
+ const InputFilterRenderer = observer(({ state }) => {
3357
+ const { onFilterBlur, onFilterPressEnter } = useResponsiveTableContext();
3358
+ return /* @__PURE__ */ jsx(
3359
+ Input$1,
3360
+ {
3361
+ disabled: state.readonly,
3362
+ value: state.value,
3363
+ onChange: (ev) => {
3364
+ state.value = ev.target.value;
3365
+ },
3366
+ onKeyDown: (ev) => {
3367
+ if (ev.code === "Enter") {
3368
+ onFilterPressEnter?.(state);
3378
3369
  }
3370
+ },
3371
+ onBlur: () => {
3372
+ onFilterBlur?.(state);
3379
3373
  }
3380
- );
3381
- }
3382
- );
3374
+ }
3375
+ );
3376
+ });
3383
3377
 
3384
3378
  const dateFormat = getDateFormat();
3385
3379
  function controlDatesOrder(first, last) {
@@ -3390,56 +3384,155 @@ function controlDatesOrder(first, last) {
3390
3384
  }
3391
3385
  return true;
3392
3386
  }
3393
- const DateFilterRenderer = observer(
3394
- ({ filter, state }) => {
3395
- const { onFilterBlur, onFilterChange } = useResponsiveTableContext();
3396
- return /* @__PURE__ */ jsxs(Fragment, { children: [
3397
- /* @__PURE__ */ jsx(Box, { as: "span", children: state?.filterToId ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {
3398
- TOK1: filter.title ?? ""
3399
- }) : state.title }),
3387
+ const DateFilterRenderer = observer(({ state }) => {
3388
+ const { onFilterBlur, onFilterChange } = useResponsiveTableContext();
3389
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3390
+ /* @__PURE__ */ jsx(Box, { as: "span", children: state?.filterToId ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {
3391
+ TOK1: state.title ?? ""
3392
+ }) : state.title }),
3393
+ /* @__PURE__ */ jsx(
3394
+ DateInput,
3395
+ {
3396
+ disabled: state.readonly,
3397
+ value: state.value,
3398
+ onChange: (date) => {
3399
+ state.value = date;
3400
+ onFilterChange?.(state);
3401
+ },
3402
+ onBlur: () => {
3403
+ onFilterBlur?.(state);
3404
+ }
3405
+ }
3406
+ ),
3407
+ (state?.isAdditional || state.group) && state?.filterToId && /* @__PURE__ */ jsxs(Fragment, { children: [
3408
+ /* @__PURE__ */ jsx(Box, { as: "span", children: formatMessage(window.LBL_DATE_FILTER_TO_TXT, {
3409
+ TOK1: state.title ?? ""
3410
+ }) }),
3400
3411
  /* @__PURE__ */ jsx(
3401
3412
  DateInput,
3402
3413
  {
3403
3414
  disabled: state.readonly,
3404
- value: state.value,
3415
+ value: state.filterToValue,
3405
3416
  onChange: (date) => {
3406
- state.value = date;
3407
- onFilterChange?.(filter);
3417
+ const result = controlDatesOrder(state.value, date);
3418
+ if (result) {
3419
+ state.filterToValue = date;
3420
+ onFilterChange?.(state);
3421
+ } else {
3422
+ state.filterToValue = void 0;
3423
+ ApiaUtil.instance.notifications.notify({
3424
+ message: window.MSG_FEC_FIN_MAY_FEC_INI,
3425
+ type: "warning"
3426
+ });
3427
+ }
3408
3428
  },
3409
3429
  onBlur: () => {
3410
- onFilterBlur?.(filter);
3430
+ onFilterBlur?.(state);
3411
3431
  }
3412
3432
  }
3413
- ),
3414
- (state?.isAdditional || state.group) && state?.filterToId && /* @__PURE__ */ jsxs(Fragment, { children: [
3415
- /* @__PURE__ */ jsx(Box, { as: "span", children: formatMessage(window.LBL_DATE_FILTER_TO_TXT, {
3416
- TOK1: state.title ?? ""
3417
- }) }),
3418
- /* @__PURE__ */ jsx(
3419
- DateInput,
3420
- {
3421
- disabled: state.readonly,
3422
- value: state.filterToValue,
3423
- onChange: (date) => {
3424
- const result = controlDatesOrder(state.value, date);
3425
- if (result) {
3426
- state.filterToValue = date;
3427
- onFilterChange?.(filter);
3428
- } else {
3429
- state.filterToValue = void 0;
3430
- ApiaUtil.instance.notifications.notify({
3431
- message: window.MSG_FEC_FIN_MAY_FEC_INI,
3432
- type: "warning"
3433
- });
3434
- }
3435
- },
3436
- onBlur: () => {
3437
- onFilterBlur?.(filter);
3433
+ )
3434
+ ] })
3435
+ ] });
3436
+ });
3437
+
3438
+ async function getOptions(search) {
3439
+ if (!search)
3440
+ return [];
3441
+ const res = await ApiaApi.get(
3442
+ makeApiaUrl({
3443
+ ajaxUrl: "apia/AutoCompleteAction.run",
3444
+ action: "search",
3445
+ object: "doc_free_metadata",
3446
+ filter: "doc_free_metadata_title",
3447
+ id: "doc_free_metadata_title",
3448
+ show: "doc_free_metadata_title",
3449
+ likeSearch: true,
3450
+ allowLive: false,
3451
+ includeEnvId: true,
3452
+ distinctId: true,
3453
+ value: search
3454
+ })
3455
+ );
3456
+ const rows = arrayOrArray(res?.data?.row);
3457
+ return rows.map(({ content, searchId }) => ({
3458
+ label: content,
3459
+ value: searchId
3460
+ }));
3461
+ }
3462
+ const FreeLabelFilterRenderer = observer(
3463
+ ({ state }) => {
3464
+ const { onFilterChange } = useResponsiveTableContext();
3465
+ const controller = useMemo(
3466
+ () => new AutocompleteController({
3467
+ value: "",
3468
+ icon: "LetterAutocomplete",
3469
+ options: [],
3470
+ onSearch: async (search, _acController) => {
3471
+ state.value = "";
3472
+ return getOptions(search);
3473
+ },
3474
+ onChange(str) {
3475
+ state.value = str;
3476
+ }
3477
+ }),
3478
+ // eslint-disable-next-line react-hooks/exhaustive-deps
3479
+ []
3480
+ );
3481
+ useMount(() => {
3482
+ controller.state.options = [];
3483
+ });
3484
+ return /* @__PURE__ */ jsxs(
3485
+ Box,
3486
+ {
3487
+ sx: {
3488
+ display: "flex",
3489
+ flexDirection: "row",
3490
+ gap: 2,
3491
+ width: "100%",
3492
+ alignItems: "end",
3493
+ ".autocomplete__downArrow": {
3494
+ height: "46px!important",
3495
+ width: "23px!important",
3496
+ svg: {
3497
+ height: "100%",
3498
+ width: "100%"
3438
3499
  }
3439
3500
  }
3440
- )
3441
- ] })
3442
- ] });
3501
+ },
3502
+ children: [
3503
+ /* @__PURE__ */ jsxs(Box, { sx: { width: "50%" }, children: [
3504
+ getLabel("lblTit").text,
3505
+ /* @__PURE__ */ jsx(Autocomplete, { handler: controller })
3506
+ ] }),
3507
+ /* @__PURE__ */ jsxs(Box, { sx: { width: "50%" }, children: [
3508
+ getLabel("lblValue").text,
3509
+ /* @__PURE__ */ jsx(
3510
+ Input$1,
3511
+ {
3512
+ id: state.filterToId,
3513
+ disabled: state.readonly,
3514
+ value: state.filterToValue,
3515
+ onChange: (ev) => {
3516
+ state.filterToValue = ev.target.value;
3517
+ onFilterChange?.(state);
3518
+ }
3519
+ }
3520
+ )
3521
+ ] }),
3522
+ /* @__PURE__ */ jsx(Box, { sx: { height: "50px", width: "50px" }, children: state?.removeFilter && /* @__PURE__ */ jsx(
3523
+ IconButton,
3524
+ {
3525
+ sx: { height: "50px", width: "50px" },
3526
+ icon: "Trash",
3527
+ onClick: () => {
3528
+ if (state?.removeFilter)
3529
+ state.removeFilter();
3530
+ }
3531
+ }
3532
+ ) })
3533
+ ]
3534
+ }
3535
+ );
3443
3536
  }
3444
3537
  );
3445
3538
 
@@ -3456,19 +3549,22 @@ class Filter {
3456
3549
  runAutomatically: false,
3457
3550
  value: ""
3458
3551
  });
3459
- __publicField$5(this, "Component", observer(({ filter }) => {
3552
+ __publicField$5(this, "Component", observer(() => {
3460
3553
  const { name } = useResponsiveTableContext();
3461
3554
  this.tableName = name;
3462
3555
  if (this.filterState.isRange) {
3463
- return this.getRangeRenderer({ filter });
3556
+ return this.getRangeRenderer();
3464
3557
  }
3465
3558
  if (arrayOrArray(this.filterState.options).length > 0) {
3466
- return this.getSelectRenderer({ filter });
3559
+ return this.getSelectRenderer();
3467
3560
  }
3468
3561
  if (this.filterState.type === "D" || this.filterState.type === "date") {
3469
- return this.getDateRenderer({ filter });
3562
+ return this.getDateRenderer();
3470
3563
  }
3471
- return this.getInputRenderer({ filter });
3564
+ if (this.filterState.type === "double") {
3565
+ return this.getDoubleRenderer();
3566
+ }
3567
+ return this.getInputRenderer();
3472
3568
  }));
3473
3569
  Object.assign(this.filterState, properties);
3474
3570
  makeObservable(this, { filterState: observable });
@@ -3484,7 +3580,7 @@ class Filter {
3484
3580
  }
3485
3581
  );
3486
3582
  reaction(
3487
- () => this.filterState.valueTo,
3583
+ () => this.filterState.filterToValue,
3488
3584
  () => {
3489
3585
  if (this.tableName) {
3490
3586
  getResponsiveTableContext(this.tableName).onFilterChange?.({
@@ -3508,17 +3604,20 @@ class Filter {
3508
3604
  }
3509
3605
  focus() {
3510
3606
  }
3511
- getInputRenderer({ filter }) {
3512
- return /* @__PURE__ */ jsx(InputFilterRenderer, { filter, state: this.filterState });
3607
+ getInputRenderer() {
3608
+ return /* @__PURE__ */ jsx(InputFilterRenderer, { state: this.filterState });
3609
+ }
3610
+ getSelectRenderer() {
3611
+ return /* @__PURE__ */ jsx(SelectFilterRenderer, { state: this.filterState });
3513
3612
  }
3514
- getSelectRenderer({ filter }) {
3515
- return /* @__PURE__ */ jsx(SelectFilterRenderer, { filter, state: this.filterState });
3613
+ getRangeRenderer() {
3614
+ return /* @__PURE__ */ jsx(RangeFilterRenderer, { state: this.filterState });
3516
3615
  }
3517
- getRangeRenderer({ filter }) {
3518
- return /* @__PURE__ */ jsx(RangeFilterRenderer, { filter, state: this.filterState });
3616
+ getDateRenderer() {
3617
+ return /* @__PURE__ */ jsx(DateFilterRenderer, { state: this.filterState });
3519
3618
  }
3520
- getDateRenderer({ filter }) {
3521
- return /* @__PURE__ */ jsx(DateFilterRenderer, { filter, state: this.filterState });
3619
+ getDoubleRenderer() {
3620
+ return /* @__PURE__ */ jsx(FreeLabelFilterRenderer, { state: this.filterState });
3522
3621
  }
3523
3622
  }
3524
3623
 
@@ -3543,6 +3642,8 @@ class TableController {
3543
3642
  props: {},
3544
3643
  rows: []
3545
3644
  });
3645
+ // ids de filtros que se consideran "base" (creados en el init)
3646
+ __publicField$4(this, "baseFilterIds", /* @__PURE__ */ new Set());
3546
3647
  __publicField$4(this, "Context", observer(({ children }) => {
3547
3648
  return /* @__PURE__ */ jsx(
3548
3649
  TableLoadingContext.Provider,
@@ -3560,12 +3661,13 @@ class TableController {
3560
3661
  () => [...toJS(state.columns).values()],
3561
3662
  [state.columns]
3562
3663
  );
3664
+ const rows = useMemo(() => [...toJS(state.rows).values()], [state.rows]);
3563
3665
  return /* @__PURE__ */ jsx(
3564
3666
  ResponsiveTableContext,
3565
3667
  {
3566
3668
  ...props,
3567
3669
  columns,
3568
- rows: useMemo(() => [], []),
3670
+ rows: rows ?? [],
3569
3671
  filters: useMemo(() => this.parseFilters(), [this.state.filters]),
3570
3672
  FiltersRenderer: useCallback(
3571
3673
  (filterId) => this.state.filters.get(filterId).Component,
@@ -3680,6 +3782,12 @@ class TableController {
3680
3782
  on(ev, cb) {
3681
3783
  return this.emitter.on(ev, cb);
3682
3784
  }
3785
+ updateFilters(newFilters) {
3786
+ newFilters.forEach((c) => {
3787
+ this.state.filters.set(c.filterState.id, c);
3788
+ });
3789
+ this.state.filters = new Map(this.state.filters);
3790
+ }
3683
3791
  updateState(newState) {
3684
3792
  if (newState instanceof Function) {
3685
3793
  newState(this.state);
@@ -3687,6 +3795,23 @@ class TableController {
3687
3795
  Object.assign(this.state, newState);
3688
3796
  }
3689
3797
  }
3798
+ //Marca los filters actuales como los iniciales (llamar tras parseStructure/init).
3799
+ markInitialFilters() {
3800
+ this.baseFilterIds = new Set([...this.state.filters.keys()].map(String));
3801
+ }
3802
+ // Elimina todos los filtros que NO son base (aquellos añadidos después del init).
3803
+ removeAddedFilters() {
3804
+ for (const id of [...this.state.filters.keys()]) {
3805
+ if (!this.baseFilterIds.has(String(id))) {
3806
+ this.state.filters.delete(id);
3807
+ }
3808
+ }
3809
+ this.state.filters = new Map(this.state.filters);
3810
+ }
3811
+ removeFilter(id) {
3812
+ this.state.filters.delete(id);
3813
+ this.state.filters = new Map(this.state.filters);
3814
+ }
3690
3815
  }
3691
3816
 
3692
3817
  var __defProp$3 = Object.defineProperty;
@@ -3881,6 +4006,7 @@ class QueryController {
3881
4006
  this.hasInited = true;
3882
4007
  this.initializing = false;
3883
4008
  this.loadFilterTypes();
4009
+ this.tableController.markInitialFilters();
3884
4010
  if (!this.structure.queryData?.noExecFirstTime)
3885
4011
  this.refresh();
3886
4012
  }
@@ -4099,86 +4225,118 @@ const FilterTypesComponent = observer(
4099
4225
  }
4100
4226
  );
4101
4227
 
4102
- const AdditionalFiltersComponent = ({
4103
- queryController
4104
- }) => {
4105
- const filterTitle = getLabel("sbtFilters").text;
4106
- const sortTitle = getLabel("titOrderBy").text;
4107
- const filterTypes = getLabel("btnFilterType").text;
4108
- const hasAdditional = !![
4109
- ...queryController.tableController.state.filters.values()
4110
- ].find((f) => f.filterState.isAdditional || !f.filterState.column);
4111
- const hasFilters = !![
4112
- ...queryController.tableController.state.filters.values()
4113
- ].find((f) => !f.filterState.isAdditional && f.filterState.column);
4114
- const hasSortable = !![
4115
- ...queryController.tableController.state.columns.values()
4116
- ].find((c) => c.allowSorting !== false);
4117
- const hasGroupFilter = [
4118
- ...queryController.tableController.state.filters.values()
4119
- ].find((f) => f.filterState.group && f.filterState.group !== "")?.filterState;
4120
- return /* @__PURE__ */ jsx(
4121
- TableContextReproducer,
4122
- {
4123
- tableName: queryController.tableController.getTableName(),
4124
- children: /* @__PURE__ */ jsxs(Accordion, { className: "additionalFiltersContent", singleExpand: true, children: [
4125
- hasFilters && /* @__PURE__ */ jsx(
4126
- AccordionItem,
4127
- {
4128
- id: "Responsive",
4129
- defaultExpanded: true,
4130
- buttonProps: { ariaLabel: filterTitle, label: filterTitle },
4131
- children: /* @__PURE__ */ jsx(Responsive, {})
4132
- }
4133
- ),
4134
- hasAdditional && /* @__PURE__ */ jsx(
4135
- AccordionItem,
4136
- {
4137
- id: "Additional",
4138
- buttonProps: {
4139
- ariaLabel: window.ADDITIONAL_FILTERS_LABEL,
4140
- label: window.ADDITIONAL_FILTERS_LABEL
4141
- },
4142
- children: /* @__PURE__ */ jsx(Additional, {})
4143
- }
4144
- ),
4145
- hasGroupFilter && /* @__PURE__ */ jsx(
4146
- AccordionItem,
4147
- {
4148
- id: "Group",
4149
- buttonProps: {
4150
- ariaLabel: getLabel("titMetadata").text,
4151
- label: getLabel("titMetadata").text
4152
- },
4153
- children: /* @__PURE__ */ jsx(
4154
- Grouped,
4155
- {
4156
- tableName: queryController.tableController.getTableName(),
4157
- group: hasGroupFilter?.group ?? ""
4158
- }
4159
- )
4160
- }
4161
- ),
4162
- hasSortable && /* @__PURE__ */ jsx(
4163
- AccordionItem,
4164
- {
4165
- id: "Sort",
4166
- buttonProps: { ariaLabel: sortTitle, label: sortTitle },
4167
- children: /* @__PURE__ */ jsx(Sort, {})
4168
- }
4169
- ),
4170
- hasFilters && !queryController.structure?.hideFilterTypes && /* @__PURE__ */ jsx(
4171
- AccordionItem,
4172
- {
4173
- id: "FilterTypes",
4174
- buttonProps: { ariaLabel: filterTypes, label: filterTypes },
4175
- children: /* @__PURE__ */ jsx(FilterTypesComponent, { queryController })
4228
+ const AdditionalFiltersComponent = observer(
4229
+ ({ queryController }) => {
4230
+ const filterTitle = getLabel("sbtFilters").text;
4231
+ const sortTitle = getLabel("titOrderBy").text;
4232
+ const filterTypes = getLabel("btnFilterType").text;
4233
+ const hasAdditional = !![
4234
+ ...queryController.tableController.state.filters.values()
4235
+ ].find((f) => f.filterState.isAdditional || !f.filterState.column);
4236
+ const hasFilters = !![
4237
+ ...queryController.tableController.state.filters.values()
4238
+ ].find((f) => !f.filterState.isAdditional && f.filterState.column);
4239
+ const hasSortable = !![
4240
+ ...queryController.tableController.state.columns.values()
4241
+ ].find((c) => c.allowSorting !== false);
4242
+ const groupFilters = (() => {
4243
+ const byGroup = /* @__PURE__ */ new Map();
4244
+ [...queryController.tableController.state.filters.values()].forEach(
4245
+ (f) => {
4246
+ const g = f.filterState?.group;
4247
+ if (g && g !== "" && !byGroup.has(g)) {
4248
+ byGroup.set(g, f);
4176
4249
  }
4177
- )
4178
- ] })
4179
- }
4180
- );
4181
- };
4250
+ }
4251
+ );
4252
+ return [...byGroup.values()];
4253
+ })();
4254
+ return /* @__PURE__ */ jsx(
4255
+ TableContextReproducer,
4256
+ {
4257
+ tableName: queryController.tableController.getTableName(),
4258
+ children: /* @__PURE__ */ jsxs(Accordion, { className: "additionalFiltersContent", singleExpand: true, children: [
4259
+ hasFilters && /* @__PURE__ */ jsx(
4260
+ AccordionItem,
4261
+ {
4262
+ id: "Responsive",
4263
+ defaultExpanded: true,
4264
+ buttonProps: { ariaLabel: filterTitle, label: filterTitle },
4265
+ children: /* @__PURE__ */ jsx(Responsive, {})
4266
+ }
4267
+ ),
4268
+ hasAdditional && /* @__PURE__ */ jsx(
4269
+ AccordionItem,
4270
+ {
4271
+ id: "Additional",
4272
+ buttonProps: {
4273
+ ariaLabel: window.ADDITIONAL_FILTERS_LABEL,
4274
+ label: window.ADDITIONAL_FILTERS_LABEL
4275
+ },
4276
+ children: /* @__PURE__ */ jsx(Additional, {})
4277
+ }
4278
+ ),
4279
+ groupFilters.length > 0 && /* @__PURE__ */ jsx(Fragment, { children: groupFilters.map((g) => /* @__PURE__ */ jsx(
4280
+ AccordionItem,
4281
+ {
4282
+ id: `Group_${g.filterState.group}`,
4283
+ buttonProps: {
4284
+ ariaLabel: getLabel(`${g.filterState.group}`).text,
4285
+ label: getLabel(`${g.filterState.group}`).text
4286
+ },
4287
+ children: /* @__PURE__ */ jsxs(
4288
+ Box,
4289
+ {
4290
+ sx: {
4291
+ display: "flex",
4292
+ flexDirection: "column",
4293
+ alignItems: "end",
4294
+ gap: 3,
4295
+ width: "100%"
4296
+ },
4297
+ children: [
4298
+ /* @__PURE__ */ jsx(
4299
+ Grouped,
4300
+ {
4301
+ tableName: queryController.tableController.getTableName(),
4302
+ group: g.filterState?.group ?? ""
4303
+ },
4304
+ g.filterState.group
4305
+ ),
4306
+ g.filterState.addFilter && /* @__PURE__ */ jsx(
4307
+ SimpleButton,
4308
+ {
4309
+ variant: "outline-sm",
4310
+ onClick: g.filterState.addFilter,
4311
+ children: getLabel("lblAddFil").text
4312
+ }
4313
+ )
4314
+ ]
4315
+ }
4316
+ )
4317
+ }
4318
+ )) }),
4319
+ hasSortable && /* @__PURE__ */ jsx(
4320
+ AccordionItem,
4321
+ {
4322
+ id: "Sort",
4323
+ buttonProps: { ariaLabel: sortTitle, label: sortTitle },
4324
+ children: /* @__PURE__ */ jsx(Sort, {})
4325
+ }
4326
+ ),
4327
+ hasFilters && !queryController.structure?.hideFilterTypes && /* @__PURE__ */ jsx(
4328
+ AccordionItem,
4329
+ {
4330
+ id: "FilterTypes",
4331
+ buttonProps: { ariaLabel: filterTypes, label: filterTypes },
4332
+ children: /* @__PURE__ */ jsx(FilterTypesComponent, { queryController })
4333
+ }
4334
+ )
4335
+ ] })
4336
+ }
4337
+ );
4338
+ }
4339
+ );
4182
4340
 
4183
4341
  var __defProp$2 = Object.defineProperty;
4184
4342
  var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -4251,6 +4409,43 @@ var __publicField$1 = (obj, key, value) => {
4251
4409
  __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
4252
4410
  return value;
4253
4411
  };
4412
+ const NavBarRenderer = observer(
4413
+ ({
4414
+ queryController,
4415
+ additionalFiltersController
4416
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
4417
+ /* @__PURE__ */ jsx(
4418
+ SimpleButton,
4419
+ {
4420
+ variant: "primary-sm",
4421
+ onClick: () => {
4422
+ queryController.refresh();
4423
+ },
4424
+ children: queryController.tableController.state.isLoading ? /* @__PURE__ */ jsx(Spinner, { sx: { color: "white", height: "17px" } }) : getLabel("btnSearch").text
4425
+ }
4426
+ ),
4427
+ /* @__PURE__ */ jsx(
4428
+ SimpleButton,
4429
+ {
4430
+ size: "sm",
4431
+ variant: "outline",
4432
+ onClick: async () => {
4433
+ additionalFiltersController.openModal();
4434
+ },
4435
+ children: getLabel("titAdmAdtFilter").text
4436
+ }
4437
+ ),
4438
+ /* @__PURE__ */ jsx(
4439
+ SimpleButton,
4440
+ {
4441
+ size: "sm",
4442
+ variant: "outline",
4443
+ onClick: () => queryController.clearFilters(),
4444
+ children: getLabel("btnClearFilter").text
4445
+ }
4446
+ )
4447
+ ] })
4448
+ );
4254
4449
  class QueryModalController {
4255
4450
  constructor(queryController) {
4256
4451
  __publicField$1(this, "emitter", new EventEmitter());
@@ -4258,6 +4453,7 @@ class QueryModalController {
4258
4453
  __publicField$1(this, "modalHandler", null);
4259
4454
  __publicField$1(this, "currentSelection", null);
4260
4455
  __publicField$1(this, "additionalFiltersController");
4456
+ __publicField$1(this, "sx", {});
4261
4457
  if (!queryController) {
4262
4458
  throw new Error("QueryController instance is required");
4263
4459
  }
@@ -4280,10 +4476,10 @@ class QueryModalController {
4280
4476
  const tableController = this.queryController.tableController;
4281
4477
  const structure = this.queryController.structure;
4282
4478
  return {
4283
- children: /* @__PURE__ */ jsxs(tableController.Context, { children: [
4479
+ children: /* @__PURE__ */ jsx(Box, { sx: { height: "100%", ...this.sx }, children: /* @__PURE__ */ jsxs(tableController.Context, { children: [
4284
4480
  /* @__PURE__ */ jsx(tableController.Table, {}),
4285
4481
  /* @__PURE__ */ jsx(tableController.Pagination, {})
4286
- ] }),
4482
+ ] }) }),
4287
4483
  title: structure?.title,
4288
4484
  onConfirm: () => {
4289
4485
  this.onConfirm();
@@ -4297,38 +4493,13 @@ class QueryModalController {
4297
4493
  confirmButtonText: getLabel("btnCon").text,
4298
4494
  cancelButtonText: getLabel("btnCan").text
4299
4495
  },
4300
- NavBar: /* @__PURE__ */ jsxs(Fragment, { children: [
4301
- /* @__PURE__ */ jsx(
4302
- SimpleButton,
4303
- {
4304
- variant: "primary-sm",
4305
- onClick: () => {
4306
- this.queryController.refresh();
4307
- },
4308
- children: getLabel("btnSearch").text
4309
- }
4310
- ),
4311
- /* @__PURE__ */ jsx(
4312
- SimpleButton,
4313
- {
4314
- size: "sm",
4315
- variant: "outline",
4316
- onClick: async () => {
4317
- this.additionalFiltersController.openModal();
4318
- },
4319
- children: getLabel("titAdmAdtFilter").text
4320
- }
4321
- ),
4322
- /* @__PURE__ */ jsx(
4323
- SimpleButton,
4324
- {
4325
- size: "sm",
4326
- variant: "outline",
4327
- onClick: () => this.queryController.clearFilters(),
4328
- children: getLabel("btnClearFilter").text
4329
- }
4330
- )
4331
- ] }),
4496
+ NavBar: /* @__PURE__ */ jsx(
4497
+ NavBarRenderer,
4498
+ {
4499
+ queryController: this.queryController,
4500
+ additionalFiltersController: this.additionalFiltersController
4501
+ }
4502
+ ),
4332
4503
  size: "finder"
4333
4504
  };
4334
4505
  }
@@ -4389,7 +4560,10 @@ class GenericListQuery extends QueryController {
4389
4560
  };
4390
4561
  }
4391
4562
  getLoadStructureParameters() {
4392
- return { ...super.getLoadStructureParameters(), action: "filter" };
4563
+ return {
4564
+ ...super.getLoadStructureParameters(),
4565
+ ...this.getRefreshParameters()
4566
+ };
4393
4567
  }
4394
4568
  getRefreshParameters() {
4395
4569
  return {
@@ -4398,14 +4572,32 @@ class GenericListQuery extends QueryController {
4398
4572
  isAjax: true
4399
4573
  };
4400
4574
  }
4401
- parseRefreshResponse(response) {
4402
- if (!response)
4403
- return;
4404
- const structure = this.parseLoadStructureResponse(response);
4405
- this.parseStructure(structure);
4406
- setTimeout(() => {
4407
- super.parseRefreshResponse(response);
4408
- }, 0);
4575
+ async getStructure() {
4576
+ const result = await ApiaApi.post(
4577
+ makeApiaUrl(this.getLoadStructureParameters())
4578
+ );
4579
+ if (!result?.data) {
4580
+ throw new Error("Cannot load Input query structure");
4581
+ }
4582
+ super.parseRefreshResponse(result?.data);
4583
+ return this.parseLoadStructureResponse(result.data);
4584
+ }
4585
+ async initialLoad() {
4586
+ this.tableController.state.finishedFirstLoad = false;
4587
+ if (this.initializing && !this.hasInited) {
4588
+ throw new Error("Cannot initialize the query twice");
4589
+ }
4590
+ this.initializing = true;
4591
+ if (!this.hasInited) {
4592
+ const structure = await this.getStructure();
4593
+ this.structure = structure;
4594
+ this.parseStructure(structure);
4595
+ this.tableController.updateState({
4596
+ props: this.getTableControllerDefaultProps()
4597
+ });
4598
+ this.hasInited = true;
4599
+ this.initializing = false;
4600
+ }
4409
4601
  }
4410
4602
  parseLoadStructureResponse(response) {
4411
4603
  const typedResponse = response;
@@ -4423,9 +4615,9 @@ class UsersQuery extends GenericListQuery {
4423
4615
  constructor() {
4424
4616
  super("apia.modals.UsersAction.run");
4425
4617
  }
4426
- getFiltersValuesMap() {
4618
+ getRefreshParameters() {
4427
4619
  return {
4428
- ...super.getFiltersValuesMap(),
4620
+ ...super.getRefreshParameters(),
4429
4621
  externalUser: false,
4430
4622
  selectOnlyOne: false,
4431
4623
  globalAndEnv: true,
@@ -4434,6 +4626,20 @@ class UsersQuery extends GenericListQuery {
4434
4626
  forCurrentEnv: false
4435
4627
  };
4436
4628
  }
4629
+ parseRefreshResponse(response) {
4630
+ if (!response)
4631
+ return;
4632
+ const structure = this.parseLoadStructureResponse(response);
4633
+ this.parseStructure(structure);
4634
+ setTimeout(() => {
4635
+ super.parseRefreshResponse(response);
4636
+ }, 0);
4637
+ }
4638
+ getFiltersValuesMap() {
4639
+ return {
4640
+ ...super.getFiltersValuesMap()
4641
+ };
4642
+ }
4437
4643
  parseLoadStructureResponse(response) {
4438
4644
  const structure = { ...super.parseLoadStructureResponse(response) };
4439
4645
  structure.hideFilterTypes = true;
@@ -4443,16 +4649,17 @@ class UsersQuery extends GenericListQuery {
4443
4649
  const makeApiaUsersModal2 = () => new QueryModalController(new UsersQuery());
4444
4650
 
4445
4651
  class PoolsQuery extends GenericListQuery {
4446
- constructor() {
4652
+ constructor(config) {
4447
4653
  super("apia.modals.PoolsAction.run");
4654
+ this.config = config;
4448
4655
  }
4449
- getFiltersValuesMap() {
4656
+ getRefreshParameters() {
4450
4657
  return {
4451
- ...super.getFiltersValuesMap(),
4658
+ ...super.getRefreshParameters(),
4452
4659
  showAutogenerated: false,
4453
4660
  showNotAutogenerated: false,
4454
- showCurrentEnv: true,
4455
- showGlobal: true,
4661
+ showCurrentEnv: this.config?.showCurrentEnv ?? true,
4662
+ showGlobal: this.config?.showGlobal ?? true,
4456
4663
  selectOnlyOne: false,
4457
4664
  forHierarchy: false,
4458
4665
  showOnlyPoolsInHierarchy: false,
@@ -4461,24 +4668,58 @@ class PoolsQuery extends GenericListQuery {
4461
4668
  fetchAllInHierarchy: false
4462
4669
  };
4463
4670
  }
4671
+ getFiltersValuesMap() {
4672
+ return {
4673
+ ...super.getFiltersValuesMap()
4674
+ };
4675
+ }
4676
+ parseRefreshResponse(response) {
4677
+ if (!response)
4678
+ return;
4679
+ const structure = this.parseLoadStructureResponse(response);
4680
+ this.parseStructure(structure);
4681
+ setTimeout(() => {
4682
+ super.parseRefreshResponse(response);
4683
+ }, 0);
4684
+ }
4464
4685
  parseLoadStructureResponse(response) {
4465
4686
  const structure = { ...super.parseLoadStructureResponse(response) };
4466
4687
  structure.hideFilterTypes = true;
4688
+ structure.title = getLabel("btnAddPool").text;
4467
4689
  return structure;
4468
4690
  }
4469
4691
  }
4470
- const makeApiaPoolsModals2 = () => new QueryModalController(new PoolsQuery());
4692
+ const makeApiaPoolsModals2 = (config) => new QueryModalController(new PoolsQuery(config));
4471
4693
 
4472
4694
  var __defProp = Object.defineProperty;
4473
4695
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4474
4696
  var __publicField = (obj, key, value) => {
4475
- __defNormalProp(obj, key + "" , value);
4697
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4476
4698
  return value;
4477
4699
  };
4478
4700
  class MonDocQuery extends QueryController {
4479
4701
  constructor(ajaxUrl) {
4480
4702
  super(ajaxUrl);
4481
4703
  this.ajaxUrl = ajaxUrl;
4704
+ __publicField(this, "getAdditionalInfo", async (row) => {
4705
+ const result = await ApiaApi.post(
4706
+ makeApiaUrl({
4707
+ ajaxUrl: this.ajaxUrl,
4708
+ action: "adtInfo",
4709
+ isAjax: true,
4710
+ preventAsXmlParameter: true
4711
+ }),
4712
+ {
4713
+ postData: new URLSearchParams({
4714
+ id: row.id.slice(
4715
+ 0,
4716
+ row.id.indexOf("$-$") > 0 ? row.id.indexOf("$-$") : row.id.length
4717
+ )
4718
+ }).toString()
4719
+ }
4720
+ );
4721
+ return arrayOrArray(result?.data?.function.messages.row.cell);
4722
+ });
4482
4723
  __publicField(this, "dynamicParams", {});
4483
4724
  }
4484
4725
  getTableControllerDefaultProps() {
@@ -4499,42 +4740,74 @@ class MonDocQuery extends QueryController {
4499
4740
  ]
4500
4741
  };
4501
4742
  }
4743
+ addFreeMetadataFilter(filter) {
4744
+ const id = uniqueId$1();
4745
+ const actualFilter = filter || {
4746
+ id,
4747
+ group: "lblFreeMetadata",
4748
+ value: "",
4749
+ filterToValue: "",
4750
+ avoidLabel: true,
4751
+ type: "double",
4752
+ addFilter: () => {
4753
+ this.addFreeMetadataFilter();
4754
+ },
4755
+ removeFilter: () => {
4756
+ this.tableController.removeFilter(id);
4757
+ }
4758
+ };
4759
+ const freeMetadataFilters = arrayOrArray(actualFilter).map((f) => {
4760
+ return new Filter(f);
4761
+ });
4762
+ this.tableController.updateFilters(freeMetadataFilters);
4763
+ }
4502
4764
  async initialLoad() {
4503
4765
  await super.initialLoad();
4504
4766
  await this.loadMetadataFilters();
4505
4767
  await this.setFilters();
4506
4768
  }
4507
4769
  async loadMetadataFilters() {
4770
+ this.tableController.removeAddedFilters();
4508
4771
  const res = await ApiaApi.post(
4509
4772
  makeApiaUrl({
4510
4773
  ajaxUrl: this.ajaxUrl,
4511
4774
  action: "loadMetadata",
4512
- docTypeId: !this.hasInited ? this.dynamicParams.docTypeSel : this.tableController.state.filters.get("txtDocTypeId")?.filterState.value
4775
+ docTypeId: this.tableController.state.filters.get("txtDocTypeId")?.filterState.value || 1
4513
4776
  })
4514
4777
  );
4515
4778
  if (res?.data?.docMetadata?.metadata) {
4516
- const parsedFilters = res.data.docMetadata.metadata.map((c) => {
4517
- const filter = {
4518
- ...c,
4519
- group: "metadata",
4520
- hideToFilter: true,
4521
- filterToId: `${String(c.id)}i`,
4522
- filterToValue: c.value2,
4523
- avoidLabel: c.type === "D"
4524
- };
4525
- return filter;
4526
- });
4527
- const metadataFilters = new Map(
4528
- arrayOrArray(parsedFilters).map((f) => {
4529
- return [f.id, new Filter(f)];
4530
- })
4779
+ const parsedFilters = arrayOrArray(res.data.docMetadata.metadata).map(
4780
+ (c) => {
4781
+ const filter = {
4782
+ ...c,
4783
+ group: "titMetadata",
4784
+ hideToFilter: true,
4785
+ filterToId: `${String(c.id)}i`,
4786
+ filterToValue: c.value2,
4787
+ avoidLabel: c.type === "D"
4788
+ };
4789
+ return filter;
4790
+ }
4531
4791
  );
4532
- this.tableController.updateState({
4533
- filters: new Map([
4534
- ...this.tableController.state.filters.entries(),
4535
- ...metadataFilters.entries()
4536
- ])
4792
+ const metadataFilters = arrayOrArray(parsedFilters).map((f) => {
4793
+ return new Filter(f);
4537
4794
  });
4795
+ this.tableController.updateFilters(metadataFilters);
4796
+ if (metadataFilters.length > 0) {
4797
+ const id = uniqueId$1();
4798
+ const metadataFilter = {
4799
+ id,
4800
+ group: "lblFreeMetadata",
4801
+ value: "",
4802
+ filterToValue: "",
4803
+ avoidLabel: true,
4804
+ type: "double",
4805
+ addFilter: () => {
4806
+ this.addFreeMetadataFilter();
4807
+ }
4808
+ };
4809
+ this.addFreeMetadataFilter(metadataFilter);
4810
+ }
4538
4811
  }
4539
4812
  }
4540
4813
  async loadFilterTypes() {
@@ -4568,28 +4841,32 @@ class MonDocQuery extends QueryController {
4568
4841
  }
4569
4842
  getFiltersValuesMap() {
4570
4843
  const metadataValues = [];
4844
+ const freeMetadataValues = [];
4571
4845
  const filtersValues = [
4572
4846
  ...this.tableController.state.filters.values()
4573
4847
  ].reduce((result, filterWrapper) => {
4574
4848
  const { id, value, type, group, multiplier, filterToId, filterToValue } = filterWrapper.filterState;
4575
- if (group?.match(/metadata(\d+)/)) {
4576
- if (value !== "") {
4577
- const prefix = `${id}${window.PRIMARY_SEPARATOR}`;
4578
- if (type) {
4579
- const t = type === "apiaNumber" ? "N" : type;
4849
+ switch (group) {
4850
+ case "titMetadata":
4851
+ if (value !== "") {
4852
+ const t = (type === "apiaNumber" ? "N" : type) || "S";
4580
4853
  metadataValues.push(
4581
- `${prefix}${t}${window.PRIMARY_SEPARATOR}${value}`
4854
+ `${id}${window.PRIMARY_SEPARATOR}${t}${window.PRIMARY_SEPARATOR}${value}`
4582
4855
  );
4583
4856
  if (filterToValue) {
4584
4857
  metadataValues.push(
4585
- `${prefix}${t}${window.PRIMARY_SEPARATOR}${filterToValue}`
4858
+ `${id}${window.PRIMARY_SEPARATOR}${t}${window.PRIMARY_SEPARATOR}${filterToValue}`
4586
4859
  );
4587
4860
  }
4588
- } else {
4589
- metadataValues.push(`${prefix}${value}`);
4590
4861
  }
4591
- }
4592
- return result;
4862
+ return result;
4863
+ case "lblFreeMetadata":
4864
+ if (filterToValue !== "") {
4865
+ freeMetadataValues.push(
4866
+ `${value}${window.PRIMARY_SEPARATOR}${filterToValue}`
4867
+ );
4868
+ }
4869
+ return result;
4593
4870
  }
4594
4871
  result[id] = multiplier ? value * multiplier : value;
4595
4872
  if (filterToId !== void 0 && filterToValue != void 0) {
@@ -4599,7 +4876,8 @@ class MonDocQuery extends QueryController {
4599
4876
  }, {});
4600
4877
  return {
4601
4878
  ...filtersValues,
4602
- strDocMetadata: metadataValues.join(";")
4879
+ strDocMetadata: metadataValues.join(";"),
4880
+ strDocFreeMetadata: freeMetadataValues.join(";")
4603
4881
  };
4604
4882
  }
4605
4883
  getEventsHandlers() {
@@ -4631,7 +4909,9 @@ class MonDocQuery extends QueryController {
4631
4909
  {
4632
4910
  title: getLabel("lblLockedDocument").text,
4633
4911
  icon: "Locked",
4634
- sx: { display: r.docLock ? "block" : "none" }
4912
+ sx: {
4913
+ display: r.docLock ? "block!important" : "none!important"
4914
+ }
4635
4915
  }
4636
4916
  ),
4637
4917
  tooltip: ""
@@ -4643,7 +4923,9 @@ class MonDocQuery extends QueryController {
4643
4923
  title: getLabel("lblReadOnly").text,
4644
4924
  icon: "Readonly",
4645
4925
  size: 22,
4646
- sx: { display: r.uneditableTR ? "block" : "none" }
4926
+ sx: {
4927
+ display: r.uneditableTR ? "block!important" : "none!important"
4928
+ }
4647
4929
  }
4648
4930
  ),
4649
4931
  tooltip: ""
@@ -4662,7 +4944,23 @@ class MonDocQuery extends QueryController {
4662
4944
  return { children: c.content, className: c.classToAdd };
4663
4945
  }
4664
4946
  if ("elemType" in c) {
4665
- return { children: c.elemType };
4947
+ return {
4948
+ children: /* @__PURE__ */ jsx(
4949
+ IconButton,
4950
+ {
4951
+ icon: "Download",
4952
+ onClick: () => {
4953
+ window.open(
4954
+ makeApiaUrl({
4955
+ ajaxUrl: this.ajaxUrl,
4956
+ action: "download",
4957
+ id: r.id
4958
+ })
4959
+ );
4960
+ }
4961
+ }
4962
+ )
4963
+ };
4666
4964
  }
4667
4965
  }
4668
4966
  return { children: c };
@@ -4678,20 +4976,29 @@ class MonDocQuery extends QueryController {
4678
4976
  const typedResponse = response;
4679
4977
  const retrievedColumns = arrayOrArray(typedResponse.columns);
4680
4978
  const retrievedFilters = arrayOrArray(typedResponse.filters);
4979
+ const columns = retrievedColumns.map((c) => {
4980
+ const column = {
4981
+ label: c.label,
4982
+ name: c.name,
4983
+ allowSorting: c.allowSorting,
4984
+ dataSortBy: c.dataSortBy,
4985
+ sort: c.sort,
4986
+ toolTip: c.toolTip,
4987
+ minWidth: c.name === "docFile" ? "50px" : "25%",
4988
+ width: c.name === "docFile" ? "50px" : "25%"
4989
+ };
4990
+ return column;
4991
+ });
4992
+ if (response.additionalInfoInTable) {
4993
+ columns?.push({
4994
+ showAsAdditional: true,
4995
+ label: "moreInfo",
4996
+ name: "moreInfo",
4997
+ Renderer: makeAsyncRenderer((row) => this.getAdditionalInfo(row))
4998
+ });
4999
+ }
4681
5000
  const returnObject = {
4682
- columns: retrievedColumns.map((c) => {
4683
- const column = {
4684
- label: c.label,
4685
- name: c.name,
4686
- allowSorting: c.allowSorting,
4687
- dataSortBy: c.dataSortBy,
4688
- sort: c.sort,
4689
- toolTip: c.toolTip,
4690
- minWidth: c.name === "docFile" ? "50px" : "25%",
4691
- width: c.name === "docFile" ? "50px" : "25%"
4692
- };
4693
- return column;
4694
- }).filter((c) => c !== null),
5001
+ columns: columns.filter((c) => c !== null),
4695
5002
  filters: arrayOrArray(retrievedFilters).map((f) => {
4696
5003
  const filter = {
4697
5004
  id: f.id,
@@ -4718,12 +5025,12 @@ class MonDocQuery extends QueryController {
4718
5025
  return filter;
4719
5026
  }),
4720
5027
  description: "",
4721
- hasAdditionalInformation: response.additionalInfoInTable,
4722
- hideFilterTypes: false,
5028
+ hasAdditionalInformation: true,
5029
+ hideFilterTypes: true,
4723
5030
  isDynamic: false,
4724
5031
  openFiltersAutomatically: false,
4725
5032
  runFiltersAutomatically: true,
4726
- title: "",
5033
+ title: response.title,
4727
5034
  queryData: { noExecFirstTime: true }
4728
5035
  };
4729
5036
  return returnObject;
@@ -4741,6 +5048,14 @@ class MonDocQuery extends QueryController {
4741
5048
  class ApiaMonDocModal2 extends QueryModalController {
4742
5049
  constructor() {
4743
5050
  super(new MonDocQuery("/apia.execution.CustMonDocumentAction.run"));
5051
+ __publicField(this, "sx", {
5052
+ "tr.expired[class]": {
5053
+ color: "priorityUrgent",
5054
+ "&:hover": {
5055
+ color: "priorityUrgent"
5056
+ }
5057
+ }
5058
+ });
4744
5059
  }
4745
5060
  openModal(properties) {
4746
5061
  this.queryController.setDynamicParams(