@emuanalytics/flow-rdf-ui 0.0.29 → 0.0.30
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/custom-elements.json +5853 -5476
- package/dist/index.cjs +230 -18
- package/dist/index.d.cts +68 -7
- package/dist/index.d.mts +68 -7
- package/dist/index.d.ts +68 -7
- package/dist/index.mjs +230 -18
- package/dist/vscode.html-custom-data.json +317 -317
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2640,8 +2640,7 @@ interface FlowQueryBuilderFieldBase<ValueType = any> {
|
|
|
2640
2640
|
operators?: string[];
|
|
2641
2641
|
defaultValue?: ValueType | (() => ValueType);
|
|
2642
2642
|
defaultOperator?: string;
|
|
2643
|
-
|
|
2644
|
-
fromDisplayValue?: (value: ValueType) => ValueType;
|
|
2643
|
+
convertValue?: (value: ValueType) => any;
|
|
2645
2644
|
validator?: (rule: FlowQueryBuilderRule<ValueType>) => string;
|
|
2646
2645
|
}
|
|
2647
2646
|
interface FlowQueryBuilderStringField extends FlowQueryBuilderFieldBase<string> {
|
|
@@ -2686,7 +2685,7 @@ interface FlowQueryBuilderFieldTypeMap {
|
|
|
2686
2685
|
}
|
|
2687
2686
|
type FlowQueryBuilderFieldType = keyof FlowQueryBuilderFieldTypeMap;
|
|
2688
2687
|
type FlowQueryBuilderField = FlowQueryBuilderFieldTypeMap[keyof FlowQueryBuilderFieldTypeMap];
|
|
2689
|
-
type FlowQueryBuilderTemplateFn<
|
|
2688
|
+
type FlowQueryBuilderTemplateFn<FieldType extends FlowQueryBuilderFieldType> = (rule: FlowQueryBuilderRule<FlowQueryBuilderFieldTypeMap[FieldType]['value']>, field: FlowQueryBuilderFieldTypeMap[FieldType], qb: FlowQueryBuilder, update: () => void) => TemplateResult;
|
|
2690
2689
|
interface FlowQueryBuilderConfig {
|
|
2691
2690
|
fields: FlowQueryBuilderFieldMap;
|
|
2692
2691
|
}
|
|
@@ -2694,6 +2693,12 @@ interface FlowQueryBuilderFieldDefinition<Field extends FlowQueryBuilderFieldTyp
|
|
|
2694
2693
|
operators: string[];
|
|
2695
2694
|
template: FlowQueryBuilderTemplateFn<Field>;
|
|
2696
2695
|
}
|
|
2696
|
+
interface FlowQueryBuilderConverterOptions {
|
|
2697
|
+
includeFields?: string[];
|
|
2698
|
+
excludeFields?: string[];
|
|
2699
|
+
renameFields?: Record<string, string>;
|
|
2700
|
+
}
|
|
2701
|
+
type FlowQueryBuilderConverter = (ruleSet: FlowQueryBuilderRuleSet, config: FlowQueryBuilderConfig, options?: FlowQueryBuilderConverterOptions) => any;
|
|
2697
2702
|
|
|
2698
2703
|
type NoUnion<T, U = T> = T extends U ? ([U] extends [T] ? T : never) : never;
|
|
2699
2704
|
/**
|
|
@@ -2718,6 +2723,62 @@ declare class FlowQueryBuilder extends FlowRdfElement {
|
|
|
2718
2723
|
* @param fieldDefinition
|
|
2719
2724
|
*/
|
|
2720
2725
|
static registerFieldDefinition<T extends FlowQueryBuilderFieldType>(type: T, fieldDefinition: FlowQueryBuilderFieldDefinition<NoUnion<T>>): void;
|
|
2726
|
+
/**
|
|
2727
|
+
*
|
|
2728
|
+
*/
|
|
2729
|
+
static convertToFlowQuery: FlowQueryBuilderConverter;
|
|
2730
|
+
/**
|
|
2731
|
+
* Static helper method to determine if supplied argument is
|
|
2732
|
+
* a `FlowQueryBuilderRule`.
|
|
2733
|
+
*
|
|
2734
|
+
* @param value A value to test
|
|
2735
|
+
*/
|
|
2736
|
+
static isRule(value: unknown): value is FlowQueryBuilderRule;
|
|
2737
|
+
/**
|
|
2738
|
+
* Static helper method to determine if supplied argument is
|
|
2739
|
+
* a `FlowQueryBuilderRuleSet`.
|
|
2740
|
+
*
|
|
2741
|
+
* @param value A value to test
|
|
2742
|
+
* @returns `true` if supplied value is a FlowQueryBuilderRuleSet
|
|
2743
|
+
*/
|
|
2744
|
+
static isRuleSet(value: unknown): value is FlowQueryBuilderRuleSet;
|
|
2745
|
+
/**
|
|
2746
|
+
* Static helper method to recursively filter a `FlowQueryBuilderRuleSet`.
|
|
2747
|
+
*
|
|
2748
|
+
* This can be used to sanitize user queries before they are executed.
|
|
2749
|
+
*
|
|
2750
|
+
* @param ruleset Rule set to filter
|
|
2751
|
+
* @param options Fields to include or exclude
|
|
2752
|
+
* @returns The filtered rule set
|
|
2753
|
+
*/
|
|
2754
|
+
static filterRuleSet(ruleset: FlowQueryBuilderRuleSet, options: {
|
|
2755
|
+
excludeFields?: string[];
|
|
2756
|
+
includeFields?: string[];
|
|
2757
|
+
}): FlowQueryBuilderRuleSet;
|
|
2758
|
+
/**
|
|
2759
|
+
* Static helper method to rename fields in a `FlowQueryBuilderRuleSet`.
|
|
2760
|
+
*
|
|
2761
|
+
* @param ruleSet A `FlowQueryBuilderRuleSet` to rename.
|
|
2762
|
+
* @param replacements Mapping of string to string for renaming fields.
|
|
2763
|
+
* @returns The renamed rule set.
|
|
2764
|
+
*/
|
|
2765
|
+
static renameRuleSetFields(ruleset: FlowQueryBuilderRuleSet, replacements: Record<string, string>): FlowQueryBuilderRuleSet;
|
|
2766
|
+
/**
|
|
2767
|
+
* Static helper method to recursively apply a transform function to each rule
|
|
2768
|
+
* in a `FlowQueryBuilderRuleSet`.
|
|
2769
|
+
*
|
|
2770
|
+
* The transform fn should expect a single FlowQueryBuilderRule and return:
|
|
2771
|
+
*
|
|
2772
|
+
* - the same rule unmodifed or modified in place
|
|
2773
|
+
* - `undefined` to exclude the rule from the rule set
|
|
2774
|
+
*
|
|
2775
|
+
* This can be used to sanitize rule sets before they are used to perform queries.
|
|
2776
|
+
*
|
|
2777
|
+
* @param ruleSet query builder rule set
|
|
2778
|
+
* @param transformFn transform function
|
|
2779
|
+
* @returns The modified rule set
|
|
2780
|
+
*/
|
|
2781
|
+
static transformRuleSet(ruleSet: FlowQueryBuilderRuleSet, transformFn: (rule: FlowQueryBuilderRule) => FlowQueryBuilderRule | undefined): FlowQueryBuilderRuleSet;
|
|
2721
2782
|
private readonly hasSlotController;
|
|
2722
2783
|
/** The query builder's value object. */
|
|
2723
2784
|
value: FlowQueryBuilderRuleSet;
|
|
@@ -2755,10 +2816,10 @@ declare class FlowQueryBuilder extends FlowRdfElement {
|
|
|
2755
2816
|
private operatorsForField;
|
|
2756
2817
|
private defaultOperatorsForFieldType;
|
|
2757
2818
|
private toolbarTemplate;
|
|
2758
|
-
ruleTemplate
|
|
2759
|
-
ruleValueTemplate
|
|
2760
|
-
subQueryBuilderTemplate
|
|
2761
|
-
emptyRulesetTemplate
|
|
2819
|
+
private ruleTemplate;
|
|
2820
|
+
private ruleValueTemplate;
|
|
2821
|
+
private subQueryBuilderTemplate;
|
|
2822
|
+
private emptyRulesetTemplate;
|
|
2762
2823
|
render(): lit.TemplateResult<1>;
|
|
2763
2824
|
}
|
|
2764
2825
|
|
package/dist/index.mjs
CHANGED
|
@@ -4153,6 +4153,8 @@ const isString = (val) => typeof val === "string";
|
|
|
4153
4153
|
const hasLength = (val) => isDefined(val) && val.length > 0;
|
|
4154
4154
|
const isStringFull = (val) => isString(val) && hasLength(val);
|
|
4155
4155
|
const isArrayFull = (val) => Array.isArray(val) && hasLength(val);
|
|
4156
|
+
const isObject = (val) => typeof val === "object" && !isNull(val);
|
|
4157
|
+
const isObjectFull = (val) => isObject(val) && hasLength(Object.keys(val));
|
|
4156
4158
|
const isNumber = (val) => typeof val === "number" && !Number.isNaN(val) && Number.isFinite(val);
|
|
4157
4159
|
const isNumeric = (val) => isString(val) && /^[+-]?([0-9]*[.])?[0-9]+$/.test(val);
|
|
4158
4160
|
const isFunction = (val) => typeof val === "function";
|
|
@@ -13066,6 +13068,149 @@ FlowProgressRing = __decorateClass$p([
|
|
|
13066
13068
|
customElement("flow-ui-progress-ring")
|
|
13067
13069
|
], FlowProgressRing);
|
|
13068
13070
|
|
|
13071
|
+
function filterRuleSet(ruleset, options) {
|
|
13072
|
+
return transformRuleSet(ruleset, (rule) => {
|
|
13073
|
+
if (isDefined(rule.field)) {
|
|
13074
|
+
if (isDefined(options.excludeFields) && options.excludeFields.includes(rule.field)) {
|
|
13075
|
+
return;
|
|
13076
|
+
}
|
|
13077
|
+
if (isDefined(options.includeFields) && !options.includeFields.includes(rule.field)) {
|
|
13078
|
+
return;
|
|
13079
|
+
}
|
|
13080
|
+
return rule;
|
|
13081
|
+
}
|
|
13082
|
+
});
|
|
13083
|
+
}
|
|
13084
|
+
function renameRuleSetFields(ruleset, replacements) {
|
|
13085
|
+
return transformRuleSet(ruleset, (rule) => {
|
|
13086
|
+
if (isDefined(rule.field)) {
|
|
13087
|
+
rule.field = rule.field in replacements ? replacements[rule.field] : rule.field;
|
|
13088
|
+
return rule;
|
|
13089
|
+
}
|
|
13090
|
+
});
|
|
13091
|
+
}
|
|
13092
|
+
function transformRuleSet(ruleSet, transformFn, clone = true) {
|
|
13093
|
+
if (clone) {
|
|
13094
|
+
ruleSet = cloneDeep(ruleSet);
|
|
13095
|
+
}
|
|
13096
|
+
ruleSet.rules = ruleSet.rules.map((r) => {
|
|
13097
|
+
if (isRule(r)) {
|
|
13098
|
+
return transformFn(r);
|
|
13099
|
+
} else if (isRuleSet(r)) {
|
|
13100
|
+
return transformRuleSet(r, transformFn, false);
|
|
13101
|
+
}
|
|
13102
|
+
}).filter(isRuleOrRuleset);
|
|
13103
|
+
return ruleSet;
|
|
13104
|
+
}
|
|
13105
|
+
const isRule = (r) => isObjectFull(r) && "field" in r;
|
|
13106
|
+
const isRuleSet = (r) => isObjectFull(r) && "fields" in r;
|
|
13107
|
+
const isRuleOrRuleset = (r) => isRule(r) || isRuleSet(r);
|
|
13108
|
+
|
|
13109
|
+
function whereClausesFromRuleSet(rule, config, options) {
|
|
13110
|
+
if (isRule(rule)) {
|
|
13111
|
+
if (!rule.enabled) {
|
|
13112
|
+
return void 0;
|
|
13113
|
+
}
|
|
13114
|
+
if (isNil(rule.field) || isNil(rule.operator)) {
|
|
13115
|
+
console.warn(`flowQueryConverter: Skipping rule with missing field or operator`, rule);
|
|
13116
|
+
return void 0;
|
|
13117
|
+
}
|
|
13118
|
+
const field = config.fields[rule.field];
|
|
13119
|
+
if (!field) {
|
|
13120
|
+
console.warn(`flowQueryConverter: Skipping unknown field '${rule.field}' in rule`, rule);
|
|
13121
|
+
return void 0;
|
|
13122
|
+
}
|
|
13123
|
+
if (isNil(rule.value) && field.nullable !== true) {
|
|
13124
|
+
console.warn(`flowQueryConverter: Skipping nil field '${rule.field}' in rule (non-nullable)`, rule);
|
|
13125
|
+
return void 0;
|
|
13126
|
+
}
|
|
13127
|
+
let fieldName = rule.field;
|
|
13128
|
+
if (options?.renameFields && fieldName in options.renameFields) {
|
|
13129
|
+
fieldName = options.renameFields[fieldName];
|
|
13130
|
+
}
|
|
13131
|
+
let clause = ["is null", "not null"].includes(rule.operator) || !isNil(rule.value) ? { [fieldName]: predicateFromRule(rule, config) } : {};
|
|
13132
|
+
if ((rule.operator === "!=" || rule.operator === "not like") && isObjectFull(clause)) {
|
|
13133
|
+
clause = { $or: [{ [fieldName]: { $is: null } }, clause] };
|
|
13134
|
+
}
|
|
13135
|
+
return clause;
|
|
13136
|
+
} else {
|
|
13137
|
+
const condition = rule.condition === "and" ? "$and" : "$or";
|
|
13138
|
+
const rules = rule.rules.map((r) => whereClausesFromRuleSet(r, config, options)).filter((r) => isObjectFull(r));
|
|
13139
|
+
return rules.length ? { [condition]: rules } : {};
|
|
13140
|
+
}
|
|
13141
|
+
}
|
|
13142
|
+
function predicateFromRule(rule, config) {
|
|
13143
|
+
const field = config.fields[rule.field];
|
|
13144
|
+
let operator;
|
|
13145
|
+
let value = rule.value;
|
|
13146
|
+
if (isFunction(field.convertValue)) {
|
|
13147
|
+
value = field.convertValue(value);
|
|
13148
|
+
}
|
|
13149
|
+
switch (rule.operator) {
|
|
13150
|
+
case "=":
|
|
13151
|
+
operator = "$eq";
|
|
13152
|
+
break;
|
|
13153
|
+
case "!=":
|
|
13154
|
+
operator = "$ne";
|
|
13155
|
+
break;
|
|
13156
|
+
case "<":
|
|
13157
|
+
operator = "$lt";
|
|
13158
|
+
break;
|
|
13159
|
+
case "<=":
|
|
13160
|
+
operator = "$lte";
|
|
13161
|
+
break;
|
|
13162
|
+
case ">":
|
|
13163
|
+
operator = "$gt";
|
|
13164
|
+
break;
|
|
13165
|
+
case ">=":
|
|
13166
|
+
operator = "$gte";
|
|
13167
|
+
break;
|
|
13168
|
+
case "in":
|
|
13169
|
+
operator = "$in";
|
|
13170
|
+
break;
|
|
13171
|
+
case "not in":
|
|
13172
|
+
operator = "$notIn";
|
|
13173
|
+
break;
|
|
13174
|
+
case "like":
|
|
13175
|
+
operator = "$iLike";
|
|
13176
|
+
break;
|
|
13177
|
+
case "not like":
|
|
13178
|
+
operator = "$notILike";
|
|
13179
|
+
break;
|
|
13180
|
+
case "contains":
|
|
13181
|
+
operator = "$iLike";
|
|
13182
|
+
value = `%${value}%`;
|
|
13183
|
+
break;
|
|
13184
|
+
case "is null":
|
|
13185
|
+
operator = "$is";
|
|
13186
|
+
value = null;
|
|
13187
|
+
break;
|
|
13188
|
+
case "not null":
|
|
13189
|
+
operator = "$not";
|
|
13190
|
+
value = null;
|
|
13191
|
+
break;
|
|
13192
|
+
case "between":
|
|
13193
|
+
operator = "$between";
|
|
13194
|
+
break;
|
|
13195
|
+
default:
|
|
13196
|
+
throw new Error(`Unrecognized query operator '${rule.operator}'`);
|
|
13197
|
+
}
|
|
13198
|
+
if (config.fields?.[rule.field]?.type === "datetime") {
|
|
13199
|
+
if (rule.operator === "between") {
|
|
13200
|
+
value = [DateTime.fromISO(value[0] || 0).toISO(), DateTime.fromISO(value[1] || 0).toISO()];
|
|
13201
|
+
} else {
|
|
13202
|
+
value = DateTime.fromISO(value || 0).toISO();
|
|
13203
|
+
}
|
|
13204
|
+
}
|
|
13205
|
+
return { [operator]: value };
|
|
13206
|
+
}
|
|
13207
|
+
const converter = (ruleset, config, options) => {
|
|
13208
|
+
if (options) {
|
|
13209
|
+
ruleset = filterRuleSet(ruleset, options);
|
|
13210
|
+
}
|
|
13211
|
+
return whereClausesFromRuleSet(ruleset, config, options);
|
|
13212
|
+
};
|
|
13213
|
+
|
|
13069
13214
|
function getDefault(defaultVal, fallback) {
|
|
13070
13215
|
if (isFunction(defaultVal)) {
|
|
13071
13216
|
return defaultVal();
|
|
@@ -13075,15 +13220,14 @@ function getDefault(defaultVal, fallback) {
|
|
|
13075
13220
|
const defaultStringTemplate = (rule, field, qb, update) => {
|
|
13076
13221
|
const handleChange = (ev) => {
|
|
13077
13222
|
const target = ev.target;
|
|
13078
|
-
rule.value =
|
|
13223
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
13079
13224
|
target.setCustomValidity?.(field.validator?.(rule) ?? "");
|
|
13080
13225
|
update();
|
|
13081
13226
|
};
|
|
13082
|
-
const value = rule.value && field.toDisplayValue ? field.toDisplayValue(rule.value) : rule.value;
|
|
13083
13227
|
return html`
|
|
13084
13228
|
<flow-ui-input
|
|
13085
13229
|
class="query-builder__rule-value-control"
|
|
13086
|
-
value=${
|
|
13230
|
+
value=${rule.value ?? ""}
|
|
13087
13231
|
size=${qb.size}
|
|
13088
13232
|
?disabled=${!rule.enabled}
|
|
13089
13233
|
@flow-ui-change=${handleChange}
|
|
@@ -13093,7 +13237,7 @@ const defaultStringTemplate = (rule, field, qb, update) => {
|
|
|
13093
13237
|
const defaultNumberTemplate = (rule, field, qb, update) => {
|
|
13094
13238
|
const handleChange = (ev) => {
|
|
13095
13239
|
const target = ev.target;
|
|
13096
|
-
rule.value =
|
|
13240
|
+
rule.value = target.value === "" ? void 0 : +target.value;
|
|
13097
13241
|
target.setCustomValidity?.(field.validator?.(rule) ?? "");
|
|
13098
13242
|
update();
|
|
13099
13243
|
};
|
|
@@ -13101,7 +13245,7 @@ const defaultNumberTemplate = (rule, field, qb, update) => {
|
|
|
13101
13245
|
<flow-ui-input
|
|
13102
13246
|
class="query-builder__rule-value-control"
|
|
13103
13247
|
type="number"
|
|
13104
|
-
value=${
|
|
13248
|
+
value=${rule.value ?? ""}
|
|
13105
13249
|
size=${qb.size}
|
|
13106
13250
|
min=${ifDefined(field.min)}
|
|
13107
13251
|
max=${ifDefined(field.max)}
|
|
@@ -13114,7 +13258,7 @@ const defaultNumberTemplate = (rule, field, qb, update) => {
|
|
|
13114
13258
|
const defaultDateTimeTemplate = (rule, field, qb, update) => {
|
|
13115
13259
|
const handleChange = (ev) => {
|
|
13116
13260
|
const target = ev.target;
|
|
13117
|
-
rule.value =
|
|
13261
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
13118
13262
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
13119
13263
|
update();
|
|
13120
13264
|
};
|
|
@@ -13124,8 +13268,9 @@ const defaultDateTimeTemplate = (rule, field, qb, update) => {
|
|
|
13124
13268
|
return html`
|
|
13125
13269
|
<flow-ui-date-time-picker
|
|
13126
13270
|
class="query-builder__rule-value-control"
|
|
13127
|
-
value=${rule.value}
|
|
13271
|
+
value=${rule.value ?? ""}
|
|
13128
13272
|
size=${qb.size}
|
|
13273
|
+
placeholder="Enter a date/time"
|
|
13129
13274
|
format=${ifDefined(format)}
|
|
13130
13275
|
timezone=${ifDefined(timezone)}
|
|
13131
13276
|
locale=${ifDefined(locale)}
|
|
@@ -13137,7 +13282,7 @@ const defaultDateTimeTemplate = (rule, field, qb, update) => {
|
|
|
13137
13282
|
const defaultDateTemplate = (rule, field, qb, update) => {
|
|
13138
13283
|
const handleChange = (ev) => {
|
|
13139
13284
|
const target = ev.target;
|
|
13140
|
-
rule.value =
|
|
13285
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
13141
13286
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
13142
13287
|
update();
|
|
13143
13288
|
};
|
|
@@ -13147,9 +13292,10 @@ const defaultDateTemplate = (rule, field, qb, update) => {
|
|
|
13147
13292
|
return html`
|
|
13148
13293
|
<flow-ui-date-time-picker
|
|
13149
13294
|
class="query-builder__rule-value-control"
|
|
13150
|
-
value=${rule.value}
|
|
13295
|
+
value=${rule.value ?? ""}
|
|
13151
13296
|
display-mode="date"
|
|
13152
13297
|
size=${qb.size}
|
|
13298
|
+
placeholder="Enter a date"
|
|
13153
13299
|
format=${ifDefined(format)}
|
|
13154
13300
|
timezone=${ifDefined(timezone)}
|
|
13155
13301
|
locale=${ifDefined(locale)}
|
|
@@ -13161,7 +13307,7 @@ const defaultDateTemplate = (rule, field, qb, update) => {
|
|
|
13161
13307
|
const defaultTimeTemplate = (rule, field, qb, update) => {
|
|
13162
13308
|
const handleChange = (ev) => {
|
|
13163
13309
|
const target = ev.target;
|
|
13164
|
-
rule.value =
|
|
13310
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
13165
13311
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
13166
13312
|
update();
|
|
13167
13313
|
};
|
|
@@ -13171,9 +13317,10 @@ const defaultTimeTemplate = (rule, field, qb, update) => {
|
|
|
13171
13317
|
return html`
|
|
13172
13318
|
<flow-ui-date-time-picker
|
|
13173
13319
|
class="query-builder__rule-value-control"
|
|
13174
|
-
value=${rule.value}
|
|
13320
|
+
value=${rule.value ?? ""}
|
|
13175
13321
|
display-mode="time"
|
|
13176
13322
|
size=${qb.size}
|
|
13323
|
+
placeholder="Enter a time"
|
|
13177
13324
|
format=${ifDefined(format)}
|
|
13178
13325
|
timezone=${ifDefined(timezone)}
|
|
13179
13326
|
locale=${ifDefined(locale)}
|
|
@@ -13185,14 +13332,14 @@ const defaultTimeTemplate = (rule, field, qb, update) => {
|
|
|
13185
13332
|
const defaultSelectTemplate = (rule, field, qb, update) => {
|
|
13186
13333
|
const handleChange = (ev) => {
|
|
13187
13334
|
const target = ev.target;
|
|
13188
|
-
rule.value =
|
|
13335
|
+
rule.value = target.value === "" ? void 0 : target.value;
|
|
13189
13336
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
13190
13337
|
update();
|
|
13191
13338
|
};
|
|
13192
13339
|
return html`
|
|
13193
13340
|
<flow-ui-select
|
|
13194
13341
|
class="query-builder__rule-value-control"
|
|
13195
|
-
value=${
|
|
13342
|
+
value=${rule.value ?? ""}
|
|
13196
13343
|
size=${qb.size}
|
|
13197
13344
|
?disabled=${!rule.enabled}
|
|
13198
13345
|
@flow-ui-change=${handleChange}
|
|
@@ -13208,14 +13355,14 @@ const defaultSelectTemplate = (rule, field, qb, update) => {
|
|
|
13208
13355
|
const defaultMultiSelectTemplate = (rule, field, qb, update) => {
|
|
13209
13356
|
const handleChange = (ev) => {
|
|
13210
13357
|
const target = ev.target;
|
|
13211
|
-
rule.value =
|
|
13358
|
+
rule.value = isArrayFull(target.value) ? target.value : void 0;
|
|
13212
13359
|
target.setCustomValidity(field.validator?.(rule) ?? "");
|
|
13213
13360
|
update();
|
|
13214
13361
|
};
|
|
13215
13362
|
return html`
|
|
13216
13363
|
<flow-ui-select
|
|
13217
13364
|
class="query-builder__rule-value-control"
|
|
13218
|
-
value=${
|
|
13365
|
+
.value=${rule.value ?? []}
|
|
13219
13366
|
size=${qb.size}
|
|
13220
13367
|
?disabled=${!rule.enabled}
|
|
13221
13368
|
@flow-ui-change=${handleChange}
|
|
@@ -13500,6 +13647,65 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
|
|
|
13500
13647
|
static registerFieldDefinition(type, fieldDefinition) {
|
|
13501
13648
|
_FlowQueryBuilder.fieldDefinitions.set(type, fieldDefinition);
|
|
13502
13649
|
}
|
|
13650
|
+
/**
|
|
13651
|
+
* Static helper method to determine if supplied argument is
|
|
13652
|
+
* a `FlowQueryBuilderRule`.
|
|
13653
|
+
*
|
|
13654
|
+
* @param value A value to test
|
|
13655
|
+
*/
|
|
13656
|
+
static isRule(value) {
|
|
13657
|
+
return isRule(value);
|
|
13658
|
+
}
|
|
13659
|
+
/**
|
|
13660
|
+
* Static helper method to determine if supplied argument is
|
|
13661
|
+
* a `FlowQueryBuilderRuleSet`.
|
|
13662
|
+
*
|
|
13663
|
+
* @param value A value to test
|
|
13664
|
+
* @returns `true` if supplied value is a FlowQueryBuilderRuleSet
|
|
13665
|
+
*/
|
|
13666
|
+
static isRuleSet(value) {
|
|
13667
|
+
return isRuleSet(value);
|
|
13668
|
+
}
|
|
13669
|
+
/**
|
|
13670
|
+
* Static helper method to recursively filter a `FlowQueryBuilderRuleSet`.
|
|
13671
|
+
*
|
|
13672
|
+
* This can be used to sanitize user queries before they are executed.
|
|
13673
|
+
*
|
|
13674
|
+
* @param ruleset Rule set to filter
|
|
13675
|
+
* @param options Fields to include or exclude
|
|
13676
|
+
* @returns The filtered rule set
|
|
13677
|
+
*/
|
|
13678
|
+
static filterRuleSet(ruleset, options) {
|
|
13679
|
+
return filterRuleSet(ruleset, options);
|
|
13680
|
+
}
|
|
13681
|
+
/**
|
|
13682
|
+
* Static helper method to rename fields in a `FlowQueryBuilderRuleSet`.
|
|
13683
|
+
*
|
|
13684
|
+
* @param ruleSet A `FlowQueryBuilderRuleSet` to rename.
|
|
13685
|
+
* @param replacements Mapping of string to string for renaming fields.
|
|
13686
|
+
* @returns The renamed rule set.
|
|
13687
|
+
*/
|
|
13688
|
+
static renameRuleSetFields(ruleset, replacements) {
|
|
13689
|
+
return renameRuleSetFields(ruleset, replacements);
|
|
13690
|
+
}
|
|
13691
|
+
/**
|
|
13692
|
+
* Static helper method to recursively apply a transform function to each rule
|
|
13693
|
+
* in a `FlowQueryBuilderRuleSet`.
|
|
13694
|
+
*
|
|
13695
|
+
* The transform fn should expect a single FlowQueryBuilderRule and return:
|
|
13696
|
+
*
|
|
13697
|
+
* - the same rule unmodifed or modified in place
|
|
13698
|
+
* - `undefined` to exclude the rule from the rule set
|
|
13699
|
+
*
|
|
13700
|
+
* This can be used to sanitize rule sets before they are used to perform queries.
|
|
13701
|
+
*
|
|
13702
|
+
* @param ruleSet query builder rule set
|
|
13703
|
+
* @param transformFn transform function
|
|
13704
|
+
* @returns The modified rule set
|
|
13705
|
+
*/
|
|
13706
|
+
static transformRuleSet(ruleSet, transformFn) {
|
|
13707
|
+
return transformRuleSet(ruleSet, transformFn);
|
|
13708
|
+
}
|
|
13503
13709
|
valueTemplateForRule(_rule, field) {
|
|
13504
13710
|
const fieldDef = field?.type && _FlowQueryBuilder.fieldDefinitions.get(field.type);
|
|
13505
13711
|
if (fieldDef?.template) {
|
|
@@ -13595,7 +13801,6 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
|
|
|
13595
13801
|
emitValueChange() {
|
|
13596
13802
|
if (!this.subQueryBuilder) {
|
|
13597
13803
|
this.value = cloneDeep(this.value);
|
|
13598
|
-
console.log("top-level value", this.value);
|
|
13599
13804
|
}
|
|
13600
13805
|
this.emit("flow-ui-change");
|
|
13601
13806
|
}
|
|
@@ -13758,7 +13963,9 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
|
|
|
13758
13963
|
}
|
|
13759
13964
|
emptyRulesetTemplate() {
|
|
13760
13965
|
return html`
|
|
13761
|
-
<div class="query-builder__empty-ruleset"
|
|
13966
|
+
<div class="query-builder__empty-ruleset">
|
|
13967
|
+
<i>A rule set cannot be empty. Please add a rule or remove the set.</i>
|
|
13968
|
+
</div>
|
|
13762
13969
|
`;
|
|
13763
13970
|
}
|
|
13764
13971
|
render() {
|
|
@@ -13826,6 +14033,11 @@ const _FlowQueryBuilder = class _FlowQueryBuilder extends FlowRdfElement {
|
|
|
13826
14033
|
};
|
|
13827
14034
|
_FlowQueryBuilder.styles = styles$o;
|
|
13828
14035
|
_FlowQueryBuilder.fieldDefinitions = /* @__PURE__ */ new Map();
|
|
14036
|
+
// Static converts and helpers
|
|
14037
|
+
/**
|
|
14038
|
+
*
|
|
14039
|
+
*/
|
|
14040
|
+
_FlowQueryBuilder.convertToFlowQuery = converter;
|
|
13829
14041
|
__decorateClass$o([
|
|
13830
14042
|
property({ type: Object, reflect: false })
|
|
13831
14043
|
], _FlowQueryBuilder.prototype, "value", 2);
|
|
@@ -23146,7 +23358,7 @@ const translation = {
|
|
|
23146
23358
|
};
|
|
23147
23359
|
registerTranslation(translation);
|
|
23148
23360
|
|
|
23149
|
-
const version = "0.0.
|
|
23361
|
+
const version = "0.0.30";
|
|
23150
23362
|
|
|
23151
23363
|
const CONSOLE_HIGHLIGHT_STYLE = `
|
|
23152
23364
|
padding: 2px 4px;
|