@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/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 as defaultKeymap2,
104
- ensureSyntaxTree,
103
+ defaultKeymap,
105
104
  EditorState as EditorState2,
106
105
  EditorView as EditorView2,
107
- keymap as keymap2,
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 as syntaxHighlighting2,
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 = syntaxHighlighting2(myHighlightStyle);
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(joinSuggestions) : result;
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 = getColumnName(nodeBefore, state);
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 = getColumnName(nodeBefore, state);
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 = getColumnName(nodeBefore, state);
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: getColumnName(nodeBefore, state)
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: getColumnName(lastToken, state),
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: getColumnName(nodeBefore, state)
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 keymap2.of([
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 keymap2.of([
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
- keymap2.of(defaultKeymap2),
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 { useTypeaheadSuggestions } from "@vuu-ui/vuu-data";
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 NO_OPTIONS = {};
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 (valueType, { columnName, operator, startsWith, selection } = NO_OPTIONS) => {
870
- if (valueType === "operator") {
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 (valueType === "column") {
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
- suggestions,
900
- (column == null ? void 0 : column.serverDataType) === "string",
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, namedFilters = {}) => {
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)) {