@emuanalytics/flow-rdf-ui 4.1.27 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/autocomplete/autocomplete.component.mjs +135 -28
- package/dist/components/calendar/calendar.component.mjs +534 -118
- package/dist/components/calendar/calendar.styles.mjs +142 -2
- package/dist/components/date-time-picker/date-time-picker.component.mjs +125 -9
- package/dist/components/query-builder/converters/flow-query-converters.mjs +21 -9
- package/dist/components/query-builder/converters/javascript-filter-converter.mjs +17 -1
- package/dist/components/query-builder/converters/map-layer-filter-converter.mjs +16 -1
- package/dist/components/query-builder/default-value-templates.mjs +68 -71
- package/dist/components/query-builder/helpers.mjs +18 -2
- package/dist/components/query-builder/query-builder.component.mjs +8 -3
- package/dist/custom-elements.json +3989 -3278
- package/dist/index.d.mts +288 -19
- package/dist/index.d.ts +288 -19
- package/dist/index.mjs +1 -1
- package/dist/internal/date-range.mjs +107 -0
- package/dist/internal/datetime.mjs +2 -13
- package/dist/package.json.mjs +1 -1
- package/dist/translations/en.mjs +5 -0
- package/dist/vscode.html-custom-data.json +348 -298
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
2
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
3
3
|
import { ensureArray } from '../../internal/ensure-array.mjs';
|
|
4
|
-
import { isFunction, isDefined } from '../../internal/type-checks.mjs';
|
|
4
|
+
import { isFunction, isDefined, isStringFull } from '../../internal/type-checks.mjs';
|
|
5
5
|
|
|
6
6
|
function getDefault(defaultVal, fallback) {
|
|
7
7
|
if (isFunction(defaultVal)) {
|
|
@@ -49,83 +49,80 @@ const defaultNumberTemplate = (rule, field, qb, update) => {
|
|
|
49
49
|
></flow-ui-input>
|
|
50
50
|
`;
|
|
51
51
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
const locale = getDefault(field.locale);
|
|
62
|
-
return html`
|
|
63
|
-
<flow-ui-date-time-picker
|
|
64
|
-
filled
|
|
65
|
-
class="query-builder__rule-value-control"
|
|
66
|
-
value=${rule.value ?? ""}
|
|
67
|
-
size=${qb.size}
|
|
68
|
-
placeholder="Enter a date/time"
|
|
69
|
-
format=${ifDefined(format)}
|
|
70
|
-
timezone=${ifDefined(timezone)}
|
|
71
|
-
locale=${ifDefined(locale)}
|
|
72
|
-
?disabled=${!rule.enabled}
|
|
73
|
-
@flow-ui-change=${handleChange}
|
|
74
|
-
></flow-ui-date-time-picker>
|
|
75
|
-
`;
|
|
76
|
-
};
|
|
77
|
-
const defaultDateTemplate = (rule, field, qb, update) => {
|
|
78
|
-
const handleChange = (ev) => {
|
|
79
|
-
const target = ev.target;
|
|
80
|
-
rule.value = target.value === "" ? void 0 : target.value;
|
|
81
|
-
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
82
|
-
update();
|
|
83
|
-
};
|
|
84
|
-
const format = getDefault(field.dateFormat, "D");
|
|
85
|
-
const timezone = getDefault(field.timezone);
|
|
86
|
-
const locale = getDefault(field.locale);
|
|
87
|
-
return html`
|
|
88
|
-
<flow-ui-date-time-picker
|
|
89
|
-
filled
|
|
90
|
-
class="query-builder__rule-value-control"
|
|
91
|
-
value=${rule.value ?? ""}
|
|
92
|
-
display-mode="date"
|
|
93
|
-
size=${qb.size}
|
|
94
|
-
placeholder="Enter a date"
|
|
95
|
-
format=${ifDefined(format)}
|
|
96
|
-
timezone=${ifDefined(timezone)}
|
|
97
|
-
locale=${ifDefined(locale)}
|
|
98
|
-
?disabled=${!rule.enabled}
|
|
99
|
-
@flow-ui-change=${handleChange}
|
|
100
|
-
></flow-ui-date-time-picker>
|
|
101
|
-
`;
|
|
102
|
-
};
|
|
103
|
-
const defaultTimeTemplate = (rule, field, qb, update) => {
|
|
52
|
+
function intervalFromRuleValue(value) {
|
|
53
|
+
return Array.isArray(value) && value.length === 2 && value.every(isStringFull) ? `${value[0]}/${value[1]}` : "";
|
|
54
|
+
}
|
|
55
|
+
function ruleValueFromInterval(interval) {
|
|
56
|
+
const [start, end] = interval.split("/");
|
|
57
|
+
return isStringFull(start) && isStringFull(end) ? [start, end] : void 0;
|
|
58
|
+
}
|
|
59
|
+
function dateTimePickerTemplate(rule, field, qb, update, options) {
|
|
60
|
+
const isBetween = rule.operator === "between";
|
|
104
61
|
const handleChange = (ev) => {
|
|
105
62
|
const target = ev.target;
|
|
106
|
-
|
|
63
|
+
if (isBetween) {
|
|
64
|
+
rule.value = ruleValueFromInterval(target.value);
|
|
65
|
+
} else {
|
|
66
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
67
|
+
}
|
|
107
68
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
108
69
|
update();
|
|
109
70
|
};
|
|
110
|
-
const
|
|
71
|
+
const defaultFormat = isBetween ? options.rangeDefaultFormat ?? options.defaultFormat : options.defaultFormat;
|
|
72
|
+
const format = getDefault(field.dateFormat, defaultFormat);
|
|
111
73
|
const timezone = getDefault(field.timezone);
|
|
112
74
|
const locale = getDefault(field.locale);
|
|
113
|
-
return html`
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
75
|
+
return isBetween ? html`
|
|
76
|
+
<flow-ui-date-time-picker
|
|
77
|
+
filled
|
|
78
|
+
range
|
|
79
|
+
class="query-builder__rule-value-control"
|
|
80
|
+
value=${intervalFromRuleValue(rule.value)}
|
|
81
|
+
display-mode=${options.displayMode}
|
|
82
|
+
size=${qb.size}
|
|
83
|
+
placeholder=${options.rangePlaceholder ?? options.placeholder}
|
|
84
|
+
format=${ifDefined(format)}
|
|
85
|
+
timezone=${ifDefined(timezone)}
|
|
86
|
+
locale=${ifDefined(locale)}
|
|
87
|
+
?disabled=${!rule.enabled}
|
|
88
|
+
@flow-ui-change=${handleChange}
|
|
89
|
+
></flow-ui-date-time-picker>
|
|
90
|
+
` : html`
|
|
91
|
+
<flow-ui-date-time-picker
|
|
92
|
+
filled
|
|
93
|
+
class="query-builder__rule-value-control"
|
|
94
|
+
value=${rule.value ?? ""}
|
|
95
|
+
display-mode=${options.displayMode}
|
|
96
|
+
size=${qb.size}
|
|
97
|
+
placeholder=${options.placeholder}
|
|
98
|
+
format=${ifDefined(format)}
|
|
99
|
+
timezone=${ifDefined(timezone)}
|
|
100
|
+
locale=${ifDefined(locale)}
|
|
101
|
+
?disabled=${!rule.enabled}
|
|
102
|
+
@flow-ui-change=${handleChange}
|
|
103
|
+
></flow-ui-date-time-picker>
|
|
104
|
+
`;
|
|
105
|
+
}
|
|
106
|
+
const defaultDateTimeTemplate = (rule, field, qb, update) => dateTimePickerTemplate(rule, field, qb, update, {
|
|
107
|
+
displayMode: "datetime",
|
|
108
|
+
defaultFormat: "F",
|
|
109
|
+
placeholder: "Enter a date/time",
|
|
110
|
+
rangePlaceholder: "Enter a date/time range"
|
|
111
|
+
});
|
|
112
|
+
const defaultDateTemplate = (rule, field, qb, update) => dateTimePickerTemplate(rule, field, qb, update, {
|
|
113
|
+
displayMode: "date",
|
|
114
|
+
defaultFormat: "D",
|
|
115
|
+
placeholder: "Enter a date",
|
|
116
|
+
rangePlaceholder: "Enter a date range"
|
|
117
|
+
});
|
|
118
|
+
const defaultTimeTemplate = (rule, field, qb, update) => dateTimePickerTemplate(rule, field, qb, update, {
|
|
119
|
+
displayMode: "time",
|
|
120
|
+
defaultFormat: "TTT",
|
|
121
|
+
placeholder: "Enter a time",
|
|
122
|
+
// An end time of 24:00 can only be shown with the H token
|
|
123
|
+
rangeDefaultFormat: "HH:mm",
|
|
124
|
+
rangePlaceholder: "Enter a time range"
|
|
125
|
+
});
|
|
129
126
|
const defaultSelectTemplate = (rule, field, qb, update) => {
|
|
130
127
|
const isMulti = rule.operator === "in" || rule.operator === "!in";
|
|
131
128
|
const handleChange = (ev) => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import cloneDeep from 'clone-deep';
|
|
2
|
-
import {
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
import { isObjectFull, isNil, isDefined, isFunction } from '../../internal/type-checks.mjs';
|
|
3
4
|
|
|
4
5
|
function filterRuleSet(ruleset, options) {
|
|
5
6
|
return transformRuleSet(ruleset, (rule) => {
|
|
@@ -52,5 +53,20 @@ function countRuleSet(ruleset) {
|
|
|
52
53
|
const isRule = (r) => isObjectFull(r) && "field" in r;
|
|
53
54
|
const isRuleSet = (r) => isObjectFull(r) && "rules" in r;
|
|
54
55
|
const isRuleOrRuleset = (r) => isRule(r) || isRuleSet(r);
|
|
56
|
+
function betweenRuleValues(rule, field) {
|
|
57
|
+
const value = rule.value;
|
|
58
|
+
if (!Array.isArray(value) || value.length !== 2 || value.some((v) => isNil(v) || v === "")) {
|
|
59
|
+
return void 0;
|
|
60
|
+
}
|
|
61
|
+
const convert = (v) => isFunction(field.convertValue) ? field.convertValue(v) : v;
|
|
62
|
+
if (field.type === "time") {
|
|
63
|
+
const start = DateTime.fromISO(String(value[0]), { setZone: true });
|
|
64
|
+
const end = DateTime.fromISO(String(value[1]), { setZone: true });
|
|
65
|
+
if (start.isValid && end.isValid && end >= start.startOf("day").plus({ days: 1 })) {
|
|
66
|
+
return [convert(value[0]), void 0];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return [convert(value[0]), convert(value[1])];
|
|
70
|
+
}
|
|
55
71
|
|
|
56
|
-
export { countRuleSet, filterRuleSet, isRule, isRuleOrRuleset, isRuleSet, renameRuleSetFields, transformRuleSet };
|
|
72
|
+
export { betweenRuleValues, countRuleSet, filterRuleSet, isRule, isRuleOrRuleset, isRuleSet, renameRuleSetFields, transformRuleSet };
|
|
@@ -150,7 +150,12 @@ const _FlowUiQueryBuilder = class _FlowUiQueryBuilder extends FlowRdfElement {
|
|
|
150
150
|
handleOperatorChanged(ev, rule) {
|
|
151
151
|
ev.stopPropagation();
|
|
152
152
|
const target = ev.target;
|
|
153
|
-
|
|
153
|
+
const operator = target.value;
|
|
154
|
+
if (rule.operator === "between" !== (operator === "between")) {
|
|
155
|
+
rule.value = void 0;
|
|
156
|
+
}
|
|
157
|
+
rule.operator = operator;
|
|
158
|
+
this.requestUpdate();
|
|
154
159
|
this.emitValueChange();
|
|
155
160
|
}
|
|
156
161
|
handleConditionChange(ev) {
|
|
@@ -535,11 +540,11 @@ FlowUiQueryBuilder.registerFieldDefinition("datetime", {
|
|
|
535
540
|
});
|
|
536
541
|
FlowUiQueryBuilder.registerFieldDefinition("date", {
|
|
537
542
|
template: defaultDateTemplate,
|
|
538
|
-
operators: ["=", "!=", "<", "<=", ">=", ">"]
|
|
543
|
+
operators: ["=", "!=", "<", "<=", ">=", ">", "between"]
|
|
539
544
|
});
|
|
540
545
|
FlowUiQueryBuilder.registerFieldDefinition("time", {
|
|
541
546
|
template: defaultTimeTemplate,
|
|
542
|
-
operators: ["=", "!=", "<", "<=", ">=", ">"]
|
|
547
|
+
operators: ["=", "!=", "<", "<=", ">=", ">", "between"]
|
|
543
548
|
});
|
|
544
549
|
FlowUiQueryBuilder.registerFieldDefinition("select", {
|
|
545
550
|
template: defaultSelectTemplate,
|