@vuu-ui/vuu-filters 0.7.0-debug → 0.7.1-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.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../node_modules/classnames/index.js", "../../../packages/vuu-filters/src/filter-input/FilterInput.tsx", "../../../packages/vuu-filters/src/filter-input/useCodeMirrorEditor.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterLanguage.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/generated/filter-parser.js", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterTreeWalker.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterParser.ts", "../../../packages/vuu-filters/src/filter-input/highlighting.ts", "../../../packages/vuu-filters/src/filter-input/theme.ts", "../../../packages/vuu-filters/src/filter-input/useFilterAutoComplete.ts", "../../../packages/vuu-filters/src/filter-input/useFilterSuggestionProvider.ts", "../../../packages/vuu-filters/src/filter-input/filterInfo.ts", "../../../packages/vuu-filters/src/filter-toolbar/FilterToolbar.tsx", "../../../packages/vuu-filters/src/filter-toolbar/useFilterToolbar.tsx", "../../../packages/vuu-filters/src/filter-toolbar/FilterDropdown.tsx", "../../../packages/vuu-filters/src/filter-toolbar/FilterDropdownMultiSelect.tsx", "../../../packages/vuu-filters/src/filter-evaluation-utils.ts", "../../../packages/vuu-filters/src/filter-utils.ts", "../../../packages/vuu-filters/src/filterTypes.ts"],
4
- "sourcesContent": ["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { Button } from \"@salt-ds/core\";\nimport { HTMLAttributes } from \"react\";\nimport {\n filterSubmissionHandler,\n SuggestionConsumer,\n useCodeMirrorEditor,\n} from \"./useCodeMirrorEditor\";\n\nimport \"./FilterInput.css\";\n\nconst classBase = \"vuuFilterInput\";\n\nexport interface FilterInputProps\n extends SuggestionConsumer,\n HTMLAttributes<HTMLDivElement> {\n iconName?: string;\n existingFilter?: Filter;\n namedFilters?: Map<string, string>;\n onSubmitFilter?: filterSubmissionHandler;\n}\n\nexport const FilterInput = ({\n existingFilter,\n iconName = \"filter\",\n namedFilters,\n onSubmitFilter,\n suggestionProvider,\n ...props\n}: FilterInputProps) => {\n const { editorRef, clearInput } = useCodeMirrorEditor({\n existingFilter,\n onSubmitFilter,\n suggestionProvider,\n });\n\n return (\n <div {...props} className={classBase}>\n <Button\n className={`${classBase}-FilterButton`}\n data-icon={iconName}\n tabIndex={-1}\n />\n <div className={`${classBase}-Editor`} ref={editorRef} />\n <Button\n className={`${classBase}-ClearButton`}\n data-icon=\"close-circle\"\n onClick={clearInput}\n />\n </div>\n );\n};\n", "import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n VuuCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport cx from \"classnames\";\nimport { MutableRefObject, useEffect, useMemo, useRef } from \"react\";\nimport { filterLanguageSupport } from \"./filter-language-parser\";\nimport { walkTree } from \"./filter-language-parser/FilterTreeWalker\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n FilterSubmissionMode,\n useAutoComplete,\n} from \"./useFilterAutoComplete\";\nimport { FilterSaveOptions } from \"./useFilterSuggestionProvider\";\n\nexport type SuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"operator\"\n | \"save\"\n | \"name\";\n\nexport interface FilterSuggestionOptions {\n quoted?: boolean;\n columnName?: string;\n existingFilter?: Filter;\n filterName?: string;\n onSubmit?: () => void;\n operator?: string;\n startsWith?: string;\n selection?: string[];\n}\n\nexport type getFilterSuggestionsType = (\n suggestionType: SuggestionType,\n options?: FilterSuggestionOptions\n) => Promise<Completion[]>;\n\nexport interface IFilterSuggestionProvider {\n getSuggestions: getFilterSuggestionsType;\n isPartialMatch: (\n valueType: SuggestionType,\n columnName?: string,\n text?: string | undefined\n ) => Promise<boolean>;\n}\n\nexport interface SuggestionConsumer {\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (completion: VuuCompletion) => {\n return cx(\"vuuSuggestion\", {\n vuuIllustration: completion.isIllustration,\n });\n};\n\nconst stripName = (filterQuery: string) => {\n const pos = filterQuery.lastIndexOf(\" as \");\n if (pos !== -1) {\n return filterQuery.slice(0, pos);\n } else {\n return filterQuery;\n }\n};\n\nconst noop = () => console.log(\"noooop\");\n\nexport type filterSubmissionHandler = (\n filter: Filter | undefined,\n filterQuery: string,\n mode?: FilterSubmissionMode,\n filterName?: string\n) => void;\n\nexport interface CodeMirrorEditorProps {\n existingFilter?: Filter;\n onSubmitFilter?: filterSubmissionHandler;\n saveOptions?: FilterSaveOptions;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const useCodeMirrorEditor = ({\n existingFilter,\n onSubmitFilter,\n suggestionProvider,\n}: CodeMirrorEditorProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmit = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useAutoComplete(\n suggestionProvider,\n onSubmit,\n existingFilter\n );\n\n const [createState, clearInput] = useMemo(() => {\n const parseFilter = ():\n | [Filter, string, string | undefined]\n | [undefined, \"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const filter = walkTree(tree, source) as Filter;\n return [filter, stripName(source), filter.name];\n } else {\n return [undefined, \"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitFilterAndClearInput = (mode?: FilterSubmissionMode) => {\n const [filter, filterQuery, filterName] = parseFilter();\n onSubmitFilter?.(filter, filterQuery, mode, filterName);\n clearInput();\n };\n\n const submitFilter = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n submitFilterAndClearInput();\n return true;\n },\n },\n ]);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: \"\",\n extensions: [\n minimalSetup,\n autocompletion({\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n filterLanguageSupport(),\n keymap.of(defaultKeymap),\n submitFilter(\"Ctrl-Enter\"),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n }\n }),\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmit.current = (mode?: FilterSubmissionMode) => {\n submitFilterAndClearInput(mode);\n // TODO refocu sthe editor\n setTimeout(() => {\n getView(viewRef).focus();\n }, 100);\n };\n\n return [createState, clearInput];\n }, [completionFn, onSubmitFilter]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n return { editorRef, clearInput };\n};\n", "import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/filter-parser\";\n\nconst filterLanguage = LRLanguage.define({\n name: \"VuuFilterQuery\",\n parser: parser.configure({\n props: [\n styleTags({\n Identifier: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n }),\n});\n\nexport const filterLanguageSupport = () => {\n return new LanguageSupport(filterLanguage);\n};\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@vuu-ui/vuu-codemirror\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"%QOVQPOOOOQO'#C_'#C_O_QQO'#C^OOQO'#DO'#DOOvQQO'#C|OOQO'#DR'#DROVQPO'#CuOOQO'#C}'#C}QOQPOOOOQO'#C`'#C`O!UQQO,58xO!dQPO,59VOVQPO,59]OVQPO,59_O!iQPO,59hO!nQQO,59aOOQO'#DQ'#DQOOQO1G.d1G.dO!UQQO1G.qO!yQQO1G.wOOQO1G.y1G.yOOQO'#Cw'#CwOOQO1G/S1G/SOOQO1G.{1G.{O#[QPO'#CnO#dQPO7+$]O!UQQO'#CxO#iQPO,59YOOQO<<Gw<<GwOOQO,59d,59dOOQO-E6v-E6v\",\n stateData: \"#q~OoOS~OsPOvUO~OTXOUXOVXOWXOXXOYXO`ZO~Of[Oh]Oj^OmpX~OZ`O[`O]`O^`O~OabO~OseO~Of[Oh]OwgO~Oh]Ofeijeimeiwei~OcjOdbX~OdlO~OcjOdba~O\",\n goto: \"#YvPPw}!TPPPPPPPPPPwPP!WPP!ZP!ZP!aP!g!jPPP!p!s!aP#P!aXROU[]XQOU[]RYQRibXTOU[]XVOU[]Rf^QkhRnkRWOQSOQ_UQc[Rd]QaYQhbRmj\",\n nodeNames: \"\u26A0 Filter ColumnValueExpression Column Operator Eq NotEq Gt Lt Starts Ends Number String True False ColumnSetExpression In LBrack Values Comma RBrack AndExpression And OrExpression Or ParenthesizedExpression As FilterName\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \"6p~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$j|}$o!O!P$t!Q![%S!^!_%_!_!`%d!`!a%i!c!}%n!}#O&V#P#Q&[#R#S%n#T#U&a#U#X%n#X#Y(w#Y#Z+]#Z#]%n#]#^.]#^#c%n#c#d/e#d#g%n#g#h0m#h#i4[#i#o%n~#USo~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOU~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_O[~~$bP;=`<%l#m~$jOv~~$oOw~~$tOc~~$wP!Q![$z~%PPZ~!Q![$z~%XQZ~!O!P$t!Q![%S~%dOW~~%iOT~~%nOV~P%sUsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n~&[Oa~~&aOd~R&fYsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c'U#c#g%n#g#h(^#h#o%nR'ZWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X's#X#o%nR'zUfQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(eUjQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c)f#c#o%nR)kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X*T#X#o%nR*YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h*r#h#o%nR*yUYQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR+bVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U+w#U#o%nR+|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#`%n#`#a,f#a#o%nR,kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h-T#h#o%nR-YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y-r#Y#o%nR-yU^QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR.bWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c.z#c#o%nR/RU`QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR/jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g0S#g#o%nR0ZUhQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR0rWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i1[#i#o%nR1aVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U1v#U#o%nR1{WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g2e#g#o%nR2jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i3S#i#o%nR3XWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h3q#h#o%nR3xUXQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR4aWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g4y#g#o%nR5OWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#i%n#i#j5h#j#o%nR5mWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y6V#Y#o%nR6^U]QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n\",\n tokenizers: [0, 1],\n topRules: {\"Filter\":[0,1]},\n tokenPrec: 0\n})\n", "import { Tree } from \"@lezer/common\";\nimport {\n Filter,\n FilterCombinatorOp,\n MultipleValueFilterClauseOp,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n isMultiClauseFilter,\n isMultiValueFilter,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\n\nclass FilterExpression {\n public name: string | undefined;\n #filter: Partial<Filter> | undefined = undefined;\n\n setFilterCombinatorOp(op: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter) && filter.op === op) {\n return;\n } else {\n this.#filter = {\n op: op as FilterCombinatorOp,\n filters: [this.#filter as Filter],\n };\n }\n }\n\n add(filter: Partial<Filter>) {\n if (this.#filter === undefined) {\n this.#filter = filter;\n } else if (isMultiClauseFilter(this.#filter)) {\n this.#filter.filters.push(filter as Filter);\n } else {\n throw Error(`Invalid filter passed to FilterExpression`);\n }\n }\n\n setColumn(column: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setColumn(column, target);\n }\n } else if (filter) {\n filter.column = column;\n }\n }\n setOp(value: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setOp(value, target);\n }\n } else if (filter) {\n filter.op = value as\n | SingleValueFilterClauseOp\n | MultipleValueFilterClauseOp;\n }\n }\n setValue(value: string | number | boolean, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setValue(value, target);\n }\n } else if (isMultiValueFilter(filter)) {\n filter.values ??= [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n filter.values.push(value);\n } else if (isSingleValueFilter(filter)) {\n filter.value = value;\n }\n }\n\n toJSON(filter = this.#filter) {\n if (this.name) {\n return {\n ...filter,\n name: this.name,\n };\n } else {\n return filter;\n }\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const filterExpression = new FilterExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"ColumnValueExpression\":\n filterExpression.add({});\n break;\n case \"ColumnSetExpression\":\n filterExpression.add({ op: \"in\" });\n break;\n\n case \"Or\":\n case \"And\":\n filterExpression.setFilterCombinatorOp(source.substring(from, to));\n break;\n\n case \"Column\":\n filterExpression.setColumn(source.substring(from, to));\n break;\n\n case \"Operator\":\n filterExpression.setOp(source.substring(from, to));\n break;\n\n case \"String\":\n filterExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n filterExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"True\":\n filterExpression.setValue(true);\n break;\n\n case \"False\":\n filterExpression.setValue(false);\n break;\n\n case \"FilterName\":\n filterExpression.name = source.substring(from, to);\n break;\n\n default:\n }\n } while (cursor.next());\n\n return filterExpression.toJSON();\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { parser } from \"./generated/filter-parser\";\nimport { walkTree } from \"./FilterTreeWalker\";\n\nconst strictParser = parser.configure({ strict: true });\n\nexport const parseFilter = (filterQuery: string): Filter => {\n const parseTree = strictParser.parse(filterQuery);\n const filter = walkTree(parseTree, filterQuery) as Filter;\n return filter;\n};\n", "import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n", "import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n padding: 0,\n },\n \".cm-line\": {\n lineHeight: \"var(--vuuFilterEditor-lineHeight)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n alignItems: \"center\",\n display: \"flex\",\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n },\n \".cm-completionIcon\": {\n height: \"18px\",\n flex: \"0 0 16px\",\n },\n \".cm-completionLabel\": {\n flex: \"1 1 auto\",\n },\n \".cm-completionIcon-filter\": {\n position: \"relative\",\n \"&:after\": {\n background: \"var(--salt-text-secondary-foreground)\",\n content: \"''\",\n \"-webkit-mask\": \"var(--svg-filter) center center/13px 13px\",\n \"-webkit-mask-repeat\": \"no-repeat\",\n position: \"absolute\",\n height: \"18px\",\n left: \"0px\",\n top: \"0px\",\n width: \"16px\",\n },\n },\n },\n { dark: false }\n);\n", "import {\n CompletionContext,\n CompletionSource,\n EditorState,\n getNodeByName,\n getValue,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n IFilterSuggestionProvider,\n SuggestionType,\n} from \"./useCodeMirrorEditor\";\n\nexport type FilterSubmissionMode = \"and\" | \"or\" | \"replace\" | \"tab\";\n\nexport type ApplyCompletion = (mode?: FilterSubmissionMode) => void;\n\nconst getOperator = (node: SyntaxNode, state: EditorState) => {\n let maybeColumnNode = node.prevSibling || node.parent;\n while (\n maybeColumnNode &&\n ![\"Column\", \"Operator\", \"In\"].includes(maybeColumnNode.name)\n ) {\n maybeColumnNode = maybeColumnNode.prevSibling || maybeColumnNode.parent;\n }\n if (maybeColumnNode?.name === \"In\" || maybeColumnNode?.name === \"Operator\") {\n return getValue(maybeColumnNode, state);\n } else {\n return undefined;\n }\n};\n\n// Operators that are more than a single character in length may incur partial matches\n// TODO need to check that previous token is a column\nconst getPartialOperator = (\n maybeOperatorNode: SyntaxNode,\n state: EditorState,\n columnName?: string\n) => {\n const value = getValue(maybeOperatorNode, state);\n if (columnName === undefined || value === columnName) {\n return;\n }\n if (\n [\"contains\", \"ends\", \"starts\"].some((val) =>\n val.startsWith(value.toLowerCase())\n )\n ) {\n return value;\n } else {\n return undefined;\n }\n};\n\nconst getClauseOperator = (node: SyntaxNode, state: EditorState) => {\n let maybeTargetNode = node.prevSibling || node.parent || node.lastChild;\n while (maybeTargetNode && maybeTargetNode.name === \"\u26A0\")\n maybeTargetNode = maybeTargetNode.prevSibling;\n if (maybeTargetNode && [\"As\", \"Or\", \"And\"].includes(maybeTargetNode.name)) {\n return getValue(maybeTargetNode, state);\n } else {\n return undefined;\n }\n};\n\nconst getFilterName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"FilterName\") {\n return getValue(node, state);\n } else {\n let maybeTargetNode = node.prevSibling || node.parent || node.lastChild;\n while (maybeTargetNode && maybeTargetNode.name !== \"FilterName\")\n maybeTargetNode = maybeTargetNode.prevSibling;\n if (maybeTargetNode && maybeTargetNode.name === \"FilterName\") {\n return getValue(node, state);\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"Operator\") {\n return getColumnName(prevNode, state);\n }\n};\n\nconst getSetValues = (node: SyntaxNode, state: EditorState): string[] => {\n let maybeTargetNode = node.lastChild;\n const values: string[] = [];\n while (maybeTargetNode && maybeTargetNode.name !== \"In\") {\n const value = getValue(maybeTargetNode, state);\n if (value) {\n values.push(value);\n } else {\n break;\n }\n maybeTargetNode = maybeTargetNode.prevSibling;\n }\n return values;\n};\nexport const FilterlNamedTerms: readonly string[] = [\n \"Filter\",\n \"ParenthesizedExpression\",\n \"AndExpression\",\n \"OrExpression\",\n \"ColumnValueExpression\",\n \"ColumnSetExpression\",\n \"FilterName\",\n \"Column\",\n \"Operator\",\n \"Values\",\n \"Number\",\n \"String\",\n];\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !FilterlNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const useAutoComplete = (\n suggestionProvider: IFilterSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>,\n existingFilter?: Filter\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: SuggestionType,\n optionalArgs: {\n columnName?: string;\n existingFilter?: Filter;\n filterName?: string;\n operator?: string;\n quoted?: boolean;\n onSubmit?: () => void;\n selection?: string[];\n startsWith?: string;\n } = {}\n ) => {\n const { startsWith = \"\" } = optionalArgs;\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider]\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n console.log({ nodeBeforeName: nodeBefore.name });\n\n switch (nodeBefore.name) {\n case \"Filter\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"column\");\n } else {\n const clauseOperator = getClauseOperator(nodeBefore, state);\n if (clauseOperator === \"as\") {\n return makeSuggestions(context, \"name\");\n } else {\n const filterName = getFilterName(nodeBefore, state);\n return makeSuggestions(context, \"save\", {\n onSubmit: onSubmit.current,\n existingFilter,\n filterName,\n });\n }\n }\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n quoted: true,\n startsWith: word.text,\n });\n }\n } else {\n console.log(\n `we have a string, column is ${columnName} ${from} ${to}`\n );\n }\n }\n break;\n\n case \"As\":\n return makeSuggestions(context, \"name\");\n\n case \"FilterName\":\n return makeSuggestions(context, \"save\", {\n onSubmit: onSubmit.current,\n existingFilter,\n filterName: getFilterName(nodeBefore, state),\n });\n\n case \"Column\": {\n const columnName = getValue(nodeBefore, state);\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"column\",\n undefined,\n columnName\n );\n if (isPartialMatch) {\n return makeSuggestions(context, \"column\", {\n startsWith: columnName,\n });\n } else {\n return makeSuggestions(context, \"operator\", { columnName });\n }\n }\n\n case \"\u26A0\": {\n const columnName = getNodeByName(nodeBefore, state);\n const operator = getOperator(nodeBefore, state);\n // TODO check if we're mnatching a partial jojn operator\n const partialOperator = operator\n ? undefined\n : getPartialOperator(nodeBefore, state, columnName);\n\n if (partialOperator) {\n return makeSuggestions(context, \"operator\", {\n columnName,\n startsWith: partialOperator,\n });\n } else {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n }\n\n case \"Identifier\":\n {\n const clauseOperator = getClauseOperator(nodeBefore, state);\n if (clauseOperator === \"as\") {\n return {\n from: context.pos,\n options: [\n {\n label: \"press ENTER to apply filter and save\",\n apply: () => onSubmit.current(),\n boost: 5,\n },\n ],\n };\n }\n }\n break;\n case \"ColumnSetExpression\":\n case \"Values\": {\n const columnName = getNodeByName(nodeBefore, state);\n const selection = getSetValues(nodeBefore, state);\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n selection,\n });\n }\n case \"Comma\":\n case \"LBrack\": {\n const columnName = getNodeByName(nodeBefore, state) as string;\n return makeSuggestions(context, \"columnValue\", { columnName });\n }\n\n case \"ColumnValueExpression\":\n {\n const lastToken = nodeBefore.lastChild?.prevSibling;\n if (lastToken?.name === \"Column\") {\n return makeSuggestions(context, \"operator\", {\n columnName: getNodeByName(nodeBefore, state),\n });\n } else if (lastToken?.name === \"Operator\") {\n return makeSuggestions(context, \"columnValue\", {\n columnName: getNodeByName(lastToken, state),\n operator: getValue(lastToken, state),\n });\n }\n }\n break;\n\n case \"In\": {\n return {\n from: context.pos,\n options: [{ label: \"[\", apply: \" [\", type: \"text\" }],\n };\n }\n\n case \"Eq\": {\n return makeSuggestions(context, \"columnValue\", {\n columnName: getNodeByName(nodeBefore, state),\n });\n }\n\n case \"AndExpression\":\n case \"OrExpression\": {\n return makeSuggestions(context, \"column\");\n }\n\n default:\n }\n },\n [existingFilter, makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n", "import {\n asNameSuggestion,\n booleanJoinSuggestions,\n Completion,\n getNamePrompt,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { getTypeaheadParams, useTypeaheadSuggestions } from \"@vuu-ui/vuu-data\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { IFilterSuggestionProvider, SuggestionType } from \"@vuu-ui/vuu-filters\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n// import { isMappedValueTypeRenderer, isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport { filterInfo } from \"./filterInfo\";\nimport { ApplyCompletion } from \"./useFilterAutoComplete\";\n\nconst NO_NAMED_FILTERS = [] as Completion[];\nconst NONE = {};\n\nconst saveAsTab = (onSubmit: ApplyCompletion) => [\n {\n label: \"Press ENTER to create TAB\",\n apply: () => onSubmit(\"tab\"),\n boost: 6,\n },\n];\n\nconst makeSaveOrExtendSuggestions = (\n onSubmit: ApplyCompletion,\n existingFilter?: Filter,\n withJoinSuggestions = true\n) => {\n const result = existingFilter\n ? ([\n {\n label: \"REPLACE existing filter\",\n apply: () => onSubmit(\"replace\"),\n boost: 8,\n },\n {\n label: \"AND existing filter\",\n apply: () => onSubmit(\"and\"),\n boost: 7,\n },\n {\n label: \"OR existing filter\",\n apply: () => onSubmit(\"or\"),\n boost: 7,\n },\n ] as Completion[])\n : ([\n {\n label: \"Press ENTER to submit\",\n apply: () => onSubmit(),\n boost: 6,\n },\n ] as Completion[]);\n\n return withJoinSuggestions\n ? result.concat(booleanJoinSuggestions).concat(asNameSuggestion)\n : result;\n};\n\nconst promptToSaveOrExtend = (\n onSubmit: ApplyCompletion,\n existingFilter?: Filter\n) => makeSaveOrExtendSuggestions(onSubmit, existingFilter, true);\n\nconst promptToSave = (onSubmit: ApplyCompletion) =>\n makeSaveOrExtendSuggestions(onSubmit, undefined);\n\nconst getSaveSuggestions = ({\n existingFilter,\n filterName,\n onSubmit,\n saveOptions,\n}: {\n existingFilter?: Filter;\n filterName?: string;\n onSubmit: () => void;\n saveOptions: FilterSaveOptions;\n}) => {\n const includeTabSuggestion = filterName && saveOptions.allowSaveAsTab;\n const result = existingFilter\n ? promptToSaveOrExtend(onSubmit, existingFilter)\n : promptToSave(onSubmit);\n\n if (includeTabSuggestion) {\n return result.concat(saveAsTab(onSubmit));\n } else {\n return result;\n }\n};\n\nconst suggestColumns = (columns: ColumnDescriptor[]) =>\n columns.map((column) => ({\n boost: 5,\n label: column.name,\n }));\n\nconst suggestNamedFilters = (namedFilters?: Map<string, string>) =>\n namedFilters\n ? (Array.from(namedFilters.entries()).map(([filterName, filterQuery]) => ({\n info: () => filterInfo(filterName, filterQuery),\n label: filterName,\n type: \"filter\",\n })) as Completion[])\n : NO_NAMED_FILTERS;\n\nconst doneCommand: Completion = {\n label: \"Done\",\n apply: \"] \",\n type: \"keyword\",\n boost: 10,\n};\n\nconst withApplySpace = (\n suggestions: Completion[],\n startsWith = \"\"\n): Completion[] =>\n suggestions\n .filter((sugg) => startsWith === \"\" || sugg.label.startsWith(startsWith))\n .map((suggestion) => ({\n ...suggestion,\n apply: suggestion.label + \" \",\n }));\n\nexport type FilterSaveOptions = {\n allowSaveAsTab?: boolean;\n allowReplace?: boolean;\n};\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n namedFilters?: Map<string, string>;\n saveOptions?: FilterSaveOptions;\n table: VuuTable;\n}\n\nconst defaultSaveOptions = {\n allowReplace: true,\n};\n\nexport const useFilterSuggestionProvider = ({\n columns,\n namedFilters,\n saveOptions = defaultSaveOptions,\n table,\n}: SuggestionProviderHookProps): IFilterSuggestionProvider => {\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n const getSuggestions: IFilterSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const {\n columnName,\n existingFilter,\n filterName,\n operator,\n quoted: autoQuoted,\n onSubmit,\n startsWith,\n selection,\n } = options;\n\n switch (suggestionType) {\n case \"operator\":\n {\n const column = columns.find((col) => col.name === columnName);\n if (column) {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators, startsWith);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n } else {\n console.warn(`'${columnName}' does not match any column name`);\n }\n }\n break;\n case \"column\": {\n const columnSuggestions = await suggestColumns(columns);\n const filterSuggestions = await suggestNamedFilters(namedFilters);\n return (latestSuggestionsRef.current =\n withApplySpace(columnSuggestions)).concat(\n withApplySpace(filterSuggestions)\n );\n }\n case \"columnValue\":\n {\n if (columnName) {\n const column = columns.find((col) => col.name === columnName);\n if (!column) {\n throw Error(\n `useFilterSUggestionProvider no column ${columnName}`\n );\n }\n const prefix = Array.isArray(selection)\n ? selection.length === 0\n ? \"[\"\n : \",\"\n : \"\";\n const params = getTypeaheadParams(\n table,\n columnName,\n startsWith\n );\n const suggestions = await getTypeaheadSuggestions(params);\n // const { type } = column;\n // if (\n // isTypeDescriptor(type) &&\n // isMappedValueTypeRenderer(type?.renderer)\n // ) {\n // const { map } = type.renderer;\n // suggestions = suggestions.map((value) => map[value] ?? value);\n // }\n\n // prob don't want to save the prefix\n const isIllustration = operator === \"starts\";\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n moveCursorToEnd: autoQuoted,\n quoted: column?.serverDataType === \"string\" && !autoQuoted,\n suffix: autoQuoted ? \"\" : \" \",\n prefix: isIllustration ? startsWith : prefix,\n isIllustration,\n });\n if (Array.isArray(selection) && selection?.length > 1) {\n return [doneCommand, ...latestSuggestionsRef.current];\n }\n return latestSuggestionsRef.current;\n }\n }\n break;\n case \"save\": {\n if (typeof onSubmit !== \"function\") {\n throw Error(\n \"useFilterSuggestionProvider, onSubmit must be supplied for 'save' suggestions\"\n );\n }\n return await getSaveSuggestions({\n existingFilter,\n filterName,\n onSubmit,\n saveOptions,\n });\n }\n case \"name\":\n return await getNamePrompt(\"filter\");\n default:\n }\n\n return [];\n },\n [columns, getTypeaheadSuggestions, namedFilters, saveOptions, table]\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: SuggestionType,\n columnName?: string,\n pattern?: string\n ) => {\n // const { current: latestSuggestions } = latestSuggestionsRef;\n const suggestions =\n // latestSuggestions && latestSuggestions.length > 0\n // ? latestSuggestions\n await getSuggestions(valueType, { columnName });\n\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n return true;\n }\n }\n }\n return false;\n },\n [getSuggestions]\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n", "import { createEl } from \"@vuu-ui/vuu-utils\";\n\nexport const filterInfo = (\n filterName: string,\n filterQuery: string\n // filter: Filter\n) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", filterName);\n // const paramElement = createEl(\"span\", \"param-list\", params.description);\n // const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n // headingElement.appendChild(paramElement);\n // headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, filterQuery);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n return rootElement;\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { Toolbar, ToolbarProps } from \"@heswell/salt-lab\";\nimport cx from \"classnames\";\nimport { SuggestionConsumer } from \"../filter-input\";\nimport { useFilterToolbar } from \"./useFilterToolbar\";\n\nimport \"./FilterToolbar.css\";\n\nexport interface FilterToolbarProps extends SuggestionConsumer, ToolbarProps {\n filter?: Filter;\n}\n\nexport const FilterToolbar = ({\n className,\n filter,\n suggestionProvider,\n ...props\n}: FilterToolbarProps) => {\n console.log(`FilterToolbar ${JSON.stringify(filter, null, 2)}`);\n const toolbarItems = useFilterToolbar({ filter, suggestionProvider });\n return (\n <Toolbar className={cx(\"vuuFilterToolbar\", className)} {...props}>\n {toolbarItems}\n </Toolbar>\n );\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport {\n isMultiValueFilter,\n isNamedFilter,\n isSingleValueFilter,\n IFilterSuggestionProvider,\n SuggestionConsumer,\n} from \"@vuu-ui/vuu-filters\";\nimport { ToggleButton, ToolbarField } from \"@heswell/salt-lab\";\nimport { ReactElement } from \"react\";\nimport { FilterDropdown } from \"./FilterDropdown\";\nimport { FilterDropdownMultiSelect } from \"./FilterDropdownMultiSelect\";\n\nconst filterToControl = (\n filter: Filter,\n suggestionProvider: IFilterSuggestionProvider\n): ReactElement | ReactElement[] => {\n if (isNamedFilter(filter)) {\n return (\n <ToggleButton\n className=\"vuuToggleButton\"\n toggled={true}\n variant=\"secondary\"\n >\n {filter.name}\n </ToggleButton>\n );\n }\n if (isSingleValueFilter(filter)) {\n const { column, value } = filter;\n return (\n <ToolbarField\n className=\"vuuFilterDropdown\"\n key={column}\n label={column}\n labelPlacement=\"top\"\n >\n <FilterDropdown\n column={column}\n selected={value.toString()}\n selectionStrategy=\"default\"\n source={[value.toString()]}\n suggestionProvider={suggestionProvider}\n style={{ width: 100 }}\n />\n </ToolbarField>\n );\n }\n if (isMultiValueFilter(filter)) {\n const values = filter.values.map((v) => v.toString());\n return (\n <ToolbarField\n className=\"vuuFilterDropdown\"\n label={filter.column}\n key={filter.column}\n labelPlacement=\"top\"\n >\n <FilterDropdownMultiSelect\n column={filter.column}\n selected={values}\n source={values}\n suggestionProvider={suggestionProvider}\n style={{ width: 100 }}\n />\n </ToolbarField>\n );\n }\n return filter.filters.map((filter) =>\n filterToControl(filter, suggestionProvider)\n ) as ReactElement[];\n};\n\nexport interface FilterToolbarProps extends SuggestionConsumer {\n filter?: Filter;\n}\n\nexport const useFilterToolbar = ({\n filter,\n suggestionProvider,\n}: FilterToolbarProps) => {\n if (filter) {\n return filterToControl(filter, suggestionProvider);\n }\n return [];\n};\n", "import { Dropdown, DropdownProps } from \"@heswell/salt-lab\";\nimport { useCallback, useState } from \"react\";\nimport { IFilterSuggestionProvider } from \"../filter-input\";\n\nconst isString = (s: string | string[]): s is string => typeof s === \"string\";\n\nconst stripQuotes = <T extends string | string[]>(selected: T): T => {\n if (isString(selected)) {\n if (selected.startsWith('\"') && selected.endsWith('\"')) {\n return selected.slice(1, -1) as T;\n } else {\n return selected;\n }\n } else {\n return selected.map(stripQuotes) as T;\n }\n};\n\nexport interface FilterDropdownProps extends DropdownProps {\n column: string;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const FilterDropdown = ({\n column,\n selected: selectedProp,\n suggestionProvider,\n ...props\n}: FilterDropdownProps) => {\n const selected = selectedProp != null ? stripQuotes(selectedProp) : undefined;\n const initialValues = Array.isArray(selected)\n ? selected\n : selected != null\n ? [selected]\n : [];\n const [values, setValues] = useState<string[]>(initialValues);\n console.log({ initialValues });\n const handleOpenChange = useCallback(\n async (isOpen) => {\n if (isOpen) {\n const values = await suggestionProvider.getSuggestions(\"columnValue\", {\n columnName: column,\n });\n console.log({ values });\n setValues(values.map((suggestion) => suggestion.label));\n }\n },\n [column, suggestionProvider]\n );\n\n return (\n <Dropdown\n {...props}\n onOpenChange={handleOpenChange}\n selected={selected}\n source={values}\n />\n );\n};\n", "import { Dropdown, DropdownProps } from \"@heswell/salt-lab\";\nimport { useCallback, useState } from \"react\";\nimport { IFilterSuggestionProvider } from \"../filter-input\";\n\nconst isString = (s?: string | string[]): s is string => typeof s === \"string\";\n\nconst stripQuotes = <T extends string | string[]>(\n selected?: T\n): T | undefined => {\n if (selected === undefined) {\n return undefined;\n } else if (isString(selected)) {\n if (selected.startsWith('\"') && selected.endsWith('\"')) {\n return selected.slice(1, -1) as T;\n } else {\n return selected;\n }\n } else {\n return selected.map(stripQuotes) as T;\n }\n};\n\nexport interface FilterDropdownProps extends DropdownProps<string, \"multiple\"> {\n column: string;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const FilterDropdownMultiSelect = ({\n column,\n selected: selectedProp,\n suggestionProvider,\n ...props\n}: FilterDropdownProps) => {\n const selected = stripQuotes(selectedProp);\n const initialValues = Array.isArray(selected)\n ? selected\n : selected != null\n ? [selected]\n : [];\n const [values, setValues] = useState<string[]>(initialValues);\n const handleOpenChange = useCallback(\n async (isOpen) => {\n if (isOpen) {\n const values = await suggestionProvider.getSuggestions(\"columnValue\", {\n columnName: column,\n });\n console.log({ values });\n setValues(values.map((suggestion) => suggestion.label));\n }\n },\n [column, suggestionProvider]\n );\n\n return (\n <Dropdown<string, \"multiple\">\n {...props}\n onOpenChange={handleOpenChange}\n selected={selected}\n selectionStrategy=\"multiple\"\n source={values}\n />\n );\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data\";\nimport {\n AndFilter,\n Filter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport { parseFilter } from \"./filter-input/filter-language-parser/FilterParser\";\n\nconst filterPredicateMap = new Map<string, FilterPredicate>();\nconst filterReject = () => false;\n\nexport const getFilterPredicate = (\n columnMap: ColumnMap,\n filterQuery: string\n): FilterPredicate => {\n let predicate = filterPredicateMap.get(filterQuery);\n if (predicate) {\n return predicate;\n }\n // TODO we need to clear cache if columns change. How do we identify this :\n try {\n const filter = parseFilter(filterQuery);\n predicate = filterPredicate(columnMap, filter);\n filterPredicateMap.set(filterQuery, predicate);\n return predicate;\n } catch (err) {\n console.warn(\n `filter-evaluation-utils, failed to parse filter \"${filterQuery}\"`\n );\n return filterReject;\n }\n};\n\nexport function filterPredicate(\n columnMap: ColumnMap,\n filter: Filter\n): FilterPredicate {\n //TODO convert filter to include colIdx ratherthan colName, so we don't have to pass cols\n switch (filter.op) {\n case \"in\":\n return testInclude(columnMap, filter);\n case \"=\":\n return testEQ(columnMap, filter);\n case \">\":\n return testGT(columnMap, filter);\n case \">=\":\n return testGE(columnMap, filter);\n case \"<\":\n return testLT(columnMap, filter);\n case \"<=\":\n return testLE(columnMap, filter);\n case \"starts\":\n return testSW(columnMap, filter);\n case \"and\":\n return testAND(columnMap, filter as AndFilter);\n case \"or\":\n return testOR(columnMap, filter as OrFilter);\n default:\n console.log(`unrecognized filter type ${filter.op}`);\n return () => true;\n }\n}\n\nexport type FilterPredicate = (row: DataSourceRow) => boolean;\n\nconst testInclude = (\n columnMap: ColumnMap,\n filter: MultiValueFilterClause\n): FilterPredicate => {\n return (row) =>\n (filter.values as unknown[]).indexOf(row[columnMap[filter.column]]) !== -1;\n};\n\nconst testEQ = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] === filter.value;\n};\n\nconst testGT = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] > filter.value;\n};\nconst testGE = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] >= filter.value;\n};\n\nconst testLT = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] < filter.value;\n};\nconst testLE = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] <= filter.value;\n};\n\nconst testSW = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n const filterValue = filter.value as string;\n if (typeof filterValue !== \"string\") {\n throw Error(\"string filter applied to value of wrong type\");\n }\n return (row) => {\n const rowValue = row[columnMap[filter.column]];\n if (typeof rowValue !== \"string\") {\n throw Error(\"string filter applied to value of wrong type\");\n }\n return rowValue.toLowerCase().startsWith(filterValue.toLowerCase());\n };\n};\n\nconst testAND = (columnMap: ColumnMap, filter: AndFilter): FilterPredicate => {\n const filters = filter.filters.map((f1) => filterPredicate(columnMap, f1));\n return (row) => filters.every((fn) => fn(row));\n};\n\nfunction testOR(columnMap: ColumnMap, filter: OrFilter): FilterPredicate {\n const filters = filter.filters.map((f1) => filterPredicate(columnMap, f1));\n return (row) => filters.some((fn) => fn(row));\n}\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { extractFilterForColumn, partition } from \"@vuu-ui/vuu-utils\";\nimport {\n isAndFilter,\n isInFilter,\n isMultiClauseFilter,\n isMultiValueFilter,\n isOrFilter,\n isSingleValueFilter,\n} from \"./filterTypes\";\nimport {\n AndFilter,\n Filter,\n FilterClause,\n FilterCombinatorOp,\n} from \"@vuu-ui/vuu-filter-types\";\n\nexport const AND = \"and\";\nexport const EQUALS = \"=\";\nexport const GREATER_THAN = \">\";\nexport const LESS_THAN = \"<\";\nexport const OR = \"or\";\nexport const STARTS_WITH = \"starts\";\nexport const ENDS_WITH = \"ends\";\nexport const IN = \"in\";\n\nexport type FilterType =\n | \"and\"\n | \"=\"\n | \">\"\n | \">=\"\n | \"in\"\n | \"<=\"\n | \"<\"\n | \"NOT_IN\"\n | \"NOT_SW\"\n | \"or\"\n | \"SW\";\n\nexport const filterClauses = (\n filter: Filter | null,\n clauses: FilterClause[] = []\n) => {\n if (filter) {\n if (isMultiClauseFilter(filter)) {\n filter.filters.forEach((f) => clauses.push(...filterClauses(f)));\n } else {\n clauses.push(filter);\n }\n }\n return clauses;\n};\n\ntype AddFilterOptions = {\n combineWith: FilterCombinatorOp;\n};\n\nconst DEFAULT_ADD_FILTER_OPTS: AddFilterOptions = {\n combineWith: \"and\",\n};\n\nexport const addFilter = (\n existingFilter: Filter | undefined,\n filter: Filter,\n { combineWith = AND }: AddFilterOptions = DEFAULT_ADD_FILTER_OPTS\n): Filter | undefined => {\n if (includesNoValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the no-values filter\n } else {\n existingFilter = removeFilterForColumn(existingFilter, {\n name: filter.column,\n });\n }\n } else if (includesAllValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the all-values filter\n }\n return removeFilterForColumn(existingFilter, { name: filter.column ?? \"\" });\n }\n\n if (!existingFilter) {\n return filter;\n }\n if (!filter) {\n return existingFilter;\n }\n if (existingFilter.op === AND && filter.op === AND) {\n return {\n op: AND,\n filters: combine(existingFilter.filters, filter.filters),\n };\n }\n if (existingFilter.op === AND) {\n const filters = replaceOrInsert(existingFilter.filters, filter);\n return filters.length > 1 ? { op: AND, filters } : filters[0];\n }\n if (filter.op === AND) {\n return { op: AND, filters: filter.filters.concat(existingFilter) };\n }\n\n if (filterEquals(existingFilter, filter, true)) {\n return filter;\n }\n\n if (canMerge(existingFilter, filter)) {\n return merge(existingFilter, filter);\n }\n\n return { op: combineWith, filters: [existingFilter, filter] };\n};\n\nconst includesNoValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (isInFilter(filter) && filter.values.length === 0) {\n return true;\n }\n return isAndFilter(filter) && filter.filters.some((f) => includesNoValues(f));\n};\n\nconst filterValue = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nexport const filterAsQuery = (f: Filter): string => {\n if (isMultiClauseFilter(f)) {\n return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);\n } else if (isMultiValueFilter(f)) {\n return `${f.column} ${f.op} [${f.values.join(\",\")}]`;\n } else {\n return `${f.column} ${f.op} ${filterValue(f.value)}`;\n }\n};\n\ninterface CommonFilter {\n colName?: string;\n otherColFilters?: Filter[];\n mode?: any;\n value?: any;\n values?: any;\n op?: \"or\" | \"and\";\n column?: string;\n filters?: Filter[];\n}\n\nexport interface OtherFilter extends CommonFilter {\n type: FilterType;\n values?: any[];\n}\n\nconst includesAllValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (filter.op === STARTS_WITH && filter.value === \"\") {\n return true;\n }\n return filter.op === STARTS_WITH && filter.value === \"\";\n};\n\nconst replaceOrInsert = (filters: Filter[], filter: Filter) => {\n return filters.concat(filter);\n};\n\nconst merge = (f1: Filter, f2: Filter): Filter | undefined => {\n if (includesNoValues(f2)) {\n return f2;\n }\n if (isInFilter(f1) && isInFilter(f2)) {\n return {\n ...f1,\n values: [\n ...f1.values,\n ...(f2.values as any[]).filter(\n (v: string | number) => !(f1.values as any[]).includes(v)\n ),\n ],\n };\n } else if (isInFilter(f1) && f2.op === EQUALS) {\n return {\n ...f1,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: f1.values.concat([f2.value]),\n };\n } else if (f1.op === EQUALS && f2.op === EQUALS) {\n return {\n column: f1.column,\n op: IN,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: [f1.value, f2.value],\n };\n }\n return f2;\n};\n\nconst combine = (existingFilters: Filter[], replacementFilters: Filter[]) => {\n const equivalentType = ({ op: t1 }: Filter, { op: t2 }: Filter) => {\n return t1 === t2 || t1[0] === t2[0];\n };\n const replaces = (existingFilter: Filter, replacementFilter: Filter) => {\n return (\n existingFilter.column === replacementFilter.column &&\n equivalentType(existingFilter, replacementFilter)\n );\n };\n const stillApplicable = (existingFilter: Filter) =>\n replacementFilters.some((replacementFilter) =>\n replaces(existingFilter, replacementFilter)\n ) === false;\n return existingFilters.filter(stillApplicable).concat(replacementFilters);\n};\n\nexport const removeColumnFromFilter = (\n column: KeyedColumnDescriptor,\n filter: Filter\n): [Filter | undefined, string] => {\n if (isMultiClauseFilter(filter)) {\n const [clause1, clause2] = filter.filters;\n if (clause1.column === column.name) {\n return [clause2, filterAsQuery(clause2)];\n }\n if (clause2.column === column.name) {\n return [clause1, filterAsQuery(clause1)];\n }\n }\n return [undefined, \"\"];\n};\n\nexport const removeFilter = (sourceFilter: Filter, filterToRemove: Filter) => {\n if (filterEquals(sourceFilter, filterToRemove, true)) {\n return null;\n }\n if (sourceFilter.op !== AND) {\n throw Error(\n `removeFilter cannot remove ${JSON.stringify(\n filterToRemove\n )} from ${JSON.stringify(sourceFilter)}`\n );\n }\n const filters = sourceFilter.filters.filter(\n (f) => !filterEquals(f, filterToRemove)\n );\n return filters.length > 0 ? { type: AND, filters } : null;\n};\n\nexport const splitFilterOnColumn = (\n filter: Filter | null,\n columnName: string\n): [Filter | null, Filter | null] => {\n if (!filter) {\n return [null, null];\n }\n if (filter.column === columnName) {\n return [filter, null];\n }\n if (filter.op !== AND) {\n return [null, filter];\n }\n const [[columnFilter = null], filters] = partition(\n (filter as AndFilter).filters,\n (f) => f.column === columnName\n );\n return filters.length === 1\n ? [columnFilter, filters[0]]\n : [columnFilter, { op: AND, filters }];\n};\n\nexport const overrideColName = (filter: Filter, column: string): Filter => {\n if (isMultiClauseFilter(filter)) {\n return {\n op: filter.op,\n filters: filter.filters.map((f) => overrideColName(f, column)),\n };\n }\n return { ...filter, column };\n};\n\nexport const filterIncludesColumn = (\n filter: Filter,\n column: KeyedColumnDescriptor\n): boolean => {\n if (!filter) {\n return false;\n }\n const { op, column: filterColName } = filter;\n switch (op) {\n case AND:\n case OR:\n return (\n filter.filters != null &&\n filter.filters.some((f) => filterIncludesColumn(f, column))\n );\n default:\n return filterColName === column.name;\n }\n};\n\nconst removeFilterForColumn = (\n sourceFilter: Filter | undefined,\n column: ColumnDescriptor\n): Filter | undefined => {\n const colName = column.name;\n if (!sourceFilter) {\n return undefined;\n }\n if (sourceFilter.column === colName) {\n return undefined;\n }\n if (isAndFilter(sourceFilter) || isOrFilter(sourceFilter)) {\n const { op } = sourceFilter;\n const filters = sourceFilter.filters;\n const otherColFilters = filters.filter((f) => f.column !== colName);\n switch (otherColFilters.length) {\n case 0:\n return undefined;\n case 1:\n return otherColFilters[0];\n default:\n return { op, filters: otherColFilters };\n }\n }\n return sourceFilter;\n};\n\nconst canMerge = (f1: Filter, f2: Filter) =>\n f1.column === f2.column &&\n (f1.op === \"=\" || f1.op === \"in\") &&\n (f2.op === \"=\" || f2.op === \"in\");\n\nconst sameValues = <T>(arr1: T[], arr2: T[]) => {\n if (arr1 === arr2) {\n return true;\n }\n if (arr1.length === arr2.length) {\n const a = arr1.slice().sort();\n const b = arr2.slice().sort();\n return a.join(\"|\") === b.join(\"|\");\n }\n return false;\n};\n\nexport const filterEquals = (f1?: Filter, f2?: Filter, strict = false) => {\n if (!strict) {\n return true;\n }\n if (f1 && f2 && canMerge(f1, f2)) {\n return (\n f1.op === f2.op &&\n ((isSingleValueFilter(f1) &&\n isSingleValueFilter(f2) &&\n f1.value === f2.value) ||\n (isMultiValueFilter(f1) &&\n isMultiValueFilter(f2) &&\n sameValues(f1.values as any[], f2.values)))\n );\n }\n return false;\n};\n\nexport const updateFilter = (\n filter: Filter | undefined,\n newFilter: Filter | undefined,\n mode: \"add\" | \"replace\"\n): Filter | undefined => {\n if (filter && newFilter) {\n if (mode === \"replace\") {\n return newFilter;\n }\n if (filter.op === \"and\") {\n return {\n ...filter,\n filters: filter.filters.concat(newFilter),\n };\n }\n const { column: columnName } = newFilter;\n if (columnName) {\n const existingClause = newFilter.column\n ? extractFilterForColumn(filter, columnName)\n : undefined;\n if (existingClause && columnName) {\n // The filter already contains a clause for this column, replace\n // with the new clause\n const result = removeFilterForColumn(filter, { name: columnName });\n return updateFilter(result, newFilter, \"add\");\n }\n }\n return {\n op: \"and\",\n filters: [filter, newFilter],\n };\n }\n if (newFilter) {\n return newFilter;\n }\n return filter;\n};\n", "//TODO these are duplicated in vuu-utils, that shoudl probably be the righful source\nimport {\n AndFilter,\n Filter,\n MultiClauseFilter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"starts\",\n \"ends\",\n]);\n\n// convenience methods to check filter type\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (f?: Filter): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isFilterClause = (\n f?: Filter\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (f?: Filter): f is MultiValueFilterClause =>\n f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Filter): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (f: Filter): f is AndFilter => f.op === \"and\";\nexport const isOrFilter = (f: Filter): f is OrFilter => f.op === \"or\";\n\nexport function isMultiClauseFilter(f?: Filter): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n"],
5
- "mappings": "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",
6
- "names": ["EditorState", "EditorView", "cx", "parseFilter", "clearInput", "createState", "EditorState", "EditorView", "useCallback", "useRef", "useRef", "useCallback", "import_classnames", "useCallback", "jsx", "values", "Dropdown", "useCallback", "useState", "jsx", "isString", "stripQuotes", "values", "jsx", "isSingleValueFilter", "isMultiValueFilter", "filter", "jsx", "cx", "filterValue", "isSingleValueFilter", "isMultiValueFilter", "isMultiClauseFilter", "isMultiClauseFilter", "isMultiValueFilter", "isSingleValueFilter"]
3
+ "sources": ["../../../node_modules/classnames/index.js", "../../../packages/vuu-filters/src/column-filter/ColumnFilter.tsx", "../../../node_modules/clsx/dist/clsx.m.js", "../../../node_modules/@salt-ds/icons/dist-es/node_modules/style-inject/dist/style-inject.es.js", "../../../node_modules/@salt-ds/icons/dist-es/packages/icons/src/icon/Icon.css.js", "../../../node_modules/@salt-ds/icons/dist-es/packages/icons/src/src/icon/Icon.tsx", "../../../node_modules/@salt-ds/icons/dist-es/packages/icons/src/src/components/Delete.tsx", "../../../packages/vuu-filters/src/column-filter/RangeFilter.tsx", "../../../packages/vuu-filters/src/filter-utils.ts", "../../../packages/vuu-filters/src/filterTypes.ts", "../../../packages/vuu-filters/src/column-filter/utils.ts", "../../../packages/vuu-filters/src/column-filter/TypeaheadFilter.tsx", "../../../packages/vuu-filters/src/column-filter/ColumnListItem.tsx", "../../../packages/vuu-filters/src/column-filter/useColumnFilterStore.ts", "../../../packages/vuu-filters/src/filter-input/FilterInput.tsx", "../../../packages/vuu-filters/src/filter-input/useCodeMirrorEditor.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterLanguage.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/generated/filter-parser.js", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterTreeWalker.ts", "../../../packages/vuu-filters/src/filter-input/filter-language-parser/FilterParser.ts", "../../../packages/vuu-filters/src/filter-input/highlighting.ts", "../../../packages/vuu-filters/src/filter-input/theme.ts", "../../../packages/vuu-filters/src/filter-input/useFilterAutoComplete.ts", "../../../packages/vuu-filters/src/filter-input/useFilterSuggestionProvider.ts", "../../../packages/vuu-filters/src/filter-input/filterInfo.ts", "../../../packages/vuu-filters/src/filter-toolbar/FilterToolbar.tsx", "../../../packages/vuu-filters/src/filter-toolbar/useFilterToolbar.tsx", "../../../packages/vuu-filters/src/filter-toolbar/FilterDropdown.tsx", "../../../packages/vuu-filters/src/filter-toolbar/FilterDropdownMultiSelect.tsx", "../../../packages/vuu-filters/src/filter-evaluation-utils.ts"],
4
+ "sourcesContent": ["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { TypeaheadParams, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n Dropdown,\n Toolbar,\n ToolbarButton,\n ToolbarField,\n} from \"@heswell/salt-lab\";\nimport { Text } from \"@salt-ds/core\";\nimport { DeleteIcon } from \"@salt-ds/icons\";\nimport { HTMLAttributes } from \"react\";\nimport { RangeFilter } from \"./RangeFilter\";\nimport { TypeaheadFilter } from \"./TypeaheadFilter\";\nimport { ColumnListItem } from \"./ColumnListItem\";\nimport { useColumnFilterStore } from \"./useColumnFilterStore\";\n\ntype FilterPanelProps = HTMLAttributes<HTMLDivElement> & {\n table: VuuTable;\n columns: ColumnDescriptor[];\n onFilterSubmit: (filterQuery: string, filter?: Filter) => void;\n};\n\nexport const ColumnFilter = ({\n className,\n table,\n columns,\n onFilterSubmit,\n ...htmlAttributes\n}: FilterPanelProps) => {\n const {\n clear,\n onTypeaheadChange,\n onRangeChange,\n onSelectedColumnChange,\n selectedColumnName,\n rangeValue,\n typeaheadValue,\n } = useColumnFilterStore(onFilterSubmit);\n\n const getFilterComponent = () => {\n const defaultTypeaheadParams: TypeaheadParams = [table, selectedColumnName];\n const selectedColumnType = columns.find(\n (column) => column.name === selectedColumnName\n )?.serverDataType;\n\n switch (selectedColumnType) {\n case \"string\":\n case \"char\":\n return (\n <ToolbarField\n label=\"Start typing to select a filter\"\n labelPlacement=\"top\"\n >\n <TypeaheadFilter\n defaultTypeaheadParams={defaultTypeaheadParams}\n filterValues={typeaheadValue}\n onChange={onTypeaheadChange}\n />\n </ToolbarField>\n );\n case \"int\":\n case \"long\":\n case \"double\":\n return (\n <ToolbarField label=\"Select a range\" labelPlacement=\"top\">\n <RangeFilter\n defaultTypeaheadParams={defaultTypeaheadParams}\n filterValues={rangeValue}\n onChange={onRangeChange}\n />\n </ToolbarField>\n );\n default:\n return (\n <ToolbarField>\n <Text>Data type unsupported</Text>\n </ToolbarField>\n );\n }\n };\n\n return (\n <Toolbar\n {...htmlAttributes}\n style={{ alignItems: \"center\", height: \"36px\" }}\n >\n <ToolbarField\n label=\"Select a column to filter\"\n labelPlacement=\"top\"\n style={{ width: 180 }}\n >\n <Dropdown<ColumnDescriptor>\n source={columns}\n ListItem={ColumnListItem}\n itemToString={(column) => column.name}\n onSelectionChange={(_evt, column) => onSelectedColumnChange(column)}\n />\n </ToolbarField>\n {selectedColumnName && getFilterComponent()}\n <ToolbarButton onClick={clear}>\n <DeleteIcon />\n </ToolbarButton>\n </Toolbar>\n );\n};\n", "function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;", "function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n", "import styleInject from '../../../../node_modules/style-inject/dist/style-inject.es.js';\n\nvar css_248z = \"/* Style applied to the root element */\\n.saltIcon {\\n --icon-color: var(--saltIcon-color, var(--salt-text-secondary-foreground));\\n --icon-size-multiplier: var(--saltIcon-size-multiplier, 1);\\n --icon-base-size: var(--salt-size-icon-base, 12px);\\n /**\\n * Icon size will be the multiplier (an integer from the size prop) * the base size (set by the theme per density)\\n * Icons should never be smaller than 12px for readability so we've added a max() to enforce this\\n */\\n --icon-size: max(calc(var(--icon-base-size) * var(--icon-size-multiplier)), 12px);\\n}\\n\\n.saltIcon {\\n fill: var(--saltIcon-color, var(--icon-color));\\n display: inline-block;\\n margin: var(--saltIcon-margin, 0);\\n position: relative;\\n width: var(--icon-size);\\n height: var(--icon-size);\\n min-width: var(--icon-size);\\n min-height: var(--icon-size);\\n}\\n\\n.saltIcon:hover {\\n --icon-color: var(--saltIcon-color-hover, var(--salt-text-secondary-foreground));\\n}\\n\\n.saltIcon:active {\\n --icon-color: var(--saltIcon-color-active, var(--salt-text-secondary-foreground));\\n}\\n\";\nstyleInject(css_248z);\n\nexport { css_248z as default };\n//# sourceMappingURL=Icon.css.js.map\n", "import { forwardRef, SVGAttributes } from \"react\";\nimport { clsx } from \"clsx\";\n\nimport \"./Icon.css\";\n\n// Duplicate from core/util to avoid circular dependency\nexport const makePrefixer =\n (prefix: string): ((...names: string[]) => string) =>\n (...names: string[]): string =>\n [prefix, ...names].join(\"-\");\n\nconst withBaseName = makePrefixer(\"saltIcon\");\n\nexport interface IconProps extends SVGAttributes<SVGSVGElement> {\n /**\n * Multiplier for the base icon size. Should be a positive integer to conform to the rest of the design system.\n */\n size?: number;\n}\n\nexport const DEFAULT_ICON_SIZE = 1;\n\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(function Icon(\n { children, className, size = DEFAULT_ICON_SIZE, style: styleProp, ...rest },\n ref\n) {\n const style = {\n ...styleProp,\n \"--saltIcon-size-multiplier\": `${size}`,\n };\n\n return (\n <svg\n className={clsx(withBaseName(), className)}\n style={style}\n role=\"img\"\n {...rest}\n ref={ref}\n >\n <g aria-hidden>{children}</g>\n </svg>\n );\n});\n", "import { forwardRef } from \"react\";\n\nimport { Icon, IconProps } from \"../icon\";\n\nexport type DeleteIconProps = IconProps;\n\nexport const DeleteIcon = forwardRef<SVGSVGElement, DeleteIconProps>(\n function DeleteIcon(props: DeleteIconProps, ref) {\n return (\n <Icon\n data-testid=\"DeleteIcon\"\n aria-label=\"delete\"\n viewBox=\"0 0 12 12\"\n ref={ref}\n {...props}\n >\n <path d=\"M5 4v6H4V4h1Zm2 0v6H6V4h1Z\" />\n <path\n fillRule=\"evenodd\"\n d=\"M4 0a1 1 0 0 0-1 1v1H0v1h1v7a2 2 0 0 0 2 2h5.25A1.75 1.75 0 0 0 10 10.25V3h1V2H8V1a1 1 0 0 0-1-1H4Zm5 3H2v7a1 1 0 0 0 1 1h5.25a.75.75 0 0 0 .75-.75V3ZM7 2H4v-.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5V2Z\"\n clipRule=\"evenodd\"\n />\n </Icon>\n );\n }\n);\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { TypeaheadParams } from \"@vuu-ui/vuu-protocol-types\";\nimport { Input, ToolbarField } from \"@heswell/salt-lab\";\nimport { getRangeFilter } from \"./utils\";\n\nexport type IRange = {\n start?: number;\n end?: number;\n};\n\ntype RangeFilterProps = {\n defaultTypeaheadParams: TypeaheadParams;\n filterValues: IRange | undefined;\n onChange: (newValues: IRange, filter?: Filter) => void;\n};\n\nexport const RangeFilter = ({\n defaultTypeaheadParams,\n filterValues,\n onChange,\n}: RangeFilterProps) => {\n const columnName = defaultTypeaheadParams[1];\n\n const startChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = parseFloat(e.target.value);\n const newRange = {\n start: isNaN(value) ? undefined : value,\n end: filterValues?.end,\n };\n const filter = getRangeFilter(columnName, newRange.start, newRange.end);\n onChange(newRange, filter);\n };\n\n const endChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = parseFloat(e.target.value);\n const newRange = {\n start: filterValues?.start,\n end: isNaN(value) ? undefined : value,\n };\n const filter = getRangeFilter(columnName, newRange.start, newRange.end);\n onChange(newRange, filter);\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"row\" }}>\n <ToolbarField label=\"From\">\n <Input\n onChange={startChangeHandler}\n value={filterValues?.start?.toString() || \"\"}\n type=\"number\"\n />\n </ToolbarField>\n <ToolbarField label=\"To\">\n <Input\n onChange={endChangeHandler}\n value={filterValues?.end?.toString() || \"\"}\n type=\"number\"\n />\n </ToolbarField>\n </div>\n );\n};\n", "import { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { extractFilterForColumn, partition } from \"@vuu-ui/vuu-utils\";\nimport {\n isAndFilter,\n isInFilter,\n isMultiClauseFilter,\n isMultiValueFilter,\n isOrFilter,\n isSingleValueFilter,\n} from \"./filterTypes\";\nimport {\n AndFilter,\n Filter,\n FilterClause,\n FilterCombinatorOp,\n} from \"@vuu-ui/vuu-filter-types\";\n\nexport const AND = \"and\";\nexport const EQUALS = \"=\";\nexport const GREATER_THAN = \">\";\nexport const LESS_THAN = \"<\";\nexport const OR = \"or\";\nexport const STARTS_WITH = \"starts\";\nexport const ENDS_WITH = \"ends\";\nexport const IN = \"in\";\n\nexport type FilterType =\n | \"and\"\n | \"=\"\n | \">\"\n | \">=\"\n | \"in\"\n | \"<=\"\n | \"<\"\n | \"NOT_IN\"\n | \"NOT_SW\"\n | \"or\"\n | \"SW\";\n\nexport const filterClauses = (\n filter: Filter | null,\n clauses: FilterClause[] = []\n) => {\n if (filter) {\n if (isMultiClauseFilter(filter)) {\n filter.filters.forEach((f) => clauses.push(...filterClauses(f)));\n } else {\n clauses.push(filter);\n }\n }\n return clauses;\n};\n\ntype AddFilterOptions = {\n combineWith: FilterCombinatorOp;\n};\n\nconst DEFAULT_ADD_FILTER_OPTS: AddFilterOptions = {\n combineWith: \"and\",\n};\n\nexport const addFilter = (\n existingFilter: Filter | undefined,\n filter: Filter,\n { combineWith = AND }: AddFilterOptions = DEFAULT_ADD_FILTER_OPTS\n): Filter | undefined => {\n if (includesNoValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the no-values filter\n } else {\n existingFilter = removeFilterForColumn(existingFilter, {\n name: filter.column,\n });\n }\n } else if (includesAllValues(filter)) {\n if (isMultiClauseFilter(filter)) {\n // TODO identify the column that is contributing the all-values filter\n }\n return removeFilterForColumn(existingFilter, { name: filter.column ?? \"\" });\n }\n\n if (!existingFilter) {\n return filter;\n }\n if (!filter) {\n return existingFilter;\n }\n if (existingFilter.op === AND && filter.op === AND) {\n return {\n op: AND,\n filters: combine(existingFilter.filters, filter.filters),\n };\n }\n if (existingFilter.op === AND) {\n const filters = replaceOrInsert(existingFilter.filters, filter);\n return filters.length > 1 ? { op: AND, filters } : filters[0];\n }\n if (filter.op === AND) {\n return { op: AND, filters: filter.filters.concat(existingFilter) };\n }\n\n if (filterEquals(existingFilter, filter, true)) {\n return filter;\n }\n\n if (canMerge(existingFilter, filter)) {\n return merge(existingFilter, filter);\n }\n\n return { op: combineWith, filters: [existingFilter, filter] };\n};\n\nconst includesNoValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (isInFilter(filter) && filter.values.length === 0) {\n return true;\n }\n return isAndFilter(filter) && filter.filters.some((f) => includesNoValues(f));\n};\n\nconst filterValue = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nexport const filterAsQuery = (f: Filter): string => {\n if (isMultiClauseFilter(f)) {\n return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);\n } else if (isMultiValueFilter(f)) {\n return `${f.column} ${f.op} [${f.values.join(\",\")}]`;\n } else {\n return `${f.column} ${f.op} ${filterValue(f.value)}`;\n }\n};\n\ninterface CommonFilter {\n colName?: string;\n otherColFilters?: Filter[];\n mode?: any;\n value?: any;\n values?: any;\n op?: \"or\" | \"and\";\n column?: string;\n filters?: Filter[];\n}\n\nexport interface OtherFilter extends CommonFilter {\n type: FilterType;\n values?: any[];\n}\n\nconst includesAllValues = (filter?: Filter | null): boolean => {\n if (!filter) {\n return false;\n }\n if (filter.op === STARTS_WITH && filter.value === \"\") {\n return true;\n }\n return filter.op === STARTS_WITH && filter.value === \"\";\n};\n\nconst replaceOrInsert = (filters: Filter[], filter: Filter) => {\n return filters.concat(filter);\n};\n\nconst merge = (f1: Filter, f2: Filter): Filter | undefined => {\n if (includesNoValues(f2)) {\n return f2;\n }\n if (isInFilter(f1) && isInFilter(f2)) {\n return {\n ...f1,\n values: [\n ...f1.values,\n ...(f2.values as any[]).filter(\n (v: string | number) => !(f1.values as any[]).includes(v)\n ),\n ],\n };\n } else if (isInFilter(f1) && f2.op === EQUALS) {\n return {\n ...f1,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: f1.values.concat([f2.value]),\n };\n } else if (f1.op === EQUALS && f2.op === EQUALS) {\n return {\n column: f1.column,\n op: IN,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n values: [f1.value, f2.value],\n };\n }\n return f2;\n};\n\nconst combine = (existingFilters: Filter[], replacementFilters: Filter[]) => {\n const equivalentType = ({ op: t1 }: Filter, { op: t2 }: Filter) => {\n return t1 === t2 || t1[0] === t2[0];\n };\n const replaces = (existingFilter: Filter, replacementFilter: Filter) => {\n return (\n existingFilter.column === replacementFilter.column &&\n equivalentType(existingFilter, replacementFilter)\n );\n };\n const stillApplicable = (existingFilter: Filter) =>\n replacementFilters.some((replacementFilter) =>\n replaces(existingFilter, replacementFilter)\n ) === false;\n return existingFilters.filter(stillApplicable).concat(replacementFilters);\n};\n\nexport const removeColumnFromFilter = (\n column: KeyedColumnDescriptor,\n filter: Filter\n): [Filter | undefined, string] => {\n if (isMultiClauseFilter(filter)) {\n const [clause1, clause2] = filter.filters;\n if (clause1.column === column.name) {\n return [clause2, filterAsQuery(clause2)];\n }\n if (clause2.column === column.name) {\n return [clause1, filterAsQuery(clause1)];\n }\n }\n return [undefined, \"\"];\n};\n\nexport const removeFilter = (sourceFilter: Filter, filterToRemove: Filter) => {\n if (filterEquals(sourceFilter, filterToRemove, true)) {\n return null;\n }\n if (sourceFilter.op !== AND) {\n throw Error(\n `removeFilter cannot remove ${JSON.stringify(\n filterToRemove\n )} from ${JSON.stringify(sourceFilter)}`\n );\n }\n const filters = sourceFilter.filters.filter(\n (f) => !filterEquals(f, filterToRemove)\n );\n return filters.length > 0 ? { type: AND, filters } : null;\n};\n\nexport const splitFilterOnColumn = (\n filter: Filter | null,\n columnName: string\n): [Filter | null, Filter | null] => {\n if (!filter) {\n return [null, null];\n }\n if (filter.column === columnName) {\n return [filter, null];\n }\n if (filter.op !== AND) {\n return [null, filter];\n }\n const [[columnFilter = null], filters] = partition(\n (filter as AndFilter).filters,\n (f) => f.column === columnName\n );\n return filters.length === 1\n ? [columnFilter, filters[0]]\n : [columnFilter, { op: AND, filters }];\n};\n\nexport const overrideColName = (filter: Filter, column: string): Filter => {\n if (isMultiClauseFilter(filter)) {\n return {\n op: filter.op,\n filters: filter.filters.map((f) => overrideColName(f, column)),\n };\n }\n return { ...filter, column };\n};\n\nexport const filterIncludesColumn = (\n filter: Filter,\n column: ColumnDescriptor\n): boolean => {\n if (!filter) {\n return false;\n }\n const { op, column: filterColName } = filter;\n switch (op) {\n case AND:\n case OR:\n return (\n filter.filters != null &&\n filter.filters.some((f) => filterIncludesColumn(f, column))\n );\n default:\n return filterColName === column.name;\n }\n};\n\nconst removeFilterForColumn = (\n sourceFilter: Filter | undefined,\n column: ColumnDescriptor\n): Filter | undefined => {\n const colName = column.name;\n if (!sourceFilter) {\n return undefined;\n }\n if (sourceFilter.column === colName) {\n return undefined;\n }\n if (isAndFilter(sourceFilter) || isOrFilter(sourceFilter)) {\n const { op } = sourceFilter;\n const filters = sourceFilter.filters;\n const otherColFilters = filters.filter((f) => f.column !== colName);\n switch (otherColFilters.length) {\n case 0:\n return undefined;\n case 1:\n return otherColFilters[0];\n default:\n return { op, filters: otherColFilters };\n }\n }\n return sourceFilter;\n};\n\nconst canMerge = (f1: Filter, f2: Filter) =>\n f1.column === f2.column &&\n (f1.op === \"=\" || f1.op === \"in\") &&\n (f2.op === \"=\" || f2.op === \"in\");\n\nconst sameValues = <T>(arr1: T[], arr2: T[]) => {\n if (arr1 === arr2) {\n return true;\n }\n if (arr1.length === arr2.length) {\n const a = arr1.slice().sort();\n const b = arr2.slice().sort();\n return a.join(\"|\") === b.join(\"|\");\n }\n return false;\n};\n\nexport const filterEquals = (f1?: Filter, f2?: Filter, strict = false) => {\n if (!strict) {\n return true;\n }\n if (f1 && f2 && canMerge(f1, f2)) {\n return (\n f1.op === f2.op &&\n ((isSingleValueFilter(f1) &&\n isSingleValueFilter(f2) &&\n f1.value === f2.value) ||\n (isMultiValueFilter(f1) &&\n isMultiValueFilter(f2) &&\n sameValues(f1.values as any[], f2.values)))\n );\n }\n return false;\n};\n\nexport const updateFilter = (\n filter: Filter | undefined,\n newFilter: Filter | undefined,\n mode: \"add\" | \"replace\"\n): Filter | undefined => {\n if (filter && newFilter) {\n if (mode === \"replace\") {\n return newFilter;\n }\n if (filter.op === \"and\") {\n return {\n ...filter,\n filters: filter.filters.concat(newFilter),\n };\n }\n const { column: columnName } = newFilter;\n if (columnName) {\n const existingClause = newFilter.column\n ? extractFilterForColumn(filter, columnName)\n : undefined;\n if (existingClause && columnName) {\n // The filter already contains a clause for this column, replace\n // with the new clause\n const result = removeFilterForColumn(filter, { name: columnName });\n return updateFilter(result, newFilter, \"add\");\n }\n }\n return {\n op: \"and\",\n filters: [filter, newFilter],\n };\n }\n if (newFilter) {\n return newFilter;\n }\n return filter;\n};\n", "//TODO these are duplicated in vuu-utils, that shoudl probably be the righful source\nimport {\n AndFilter,\n Filter,\n MultiClauseFilter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"starts\",\n \"ends\",\n]);\n\n// convenience methods to check filter type\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (f?: Filter): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isFilterClause = (\n f?: Filter\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (f?: Filter): f is MultiValueFilterClause =>\n f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Filter): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (f: Filter): f is AndFilter => f.op === \"and\";\nexport const isOrFilter = (f: Filter): f is OrFilter => f.op === \"or\";\n\nexport function isMultiClauseFilter(f?: Filter): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { addFilter } from \"../filter-utils\";\n\nexport const isStartsWithValue = (value: string) => /\\.\\.\\.$/.test(value); // Does the value end in elipsis\n\nexport const getTypeaheadFilter = (\n column: string,\n filterValues: string[],\n isStartsWithFilter?: boolean\n): Filter | undefined => {\n if (filterValues.length === 0) {\n return undefined;\n }\n\n if (isStartsWithFilter) {\n // multiple starts with filters not currently supported\n const startsWith = filterValues[0].substring(0, filterValues[0].length - 3);\n return {\n column,\n op: \"starts\",\n value: `\"${startsWith}\"`,\n };\n }\n\n return {\n column,\n op: \"in\",\n values: filterValues.map((value) => `\"${value}\"`),\n };\n};\n\nexport const getRangeFilter = (\n column: string,\n startValue?: number,\n endValue?: number\n): Filter | undefined => {\n const startFilter: Filter | undefined =\n startValue === undefined\n ? undefined\n : { column, op: \">\", value: startValue - 1 };\n\n const endFilter: Filter | undefined =\n endValue === undefined\n ? undefined\n : { column, op: \"<\", value: endValue + 1 };\n\n if (endFilter === undefined) return startFilter;\n return addFilter(startFilter, endFilter, { combineWith: \"and\" });\n};\n", "import { ChangeEventHandler, useCallback, useEffect, useState } from \"react\";\nimport { useTypeaheadSuggestions } from \"@vuu-ui/vuu-data\";\nimport { TypeaheadParams } from \"@vuu-ui/vuu-protocol-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { ComboBoxDeprecated } from \"@heswell/salt-lab\";\nimport { getTypeaheadFilter, isStartsWithValue } from \"./utils\";\n\nexport type TypeaheadFilterProps = {\n defaultTypeaheadParams: TypeaheadParams;\n onChange: (newValues: string[], filter?: Filter) => void;\n filterValues?: string[];\n};\n\nexport const TypeaheadFilter = ({\n defaultTypeaheadParams,\n filterValues = [],\n onChange: onFilterChange,\n}: TypeaheadFilterProps) => {\n const [tableName, columnName] = defaultTypeaheadParams;\n const [searchValue, setSearchValue] = useState(\"\");\n const [typeaheadValues, setTypeaheadValues] = useState<string[]>([]);\n const getSuggestions = useTypeaheadSuggestions();\n\n useEffect(() => {\n const params: TypeaheadParams = searchValue\n ? [tableName, columnName, searchValue]\n : defaultTypeaheadParams;\n\n let isSubscribed = true;\n getSuggestions(params).then((options) => {\n if (!isSubscribed) {\n return;\n }\n if (isStartsWithValue(filterValues[0])) {\n options.unshift(filterValues[0]);\n }\n if (searchValue) {\n options.unshift(`${searchValue}...`);\n }\n options.concat(filterValues);\n setTypeaheadValues(options);\n });\n\n // Avoid memory leak\n return () => {\n isSubscribed = false;\n };\n }, [\n filterValues,\n searchValue,\n columnName,\n tableName,\n getSuggestions,\n defaultTypeaheadParams,\n ]);\n\n const onInputChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (evt) => {\n const value = evt.target.value;\n setSearchValue(value);\n },\n []\n );\n\n const onSelectionChange = useCallback(\n (_evt, selected: string[]) => {\n setSearchValue(\"\");\n if (selected === null) return;\n\n if (selected.some(isStartsWithValue)) {\n // Selecting a startsWith option removed other selections\n selected = selected.filter(isStartsWithValue).slice(-1);\n }\n\n const filter = getTypeaheadFilter(\n columnName,\n selected,\n isStartsWithValue(selected[0])\n );\n onFilterChange(selected, filter);\n },\n [columnName, onFilterChange]\n );\n\n return (\n <ComboBoxDeprecated\n key={columnName}\n multiSelect\n onInputChange={onInputChange}\n onChange={onSelectionChange}\n source={typeaheadValues}\n style={{ minWidth: 200 }}\n inputValue={searchValue}\n selectedItem={filterValues}\n />\n );\n};\n", "import { memo } from \"react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n Highlighter,\n ListItem,\n ListItemProps,\n ListItemType,\n} from \"@heswell/salt-lab\";\n\nexport const ColumnListItem: ListItemType<ColumnDescriptor> = (props) => {\n return <MemoColumnItem {...props} />;\n};\n\nconst MemoColumnItem = memo(function MemoizedItem({\n item,\n itemTextHighlightPattern,\n ...restProps\n}: ListItemProps<ColumnDescriptor>) {\n return (\n <ListItem {...restProps}>\n <span style={{ marginLeft: 10 }}>\n <Highlighter\n matchPattern={itemTextHighlightPattern}\n text={item?.name}\n />\n </span>\n </ListItem>\n );\n});\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { useCallback, useState } from \"react\";\nimport { addFilter, AND, filterAsQuery } from \"../filter-utils\";\nimport { IRange } from \"./RangeFilter\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\n\ntype SavedValue<T extends string[] | IRange> = { column: string; value: T };\ntype SavedFilter = { column: string; filter: Filter | undefined };\n\n// Adds to or replaces an array value based on the chosen key of T\nconst addOrReplace = <T>(array: T[], newValue: T, key: keyof T): T[] =>\n array.filter((oldValue) => oldValue[key] !== newValue[key]).concat(newValue);\n\nexport const useColumnFilterStore = (\n onFilterSubmit: (filterQuery: string, filter?: Filter) => void\n) => {\n const [selectedColumnName, setSelectedColumnName] = useState(\"\");\n const [savedFilters, setSavedFilters] = useState<SavedFilter[]>([]);\n const [rangeValues, setRangeValues] = useState<SavedValue<IRange>[]>([]);\n const [typeaheadValues, setTypeaheadValues] = useState<\n SavedValue<string[]>[]\n >([]);\n\n const clear = () => {\n setSelectedColumnName(\"\");\n setRangeValues([]);\n setTypeaheadValues([]);\n setSavedFilters([]);\n onFilterSubmit(\"\");\n };\n\n const updateFilters = useCallback(\n (newFilter?: Filter) => {\n const newSavedFilters = addOrReplace(\n savedFilters,\n { column: selectedColumnName, filter: newFilter },\n \"column\"\n );\n setSavedFilters(newSavedFilters);\n\n const combinedFilter = newSavedFilters\n .map((x) => x.filter)\n .reduce((prev, filter) => {\n if (filter === undefined) return prev;\n return addFilter(prev, filter, { combineWith: AND });\n }, undefined);\n\n const query =\n combinedFilter === undefined ? \"\" : filterAsQuery(combinedFilter);\n onFilterSubmit(query, combinedFilter);\n },\n [selectedColumnName, onFilterSubmit, savedFilters]\n );\n\n const onTypeaheadChange = useCallback(\n (newValues: string[], newFilter?: Filter) => {\n setTypeaheadValues(\n addOrReplace(\n typeaheadValues,\n { column: selectedColumnName, value: newValues },\n \"column\"\n )\n );\n updateFilters(newFilter);\n },\n [selectedColumnName, typeaheadValues, updateFilters]\n );\n\n const onRangeChange = useCallback(\n (newValues: IRange, newFilter?: Filter) => {\n setRangeValues(\n addOrReplace(\n rangeValues,\n { column: selectedColumnName, value: newValues },\n \"column\"\n )\n );\n updateFilters(newFilter);\n },\n [selectedColumnName, rangeValues, updateFilters]\n );\n\n const onSelectedColumnChange = useCallback(\n (column: ColumnDescriptor | null) =>\n setSelectedColumnName(column?.name || \"\"),\n []\n );\n\n const rangeValue = rangeValues.filter(\n (v) => v.column === selectedColumnName\n )[0]?.value;\n\n const typeaheadValue = typeaheadValues.filter(\n (v) => v.column === selectedColumnName\n )[0]?.value;\n\n return {\n clear,\n selectedColumnName,\n rangeValue,\n typeaheadValue,\n onSelectedColumnChange,\n onRangeChange,\n onTypeaheadChange,\n };\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { Button } from \"@salt-ds/core\";\nimport { HTMLAttributes } from \"react\";\nimport {\n filterSubmissionHandler,\n SuggestionConsumer,\n useCodeMirrorEditor,\n} from \"./useCodeMirrorEditor\";\n\nimport \"./FilterInput.css\";\n\nconst classBase = \"vuuFilterInput\";\n\nexport interface FilterInputProps\n extends SuggestionConsumer,\n HTMLAttributes<HTMLDivElement> {\n iconName?: string;\n existingFilter?: Filter;\n namedFilters?: Map<string, string>;\n onSubmitFilter?: filterSubmissionHandler;\n}\n\nexport const FilterInput = ({\n existingFilter,\n iconName = \"filter\",\n namedFilters,\n onSubmitFilter,\n suggestionProvider,\n ...props\n}: FilterInputProps) => {\n const { editorRef, clearInput } = useCodeMirrorEditor({\n existingFilter,\n onSubmitFilter,\n suggestionProvider,\n });\n\n return (\n <div {...props} className={classBase}>\n <Button\n className={`${classBase}-FilterButton`}\n data-icon={iconName}\n tabIndex={-1}\n />\n <div className={`${classBase}-Editor`} ref={editorRef} />\n <Button\n className={`${classBase}-ClearButton`}\n data-icon=\"close-circle\"\n onClick={clearInput}\n />\n </div>\n );\n};\n", "import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n VuuCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport cx from \"classnames\";\nimport { MutableRefObject, useEffect, useMemo, useRef } from \"react\";\nimport { filterLanguageSupport } from \"./filter-language-parser\";\nimport { walkTree } from \"./filter-language-parser/FilterTreeWalker\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n FilterSubmissionMode,\n useAutoComplete,\n} from \"./useFilterAutoComplete\";\nimport { FilterSaveOptions } from \"./useFilterSuggestionProvider\";\n\nexport type SuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"operator\"\n | \"save\"\n | \"name\";\n\nexport interface FilterSuggestionOptions {\n quoted?: boolean;\n columnName?: string;\n existingFilter?: Filter;\n filterName?: string;\n onSubmit?: () => void;\n operator?: string;\n startsWith?: string;\n selection?: string[];\n}\n\nexport type getFilterSuggestionsType = (\n suggestionType: SuggestionType,\n options?: FilterSuggestionOptions\n) => Promise<Completion[]>;\n\nexport interface IFilterSuggestionProvider {\n getSuggestions: getFilterSuggestionsType;\n isPartialMatch: (\n valueType: SuggestionType,\n columnName?: string,\n text?: string | undefined\n ) => Promise<boolean>;\n}\n\nexport interface SuggestionConsumer {\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (completion: VuuCompletion) => {\n return cx(\"vuuSuggestion\", {\n vuuIllustration: completion.isIllustration,\n });\n};\n\nconst stripName = (filterQuery: string) => {\n const pos = filterQuery.lastIndexOf(\" as \");\n if (pos !== -1) {\n return filterQuery.slice(0, pos);\n } else {\n return filterQuery;\n }\n};\n\nconst noop = () => console.log(\"noooop\");\n\nexport type filterSubmissionHandler = (\n filter: Filter | undefined,\n filterQuery: string,\n mode?: FilterSubmissionMode,\n filterName?: string\n) => void;\n\nexport interface CodeMirrorEditorProps {\n existingFilter?: Filter;\n onSubmitFilter?: filterSubmissionHandler;\n saveOptions?: FilterSaveOptions;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const useCodeMirrorEditor = ({\n existingFilter,\n onSubmitFilter,\n suggestionProvider,\n}: CodeMirrorEditorProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmit = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useAutoComplete(\n suggestionProvider,\n onSubmit,\n existingFilter\n );\n\n const [createState, clearInput] = useMemo(() => {\n const parseFilter = ():\n | [Filter, string, string | undefined]\n | [undefined, \"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const filter = walkTree(tree, source) as Filter;\n return [filter, stripName(source), filter.name];\n } else {\n return [undefined, \"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitFilterAndClearInput = (mode?: FilterSubmissionMode) => {\n const [filter, filterQuery, filterName] = parseFilter();\n onSubmitFilter?.(filter, filterQuery, mode, filterName);\n clearInput();\n };\n\n const submitFilter = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n submitFilterAndClearInput();\n return true;\n },\n },\n ]);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: \"\",\n extensions: [\n minimalSetup,\n autocompletion({\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n filterLanguageSupport(),\n keymap.of(defaultKeymap),\n submitFilter(\"Ctrl-Enter\"),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n }\n }),\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmit.current = (mode?: FilterSubmissionMode) => {\n submitFilterAndClearInput(mode);\n // TODO refocu sthe editor\n setTimeout(() => {\n getView(viewRef).focus();\n }, 100);\n };\n\n return [createState, clearInput];\n }, [completionFn, onSubmitFilter]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n return { editorRef, clearInput };\n};\n", "import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/filter-parser\";\n\nconst filterLanguage = LRLanguage.define({\n name: \"VuuFilterQuery\",\n parser: parser.configure({\n props: [\n styleTags({\n Identifier: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n }),\n});\n\nexport const filterLanguageSupport = () => {\n return new LanguageSupport(filterLanguage);\n};\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@vuu-ui/vuu-codemirror\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"%QOVQPOOOOQO'#C_'#C_O_QQO'#C^OOQO'#DO'#DOOvQQO'#C|OOQO'#DR'#DROVQPO'#CuOOQO'#C}'#C}QOQPOOOOQO'#C`'#C`O!UQQO,58xO!dQPO,59VOVQPO,59]OVQPO,59_O!iQPO,59hO!nQQO,59aOOQO'#DQ'#DQOOQO1G.d1G.dO!UQQO1G.qO!yQQO1G.wOOQO1G.y1G.yOOQO'#Cw'#CwOOQO1G/S1G/SOOQO1G.{1G.{O#[QPO'#CnO#dQPO7+$]O!UQQO'#CxO#iQPO,59YOOQO<<Gw<<GwOOQO,59d,59dOOQO-E6v-E6v\",\n stateData: \"#q~OoOS~OsPOvUO~OTXOUXOVXOWXOXXOYXO`ZO~Of[Oh]Oj^OmpX~OZ`O[`O]`O^`O~OabO~OseO~Of[Oh]OwgO~Oh]Ofeijeimeiwei~OcjOdbX~OdlO~OcjOdba~O\",\n goto: \"#YvPPw}!TPPPPPPPPPPwPP!WPP!ZP!ZP!aP!g!jPPP!p!s!aP#P!aXROU[]XQOU[]RYQRibXTOU[]XVOU[]Rf^QkhRnkRWOQSOQ_UQc[Rd]QaYQhbRmj\",\n nodeNames: \"\u26A0 Filter ColumnValueExpression Column Operator Eq NotEq Gt Lt Starts Ends Number String True False ColumnSetExpression In LBrack Values Comma RBrack AndExpression And OrExpression Or ParenthesizedExpression As FilterName\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \"6p~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$j|}$o!O!P$t!Q![%S!^!_%_!_!`%d!`!a%i!c!}%n!}#O&V#P#Q&[#R#S%n#T#U&a#U#X%n#X#Y(w#Y#Z+]#Z#]%n#]#^.]#^#c%n#c#d/e#d#g%n#g#h0m#h#i4[#i#o%n~#USo~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOU~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_O[~~$bP;=`<%l#m~$jOv~~$oOw~~$tOc~~$wP!Q![$z~%PPZ~!Q![$z~%XQZ~!O!P$t!Q![%S~%dOW~~%iOT~~%nOV~P%sUsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n~&[Oa~~&aOd~R&fYsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c'U#c#g%n#g#h(^#h#o%nR'ZWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X's#X#o%nR'zUfQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(eUjQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c)f#c#o%nR)kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X*T#X#o%nR*YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h*r#h#o%nR*yUYQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR+bVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U+w#U#o%nR+|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#`%n#`#a,f#a#o%nR,kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h-T#h#o%nR-YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y-r#Y#o%nR-yU^QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR.bWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c.z#c#o%nR/RU`QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR/jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g0S#g#o%nR0ZUhQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR0rWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i1[#i#o%nR1aVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U1v#U#o%nR1{WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g2e#g#o%nR2jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i3S#i#o%nR3XWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h3q#h#o%nR3xUXQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR4aWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g4y#g#o%nR5OWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#i%n#i#j5h#j#o%nR5mWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y6V#Y#o%nR6^U]QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n\",\n tokenizers: [0, 1],\n topRules: {\"Filter\":[0,1]},\n tokenPrec: 0\n})\n", "import { Tree } from \"@lezer/common\";\nimport {\n Filter,\n FilterCombinatorOp,\n MultipleValueFilterClauseOp,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n isMultiClauseFilter,\n isMultiValueFilter,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\n\nclass FilterExpression {\n public name: string | undefined;\n #filter: Partial<Filter> | undefined = undefined;\n\n setFilterCombinatorOp(op: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter) && filter.op === op) {\n return;\n } else {\n this.#filter = {\n op: op as FilterCombinatorOp,\n filters: [this.#filter as Filter],\n };\n }\n }\n\n add(filter: Partial<Filter>) {\n if (this.#filter === undefined) {\n this.#filter = filter;\n } else if (isMultiClauseFilter(this.#filter)) {\n this.#filter.filters.push(filter as Filter);\n } else {\n throw Error(`Invalid filter passed to FilterExpression`);\n }\n }\n\n setColumn(column: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setColumn(column, target);\n }\n } else if (filter) {\n filter.column = column;\n }\n }\n setOp(value: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setOp(value, target);\n }\n } else if (filter) {\n filter.op = value as\n | SingleValueFilterClauseOp\n | MultipleValueFilterClauseOp;\n }\n }\n setValue(value: string | number | boolean, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setValue(value, target);\n }\n } else if (isMultiValueFilter(filter)) {\n filter.values ??= [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n filter.values.push(value);\n } else if (isSingleValueFilter(filter)) {\n filter.value = value;\n }\n }\n\n toJSON(filter = this.#filter) {\n if (this.name) {\n return {\n ...filter,\n name: this.name,\n };\n } else {\n return filter;\n }\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const filterExpression = new FilterExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"ColumnValueExpression\":\n filterExpression.add({});\n break;\n case \"ColumnSetExpression\":\n filterExpression.add({ op: \"in\" });\n break;\n\n case \"Or\":\n case \"And\":\n filterExpression.setFilterCombinatorOp(source.substring(from, to));\n break;\n\n case \"Column\":\n filterExpression.setColumn(source.substring(from, to));\n break;\n\n case \"Operator\":\n filterExpression.setOp(source.substring(from, to));\n break;\n\n case \"String\":\n filterExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n filterExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"True\":\n filterExpression.setValue(true);\n break;\n\n case \"False\":\n filterExpression.setValue(false);\n break;\n\n case \"FilterName\":\n filterExpression.name = source.substring(from, to);\n break;\n\n default:\n }\n } while (cursor.next());\n\n return filterExpression.toJSON();\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { parser } from \"./generated/filter-parser\";\nimport { walkTree } from \"./FilterTreeWalker\";\n\nconst strictParser = parser.configure({ strict: true });\n\nexport const parseFilter = (filterQuery: string): Filter => {\n const parseTree = strictParser.parse(filterQuery);\n const filter = walkTree(parseTree, filterQuery) as Filter;\n return filter;\n};\n", "import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n", "import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n padding: 0,\n },\n \".cm-line\": {\n lineHeight: \"var(--vuuFilterEditor-lineHeight)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n alignItems: \"center\",\n display: \"flex\",\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n },\n \".cm-completionIcon\": {\n height: \"18px\",\n flex: \"0 0 16px\",\n },\n \".cm-completionLabel\": {\n flex: \"1 1 auto\",\n },\n \".cm-completionIcon-filter\": {\n position: \"relative\",\n \"&:after\": {\n background: \"var(--salt-text-secondary-foreground)\",\n content: \"''\",\n \"-webkit-mask\": \"var(--svg-filter) center center/13px 13px\",\n \"-webkit-mask-repeat\": \"no-repeat\",\n position: \"absolute\",\n height: \"18px\",\n left: \"0px\",\n top: \"0px\",\n width: \"16px\",\n },\n },\n },\n { dark: false }\n);\n", "import {\n CompletionContext,\n CompletionSource,\n EditorState,\n getNodeByName,\n getValue,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n IFilterSuggestionProvider,\n SuggestionType,\n} from \"./useCodeMirrorEditor\";\n\nexport type FilterSubmissionMode = \"and\" | \"or\" | \"replace\" | \"tab\";\n\nexport type ApplyCompletion = (mode?: FilterSubmissionMode) => void;\n\nconst getOperator = (node: SyntaxNode, state: EditorState) => {\n let maybeColumnNode = node.prevSibling || node.parent;\n while (\n maybeColumnNode &&\n ![\"Column\", \"Operator\", \"In\"].includes(maybeColumnNode.name)\n ) {\n maybeColumnNode = maybeColumnNode.prevSibling || maybeColumnNode.parent;\n }\n if (maybeColumnNode?.name === \"In\" || maybeColumnNode?.name === \"Operator\") {\n return getValue(maybeColumnNode, state);\n } else {\n return undefined;\n }\n};\n\n// Operators that are more than a single character in length may incur partial matches\n// TODO need to check that previous token is a column\nconst getPartialOperator = (\n maybeOperatorNode: SyntaxNode,\n state: EditorState,\n columnName?: string\n) => {\n const value = getValue(maybeOperatorNode, state);\n if (columnName === undefined || value === columnName) {\n return;\n }\n if (\n [\"contains\", \"ends\", \"starts\"].some((val) =>\n val.startsWith(value.toLowerCase())\n )\n ) {\n return value;\n } else {\n return undefined;\n }\n};\n\nconst getClauseOperator = (node: SyntaxNode, state: EditorState) => {\n let maybeTargetNode = node.prevSibling || node.parent || node.lastChild;\n while (maybeTargetNode && maybeTargetNode.name === \"\u26A0\")\n maybeTargetNode = maybeTargetNode.prevSibling;\n if (maybeTargetNode && [\"As\", \"Or\", \"And\"].includes(maybeTargetNode.name)) {\n return getValue(maybeTargetNode, state);\n } else {\n return undefined;\n }\n};\n\nconst getFilterName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"FilterName\") {\n return getValue(node, state);\n } else {\n let maybeTargetNode = node.prevSibling || node.parent || node.lastChild;\n while (maybeTargetNode && maybeTargetNode.name !== \"FilterName\")\n maybeTargetNode = maybeTargetNode.prevSibling;\n if (maybeTargetNode && maybeTargetNode.name === \"FilterName\") {\n return getValue(node, state);\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"Operator\") {\n return getColumnName(prevNode, state);\n }\n};\n\nconst getSetValues = (node: SyntaxNode, state: EditorState): string[] => {\n let maybeTargetNode = node.lastChild;\n const values: string[] = [];\n while (maybeTargetNode && maybeTargetNode.name !== \"In\") {\n const value = getValue(maybeTargetNode, state);\n if (value) {\n values.push(value);\n } else {\n break;\n }\n maybeTargetNode = maybeTargetNode.prevSibling;\n }\n return values;\n};\nexport const FilterlNamedTerms: readonly string[] = [\n \"Filter\",\n \"ParenthesizedExpression\",\n \"AndExpression\",\n \"OrExpression\",\n \"ColumnValueExpression\",\n \"ColumnSetExpression\",\n \"FilterName\",\n \"Column\",\n \"Operator\",\n \"Values\",\n \"Number\",\n \"String\",\n];\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !FilterlNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const useAutoComplete = (\n suggestionProvider: IFilterSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>,\n existingFilter?: Filter\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: SuggestionType,\n optionalArgs: {\n columnName?: string;\n existingFilter?: Filter;\n filterName?: string;\n operator?: string;\n quoted?: boolean;\n onSubmit?: () => void;\n selection?: string[];\n startsWith?: string;\n } = {}\n ) => {\n const { startsWith = \"\" } = optionalArgs;\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider]\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n console.log({ nodeBeforeName: nodeBefore.name });\n\n switch (nodeBefore.name) {\n case \"Filter\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"column\");\n } else {\n const clauseOperator = getClauseOperator(nodeBefore, state);\n if (clauseOperator === \"as\") {\n return makeSuggestions(context, \"name\");\n } else {\n const filterName = getFilterName(nodeBefore, state);\n return makeSuggestions(context, \"save\", {\n onSubmit: onSubmit.current,\n existingFilter,\n filterName,\n });\n }\n }\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n quoted: true,\n startsWith: word.text,\n });\n }\n } else {\n console.log(\n `we have a string, column is ${columnName} ${from} ${to}`\n );\n }\n }\n break;\n\n case \"As\":\n return makeSuggestions(context, \"name\");\n\n case \"FilterName\":\n return makeSuggestions(context, \"save\", {\n onSubmit: onSubmit.current,\n existingFilter,\n filterName: getFilterName(nodeBefore, state),\n });\n\n case \"Column\": {\n const columnName = getValue(nodeBefore, state);\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"column\",\n undefined,\n columnName\n );\n if (isPartialMatch) {\n return makeSuggestions(context, \"column\", {\n startsWith: columnName,\n });\n } else {\n return makeSuggestions(context, \"operator\", { columnName });\n }\n }\n\n case \"\u26A0\": {\n const columnName = getNodeByName(nodeBefore, state);\n const operator = getOperator(nodeBefore, state);\n // TODO check if we're mnatching a partial jojn operator\n const partialOperator = operator\n ? undefined\n : getPartialOperator(nodeBefore, state, columnName);\n\n if (partialOperator) {\n return makeSuggestions(context, \"operator\", {\n columnName,\n startsWith: partialOperator,\n });\n } else {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n }\n\n case \"Identifier\":\n {\n const clauseOperator = getClauseOperator(nodeBefore, state);\n if (clauseOperator === \"as\") {\n return {\n from: context.pos,\n options: [\n {\n label: \"press ENTER to apply filter and save\",\n apply: () => onSubmit.current(),\n boost: 5,\n },\n ],\n };\n }\n }\n break;\n case \"ColumnSetExpression\":\n case \"Values\": {\n const columnName = getNodeByName(nodeBefore, state);\n const selection = getSetValues(nodeBefore, state);\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n selection,\n });\n }\n case \"Comma\":\n case \"LBrack\": {\n const columnName = getNodeByName(nodeBefore, state) as string;\n return makeSuggestions(context, \"columnValue\", { columnName });\n }\n\n case \"ColumnValueExpression\":\n {\n const lastToken = nodeBefore.lastChild?.prevSibling;\n if (lastToken?.name === \"Column\") {\n return makeSuggestions(context, \"operator\", {\n columnName: getNodeByName(nodeBefore, state),\n });\n } else if (lastToken?.name === \"Operator\") {\n return makeSuggestions(context, \"columnValue\", {\n columnName: getNodeByName(lastToken, state),\n operator: getValue(lastToken, state),\n });\n }\n }\n break;\n\n case \"In\": {\n return {\n from: context.pos,\n options: [{ label: \"[\", apply: \" [\", type: \"text\" }],\n };\n }\n\n case \"Eq\": {\n return makeSuggestions(context, \"columnValue\", {\n columnName: getNodeByName(nodeBefore, state),\n });\n }\n\n case \"AndExpression\":\n case \"OrExpression\": {\n return makeSuggestions(context, \"column\");\n }\n\n default:\n }\n },\n [existingFilter, makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n", "import {\n asNameSuggestion,\n booleanJoinSuggestions,\n Completion,\n getNamePrompt,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n SuggestionFetcher,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { IFilterSuggestionProvider, SuggestionType } from \"@vuu-ui/vuu-filters\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n// import { isMappedValueTypeRenderer, isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport { filterInfo } from \"./filterInfo\";\nimport { ApplyCompletion } from \"./useFilterAutoComplete\";\n\nconst NO_NAMED_FILTERS = [] as Completion[];\nconst NONE = {};\n\nconst saveAsTab = (onSubmit: ApplyCompletion) => [\n {\n label: \"Press ENTER to create TAB\",\n apply: () => onSubmit(\"tab\"),\n boost: 6,\n },\n];\n\nconst makeSaveOrExtendSuggestions = (\n onSubmit: ApplyCompletion,\n existingFilter?: Filter,\n withJoinSuggestions = true\n) => {\n const result = existingFilter\n ? ([\n {\n label: \"REPLACE existing filter\",\n apply: () => onSubmit(\"replace\"),\n boost: 8,\n },\n {\n label: \"AND existing filter\",\n apply: () => onSubmit(\"and\"),\n boost: 7,\n },\n {\n label: \"OR existing filter\",\n apply: () => onSubmit(\"or\"),\n boost: 7,\n },\n ] as Completion[])\n : ([\n {\n label: \"Press ENTER to submit\",\n apply: () => onSubmit(),\n boost: 6,\n },\n ] as Completion[]);\n\n return withJoinSuggestions\n ? result.concat(booleanJoinSuggestions).concat(asNameSuggestion)\n : result;\n};\n\nconst promptToSaveOrExtend = (\n onSubmit: ApplyCompletion,\n existingFilter?: Filter\n) => makeSaveOrExtendSuggestions(onSubmit, existingFilter, true);\n\nconst promptToSave = (onSubmit: ApplyCompletion) =>\n makeSaveOrExtendSuggestions(onSubmit, undefined);\n\nconst getSaveSuggestions = ({\n existingFilter,\n filterName,\n onSubmit,\n saveOptions,\n}: {\n existingFilter?: Filter;\n filterName?: string;\n onSubmit: () => void;\n saveOptions: FilterSaveOptions;\n}) => {\n const includeTabSuggestion = filterName && saveOptions.allowSaveAsTab;\n const result = existingFilter\n ? promptToSaveOrExtend(onSubmit, existingFilter)\n : promptToSave(onSubmit);\n\n if (includeTabSuggestion) {\n return result.concat(saveAsTab(onSubmit));\n } else {\n return result;\n }\n};\n\nconst suggestColumns = (columns: ColumnDescriptor[]) =>\n columns.map((column) => ({\n boost: 5,\n label: column.name,\n }));\n\nconst suggestNamedFilters = (namedFilters?: Map<string, string>) =>\n namedFilters\n ? (Array.from(namedFilters.entries()).map(([filterName, filterQuery]) => ({\n info: () => filterInfo(filterName, filterQuery),\n label: filterName,\n type: \"filter\",\n })) as Completion[])\n : NO_NAMED_FILTERS;\n\nconst doneCommand: Completion = {\n label: \"Done\",\n apply: \"] \",\n type: \"keyword\",\n boost: 10,\n};\n\nconst withApplySpace = (\n suggestions: Completion[],\n startsWith = \"\"\n): Completion[] =>\n suggestions\n .filter((sugg) => startsWith === \"\" || sugg.label.startsWith(startsWith))\n .map((suggestion) => ({\n ...suggestion,\n apply: suggestion.label + \" \",\n }));\n\nexport type FilterSaveOptions = {\n allowSaveAsTab?: boolean;\n allowReplace?: boolean;\n};\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n namedFilters?: Map<string, string>;\n saveOptions?: FilterSaveOptions;\n table: VuuTable;\n typeaheadHook?: () => SuggestionFetcher;\n}\n\nconst defaultSaveOptions = {\n allowReplace: true,\n};\n\nexport const useFilterSuggestionProvider = ({\n columns,\n namedFilters,\n saveOptions = defaultSaveOptions,\n table,\n typeaheadHook: useTypeahead = useTypeaheadSuggestions,\n}: SuggestionProviderHookProps): IFilterSuggestionProvider => {\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeahead();\n const getSuggestions: IFilterSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const {\n columnName,\n existingFilter,\n filterName,\n operator,\n quoted: autoQuoted,\n onSubmit,\n startsWith,\n selection,\n } = options;\n\n switch (suggestionType) {\n case \"operator\":\n {\n const column = columns.find((col) => col.name === columnName);\n if (column) {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators, startsWith);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n } else {\n console.warn(`'${columnName}' does not match any column name`);\n }\n }\n break;\n case \"column\": {\n const columnSuggestions = await suggestColumns(columns);\n const filterSuggestions = await suggestNamedFilters(namedFilters);\n return (latestSuggestionsRef.current =\n withApplySpace(columnSuggestions)).concat(\n withApplySpace(filterSuggestions)\n );\n }\n case \"columnValue\":\n {\n if (columnName) {\n const column = columns.find((col) => col.name === columnName);\n if (!column) {\n throw Error(\n `useFilterSUggestionProvider no column ${columnName}`\n );\n }\n const prefix = Array.isArray(selection)\n ? selection.length === 0\n ? \"[\"\n : \",\"\n : \"\";\n const params = getTypeaheadParams(\n table,\n columnName,\n startsWith\n );\n const suggestions = await getTypeaheadSuggestions(params);\n // const { type } = column;\n // if (\n // isTypeDescriptor(type) &&\n // isMappedValueTypeRenderer(type?.renderer)\n // ) {\n // const { map } = type.renderer;\n // suggestions = suggestions.map((value) => map[value] ?? value);\n // }\n\n // prob don't want to save the prefix\n const isIllustration = operator === \"starts\";\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n moveCursorToEnd: autoQuoted,\n quoted: column?.serverDataType === \"string\" && !autoQuoted,\n suffix: autoQuoted ? \"\" : \" \",\n prefix: isIllustration ? startsWith : prefix,\n isIllustration,\n });\n if (Array.isArray(selection) && selection?.length > 1) {\n return [doneCommand, ...latestSuggestionsRef.current];\n }\n return latestSuggestionsRef.current;\n }\n }\n break;\n case \"save\": {\n if (typeof onSubmit !== \"function\") {\n throw Error(\n \"useFilterSuggestionProvider, onSubmit must be supplied for 'save' suggestions\"\n );\n }\n return await getSaveSuggestions({\n existingFilter,\n filterName,\n onSubmit,\n saveOptions,\n });\n }\n case \"name\":\n return await getNamePrompt(\"filter\");\n default:\n }\n\n return [];\n },\n [columns, getTypeaheadSuggestions, namedFilters, saveOptions, table]\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: SuggestionType,\n columnName?: string,\n pattern?: string\n ) => {\n // const { current: latestSuggestions } = latestSuggestionsRef;\n const suggestions =\n // latestSuggestions && latestSuggestions.length > 0\n // ? latestSuggestions\n await getSuggestions(valueType, { columnName });\n\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n return true;\n }\n }\n }\n return false;\n },\n [getSuggestions]\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n", "import { createEl } from \"@vuu-ui/vuu-utils\";\n\nexport const filterInfo = (\n filterName: string,\n filterQuery: string\n // filter: Filter\n) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", filterName);\n // const paramElement = createEl(\"span\", \"param-list\", params.description);\n // const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n // headingElement.appendChild(paramElement);\n // headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, filterQuery);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n return rootElement;\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { Toolbar, ToolbarProps } from \"@heswell/salt-lab\";\nimport cx from \"classnames\";\nimport { SuggestionConsumer } from \"../filter-input\";\nimport { useFilterToolbar } from \"./useFilterToolbar\";\n\nimport \"./FilterToolbar.css\";\n\nexport interface FilterToolbarProps extends SuggestionConsumer, ToolbarProps {\n filter?: Filter;\n}\n\nexport const FilterToolbar = ({\n className,\n filter,\n suggestionProvider,\n ...props\n}: FilterToolbarProps) => {\n console.log(`FilterToolbar ${JSON.stringify(filter, null, 2)}`);\n const toolbarItems = useFilterToolbar({ filter, suggestionProvider });\n return (\n <Toolbar className={cx(\"vuuFilterToolbar\", className)} {...props}>\n {toolbarItems}\n </Toolbar>\n );\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport {\n isMultiValueFilter,\n isNamedFilter,\n isSingleValueFilter,\n IFilterSuggestionProvider,\n SuggestionConsumer,\n} from \"@vuu-ui/vuu-filters\";\nimport { ToggleButton, ToolbarField } from \"@heswell/salt-lab\";\nimport { ReactElement } from \"react\";\nimport { FilterDropdown } from \"./FilterDropdown\";\nimport { FilterDropdownMultiSelect } from \"./FilterDropdownMultiSelect\";\n\nconst filterToControl = (\n filter: Filter,\n suggestionProvider: IFilterSuggestionProvider\n): ReactElement | ReactElement[] => {\n if (isNamedFilter(filter)) {\n return (\n <ToggleButton\n className=\"vuuToggleButton\"\n toggled={true}\n variant=\"secondary\"\n >\n {filter.name}\n </ToggleButton>\n );\n }\n if (isSingleValueFilter(filter)) {\n const { column, value } = filter;\n return (\n <ToolbarField\n className=\"vuuFilterDropdown\"\n key={column}\n label={column}\n labelPlacement=\"top\"\n >\n <FilterDropdown\n column={column}\n selected={value.toString()}\n selectionStrategy=\"default\"\n source={[value.toString()]}\n suggestionProvider={suggestionProvider}\n style={{ width: 100 }}\n />\n </ToolbarField>\n );\n }\n if (isMultiValueFilter(filter)) {\n const values = filter.values.map((v) => v.toString());\n return (\n <ToolbarField\n className=\"vuuFilterDropdown\"\n label={filter.column}\n key={filter.column}\n labelPlacement=\"top\"\n >\n <FilterDropdownMultiSelect\n column={filter.column}\n selected={values}\n source={values}\n suggestionProvider={suggestionProvider}\n style={{ width: 100 }}\n />\n </ToolbarField>\n );\n }\n return filter.filters.map((filter) =>\n filterToControl(filter, suggestionProvider)\n ) as ReactElement[];\n};\n\nexport interface FilterToolbarProps extends SuggestionConsumer {\n filter?: Filter;\n}\n\nexport const useFilterToolbar = ({\n filter,\n suggestionProvider,\n}: FilterToolbarProps) => {\n if (filter) {\n return filterToControl(filter, suggestionProvider);\n }\n return [];\n};\n", "import { Dropdown, DropdownProps } from \"@heswell/salt-lab\";\nimport { useCallback, useState } from \"react\";\nimport { IFilterSuggestionProvider } from \"../filter-input\";\n\nconst isString = (s: string | string[]): s is string => typeof s === \"string\";\n\nconst stripQuotes = <T extends string | string[]>(selected: T): T => {\n if (isString(selected)) {\n if (selected.startsWith('\"') && selected.endsWith('\"')) {\n return selected.slice(1, -1) as T;\n } else {\n return selected;\n }\n } else {\n return selected.map(stripQuotes) as T;\n }\n};\n\nexport interface FilterDropdownProps extends DropdownProps {\n column: string;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const FilterDropdown = ({\n column,\n selected: selectedProp,\n suggestionProvider,\n ...props\n}: FilterDropdownProps) => {\n const selected = selectedProp != null ? stripQuotes(selectedProp) : undefined;\n const initialValues = Array.isArray(selected)\n ? selected\n : selected != null\n ? [selected]\n : [];\n const [values, setValues] = useState<string[]>(initialValues);\n console.log({ initialValues });\n const handleOpenChange = useCallback(\n async (isOpen) => {\n if (isOpen) {\n const values = await suggestionProvider.getSuggestions(\"columnValue\", {\n columnName: column,\n });\n console.log({ values });\n setValues(values.map((suggestion) => suggestion.label));\n }\n },\n [column, suggestionProvider]\n );\n\n return (\n <Dropdown\n {...props}\n onOpenChange={handleOpenChange}\n selected={selected}\n source={values}\n />\n );\n};\n", "import { Dropdown, DropdownProps } from \"@heswell/salt-lab\";\nimport { useCallback, useState } from \"react\";\nimport { IFilterSuggestionProvider } from \"../filter-input\";\n\nconst isString = (s?: string | string[]): s is string => typeof s === \"string\";\n\nconst stripQuotes = <T extends string | string[]>(\n selected?: T\n): T | undefined => {\n if (selected === undefined) {\n return undefined;\n } else if (isString(selected)) {\n if (selected.startsWith('\"') && selected.endsWith('\"')) {\n return selected.slice(1, -1) as T;\n } else {\n return selected;\n }\n } else {\n return selected.map(stripQuotes) as T;\n }\n};\n\nexport interface FilterDropdownProps extends DropdownProps<string, \"multiple\"> {\n column: string;\n suggestionProvider: IFilterSuggestionProvider;\n}\n\nexport const FilterDropdownMultiSelect = ({\n column,\n selected: selectedProp,\n suggestionProvider,\n ...props\n}: FilterDropdownProps) => {\n const selected = stripQuotes(selectedProp);\n const initialValues = Array.isArray(selected)\n ? selected\n : selected != null\n ? [selected]\n : [];\n const [values, setValues] = useState<string[]>(initialValues);\n const handleOpenChange = useCallback(\n async (isOpen) => {\n if (isOpen) {\n const values = await suggestionProvider.getSuggestions(\"columnValue\", {\n columnName: column,\n });\n console.log({ values });\n setValues(values.map((suggestion) => suggestion.label));\n }\n },\n [column, suggestionProvider]\n );\n\n return (\n <Dropdown<string, \"multiple\">\n {...props}\n onOpenChange={handleOpenChange}\n selected={selected}\n selectionStrategy=\"multiple\"\n source={values}\n />\n );\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data\";\nimport {\n AndFilter,\n Filter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport { parseFilter } from \"./filter-input/filter-language-parser/FilterParser\";\n\nconst filterPredicateMap = new Map<string, FilterPredicate>();\nconst filterReject = () => false;\n\nexport const getFilterPredicate = (\n columnMap: ColumnMap,\n filterQuery: string\n): FilterPredicate => {\n let predicate = filterPredicateMap.get(filterQuery);\n if (predicate) {\n return predicate;\n }\n // TODO we need to clear cache if columns change. How do we identify this :\n try {\n const filter = parseFilter(filterQuery);\n predicate = filterPredicate(columnMap, filter);\n filterPredicateMap.set(filterQuery, predicate);\n return predicate;\n } catch (err) {\n console.warn(\n `filter-evaluation-utils, failed to parse filter \"${filterQuery}\"`\n );\n return filterReject;\n }\n};\n\nexport function filterPredicate(\n columnMap: ColumnMap,\n filter: Filter\n): FilterPredicate {\n //TODO convert filter to include colIdx ratherthan colName, so we don't have to pass cols\n switch (filter.op) {\n case \"in\":\n return testInclude(columnMap, filter);\n case \"=\":\n return testEQ(columnMap, filter);\n case \">\":\n return testGT(columnMap, filter);\n case \">=\":\n return testGE(columnMap, filter);\n case \"<\":\n return testLT(columnMap, filter);\n case \"<=\":\n return testLE(columnMap, filter);\n case \"starts\":\n return testSW(columnMap, filter);\n case \"and\":\n return testAND(columnMap, filter as AndFilter);\n case \"or\":\n return testOR(columnMap, filter as OrFilter);\n default:\n console.log(`unrecognized filter type ${filter.op}`);\n return () => true;\n }\n}\n\nexport type FilterPredicate = (row: DataSourceRow) => boolean;\n\nconst testInclude = (\n columnMap: ColumnMap,\n filter: MultiValueFilterClause\n): FilterPredicate => {\n return (row) =>\n (filter.values as unknown[]).indexOf(row[columnMap[filter.column]]) !== -1;\n};\n\nconst testEQ = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] === filter.value;\n};\n\nconst testGT = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] > filter.value;\n};\nconst testGE = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] >= filter.value;\n};\n\nconst testLT = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] < filter.value;\n};\nconst testLE = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n return (row) => row[columnMap[filter.column]] <= filter.value;\n};\n\nconst testSW = (\n columnMap: ColumnMap,\n filter: SingleValueFilterClause\n): FilterPredicate => {\n const filterValue = filter.value as string;\n if (typeof filterValue !== \"string\") {\n throw Error(\"string filter applied to value of wrong type\");\n }\n return (row) => {\n const rowValue = row[columnMap[filter.column]];\n if (typeof rowValue !== \"string\") {\n throw Error(\"string filter applied to value of wrong type\");\n }\n return rowValue.toLowerCase().startsWith(filterValue.toLowerCase());\n };\n};\n\nconst testAND = (columnMap: ColumnMap, filter: AndFilter): FilterPredicate => {\n const filters = filter.filters.map((f1) => filterPredicate(columnMap, f1));\n return (row) => filters.every((fn) => fn(row));\n};\n\nfunction testOR(columnMap: ColumnMap, filter: OrFilter): FilterPredicate {\n const filters = filter.filters.map((f1) => filterPredicate(columnMap, f1));\n return (row) => filters.some((fn) => fn(row));\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ToolbarField", "Icon", "forwardRef", "DeleteIcon", "jsx", "jsx", "jsxs", "jsx", "jsx", "useCallback", "useState", "useState", "useCallback", "jsx", "jsxs", "ToolbarField", "EditorState", "EditorView", "useEffect", "isMultiClauseFilter", "isMultiValueFilter", "isSingleValueFilter", "isMultiClauseFilter", "isMultiValueFilter", "isSingleValueFilter", "useCallback", "useCallback", "cx", "parseFilter", "clearInput", "createState", "EditorState", "EditorView", "useEffect", "jsx", "jsxs", "useTypeaheadSuggestions", "useCallback", "useRef", "useTypeaheadSuggestions", "useRef", "useCallback", "import_classnames", "Toolbar", "ToolbarField", "Dropdown", "useCallback", "useState", "jsx", "values", "Dropdown", "useCallback", "useState", "jsx", "isString", "stripQuotes", "values", "jsx", "ToolbarField", "filter", "jsx", "Toolbar", "cx", "filterValue"]
7
7
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@vuu-ui/vuu-filters",
3
- "version": "0.7.0-debug",
3
+ "version": "0.7.1-debug",
4
4
  "author": "heswell",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "dependencies": {
8
- "@vuu-ui/vuu-codemirror": "0.7.0-debug",
9
- "@vuu-ui/vuu-data": "0.7.0-debug",
10
- "@vuu-ui/vuu-utils": "0.7.0-debug",
8
+ "@vuu-ui/vuu-codemirror": "0.7.1-debug",
9
+ "@vuu-ui/vuu-data": "0.7.1-debug",
10
+ "@vuu-ui/vuu-utils": "0.7.1-debug",
11
11
  "@salt-ds/core": "1.2.0",
12
12
  "@heswell/salt-lab": "1.0.0-alpha.2"
13
13
  },
@@ -0,0 +1,11 @@
1
+ import { ColumnDescriptor } from "@vuu-ui/vuu-datagrid-types";
2
+ import { Filter } from "@vuu-ui/vuu-filter-types";
3
+ import { VuuTable } from "@vuu-ui/vuu-protocol-types";
4
+ import { HTMLAttributes } from "react";
5
+ type FilterPanelProps = HTMLAttributes<HTMLDivElement> & {
6
+ table: VuuTable;
7
+ columns: ColumnDescriptor[];
8
+ onFilterSubmit: (filterQuery: string, filter?: Filter) => void;
9
+ };
10
+ export declare const ColumnFilter: ({ className, table, columns, onFilterSubmit, ...htmlAttributes }: FilterPanelProps) => JSX.Element;
11
+ export {};
@@ -0,0 +1,3 @@
1
+ import { ColumnDescriptor } from "@vuu-ui/vuu-datagrid-types";
2
+ import { ListItemType } from "@heswell/salt-lab";
3
+ export declare const ColumnListItem: ListItemType<ColumnDescriptor>;