@apia/api 4.0.46 → 4.0.50
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.d.ts +16 -16
- package/dist/index.js +100 -56
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
package/dist/index.d.ts
CHANGED
|
@@ -303,6 +303,21 @@ type TFilter = {
|
|
|
303
303
|
icon?: string;
|
|
304
304
|
};
|
|
305
305
|
|
|
306
|
+
declare class Filter {
|
|
307
|
+
protected tableName?: string;
|
|
308
|
+
filterState: TFilter;
|
|
309
|
+
focus(): void;
|
|
310
|
+
constructor(properties: TFilter);
|
|
311
|
+
getInputRenderer(): react.JSX.Element;
|
|
312
|
+
getSelectRenderer(): react.JSX.Element;
|
|
313
|
+
getRangeRenderer(): react.JSX.Element;
|
|
314
|
+
getDateRenderer(): react.JSX.Element;
|
|
315
|
+
getDoubleRenderer(): react.JSX.Element;
|
|
316
|
+
Component: (() => react.JSX.Element) & {
|
|
317
|
+
displayName: string;
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
306
321
|
type TFilterTypesElementConditions = {
|
|
307
322
|
onChange: string;
|
|
308
323
|
readonly: boolean;
|
|
@@ -324,21 +339,6 @@ type TFilterTypesElementConditions = {
|
|
|
324
339
|
};
|
|
325
340
|
};
|
|
326
341
|
|
|
327
|
-
declare class Filter {
|
|
328
|
-
protected tableName?: string;
|
|
329
|
-
filterState: TFilter;
|
|
330
|
-
focus(): void;
|
|
331
|
-
constructor(properties: TFilter);
|
|
332
|
-
getInputRenderer(): react.JSX.Element;
|
|
333
|
-
getSelectRenderer(): react.JSX.Element;
|
|
334
|
-
getRangeRenderer(): react.JSX.Element;
|
|
335
|
-
getDateRenderer(): react.JSX.Element;
|
|
336
|
-
getDoubleRenderer(): react.JSX.Element;
|
|
337
|
-
Component: (() => react.JSX.Element) & {
|
|
338
|
-
displayName: string;
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
|
|
342
342
|
type TableControllerState = {
|
|
343
343
|
finishedFirstLoad: boolean;
|
|
344
344
|
columns: Map<string, TResponsiveTableColumn>;
|
|
@@ -426,7 +426,7 @@ declare class QueryController {
|
|
|
426
426
|
conditions: TFilterTypesElementConditions[];
|
|
427
427
|
constructor(ajaxUrl: string);
|
|
428
428
|
protected actualRefreshMethod(serverFirstRefresh?: boolean): Promise<void>;
|
|
429
|
-
protected areRequiredFilters():
|
|
429
|
+
protected areRequiredFilters(): false | Filter[];
|
|
430
430
|
protected buildTableController(): TableController;
|
|
431
431
|
clearFilters(): Promise<void>;
|
|
432
432
|
private timeout;
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Box, Label, spacing, getVariant, Input as Input$1, Select as Select$1,
|
|
|
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, AutocompleteController, Autocomplete, IconButton } from '@apia/components';
|
|
8
|
+
import { Accordion, AccordionItem, useModal, LabelBox, SimpleButton, ApiaUtil, Modal, ProgressBar, RequiredMark, 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';
|
|
@@ -3244,7 +3244,7 @@ const RangeFilterRenderer = observer(({ state }) => {
|
|
|
3244
3244
|
const lastEmittedMultiplier = useRef(1);
|
|
3245
3245
|
if (lastEmittedLow.current !== state.value) {
|
|
3246
3246
|
lastEmittedLow.current = state.value;
|
|
3247
|
-
lastEmittedHigh.current = state.
|
|
3247
|
+
lastEmittedHigh.current = state.filterToValue || "";
|
|
3248
3248
|
}
|
|
3249
3249
|
const emitLow = (currentValue) => {
|
|
3250
3250
|
const numberValue = currentValue ?? "";
|
|
@@ -3265,11 +3265,11 @@ const RangeFilterRenderer = observer(({ state }) => {
|
|
|
3265
3265
|
lastEmittedHigh.current = numberValue;
|
|
3266
3266
|
lastEmittedMultiplier.current = multiplier.current;
|
|
3267
3267
|
const emitValue = numberValue;
|
|
3268
|
-
state.
|
|
3268
|
+
state.filterToValue = String(emitValue);
|
|
3269
3269
|
state.multiplier = multiplier.current;
|
|
3270
3270
|
};
|
|
3271
3271
|
const [lowValue, setLowValue] = useIntermediateValue(state.value);
|
|
3272
|
-
const [highValue, setHighValue] = useIntermediateValue(state.
|
|
3272
|
+
const [highValue, setHighValue] = useIntermediateValue(state.filterToValue);
|
|
3273
3273
|
const [unit, setUnit] = useIntermediateValue(state.multiplier);
|
|
3274
3274
|
return /* @__PURE__ */ jsxs(
|
|
3275
3275
|
Box,
|
|
@@ -3301,6 +3301,7 @@ const RangeFilterRenderer = observer(({ state }) => {
|
|
|
3301
3301
|
Input$1,
|
|
3302
3302
|
{
|
|
3303
3303
|
disabled: state.readonly,
|
|
3304
|
+
required: state.required,
|
|
3304
3305
|
onChange: ({ target: { value: currentValue } }) => {
|
|
3305
3306
|
setHighValue(currentValue);
|
|
3306
3307
|
emitHigh(currentValue);
|
|
@@ -3340,39 +3341,45 @@ const RangeFilterRenderer = observer(({ state }) => {
|
|
|
3340
3341
|
});
|
|
3341
3342
|
|
|
3342
3343
|
const SelectFilterRenderer = observer(({ state }) => {
|
|
3343
|
-
return /* @__PURE__ */
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3344
|
+
return /* @__PURE__ */ jsxs(Box, { sx: { position: "relative" }, children: [
|
|
3345
|
+
state.required && /* @__PURE__ */ jsx(RequiredMark, { isRequired: true, sx: { position: "absolute", left: 2 } }),
|
|
3346
|
+
/* @__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(state.options).map((c) => /* @__PURE__ */ jsx("option", { value: c.value, children: c.label }, c.value))
|
|
3355
|
+
}
|
|
3356
|
+
)
|
|
3357
|
+
] });
|
|
3354
3358
|
});
|
|
3355
3359
|
|
|
3356
3360
|
const InputFilterRenderer = observer(({ state }) => {
|
|
3357
3361
|
const { onFilterBlur, onFilterPressEnter } = useResponsiveTableContext();
|
|
3358
|
-
return /* @__PURE__ */
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3362
|
+
return /* @__PURE__ */ jsxs(Box, { sx: { position: "relative" }, children: [
|
|
3363
|
+
state.required && /* @__PURE__ */ jsx(RequiredMark, { isRequired: true, sx: { position: "absolute", left: 2 } }),
|
|
3364
|
+
/* @__PURE__ */ jsx(
|
|
3365
|
+
Input$1,
|
|
3366
|
+
{
|
|
3367
|
+
disabled: state.readonly,
|
|
3368
|
+
value: state.value,
|
|
3369
|
+
onChange: (ev) => {
|
|
3370
|
+
state.value = ev.target.value;
|
|
3371
|
+
},
|
|
3372
|
+
onKeyDown: (ev) => {
|
|
3373
|
+
if (ev.code === "Enter") {
|
|
3374
|
+
onFilterPressEnter?.(state);
|
|
3375
|
+
}
|
|
3376
|
+
},
|
|
3377
|
+
onBlur: () => {
|
|
3378
|
+
onFilterBlur?.(state);
|
|
3369
3379
|
}
|
|
3370
|
-
},
|
|
3371
|
-
onBlur: () => {
|
|
3372
|
-
onFilterBlur?.(state);
|
|
3373
3380
|
}
|
|
3374
|
-
|
|
3375
|
-
);
|
|
3381
|
+
)
|
|
3382
|
+
] });
|
|
3376
3383
|
});
|
|
3377
3384
|
|
|
3378
3385
|
const dateFormat = getDateFormat();
|
|
@@ -3387,24 +3394,40 @@ function controlDatesOrder(first, last) {
|
|
|
3387
3394
|
const DateFilterRenderer = observer(({ state }) => {
|
|
3388
3395
|
const { onFilterBlur, onFilterChange } = useResponsiveTableContext();
|
|
3389
3396
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3390
|
-
/* @__PURE__ */
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
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);
|
|
3397
|
+
/* @__PURE__ */ jsxs(Box, { sx: { position: "relative" }, children: [
|
|
3398
|
+
state.required && /* @__PURE__ */ jsx(
|
|
3399
|
+
RequiredMark,
|
|
3400
|
+
{
|
|
3401
|
+
isRequired: true,
|
|
3402
|
+
sx: { position: "absolute", left: 2, top: 6, zIndex: 1 }
|
|
3404
3403
|
}
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3404
|
+
),
|
|
3405
|
+
/* @__PURE__ */ jsx(Box, { as: "span", children: state?.filterToId ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {
|
|
3406
|
+
TOK1: state.title ?? ""
|
|
3407
|
+
}) : state.title }),
|
|
3408
|
+
/* @__PURE__ */ jsx(
|
|
3409
|
+
DateInput,
|
|
3410
|
+
{
|
|
3411
|
+
disabled: state.readonly,
|
|
3412
|
+
value: state.value,
|
|
3413
|
+
onChange: (date) => {
|
|
3414
|
+
state.value = date;
|
|
3415
|
+
onFilterChange?.(state);
|
|
3416
|
+
},
|
|
3417
|
+
onBlur: () => {
|
|
3418
|
+
onFilterBlur?.(state);
|
|
3419
|
+
}
|
|
3420
|
+
}
|
|
3421
|
+
)
|
|
3422
|
+
] }),
|
|
3423
|
+
(state?.isAdditional || state.group) && state?.filterToId && /* @__PURE__ */ jsxs(Box, { sx: { position: "relative" }, children: [
|
|
3424
|
+
state.required && /* @__PURE__ */ jsx(
|
|
3425
|
+
RequiredMark,
|
|
3426
|
+
{
|
|
3427
|
+
isRequired: true,
|
|
3428
|
+
sx: { position: "absolute", left: 2, top: 6, zIndex: 1 }
|
|
3429
|
+
}
|
|
3430
|
+
),
|
|
3408
3431
|
/* @__PURE__ */ jsx(Box, { as: "span", children: formatMessage(window.LBL_DATE_FILTER_TO_TXT, {
|
|
3409
3432
|
TOK1: state.title ?? ""
|
|
3410
3433
|
}) }),
|
|
@@ -3414,9 +3437,9 @@ const DateFilterRenderer = observer(({ state }) => {
|
|
|
3414
3437
|
disabled: state.readonly,
|
|
3415
3438
|
value: state.filterToValue,
|
|
3416
3439
|
onChange: (date) => {
|
|
3417
|
-
const result = controlDatesOrder(state.value, date);
|
|
3440
|
+
const result = controlDatesOrder(state.value, date ?? "");
|
|
3418
3441
|
if (result) {
|
|
3419
|
-
state.filterToValue = date;
|
|
3442
|
+
state.filterToValue = date ?? "";
|
|
3420
3443
|
onFilterChange?.(state);
|
|
3421
3444
|
} else {
|
|
3422
3445
|
state.filterToValue = void 0;
|
|
@@ -3854,7 +3877,8 @@ class QueryController {
|
|
|
3854
3877
|
}
|
|
3855
3878
|
async actualRefreshMethod(serverFirstRefresh) {
|
|
3856
3879
|
const newValues = this.getFiltersValuesMap();
|
|
3857
|
-
|
|
3880
|
+
const required = this.areRequiredFilters();
|
|
3881
|
+
if (!required) {
|
|
3858
3882
|
await this.mutex.acquire();
|
|
3859
3883
|
try {
|
|
3860
3884
|
this.tableController.state.finishedFirstLoad = false;
|
|
@@ -3876,11 +3900,28 @@ class QueryController {
|
|
|
3876
3900
|
this.mutex.release();
|
|
3877
3901
|
}
|
|
3878
3902
|
}
|
|
3903
|
+
if (required) {
|
|
3904
|
+
const names = required.map(
|
|
3905
|
+
(f) => f.filterState.title ?? f.filterState.column ?? f.filterState.id ?? ""
|
|
3906
|
+
).filter(Boolean).join(", ");
|
|
3907
|
+
ApiaUtil.instance.notifications.notify({
|
|
3908
|
+
message: getLabel("msgQryFilterRequiredList", {
|
|
3909
|
+
text: { TOK1: names }
|
|
3910
|
+
}).text,
|
|
3911
|
+
type: "warning"
|
|
3912
|
+
});
|
|
3913
|
+
}
|
|
3879
3914
|
}
|
|
3880
3915
|
areRequiredFilters() {
|
|
3881
|
-
|
|
3916
|
+
const requiredFilters = [
|
|
3917
|
+
...this.tableController.state.filters.values()
|
|
3918
|
+
].filter(
|
|
3882
3919
|
(c) => c.filterState.required && !c.filterState.value && !c.filterState.isHidden
|
|
3883
3920
|
);
|
|
3921
|
+
if (requiredFilters.length > 0) {
|
|
3922
|
+
return requiredFilters;
|
|
3923
|
+
}
|
|
3924
|
+
return false;
|
|
3884
3925
|
}
|
|
3885
3926
|
buildTableController() {
|
|
3886
3927
|
return new TableController();
|
|
@@ -4093,7 +4134,7 @@ class QueryController {
|
|
|
4093
4134
|
] : void 0,
|
|
4094
4135
|
placeholder: f.title,
|
|
4095
4136
|
readonly: f.readonly,
|
|
4096
|
-
required: f.required === "true",
|
|
4137
|
+
required: f.required === "true" || f.required === "1" || f.dateRequired === "1",
|
|
4097
4138
|
runAutomatically: typedResponse?.filters.runFiltersAutomatically || f.detectOnChange
|
|
4098
4139
|
};
|
|
4099
4140
|
return filter;
|
|
@@ -4260,7 +4301,7 @@ const AdditionalFiltersComponent = observer(
|
|
|
4260
4301
|
);
|
|
4261
4302
|
return [...byGroup.values()];
|
|
4262
4303
|
})();
|
|
4263
|
-
return /* @__PURE__ */ jsx(
|
|
4304
|
+
return /* @__PURE__ */ jsx(Box, { sx: { ".requiredMark": { display: "none" } }, children: /* @__PURE__ */ jsx(
|
|
4264
4305
|
TableContextReproducer,
|
|
4265
4306
|
{
|
|
4266
4307
|
tableName: queryController.tableController.getTableName(),
|
|
@@ -4343,7 +4384,7 @@ const AdditionalFiltersComponent = observer(
|
|
|
4343
4384
|
)
|
|
4344
4385
|
] })
|
|
4345
4386
|
}
|
|
4346
|
-
);
|
|
4387
|
+
) });
|
|
4347
4388
|
}
|
|
4348
4389
|
);
|
|
4349
4390
|
|
|
@@ -4398,7 +4439,7 @@ class AdditionalFiltersModal {
|
|
|
4398
4439
|
},
|
|
4399
4440
|
draggable: true,
|
|
4400
4441
|
variant: "layout.common.modals.apiaFinder.additionalFiltersModal",
|
|
4401
|
-
size: "
|
|
4442
|
+
size: "lg"
|
|
4402
4443
|
};
|
|
4403
4444
|
}
|
|
4404
4445
|
async openModal(properties) {
|
|
@@ -4430,6 +4471,7 @@ const NavBarRenderer = observer(
|
|
|
4430
4471
|
onClick: () => {
|
|
4431
4472
|
queryController.refresh();
|
|
4432
4473
|
},
|
|
4474
|
+
"data-test-id": "btn_search",
|
|
4433
4475
|
children: queryController.tableController.state.isLoading ? /* @__PURE__ */ jsx(Spinner, { sx: { color: "white", height: "17px" } }) : getLabel("btnSearch").text
|
|
4434
4476
|
}
|
|
4435
4477
|
),
|
|
@@ -4441,6 +4483,7 @@ const NavBarRenderer = observer(
|
|
|
4441
4483
|
onClick: async () => {
|
|
4442
4484
|
additionalFiltersController.openModal();
|
|
4443
4485
|
},
|
|
4486
|
+
"data-test-id": "btn-additional-filters",
|
|
4444
4487
|
children: getLabel("titAdmAdtFilter").text
|
|
4445
4488
|
}
|
|
4446
4489
|
),
|
|
@@ -4450,6 +4493,7 @@ const NavBarRenderer = observer(
|
|
|
4450
4493
|
size: "sm",
|
|
4451
4494
|
variant: "outline",
|
|
4452
4495
|
onClick: () => queryController.clearFilters(),
|
|
4496
|
+
"data-test-id": "btn-clear-filters",
|
|
4453
4497
|
children: getLabel("btnClearFilter").text
|
|
4454
4498
|
}
|
|
4455
4499
|
)
|