@vuu-ui/vuu-filters 0.6.13-debug → 0.6.14-debug
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/cjs/index.js +59 -117
- package/cjs/index.js.map +4 -4
- package/esm/index.js +36 -94
- package/esm/index.js.map +4 -4
- package/package.json +6 -6
- package/types/filter-input/useCodeMirrorEditor.d.ts +4 -4
- package/types/filter-input/useFilterAutoComplete.d.ts +2 -2
- package/types/filter-input/useFilterSuggestionProvider.d.ts +2 -6
- package/types/filter-toolbar/FilterDropdown.d.ts +2 -2
- package/types/filter-toolbar/FilterDropdownMultiSelect.d.ts +2 -2
- package/types/filter-utils.d.ts +1 -3
- package/types/filter-input/codemirror-basic-setup.d.ts +0 -3
package/esm/index.js
CHANGED
|
@@ -100,34 +100,16 @@ import { Button } from "@salt-ds/core";
|
|
|
100
100
|
var import_classnames = __toESM(require_classnames(), 1);
|
|
101
101
|
import {
|
|
102
102
|
autocompletion,
|
|
103
|
-
defaultKeymap
|
|
104
|
-
ensureSyntaxTree,
|
|
103
|
+
defaultKeymap,
|
|
105
104
|
EditorState as EditorState2,
|
|
106
105
|
EditorView as EditorView2,
|
|
107
|
-
|
|
106
|
+
ensureSyntaxTree,
|
|
107
|
+
keymap,
|
|
108
|
+
minimalSetup,
|
|
108
109
|
startCompletion
|
|
109
110
|
} from "@vuu-ui/vuu-codemirror";
|
|
110
111
|
import { useEffect, useMemo, useRef } from "react";
|
|
111
112
|
|
|
112
|
-
// src/filter-input/codemirror-basic-setup.ts
|
|
113
|
-
import {
|
|
114
|
-
defaultHighlightStyle,
|
|
115
|
-
defaultKeymap,
|
|
116
|
-
drawSelection,
|
|
117
|
-
highlightSpecialChars,
|
|
118
|
-
history,
|
|
119
|
-
historyKeymap,
|
|
120
|
-
keymap,
|
|
121
|
-
syntaxHighlighting
|
|
122
|
-
} from "@vuu-ui/vuu-codemirror";
|
|
123
|
-
var minimalSetup = (() => [
|
|
124
|
-
highlightSpecialChars(),
|
|
125
|
-
history(),
|
|
126
|
-
drawSelection(),
|
|
127
|
-
syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
|
|
128
|
-
keymap.of([...defaultKeymap, ...historyKeymap])
|
|
129
|
-
])();
|
|
130
|
-
|
|
131
113
|
// src/filter-input/filter-language-parser/FilterLanguage.ts
|
|
132
114
|
import {
|
|
133
115
|
LanguageSupport,
|
|
@@ -293,14 +275,14 @@ var walkTree = (tree, source) => {
|
|
|
293
275
|
// src/filter-input/highlighting.ts
|
|
294
276
|
import {
|
|
295
277
|
HighlightStyle,
|
|
296
|
-
syntaxHighlighting
|
|
278
|
+
syntaxHighlighting,
|
|
297
279
|
tags
|
|
298
280
|
} from "@vuu-ui/vuu-codemirror";
|
|
299
281
|
var myHighlightStyle = HighlightStyle.define([
|
|
300
282
|
{ tag: tags.variableName, color: "var(--vuuFilterEditor-variableColor)" },
|
|
301
283
|
{ tag: tags.comment, color: "green", fontStyle: "italic" }
|
|
302
284
|
]);
|
|
303
|
-
var vuuHighlighting =
|
|
285
|
+
var vuuHighlighting = syntaxHighlighting(myHighlightStyle);
|
|
304
286
|
|
|
305
287
|
// src/filter-input/theme.ts
|
|
306
288
|
import { EditorView } from "@vuu-ui/vuu-codemirror";
|
|
@@ -378,24 +360,13 @@ var vuuTheme = EditorView.theme(
|
|
|
378
360
|
|
|
379
361
|
// src/filter-input/useFilterAutoComplete.ts
|
|
380
362
|
import {
|
|
363
|
+
asNameSuggestion,
|
|
364
|
+
booleanJoinSuggestions,
|
|
365
|
+
getNodeByName,
|
|
366
|
+
getValue,
|
|
381
367
|
syntaxTree
|
|
382
368
|
} from "@vuu-ui/vuu-codemirror";
|
|
383
369
|
import { useCallback } from "react";
|
|
384
|
-
var getValue = (node, state) => state.doc.sliceString(node.from, node.to);
|
|
385
|
-
var getColumnName = (node, state) => {
|
|
386
|
-
var _a;
|
|
387
|
-
if (((_a = node.firstChild) == null ? void 0 : _a.name) === "Column") {
|
|
388
|
-
return getValue(node.firstChild, state);
|
|
389
|
-
} else {
|
|
390
|
-
let maybeColumnNode = node.prevSibling || node.parent;
|
|
391
|
-
while (maybeColumnNode && maybeColumnNode.name !== "Column") {
|
|
392
|
-
maybeColumnNode = maybeColumnNode.prevSibling || maybeColumnNode.parent;
|
|
393
|
-
}
|
|
394
|
-
if (maybeColumnNode) {
|
|
395
|
-
return getValue(maybeColumnNode, state);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
370
|
var getOperator = (node, state) => {
|
|
400
371
|
let maybeColumnNode = node.prevSibling || node.parent;
|
|
401
372
|
while (maybeColumnNode && !["Column", "Operator", "In"].includes(maybeColumnNode.name)) {
|
|
@@ -453,11 +424,6 @@ var promptForFilterName = (context) => ({
|
|
|
453
424
|
}
|
|
454
425
|
]
|
|
455
426
|
});
|
|
456
|
-
var joinSuggestions = [
|
|
457
|
-
{ label: "and", apply: "and ", boost: 5 },
|
|
458
|
-
{ label: "or", apply: "or ", boost: 3 },
|
|
459
|
-
{ label: "as", apply: "as ", boost: 1 }
|
|
460
|
-
];
|
|
461
427
|
var makeSaveOrExtendSuggestions = (onSubmit, existingFilter, withJoinSuggestions = true) => {
|
|
462
428
|
const result = existingFilter ? [
|
|
463
429
|
{
|
|
@@ -482,7 +448,7 @@ var makeSaveOrExtendSuggestions = (onSubmit, existingFilter, withJoinSuggestions
|
|
|
482
448
|
boost: 6
|
|
483
449
|
}
|
|
484
450
|
];
|
|
485
|
-
return withJoinSuggestions ? result.concat(
|
|
451
|
+
return withJoinSuggestions ? result.concat(booleanJoinSuggestions).concat(asNameSuggestion) : result;
|
|
486
452
|
};
|
|
487
453
|
var promptToSaveOrExtend = (context, onSubmit, existingFilter) => ({
|
|
488
454
|
from: context.pos,
|
|
@@ -552,7 +518,7 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
552
518
|
}
|
|
553
519
|
}
|
|
554
520
|
case "\u26A0": {
|
|
555
|
-
const columnName =
|
|
521
|
+
const columnName = getNodeByName(nodeBefore, state);
|
|
556
522
|
const operator = getOperator(nodeBefore, state);
|
|
557
523
|
const partialOperator = operator ? void 0 : getPartialOperator(nodeBefore, state, columnName);
|
|
558
524
|
if (partialOperator) {
|
|
@@ -587,7 +553,7 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
587
553
|
break;
|
|
588
554
|
case "ColumnSetExpression":
|
|
589
555
|
case "Values": {
|
|
590
|
-
const columnName =
|
|
556
|
+
const columnName = getNodeByName(nodeBefore, state);
|
|
591
557
|
const selection = getSetValues(nodeBefore, state);
|
|
592
558
|
return makeSuggestions(context, "columnValue", {
|
|
593
559
|
columnName,
|
|
@@ -596,7 +562,7 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
596
562
|
}
|
|
597
563
|
case "Comma":
|
|
598
564
|
case "LBrack": {
|
|
599
|
-
const columnName =
|
|
565
|
+
const columnName = getNodeByName(nodeBefore, state);
|
|
600
566
|
return makeSuggestions(context, "columnValue", { columnName });
|
|
601
567
|
}
|
|
602
568
|
case "ColumnValueExpression":
|
|
@@ -604,11 +570,11 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
604
570
|
const lastToken = (_b = nodeBefore.lastChild) == null ? void 0 : _b.prevSibling;
|
|
605
571
|
if ((lastToken == null ? void 0 : lastToken.name) === "Column") {
|
|
606
572
|
return makeSuggestions(context, "operator", {
|
|
607
|
-
columnName:
|
|
573
|
+
columnName: getNodeByName(nodeBefore, state)
|
|
608
574
|
});
|
|
609
575
|
} else if ((lastToken == null ? void 0 : lastToken.name) === "Operator") {
|
|
610
576
|
return makeSuggestions(context, "columnValue", {
|
|
611
|
-
columnName:
|
|
577
|
+
columnName: getNodeByName(lastToken, state),
|
|
612
578
|
operator: getValue(lastToken, state)
|
|
613
579
|
});
|
|
614
580
|
}
|
|
@@ -622,7 +588,7 @@ var useAutoComplete = (suggestionProvider, onSubmit, existingFilter) => {
|
|
|
622
588
|
}
|
|
623
589
|
case "Eq": {
|
|
624
590
|
return makeSuggestions(context, "columnValue", {
|
|
625
|
-
columnName:
|
|
591
|
+
columnName: getNodeByName(nodeBefore, state)
|
|
626
592
|
});
|
|
627
593
|
}
|
|
628
594
|
case "AndExpression":
|
|
@@ -691,7 +657,7 @@ var useCodeMirrorEditor = ({
|
|
|
691
657
|
clearInput2();
|
|
692
658
|
};
|
|
693
659
|
const submitFilter = (key) => {
|
|
694
|
-
return
|
|
660
|
+
return keymap.of([
|
|
695
661
|
{
|
|
696
662
|
key,
|
|
697
663
|
run() {
|
|
@@ -702,7 +668,7 @@ var useCodeMirrorEditor = ({
|
|
|
702
668
|
]);
|
|
703
669
|
};
|
|
704
670
|
const showSuggestions = (key) => {
|
|
705
|
-
return
|
|
671
|
+
return keymap.of([
|
|
706
672
|
{
|
|
707
673
|
key,
|
|
708
674
|
run() {
|
|
@@ -721,7 +687,7 @@ var useCodeMirrorEditor = ({
|
|
|
721
687
|
optionClass: getOptionClass
|
|
722
688
|
}),
|
|
723
689
|
filterLanguageSupport(),
|
|
724
|
-
|
|
690
|
+
keymap.of(defaultKeymap),
|
|
725
691
|
submitFilter("Ctrl-Enter"),
|
|
726
692
|
showSuggestions("ArrowDown"),
|
|
727
693
|
EditorView2.updateListener.of((v) => {
|
|
@@ -791,7 +757,12 @@ var FilterInput = ({
|
|
|
791
757
|
};
|
|
792
758
|
|
|
793
759
|
// src/filter-input/useFilterSuggestionProvider.ts
|
|
794
|
-
import {
|
|
760
|
+
import {
|
|
761
|
+
numericOperators,
|
|
762
|
+
stringOperators,
|
|
763
|
+
toSuggestions
|
|
764
|
+
} from "@vuu-ui/vuu-codemirror";
|
|
765
|
+
import { getTypeaheadParams, useTypeaheadSuggestions } from "@vuu-ui/vuu-data";
|
|
795
766
|
import { useCallback as useCallback2, useRef as useRef2 } from "react";
|
|
796
767
|
|
|
797
768
|
// src/filter-input/filterInfo.ts
|
|
@@ -809,7 +780,7 @@ var filterInfo = (filterName, filterQuery) => {
|
|
|
809
780
|
|
|
810
781
|
// src/filter-input/useFilterSuggestionProvider.ts
|
|
811
782
|
var NO_NAMED_FILTERS = [];
|
|
812
|
-
var
|
|
783
|
+
var NONE = {};
|
|
813
784
|
var suggestColumns = (columns) => columns.map((column) => ({
|
|
814
785
|
boost: 5,
|
|
815
786
|
label: column.name
|
|
@@ -825,39 +796,10 @@ var doneCommand = {
|
|
|
825
796
|
type: "keyword",
|
|
826
797
|
boost: 10
|
|
827
798
|
};
|
|
828
|
-
var equalityOperators = [
|
|
829
|
-
{ label: "=", boost: 10 },
|
|
830
|
-
{ label: "!=", boost: 9 }
|
|
831
|
-
];
|
|
832
|
-
var stringOperators = [
|
|
833
|
-
...equalityOperators,
|
|
834
|
-
{ label: "in", boost: 6 },
|
|
835
|
-
{ label: "starts", boost: 5 },
|
|
836
|
-
{ label: "ends", boost: 4 }
|
|
837
|
-
];
|
|
838
|
-
var numericOperators = [
|
|
839
|
-
...equalityOperators,
|
|
840
|
-
{ label: ">", boost: 8 },
|
|
841
|
-
{ label: "<", boost: 7 }
|
|
842
|
-
];
|
|
843
|
-
var toSuggestions = (values, quoted = false, prefix = "", isIllustration = false) => {
|
|
844
|
-
const quote = quoted ? '"' : "";
|
|
845
|
-
return values.map((value) => ({
|
|
846
|
-
isIllustration,
|
|
847
|
-
label: value,
|
|
848
|
-
apply: isIllustration ? `${quote}${prefix}${quote}` : `${prefix}${quote}${value}${quote} `
|
|
849
|
-
}));
|
|
850
|
-
};
|
|
851
799
|
var withApplySpace = (suggestions, startsWith = "") => suggestions.filter((sugg) => startsWith === "" || sugg.label.startsWith(startsWith)).map((suggestion) => ({
|
|
852
800
|
...suggestion,
|
|
853
801
|
apply: suggestion.label + " "
|
|
854
802
|
}));
|
|
855
|
-
var getTypeaheadParams = (table, column, text = "", selectedValues = []) => {
|
|
856
|
-
if (text !== "" && !selectedValues.includes(text.toLowerCase())) {
|
|
857
|
-
return [table, column, text];
|
|
858
|
-
}
|
|
859
|
-
return [table, column];
|
|
860
|
-
};
|
|
861
803
|
var useFilterSuggestionProvider = ({
|
|
862
804
|
columns,
|
|
863
805
|
namedFilters,
|
|
@@ -866,8 +808,9 @@ var useFilterSuggestionProvider = ({
|
|
|
866
808
|
const latestSuggestionsRef = useRef2();
|
|
867
809
|
const getTypeaheadSuggestions = useTypeaheadSuggestions();
|
|
868
810
|
const getSuggestions = useCallback2(
|
|
869
|
-
async (
|
|
870
|
-
|
|
811
|
+
async (suggestionType, options = NONE) => {
|
|
812
|
+
const { columnName, operator, startsWith, selection } = options;
|
|
813
|
+
if (suggestionType === "operator") {
|
|
871
814
|
const column = columns.find((col) => col.name === columnName);
|
|
872
815
|
if (column) {
|
|
873
816
|
switch (column.serverDataType) {
|
|
@@ -882,7 +825,7 @@ var useFilterSuggestionProvider = ({
|
|
|
882
825
|
} else {
|
|
883
826
|
console.warn(`'${columnName}' does not match any column name`);
|
|
884
827
|
}
|
|
885
|
-
} else if (
|
|
828
|
+
} else if (suggestionType === "column") {
|
|
886
829
|
const columnSuggestions = await suggestColumns(columns);
|
|
887
830
|
const filterSuggestions = await suggestNamedFilters(namedFilters);
|
|
888
831
|
return (latestSuggestionsRef.current = withApplySpace(columnSuggestions)).concat(
|
|
@@ -895,12 +838,11 @@ var useFilterSuggestionProvider = ({
|
|
|
895
838
|
const params = getTypeaheadParams(table, columnName, startsWith);
|
|
896
839
|
const suggestions = await getTypeaheadSuggestions(params);
|
|
897
840
|
const isIllustration = operator === "starts";
|
|
898
|
-
latestSuggestionsRef.current = toSuggestions(
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
isIllustration ? startsWith : prefix,
|
|
841
|
+
latestSuggestionsRef.current = toSuggestions(suggestions, {
|
|
842
|
+
quoted: (column == null ? void 0 : column.serverDataType) === "string",
|
|
843
|
+
prefix: isIllustration ? startsWith : prefix,
|
|
902
844
|
isIllustration
|
|
903
|
-
);
|
|
845
|
+
});
|
|
904
846
|
if (Array.isArray(selection) && (selection == null ? void 0 : selection.length) > 1) {
|
|
905
847
|
return [doneCommand, ...latestSuggestionsRef.current];
|
|
906
848
|
}
|
|
@@ -1320,7 +1262,7 @@ var includesNoValues = (filter) => {
|
|
|
1320
1262
|
return isAndFilter(filter) && filter.filters.some((f) => includesNoValues(f));
|
|
1321
1263
|
};
|
|
1322
1264
|
var filterValue = (value) => typeof value === "string" ? `"${value}"` : value;
|
|
1323
|
-
var filterAsQuery = (f
|
|
1265
|
+
var filterAsQuery = (f) => {
|
|
1324
1266
|
if (isMultiClauseFilter2(f)) {
|
|
1325
1267
|
return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);
|
|
1326
1268
|
} else if (isMultiValueFilter2(f)) {
|