@schukai/monster 3.53.0 → 3.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/package.json +1 -1
- package/source/components/datatable/datasource/rest.mjs +358 -309
- package/source/components/datatable/datatable/header.mjs +8 -0
- package/source/components/datatable/datatable.mjs +606 -557
- package/source/components/datatable/embedded-pagination.mjs +50 -62
- package/source/components/datatable/filter/util.mjs +122 -0
- package/source/components/datatable/filter.mjs +893 -708
- package/source/components/datatable/pagination.mjs +335 -310
- package/source/components/datatable/status.mjs +248 -0
- package/source/components/datatable/style/datatable.pcss +1 -0
- package/source/components/datatable/style/embedded-pagination.pcss +59 -2
- package/source/components/datatable/style/filter.pcss +4 -0
- package/source/components/datatable/style/pagination.pcss +28 -4
- package/source/components/datatable/style/status.pcss +42 -0
- package/source/components/datatable/stylesheet/column-bar.mjs +1 -1
- package/source/components/datatable/stylesheet/datatable.mjs +1 -1
- package/source/components/datatable/stylesheet/filter-button.mjs +1 -1
- package/source/components/datatable/stylesheet/filter.mjs +1 -1
- package/source/components/datatable/stylesheet/pagination.mjs +1 -1
- package/source/components/datatable/stylesheet/status.mjs +27 -0
- package/source/components/form/action-button.mjs +1 -1
- package/source/components/form/api-button.mjs +1 -1
- package/source/components/form/button-bar.mjs +1 -1
- package/source/components/form/button.mjs +1 -1
- package/source/components/form/confirm-button.mjs +1 -1
- package/source/components/form/context-error.mjs +275 -0
- package/source/components/form/context-help.mjs +5 -5
- package/source/components/form/form.mjs +2 -2
- package/source/components/form/message-state-button.mjs +2 -2
- package/source/components/form/popper-button.mjs +7 -4
- package/source/components/form/popper.mjs +317 -309
- package/source/components/form/reload.mjs +1 -1
- package/source/components/form/select.mjs +9 -3
- package/source/components/form/shadow-reload.mjs +1 -1
- package/source/components/form/state-button.mjs +2 -1
- package/source/components/form/style/context-error.pcss +32 -0
- package/source/components/form/style/context-help.pcss +22 -5
- package/source/components/form/stylesheet/context-error.mjs +27 -0
- package/source/components/form/stylesheet/context-help.mjs +1 -1
- package/source/components/form/stylesheet/select.mjs +1 -1
- package/source/components/form/stylesheet/tabs.mjs +1 -1
- package/source/components/form/tabs.mjs +757 -707
- package/source/components/form/template.mjs +1 -1
- package/source/components/form/tree-select.mjs +1 -1
- package/source/components/host/collapse.mjs +22 -5
- package/source/components/host/config-manager.mjs +39 -2
- package/source/components/host/host.mjs +14 -0
- package/source/components/host/stylesheet/call-button.mjs +1 -1
- package/source/components/host/stylesheet/overlay.mjs +1 -1
- package/source/components/host/stylesheet/toggle-button.mjs +1 -1
- package/source/components/host/util.mjs +6 -1
- package/source/components/notify/stylesheet/message.mjs +1 -1
- package/source/components/stylesheet/icons.mjs +1 -1
- package/source/data/transformer.mjs +39 -42
- package/source/dom/customelement.mjs +1 -1
- package/source/dom/updater.mjs +700 -688
- package/source/dom/util.mjs +42 -0
- package/source/i18n/providers/embed.mjs +3 -3
- package/source/monster.mjs +6 -0
- package/source/text/formatter.mjs +2 -2
- package/source/types/observer.mjs +1 -1
- package/source/types/version.mjs +1 -1
- package/source/util/sleep.mjs +18 -0
- package/test/cases/components/form/button.mjs +2 -1
- package/test/cases/components/form/select.mjs +1 -1
- package/test/cases/components/form/tree-select.mjs +1 -1
- package/test/cases/data/transformer.mjs +2 -2
- package/test/cases/dom/updater.mjs +67 -46
- package/test/cases/monster.mjs +1 -1
- package/test/web/test.html +2 -2
- package/test/web/tests.js +18 -13
|
@@ -3,16 +3,18 @@
|
|
|
3
3
|
* SPDX-License-Identifier: AGPL-3.0
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { registerCustomElement
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import {assembleMethodSymbol, registerCustomElement} from "../../dom/customelement.mjs";
|
|
7
|
+
import {EmbeddedPaginationStyleSheet} from "./stylesheet/embedded-pagination.mjs";
|
|
8
|
+
import {instanceSymbol} from "../../constants.mjs";
|
|
9
|
+
|
|
9
10
|
import "../form/select.mjs";
|
|
10
|
-
import {
|
|
11
|
+
import {Pagination} from "./pagination.mjs";
|
|
11
12
|
|
|
12
13
|
import "./datasource/dom.mjs";
|
|
13
14
|
import "./datasource/rest.mjs";
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
|
|
17
|
+
export {EmbeddedPagination};
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* The EmbeddedPagination component is used to show the current page and the total number of pages.
|
|
@@ -47,67 +49,53 @@ export { EmbeddedPagination };
|
|
|
47
49
|
* @summary A datatable
|
|
48
50
|
*/
|
|
49
51
|
class EmbeddedPagination extends Pagination {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
/**
|
|
53
|
+
* This method is called by the `instanceof` operator.
|
|
54
|
+
* @returns {symbol}
|
|
55
|
+
*/
|
|
56
|
+
static get [instanceSymbol]() {
|
|
57
|
+
return Symbol.for("@schukai/monster/components/embedded-pagination");
|
|
58
|
+
}
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*/
|
|
62
|
-
static getTag() {
|
|
63
|
-
return "monster-embedded-pagination";
|
|
64
|
-
}
|
|
60
|
+
[assembleMethodSymbol]() {
|
|
61
|
+
super[assembleMethodSymbol]();
|
|
62
|
+
}
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
64
|
+
get defaults() {
|
|
65
|
+
return Object.assign(
|
|
66
|
+
{},
|
|
67
|
+
super.defaults,
|
|
68
|
+
{
|
|
69
|
+
classes: {
|
|
70
|
+
spinner: "monster-spinner monster-theme-primary-3",
|
|
71
|
+
spinnerContainer: "monster-theme-primary-2 ",
|
|
72
|
+
error: "monster-theme-error-2 monster-bg-color-primary-2",
|
|
73
|
+
errorContainer: "monster-theme-primary-2",
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
);
|
|
74
78
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
*
|
|
83
|
+
* @return {string}
|
|
84
|
+
*/
|
|
85
|
+
static getTag() {
|
|
86
|
+
return "monster-embedded-pagination";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @private
|
|
92
|
+
* @returns {CSSStyleSheet}
|
|
93
|
+
*/
|
|
94
|
+
static getControlCSSStyleSheet() {
|
|
95
|
+
return EmbeddedPaginationStyleSheet;
|
|
96
|
+
}
|
|
92
97
|
|
|
93
|
-
<div data-monster-role="control">
|
|
94
|
-
<nav data-monster-role="pagination" role="navigation" aria-label="pagination">
|
|
95
|
-
<ul class="pagination-list" data-monster-insert="items path:pagination.items">
|
|
96
|
-
<li part="pagination-prev"><a data-monster-role="pagination-prev"
|
|
97
|
-
data-monster-attributes="
|
|
98
|
-
class path:pagination.prevClass | prefix: previous,
|
|
99
|
-
data-page-no path:pagination.prevNo,
|
|
100
|
-
href path:pagination.prevHref | prefix: #"
|
|
101
|
-
data-monster-replace="path:labels.previous">Previous</a></li>
|
|
102
|
-
<li part="pagination-next"><a data-monster-role="pagination-next"
|
|
103
|
-
data-monster-attributes="class path:pagination.nextClass | prefix: next,
|
|
104
|
-
data-page-no path:pagination.nextNo,
|
|
105
|
-
href path:pagination.nextHref | prefix: #"
|
|
106
|
-
data-monster-replace="path:labels.next">Next</a></li>
|
|
107
|
-
</ul>
|
|
108
|
-
</nav>
|
|
109
|
-
</div>
|
|
110
|
-
`;
|
|
111
98
|
}
|
|
112
99
|
|
|
100
|
+
|
|
113
101
|
registerCustomElement(EmbeddedPagination);
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {generateUniqueConfigKey} from "../../host/util.mjs";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @private
|
|
6
|
+
* @returns {string}
|
|
7
|
+
*/
|
|
8
|
+
export function getFilterConfigKey() {
|
|
9
|
+
return generateUniqueConfigKey("datatable", this?.id, "filter");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @private
|
|
14
|
+
* @returns {string}
|
|
15
|
+
*/
|
|
16
|
+
export function getStoredFilterConfigKey() {
|
|
17
|
+
return generateUniqueConfigKey("datatable", this?.id, "stored-filter");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @private
|
|
22
|
+
* @param {String} str
|
|
23
|
+
* @param {String} field
|
|
24
|
+
* @returns {String}
|
|
25
|
+
* @throws {Error} if no field is defined
|
|
26
|
+
*/
|
|
27
|
+
export function parseDateInput(str, field) {
|
|
28
|
+
if (!str) {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!field) {
|
|
33
|
+
throw new Error("no field is defined");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Define the supported formats
|
|
37
|
+
//let formats = ['DD-MM-YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD', 'YYYY/MM/DD', 'DD.MM.YYYY'];
|
|
38
|
+
const formats = ["YYYY-MM-DD"];
|
|
39
|
+
// Determine the current date format of the localization
|
|
40
|
+
const currentDateFormat = new Intl.DateTimeFormat()
|
|
41
|
+
.format(new Date())
|
|
42
|
+
.replace(/\d/g, "D");
|
|
43
|
+
// formats.push(currentDateFormat);
|
|
44
|
+
|
|
45
|
+
// Run through the supported formats and try to parse the date
|
|
46
|
+
for (let i = 0; i < formats.length; i++) {
|
|
47
|
+
const format = formats[i];
|
|
48
|
+
// Replace the corresponding placeholders in the format string with regular expressions
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const pattern = format
|
|
52
|
+
.replace("DD", "\\d{2}")
|
|
53
|
+
.replace("MM", "\\d{2}")
|
|
54
|
+
.replace("YYYY", "\\d{4}");
|
|
55
|
+
const rangePattern =
|
|
56
|
+
"(?<from>" + pattern + ")\\s*-\\s*(?<to>" + pattern + ")";
|
|
57
|
+
|
|
58
|
+
const rangeRegex = new RegExp("^" + rangePattern + "$", "g");
|
|
59
|
+
|
|
60
|
+
if (rangeRegex.test(str)) {
|
|
61
|
+
rangeRegex.lastIndex = 0;
|
|
62
|
+
|
|
63
|
+
const rangeResult = rangeRegex.exec(str);
|
|
64
|
+
|
|
65
|
+
if (!rangeResult) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const from = rangeResult?.groups?.from;
|
|
70
|
+
const to = rangeResult?.groups?.to;
|
|
71
|
+
|
|
72
|
+
if (from && to) {
|
|
73
|
+
return ("(" + field + ">='" + from + " 00:00:00' AND " + field + "<='" + to + " 23:59:59')");
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (from) {
|
|
77
|
+
return "(" + field + ">='" + from + " 00:00:00')";
|
|
78
|
+
} else if (to) {
|
|
79
|
+
return "(" + field + "<='" + to + "' 23:59:59')";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return "false";
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const prefix = str.substring(0, 1) === "-";
|
|
86
|
+
const suffix = str.substring(str.length - 1, str.length) === "-";
|
|
87
|
+
|
|
88
|
+
if (prefix) {
|
|
89
|
+
str = str.substring(1, str.length);
|
|
90
|
+
} else if (suffix) {
|
|
91
|
+
str = str.substring(0, str.length - 1);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const regex = new RegExp("^(?<date>" + pattern + ")$", "g");
|
|
95
|
+
if (regex.test(str)) {
|
|
96
|
+
regex.lastIndex = 0;
|
|
97
|
+
const result = regex.exec(str);
|
|
98
|
+
|
|
99
|
+
if (!result) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const date = result?.groups?.date;
|
|
104
|
+
if (date) {
|
|
105
|
+
if (prefix) {
|
|
106
|
+
return "(" + field + "<='" + date + " 23:59:59')";
|
|
107
|
+
} else if (suffix) {
|
|
108
|
+
return "(" + field + ">='" + date + "' 00:00:00')";
|
|
109
|
+
}
|
|
110
|
+
return (
|
|
111
|
+
"(" + field + ">='" + date + " 00:00:00' AND " + field + "<='" + date + " 23:59:59')"
|
|
112
|
+
);
|
|
113
|
+
} else {
|
|
114
|
+
return "false";
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch (e) {
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return "false";
|
|
122
|
+
}
|