@vuu-ui/vuu-table-extras 0.8.34 → 0.8.35
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/package.json +12 -14
- package/cjs/cell-edit-validators/CaseValidator.js +0 -24
- package/cjs/cell-edit-validators/CaseValidator.js.map +0 -1
- package/cjs/cell-edit-validators/PatternValidator.js +0 -26
- package/cjs/cell-edit-validators/PatternValidator.js.map +0 -1
- package/cjs/cell-renderers/background-cell/BackgroundCell.css +0 -105
- package/cjs/cell-renderers/background-cell/BackgroundCell.js +0 -64
- package/cjs/cell-renderers/background-cell/BackgroundCell.js.map +0 -1
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css +0 -4
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +0 -58
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +0 -1
- package/cjs/cell-renderers/background-cell/BackgroundKeyframes.css +0 -169
- package/cjs/cell-renderers/background-cell/useDirection.js +0 -20
- package/cjs/cell-renderers/background-cell/useDirection.js.map +0 -1
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.css +0 -18
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js +0 -56
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js.map +0 -1
- package/cjs/cell-renderers/lookup-cell/LookupCell.js +0 -26
- package/cjs/cell-renderers/lookup-cell/LookupCell.js.map +0 -1
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.css +0 -30
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js +0 -53
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js.map +0 -1
- package/cjs/cell-renderers/progress-cell/ProgressCell.css +0 -39
- package/cjs/cell-renderers/progress-cell/ProgressCell.js +0 -60
- package/cjs/cell-renderers/progress-cell/ProgressCell.js.map +0 -1
- package/cjs/column-expression-input/ColumnExpressionInput.css +0 -92
- package/cjs/column-expression-input/ColumnExpressionInput.js +0 -30
- package/cjs/column-expression-input/ColumnExpressionInput.js.map +0 -1
- package/cjs/column-expression-input/column-function-descriptors.js +0 -307
- package/cjs/column-expression-input/column-function-descriptors.js.map +0 -1
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +0 -29
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +0 -1
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +0 -469
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +0 -1
- package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js +0 -61
- package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +0 -1
- package/cjs/column-expression-input/column-language-parser/generated/column-parser.js +0 -21
- package/cjs/column-expression-input/column-language-parser/generated/column-parser.js.map +0 -1
- package/cjs/column-expression-input/functionDocInfo.js +0 -39
- package/cjs/column-expression-input/functionDocInfo.js.map +0 -1
- package/cjs/column-expression-input/highlighting.js +0 -16
- package/cjs/column-expression-input/highlighting.js.map +0 -1
- package/cjs/column-expression-input/theme.js +0 -63
- package/cjs/column-expression-input/theme.js.map +0 -1
- package/cjs/column-expression-input/useColumnAutoComplete.js +0 -358
- package/cjs/column-expression-input/useColumnAutoComplete.js.map +0 -1
- package/cjs/column-expression-input/useColumnExpressionEditor.js +0 -131
- package/cjs/column-expression-input/useColumnExpressionEditor.js.map +0 -1
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js +0 -212
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +0 -1
- package/cjs/column-expression-panel/ColumnExpressionPanel.js +0 -87
- package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +0 -1
- package/cjs/column-expression-panel/useColumnExpression.js +0 -69
- package/cjs/column-expression-panel/useColumnExpression.js.map +0 -1
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js +0 -97
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +0 -1
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js +0 -107
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +0 -1
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js +0 -90
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +0 -1
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.css +0 -6
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js +0 -40
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +0 -1
- package/cjs/column-list/ColumnList.css +0 -60
- package/cjs/column-list/ColumnList.js +0 -106
- package/cjs/column-list/ColumnList.js.map +0 -1
- package/cjs/column-settings/ColumnNameLabel.css +0 -13
- package/cjs/column-settings/ColumnNameLabel.js +0 -36
- package/cjs/column-settings/ColumnNameLabel.js.map +0 -1
- package/cjs/column-settings/ColumnSettingsPanel.css +0 -77
- package/cjs/column-settings/ColumnSettingsPanel.js +0 -186
- package/cjs/column-settings/ColumnSettingsPanel.js.map +0 -1
- package/cjs/column-settings/useColumnSettings.js +0 -235
- package/cjs/column-settings/useColumnSettings.js.map +0 -1
- package/cjs/datasource-stats/DatasourceStats.css +0 -11
- package/cjs/datasource-stats/DatasourceStats.js +0 -39
- package/cjs/datasource-stats/DatasourceStats.js.map +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/table-settings/TableSettingsPanel.css +0 -64
- package/cjs/table-settings/TableSettingsPanel.js +0 -114
- package/cjs/table-settings/TableSettingsPanel.js.map +0 -1
- package/cjs/table-settings/useTableSettings.js +0 -182
- package/cjs/table-settings/useTableSettings.js.map +0 -1
- package/esm/cell-edit-validators/CaseValidator.js +0 -22
- package/esm/cell-edit-validators/CaseValidator.js.map +0 -1
- package/esm/cell-edit-validators/PatternValidator.js +0 -24
- package/esm/cell-edit-validators/PatternValidator.js.map +0 -1
- package/esm/cell-renderers/background-cell/BackgroundCell.css +0 -105
- package/esm/cell-renderers/background-cell/BackgroundCell.js +0 -62
- package/esm/cell-renderers/background-cell/BackgroundCell.js.map +0 -1
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css +0 -4
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +0 -56
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +0 -1
- package/esm/cell-renderers/background-cell/BackgroundKeyframes.css +0 -169
- package/esm/cell-renderers/background-cell/useDirection.js +0 -18
- package/esm/cell-renderers/background-cell/useDirection.js.map +0 -1
- package/esm/cell-renderers/dropdown-cell/DropdownCell.css +0 -18
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js +0 -54
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js.map +0 -1
- package/esm/cell-renderers/lookup-cell/LookupCell.js +0 -24
- package/esm/cell-renderers/lookup-cell/LookupCell.js.map +0 -1
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.css +0 -30
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js +0 -51
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js.map +0 -1
- package/esm/cell-renderers/progress-cell/ProgressCell.css +0 -39
- package/esm/cell-renderers/progress-cell/ProgressCell.js +0 -58
- package/esm/cell-renderers/progress-cell/ProgressCell.js.map +0 -1
- package/esm/column-expression-input/ColumnExpressionInput.css +0 -92
- package/esm/column-expression-input/ColumnExpressionInput.js +0 -28
- package/esm/column-expression-input/ColumnExpressionInput.js.map +0 -1
- package/esm/column-expression-input/column-function-descriptors.js +0 -305
- package/esm/column-expression-input/column-function-descriptors.js.map +0 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +0 -27
- package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +0 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +0 -467
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +0 -1
- package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js +0 -56
- package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +0 -1
- package/esm/column-expression-input/column-language-parser/generated/column-parser.js +0 -19
- package/esm/column-expression-input/column-language-parser/generated/column-parser.js.map +0 -1
- package/esm/column-expression-input/functionDocInfo.js +0 -37
- package/esm/column-expression-input/functionDocInfo.js.map +0 -1
- package/esm/column-expression-input/highlighting.js +0 -14
- package/esm/column-expression-input/highlighting.js.map +0 -1
- package/esm/column-expression-input/theme.js +0 -61
- package/esm/column-expression-input/theme.js.map +0 -1
- package/esm/column-expression-input/useColumnAutoComplete.js +0 -356
- package/esm/column-expression-input/useColumnAutoComplete.js.map +0 -1
- package/esm/column-expression-input/useColumnExpressionEditor.js +0 -129
- package/esm/column-expression-input/useColumnExpressionEditor.js.map +0 -1
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js +0 -210
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +0 -1
- package/esm/column-expression-panel/ColumnExpressionPanel.js +0 -85
- package/esm/column-expression-panel/ColumnExpressionPanel.js.map +0 -1
- package/esm/column-expression-panel/useColumnExpression.js +0 -67
- package/esm/column-expression-panel/useColumnExpression.js.map +0 -1
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js +0 -95
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +0 -1
- package/esm/column-formatting-settings/ColumnFormattingPanel.js +0 -105
- package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +0 -1
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js +0 -88
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +0 -1
- package/esm/column-formatting-settings/LongTypeFormattingSettings.css +0 -6
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js +0 -38
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +0 -1
- package/esm/column-list/ColumnList.css +0 -60
- package/esm/column-list/ColumnList.js +0 -104
- package/esm/column-list/ColumnList.js.map +0 -1
- package/esm/column-settings/ColumnNameLabel.css +0 -13
- package/esm/column-settings/ColumnNameLabel.js +0 -34
- package/esm/column-settings/ColumnNameLabel.js.map +0 -1
- package/esm/column-settings/ColumnSettingsPanel.css +0 -77
- package/esm/column-settings/ColumnSettingsPanel.js +0 -184
- package/esm/column-settings/ColumnSettingsPanel.js.map +0 -1
- package/esm/column-settings/useColumnSettings.js +0 -233
- package/esm/column-settings/useColumnSettings.js.map +0 -1
- package/esm/datasource-stats/DatasourceStats.css +0 -11
- package/esm/datasource-stats/DatasourceStats.js +0 -37
- package/esm/datasource-stats/DatasourceStats.js.map +0 -1
- package/esm/index.js +0 -24
- package/esm/index.js.map +0 -1
- package/esm/table-settings/TableSettingsPanel.css +0 -64
- package/esm/table-settings/TableSettingsPanel.js +0 -112
- package/esm/table-settings/TableSettingsPanel.js.map +0 -1
- package/esm/table-settings/useTableSettings.js +0 -180
- package/esm/table-settings/useTableSettings.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnAutoComplete.js","sources":["../../src/column-expression-input/useColumnAutoComplete.ts"],"sourcesContent":["import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst completionDone = (onSubmit?: () => void): Completion => ({\n apply: () => {\n onSubmit?.();\n },\n label: \"Done\",\n boost: 10,\n});\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void\n) => {\n const lastChild = getLastChild(node, context);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {}\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs\n );\n const { startsWith = \"\" } = optionalArgs;\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 const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n switch (nodeBefore.name) {\n case \"If\": {\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n }\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state\n ) as ColumnExpressionOperator;\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 startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n\n const prefix =\n lastArgument?.name === \"OpenBrace\" || lastArgument?.name === \"Comma\"\n ? undefined\n : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n completionDone(onSubmit.current),\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n return {\n from: context.pos,\n options: [completionDone(onSubmit.current)],\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [completionDone(onSubmit.current)];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName }\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider]\n ) as CompletionSource;\n};\n"],"names":["ColumnNamedTerms","getValue","lastNamedChild","makeSuggestions","useCallback","syntaxTree","isCompleteExpression","getPreviousNode","isCompleteRelationalExpression","booleanJoinSuggestions","getNamedParentNode"],"mappings":"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"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuCodemirror = require('@vuu-ui/vuu-codemirror');
|
|
4
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
var ColumnExpressionLanguage = require('./column-language-parser/ColumnExpressionLanguage.js');
|
|
7
|
-
var ColumnExpressionTreeWalker = require('./column-language-parser/ColumnExpressionTreeWalker.js');
|
|
8
|
-
require('./column-language-parser/column-expression-parse-utils.js');
|
|
9
|
-
var highlighting = require('./highlighting.js');
|
|
10
|
-
var theme = require('./theme.js');
|
|
11
|
-
var useColumnAutoComplete = require('./useColumnAutoComplete.js');
|
|
12
|
-
|
|
13
|
-
const getView = (ref) => {
|
|
14
|
-
if (ref.current == void 0) {
|
|
15
|
-
throw Error("EditorView not defined");
|
|
16
|
-
}
|
|
17
|
-
return ref.current;
|
|
18
|
-
};
|
|
19
|
-
const getOptionClass = () => {
|
|
20
|
-
return "vuuSuggestion";
|
|
21
|
-
};
|
|
22
|
-
const noop = () => console.log("noooop");
|
|
23
|
-
const hasExpressionType = (completion) => "expressionType" in completion;
|
|
24
|
-
const injectOptionContent = (completion) => {
|
|
25
|
-
if (hasExpressionType(completion)) {
|
|
26
|
-
const div = vuuUtils.createEl("div", "expression-type-container");
|
|
27
|
-
const span = vuuUtils.createEl("span", "expression-type", completion.expressionType);
|
|
28
|
-
div.appendChild(span);
|
|
29
|
-
return div;
|
|
30
|
-
} else {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const useColumnExpressionEditor = ({
|
|
35
|
-
onChange,
|
|
36
|
-
onSubmitExpression,
|
|
37
|
-
source,
|
|
38
|
-
suggestionProvider
|
|
39
|
-
}) => {
|
|
40
|
-
const editorRef = react.useRef(null);
|
|
41
|
-
const onSubmitRef = react.useRef(noop);
|
|
42
|
-
const viewRef = react.useRef();
|
|
43
|
-
const completionFn = useColumnAutoComplete.useColumnAutoComplete(suggestionProvider, onSubmitRef);
|
|
44
|
-
const [createState, clearInput, submit] = react.useMemo(() => {
|
|
45
|
-
const parseExpression = () => {
|
|
46
|
-
const view = getView(viewRef);
|
|
47
|
-
const source2 = view.state.doc.toString();
|
|
48
|
-
const tree = vuuCodemirror.ensureSyntaxTree(view.state, view.state.doc.length, 5e3);
|
|
49
|
-
if (tree) {
|
|
50
|
-
const expression = ColumnExpressionTreeWalker.walkTree(tree, source2);
|
|
51
|
-
return [source2, expression];
|
|
52
|
-
} else {
|
|
53
|
-
return ["", void 0];
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const clearInput2 = () => {
|
|
57
|
-
getView(viewRef).setState(createState2());
|
|
58
|
-
};
|
|
59
|
-
const submitExpression = () => {
|
|
60
|
-
const [source2, expression] = parseExpression();
|
|
61
|
-
onSubmitExpression?.(source2, expression);
|
|
62
|
-
};
|
|
63
|
-
const showSuggestions = (key) => {
|
|
64
|
-
return vuuCodemirror.keymap.of([
|
|
65
|
-
{
|
|
66
|
-
key,
|
|
67
|
-
run() {
|
|
68
|
-
vuuCodemirror.startCompletion(getView(viewRef));
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
]);
|
|
73
|
-
};
|
|
74
|
-
const createState2 = () => vuuCodemirror.EditorState.create({
|
|
75
|
-
doc: source,
|
|
76
|
-
extensions: [
|
|
77
|
-
vuuCodemirror.minimalSetup,
|
|
78
|
-
vuuCodemirror.autocompletion({
|
|
79
|
-
addToOptions: [
|
|
80
|
-
{
|
|
81
|
-
render: injectOptionContent,
|
|
82
|
-
position: 70
|
|
83
|
-
}
|
|
84
|
-
],
|
|
85
|
-
override: [completionFn],
|
|
86
|
-
optionClass: getOptionClass
|
|
87
|
-
}),
|
|
88
|
-
ColumnExpressionLanguage.columnExpressionLanguageSupport(),
|
|
89
|
-
vuuCodemirror.keymap.of(vuuCodemirror.defaultKeymap),
|
|
90
|
-
showSuggestions("ArrowDown"),
|
|
91
|
-
vuuCodemirror.EditorView.updateListener.of((v) => {
|
|
92
|
-
const view = getView(viewRef);
|
|
93
|
-
if (v.docChanged) {
|
|
94
|
-
vuuCodemirror.startCompletion(view);
|
|
95
|
-
const source2 = view.state.doc.toString();
|
|
96
|
-
onChange?.(source2);
|
|
97
|
-
}
|
|
98
|
-
}),
|
|
99
|
-
// Enforces single line view
|
|
100
|
-
vuuCodemirror.EditorState.transactionFilter.of(
|
|
101
|
-
(tr) => tr.newDoc.lines > 1 ? [] : tr
|
|
102
|
-
),
|
|
103
|
-
theme.vuuTheme,
|
|
104
|
-
highlighting.vuuHighlighting
|
|
105
|
-
]
|
|
106
|
-
});
|
|
107
|
-
onSubmitRef.current = () => {
|
|
108
|
-
submitExpression();
|
|
109
|
-
};
|
|
110
|
-
return [createState2, clearInput2, submitExpression];
|
|
111
|
-
}, [completionFn, onChange, onSubmitExpression, source]);
|
|
112
|
-
react.useEffect(() => {
|
|
113
|
-
if (!editorRef.current) {
|
|
114
|
-
throw Error("editor not in dom");
|
|
115
|
-
}
|
|
116
|
-
viewRef.current = new vuuCodemirror.EditorView({
|
|
117
|
-
state: createState(),
|
|
118
|
-
parent: editorRef.current
|
|
119
|
-
});
|
|
120
|
-
return () => {
|
|
121
|
-
viewRef.current?.destroy();
|
|
122
|
-
};
|
|
123
|
-
}, [completionFn, createState]);
|
|
124
|
-
const handleBlur = react.useCallback(() => {
|
|
125
|
-
submit();
|
|
126
|
-
}, [submit]);
|
|
127
|
-
return { editorRef, clearInput, onBlur: handleBlur };
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
exports.useColumnExpressionEditor = useColumnExpressionEditor;
|
|
131
|
-
//# sourceMappingURL=useColumnExpressionEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnExpressionEditor.js","sources":["../../src/column-expression-input/useColumnExpressionEditor.ts"],"sourcesContent":["import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEventHandler,\n MutableRefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { ColumnExpressionInputProps } from \"./ColumnExpressionInput\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\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: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmitRef = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmitRef);\n\n const [createState, clearInput, submit] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", 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 expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpression = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\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: source,\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source);\n }\n }),\n // Enforces single line view\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmitRef.current = () => {\n submitExpression();\n };\n\n return [createState, clearInput, submitExpression];\n }, [completionFn, onChange, onSubmitExpression, source]);\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 const handleBlur = useCallback<FocusEventHandler>(() => {\n submit();\n }, [submit]);\n\n return { editorRef, clearInput, onBlur: handleBlur };\n};\n"],"names":["createEl","useRef","useColumnAutoComplete","useMemo","source","ensureSyntaxTree","walkTree","clearInput","createState","keymap","startCompletion","EditorState","minimalSetup","autocompletion","columnExpressionLanguageSupport","defaultKeymap","EditorView","vuuTheme","vuuHighlighting","useEffect","useCallback"],"mappings":"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"}
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuCodemirror = require('@vuu-ui/vuu-codemirror');
|
|
4
|
-
var vuuDataReact = require('@vuu-ui/vuu-data-react');
|
|
5
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
-
var react = require('react');
|
|
7
|
-
var columnFunctionDescriptors = require('./column-function-descriptors.js');
|
|
8
|
-
var functionDocInfo = require('./functionDocInfo.js');
|
|
9
|
-
|
|
10
|
-
const NO_OPERATORS = [];
|
|
11
|
-
const withApplySpace = (suggestions) => suggestions.map((suggestion) => ({
|
|
12
|
-
...suggestion,
|
|
13
|
-
apply: (suggestion.apply ?? suggestion.label) + " "
|
|
14
|
-
}));
|
|
15
|
-
const getValidColumns = (columns, { functionName, operator }) => {
|
|
16
|
-
if (operator) {
|
|
17
|
-
return columns.filter(vuuUtils.isNumericColumn);
|
|
18
|
-
} else if (functionName) {
|
|
19
|
-
const fn = columnFunctionDescriptors.columnFunctionDescriptors.find((f) => f.name === functionName);
|
|
20
|
-
if (fn) {
|
|
21
|
-
switch (fn.accepts) {
|
|
22
|
-
case "string":
|
|
23
|
-
return columns.filter(vuuUtils.isTextColumn);
|
|
24
|
-
case "number":
|
|
25
|
-
return columns.filter(vuuUtils.isNumericColumn);
|
|
26
|
-
default:
|
|
27
|
-
return columns;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return columns;
|
|
32
|
-
};
|
|
33
|
-
const getColumns = (columns, options) => {
|
|
34
|
-
const validColumns = getValidColumns(columns, options);
|
|
35
|
-
return validColumns.map((column) => {
|
|
36
|
-
const label = column.label ?? column.name;
|
|
37
|
-
return {
|
|
38
|
-
apply: options.prefix ? `${options.prefix}${column.name}` : column.name,
|
|
39
|
-
label,
|
|
40
|
-
boost: 5,
|
|
41
|
-
type: "column",
|
|
42
|
-
expressionType: column.serverDataType
|
|
43
|
-
};
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
const arithmeticOperators = [
|
|
47
|
-
{ apply: "* ", boost: 2, label: "*", type: "operator" },
|
|
48
|
-
{ apply: "/ ", boost: 2, label: "/", type: "operator" },
|
|
49
|
-
{ apply: "+ ", boost: 2, label: "+", type: "operator" },
|
|
50
|
-
{ apply: "- ", boost: 2, label: "-", type: "operator" }
|
|
51
|
-
];
|
|
52
|
-
const getOperators = (column) => {
|
|
53
|
-
if (column === void 0 || vuuUtils.isNumericColumn(column)) {
|
|
54
|
-
return arithmeticOperators;
|
|
55
|
-
} else {
|
|
56
|
-
return NO_OPERATORS;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const getConditionOperators = (column) => {
|
|
60
|
-
switch (column.serverDataType) {
|
|
61
|
-
case "string":
|
|
62
|
-
case "char":
|
|
63
|
-
return withApplySpace(
|
|
64
|
-
vuuCodemirror.stringOperators
|
|
65
|
-
/*, startsWith*/
|
|
66
|
-
);
|
|
67
|
-
case "int":
|
|
68
|
-
case "long":
|
|
69
|
-
case "double":
|
|
70
|
-
return withApplySpace(vuuCodemirror.numericOperators);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
const toFunctionCompletion = (functionDescriptor) => ({
|
|
74
|
-
apply: `${functionDescriptor.name}( `,
|
|
75
|
-
boost: 2,
|
|
76
|
-
expressionType: functionDescriptor.type,
|
|
77
|
-
info: () => functionDocInfo.functionDocInfo(functionDescriptor),
|
|
78
|
-
label: functionDescriptor.name,
|
|
79
|
-
type: "function"
|
|
80
|
-
});
|
|
81
|
-
const getAcceptedTypes = (fn) => {
|
|
82
|
-
if (fn) {
|
|
83
|
-
if (typeof fn.accepts === "string") {
|
|
84
|
-
return fn.accepts;
|
|
85
|
-
} else if (Array.isArray(fn.accepts)) {
|
|
86
|
-
if (fn.accepts.every((s) => s === "string")) {
|
|
87
|
-
return "string";
|
|
88
|
-
} else {
|
|
89
|
-
return "any";
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return "any";
|
|
94
|
-
};
|
|
95
|
-
const functions = columnFunctionDescriptors.columnFunctionDescriptors.map(toFunctionCompletion);
|
|
96
|
-
const getFunctions = ({ functionName }) => {
|
|
97
|
-
if (functionName) {
|
|
98
|
-
const fn = columnFunctionDescriptors.columnFunctionDescriptors.find((f) => f.name === functionName);
|
|
99
|
-
const acceptedTypes = getAcceptedTypes(fn);
|
|
100
|
-
if (fn) {
|
|
101
|
-
switch (acceptedTypes) {
|
|
102
|
-
case "string":
|
|
103
|
-
return columnFunctionDescriptors.columnFunctionDescriptors.filter((f) => f.type === "string" || f.type === "variable").map(toFunctionCompletion);
|
|
104
|
-
case "number":
|
|
105
|
-
return columnFunctionDescriptors.columnFunctionDescriptors.filter((f) => f.type === "number" || f.type === "variable").map(toFunctionCompletion);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return functions;
|
|
110
|
-
};
|
|
111
|
-
const NONE = {};
|
|
112
|
-
const useColumnExpressionSuggestionProvider = ({
|
|
113
|
-
columns,
|
|
114
|
-
table
|
|
115
|
-
}) => {
|
|
116
|
-
const findColumn = react.useCallback(
|
|
117
|
-
(name) => name ? columns.find((col) => col.name === name) : void 0,
|
|
118
|
-
[columns]
|
|
119
|
-
);
|
|
120
|
-
const latestSuggestionsRef = react.useRef();
|
|
121
|
-
const getTypeaheadSuggestions = vuuDataReact.useTypeaheadSuggestions();
|
|
122
|
-
const getSuggestions = react.useCallback(
|
|
123
|
-
async (suggestionType, options = NONE) => {
|
|
124
|
-
const { columnName, functionName, operator, prefix } = options;
|
|
125
|
-
switch (suggestionType) {
|
|
126
|
-
case "expression": {
|
|
127
|
-
const suggestions = await withApplySpace(
|
|
128
|
-
getColumns(columns, { functionName, prefix })
|
|
129
|
-
).concat(getFunctions(options));
|
|
130
|
-
return latestSuggestionsRef.current = suggestions;
|
|
131
|
-
}
|
|
132
|
-
case "column": {
|
|
133
|
-
const suggestions = await getColumns(columns, options);
|
|
134
|
-
return latestSuggestionsRef.current = withApplySpace(suggestions);
|
|
135
|
-
}
|
|
136
|
-
case "operator": {
|
|
137
|
-
const suggestions = await getOperators(findColumn(columnName));
|
|
138
|
-
return latestSuggestionsRef.current = withApplySpace(suggestions);
|
|
139
|
-
}
|
|
140
|
-
case "relational-operator": {
|
|
141
|
-
const suggestions = await vuuCodemirror.getRelationalOperators(
|
|
142
|
-
findColumn(columnName)
|
|
143
|
-
);
|
|
144
|
-
return latestSuggestionsRef.current = withApplySpace(suggestions);
|
|
145
|
-
}
|
|
146
|
-
case "condition-operator":
|
|
147
|
-
{
|
|
148
|
-
const column = findColumn(columnName);
|
|
149
|
-
if (column) {
|
|
150
|
-
const suggestions = await getConditionOperators(column);
|
|
151
|
-
if (suggestions) {
|
|
152
|
-
return latestSuggestionsRef.current = withApplySpace(suggestions);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
break;
|
|
157
|
-
case "columnValue":
|
|
158
|
-
if (columnName && operator) {
|
|
159
|
-
const params = vuuDataReact.getTypeaheadParams(
|
|
160
|
-
table,
|
|
161
|
-
columnName
|
|
162
|
-
/*, startsWith*/
|
|
163
|
-
);
|
|
164
|
-
const suggestions = await getTypeaheadSuggestions(params);
|
|
165
|
-
latestSuggestionsRef.current = vuuCodemirror.toSuggestions(suggestions, {
|
|
166
|
-
suffix: ""
|
|
167
|
-
});
|
|
168
|
-
latestSuggestionsRef.current.forEach((suggestion) => {
|
|
169
|
-
suggestion.apply = (view, completion, from) => {
|
|
170
|
-
const annotation = new vuuCodemirror.AnnotationType();
|
|
171
|
-
const cursorPos = from + completion.label.length + 1;
|
|
172
|
-
view.dispatch({
|
|
173
|
-
changes: { from, insert: completion.label },
|
|
174
|
-
selection: { anchor: cursorPos, head: cursorPos },
|
|
175
|
-
annotations: annotation.of(completion)
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
});
|
|
179
|
-
return latestSuggestionsRef.current;
|
|
180
|
-
}
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
return [];
|
|
184
|
-
},
|
|
185
|
-
[columns, findColumn, getTypeaheadSuggestions, table]
|
|
186
|
-
);
|
|
187
|
-
const isPartialMatch = react.useCallback(
|
|
188
|
-
async (valueType, columnName, pattern) => {
|
|
189
|
-
const { current: latestSuggestions } = latestSuggestionsRef;
|
|
190
|
-
let maybe = false;
|
|
191
|
-
const suggestions = latestSuggestions || await getSuggestions(valueType, { columnName });
|
|
192
|
-
if (pattern && suggestions) {
|
|
193
|
-
for (const option of suggestions) {
|
|
194
|
-
if (option.label === pattern) {
|
|
195
|
-
return false;
|
|
196
|
-
} else if (option.label.startsWith(pattern)) {
|
|
197
|
-
maybe = true;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return maybe;
|
|
202
|
-
},
|
|
203
|
-
[getSuggestions]
|
|
204
|
-
);
|
|
205
|
-
return {
|
|
206
|
-
getSuggestions,
|
|
207
|
-
isPartialMatch
|
|
208
|
-
};
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
exports.useColumnExpressionSuggestionProvider = useColumnExpressionSuggestionProvider;
|
|
212
|
-
//# sourceMappingURL=useColumnExpressionSuggestionProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\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};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns]\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix })\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName)\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/\n );\n const suggestions = await getTypeaheadSuggestions(params);\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n return latestSuggestionsRef.current;\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table]\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\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 maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions]\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":["isNumericColumn","columnFunctionDescriptors","isTextColumn","stringOperators","numericOperators","functionDocInfo","useCallback","useRef","useTypeaheadSuggestions","getRelationalOperators","getTypeaheadParams","toSuggestions","AnnotationType"],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
5
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
-
var core = require('@salt-ds/core');
|
|
7
|
-
var react = require('react');
|
|
8
|
-
var ColumnExpressionInput = require('../column-expression-input/ColumnExpressionInput.js');
|
|
9
|
-
require('../column-expression-input/column-language-parser/ColumnExpressionLanguage.js');
|
|
10
|
-
require('../column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js');
|
|
11
|
-
require('../column-expression-input/column-language-parser/column-expression-parse-utils.js');
|
|
12
|
-
require('@vuu-ui/vuu-codemirror');
|
|
13
|
-
require('../column-expression-input/highlighting.js');
|
|
14
|
-
require('../column-expression-input/theme.js');
|
|
15
|
-
var useColumnExpressionSuggestionProvider = require('../column-expression-input/useColumnExpressionSuggestionProvider.js');
|
|
16
|
-
var useColumnExpression = require('./useColumnExpression.js');
|
|
17
|
-
|
|
18
|
-
const classBase = "vuuColumnExpressionPanel";
|
|
19
|
-
const ColumnExpressionPanel = ({
|
|
20
|
-
column: columnProp,
|
|
21
|
-
onChangeName: onChangeNameProp,
|
|
22
|
-
onChangeServerDataType: onChangeServerDataTypeProp,
|
|
23
|
-
tableConfig,
|
|
24
|
-
vuuTable
|
|
25
|
-
}) => {
|
|
26
|
-
const typeRef = react.useRef(null);
|
|
27
|
-
const { column, onChangeExpression, onChangeName, onChangeServerDataType } = useColumnExpression.useColumnExpression({
|
|
28
|
-
column: columnProp,
|
|
29
|
-
onChangeName: onChangeNameProp,
|
|
30
|
-
onChangeServerDataType: onChangeServerDataTypeProp
|
|
31
|
-
});
|
|
32
|
-
const initialExpressionRef = react.useRef(
|
|
33
|
-
vuuUtils.getCalculatedColumnExpression(column)
|
|
34
|
-
);
|
|
35
|
-
const suggestionProvider = useColumnExpressionSuggestionProvider.useColumnExpressionSuggestionProvider({
|
|
36
|
-
columns: tableConfig.columns,
|
|
37
|
-
table: vuuTable
|
|
38
|
-
});
|
|
39
|
-
const handleSubmitExpression = react.useCallback(() => {
|
|
40
|
-
if (typeRef.current) {
|
|
41
|
-
typeRef.current?.querySelector("button")?.focus();
|
|
42
|
-
}
|
|
43
|
-
}, []);
|
|
44
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classBase, children: [
|
|
45
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "vuuColumnSettingsPanel-header", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Calculation" }) }),
|
|
46
|
-
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": "column-name", children: [
|
|
47
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Column Name" }),
|
|
48
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49
|
-
core.Input,
|
|
50
|
-
{
|
|
51
|
-
className: "vuuInput",
|
|
52
|
-
onChange: onChangeName,
|
|
53
|
-
value: vuuUtils.getCalculatedColumnName(column)
|
|
54
|
-
}
|
|
55
|
-
)
|
|
56
|
-
] }),
|
|
57
|
-
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": "column-expression", children: [
|
|
58
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Expression" }),
|
|
59
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
-
ColumnExpressionInput.ColumnExpressionInput,
|
|
61
|
-
{
|
|
62
|
-
onChange: onChangeExpression,
|
|
63
|
-
onSubmitExpression: handleSubmitExpression,
|
|
64
|
-
source: initialExpressionRef.current,
|
|
65
|
-
suggestionProvider
|
|
66
|
-
}
|
|
67
|
-
)
|
|
68
|
-
] }),
|
|
69
|
-
/* @__PURE__ */ jsxRuntime.jsxs(core.FormField, { "data-field": "type", children: [
|
|
70
|
-
/* @__PURE__ */ jsxRuntime.jsx(core.FormFieldLabel, { children: "Column type" }),
|
|
71
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
72
|
-
vuuUiControls.Dropdown,
|
|
73
|
-
{
|
|
74
|
-
className: `${classBase}-type`,
|
|
75
|
-
onSelectionChange: onChangeServerDataType,
|
|
76
|
-
ref: typeRef,
|
|
77
|
-
selected: vuuUtils.getCalculatedColumnType(column) || null,
|
|
78
|
-
source: ["double", "long", "string", "boolean"],
|
|
79
|
-
width: "100%"
|
|
80
|
-
}
|
|
81
|
-
)
|
|
82
|
-
] })
|
|
83
|
-
] });
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
exports.ColumnExpressionPanel = ColumnExpressionPanel;
|
|
87
|
-
//# sourceMappingURL=ColumnExpressionPanel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnExpressionPanel.js","sources":["../../src/column-expression-panel/ColumnExpressionPanel.tsx"],"sourcesContent":["import { ColumnDescriptor, ColumnSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { Dropdown } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getCalculatedColumnExpression,\n getCalculatedColumnName,\n getCalculatedColumnType,\n} from \"@vuu-ui/vuu-utils\";\nimport { FormField, FormFieldLabel, Input } from \"@salt-ds/core\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport { HTMLAttributes, useCallback, useRef } from \"react\";\nimport {\n ColumnExpressionInput,\n ColumnExpressionSubmitHandler,\n useColumnExpressionSuggestionProvider,\n} from \"../column-expression-input\";\nimport { useColumnExpression } from \"./useColumnExpression\";\n\nconst classBase = \"vuuColumnExpressionPanel\";\n\nexport interface ColumnExpressionPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<ColumnSettingsProps, \"tableConfig\" | \"vuuTable\"> {\n column: ColumnDescriptor;\n /**\n * Callback prop, invoked on every change to calculated column definition\n * @param calculatedColumnName the full calculated column name\n */\n onChangeName?: (name: string) => void;\n onChangeServerDataType?: (name: VuuColumnDataType) => void;\n}\n\nexport const ColumnExpressionPanel = ({\n column: columnProp,\n onChangeName: onChangeNameProp,\n onChangeServerDataType: onChangeServerDataTypeProp,\n tableConfig,\n vuuTable,\n}: ColumnExpressionPanelProps) => {\n const typeRef = useRef<HTMLDivElement>(null);\n const { column, onChangeExpression, onChangeName, onChangeServerDataType } =\n useColumnExpression({\n column: columnProp,\n onChangeName: onChangeNameProp,\n onChangeServerDataType: onChangeServerDataTypeProp,\n });\n // The initial value to pass into the Expression Input. That is a\n // CodeMirror editor and will manage its own state once initialised.\n const initialExpressionRef = useRef<string>(\n getCalculatedColumnExpression(column)\n );\n\n const suggestionProvider = useColumnExpressionSuggestionProvider({\n columns: tableConfig.columns,\n table: vuuTable,\n });\n\n const handleSubmitExpression =\n useCallback<ColumnExpressionSubmitHandler>(() => {\n if (typeRef.current) {\n (\n typeRef.current?.querySelector(\"button\") as HTMLButtonElement\n )?.focus();\n }\n }, []);\n\n return (\n <div className={classBase}>\n <div className=\"vuuColumnSettingsPanel-header\">\n <span>Calculation</span>\n </div>\n\n <FormField data-field=\"column-name\">\n <FormFieldLabel>Column Name</FormFieldLabel>\n <Input\n className=\"vuuInput\"\n onChange={onChangeName}\n value={getCalculatedColumnName(column)}\n />\n </FormField>\n\n <FormField data-field=\"column-expression\">\n <FormFieldLabel>Expression</FormFieldLabel>\n <ColumnExpressionInput\n onChange={onChangeExpression}\n onSubmitExpression={handleSubmitExpression}\n source={initialExpressionRef.current}\n suggestionProvider={suggestionProvider}\n />\n </FormField>\n <FormField data-field=\"type\">\n <FormFieldLabel>Column type</FormFieldLabel>\n <Dropdown\n className={`${classBase}-type`}\n onSelectionChange={onChangeServerDataType}\n ref={typeRef}\n selected={getCalculatedColumnType(column) || null}\n source={[\"double\", \"long\", \"string\", \"boolean\"]}\n width=\"100%\"\n />\n </FormField>\n </div>\n );\n};\n"],"names":["useRef","useColumnExpression","getCalculatedColumnExpression","useColumnExpressionSuggestionProvider","useCallback","jsxs","jsx","FormField","FormFieldLabel","Input","getCalculatedColumnName","ColumnExpressionInput","Dropdown","getCalculatedColumnType"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAM,SAAY,GAAA,0BAAA,CAAA;AAcX,MAAM,wBAAwB,CAAC;AAAA,EACpC,MAAQ,EAAA,UAAA;AAAA,EACR,YAAc,EAAA,gBAAA;AAAA,EACd,sBAAwB,EAAA,0BAAA;AAAA,EACxB,WAAA;AAAA,EACA,QAAA;AACF,CAAkC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUA,aAAuB,IAAI,CAAA,CAAA;AAC3C,EAAA,MAAM,EAAE,MAAQ,EAAA,kBAAA,EAAoB,YAAc,EAAA,sBAAA,KAChDC,uCAAoB,CAAA;AAAA,IAClB,MAAQ,EAAA,UAAA;AAAA,IACR,YAAc,EAAA,gBAAA;AAAA,IACd,sBAAwB,EAAA,0BAAA;AAAA,GACzB,CAAA,CAAA;AAGH,EAAA,MAAM,oBAAuB,GAAAD,YAAA;AAAA,IAC3BE,uCAA8B,MAAM,CAAA;AAAA,GACtC,CAAA;AAEA,EAAA,MAAM,qBAAqBC,2EAAsC,CAAA;AAAA,IAC/D,SAAS,WAAY,CAAA,OAAA;AAAA,IACrB,KAAO,EAAA,QAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAM,MAAA,sBAAA,GACJC,kBAA2C,MAAM;AAC/C,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MACE,OAAQ,CAAA,OAAA,EAAS,aAAc,CAAA,QAAQ,GACtC,KAAM,EAAA,CAAA;AAAA,KACX;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEP,EACE,uBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,SAAI,SAAU,EAAA,+BAAA,EACb,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA,EAAK,yBAAW,CACnB,EAAA,CAAA;AAAA,oBAEAD,eAAA,CAACE,cAAU,EAAA,EAAA,YAAA,EAAW,aACpB,EAAA,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAACE,uBAAe,QAAW,EAAA,aAAA,EAAA,CAAA;AAAA,sBAC3BF,cAAA;AAAA,QAACG,UAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,UAAA;AAAA,UACV,QAAU,EAAA,YAAA;AAAA,UACV,KAAA,EAAOC,iCAAwB,MAAM,CAAA;AAAA,SAAA;AAAA,OACvC;AAAA,KACF,EAAA,CAAA;AAAA,oBAEAL,eAAA,CAACE,cAAU,EAAA,EAAA,YAAA,EAAW,mBACpB,EAAA,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAACE,uBAAe,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,sBAC1BF,cAAA;AAAA,QAACK,2CAAA;AAAA,QAAA;AAAA,UACC,QAAU,EAAA,kBAAA;AAAA,UACV,kBAAoB,EAAA,sBAAA;AAAA,UACpB,QAAQ,oBAAqB,CAAA,OAAA;AAAA,UAC7B,kBAAA;AAAA,SAAA;AAAA,OACF;AAAA,KACF,EAAA,CAAA;AAAA,oBACAN,eAAA,CAACE,cAAU,EAAA,EAAA,YAAA,EAAW,MACpB,EAAA,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAACE,uBAAe,QAAW,EAAA,aAAA,EAAA,CAAA;AAAA,sBAC3BF,cAAA;AAAA,QAACM,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,SAAS,CAAA,KAAA,CAAA;AAAA,UACvB,iBAAmB,EAAA,sBAAA;AAAA,UACnB,GAAK,EAAA,OAAA;AAAA,UACL,QAAA,EAAUC,gCAAwB,CAAA,MAAM,CAAK,IAAA,IAAA;AAAA,UAC7C,MAAQ,EAAA,CAAC,QAAU,EAAA,MAAA,EAAQ,UAAU,SAAS,CAAA;AAAA,UAC9C,KAAM,EAAA,MAAA;AAAA,SAAA;AAAA,OACR;AAAA,KACF,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
|
|
6
|
-
const applyDefaults = (column) => {
|
|
7
|
-
const [name, expression, type] = vuuUtils.getCalculatedColumnDetails(column);
|
|
8
|
-
if (type === "") {
|
|
9
|
-
return {
|
|
10
|
-
...column,
|
|
11
|
-
name: `${name}:string:${expression}`
|
|
12
|
-
};
|
|
13
|
-
} else {
|
|
14
|
-
return column;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
const useColumnExpression = ({
|
|
18
|
-
column: columnProp,
|
|
19
|
-
onChangeName: onChangeNameProp,
|
|
20
|
-
onChangeServerDataType: onChangeServerDataTypeProp
|
|
21
|
-
}) => {
|
|
22
|
-
const [column, _setColumn] = react.useState(
|
|
23
|
-
applyDefaults(columnProp)
|
|
24
|
-
);
|
|
25
|
-
const columnRef = react.useRef(columnProp);
|
|
26
|
-
const setColumn = react.useCallback((column2) => {
|
|
27
|
-
columnRef.current = column2;
|
|
28
|
-
_setColumn(column2);
|
|
29
|
-
}, []);
|
|
30
|
-
const onChangeName = react.useCallback(
|
|
31
|
-
(evt) => {
|
|
32
|
-
const { value } = evt.target;
|
|
33
|
-
const newColumn = vuuUtils.setCalculatedColumnName(column, value);
|
|
34
|
-
setColumn(newColumn);
|
|
35
|
-
onChangeNameProp?.(newColumn.name);
|
|
36
|
-
},
|
|
37
|
-
[column, onChangeNameProp, setColumn]
|
|
38
|
-
);
|
|
39
|
-
const onChangeExpression = react.useCallback(
|
|
40
|
-
(value) => {
|
|
41
|
-
const expression = value.trim();
|
|
42
|
-
const { current: column2 } = columnRef;
|
|
43
|
-
const newColumn = vuuUtils.setCalculatedColumnExpression(column2, expression);
|
|
44
|
-
setColumn(newColumn);
|
|
45
|
-
onChangeNameProp?.(newColumn.name);
|
|
46
|
-
},
|
|
47
|
-
[onChangeNameProp, setColumn]
|
|
48
|
-
);
|
|
49
|
-
const onChangeServerDataType = react.useCallback(
|
|
50
|
-
(evt, value) => {
|
|
51
|
-
if (vuuUtils.isVuuColumnDataType(value)) {
|
|
52
|
-
const newColumn = vuuUtils.setCalculatedColumnType(column, value);
|
|
53
|
-
setColumn(newColumn);
|
|
54
|
-
onChangeNameProp?.(newColumn.name);
|
|
55
|
-
onChangeServerDataTypeProp?.(value);
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
[column, onChangeNameProp, onChangeServerDataTypeProp, setColumn]
|
|
59
|
-
);
|
|
60
|
-
return {
|
|
61
|
-
column,
|
|
62
|
-
onChangeExpression,
|
|
63
|
-
onChangeName,
|
|
64
|
-
onChangeServerDataType
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
exports.useColumnExpression = useColumnExpression;
|
|
69
|
-
//# sourceMappingURL=useColumnExpression.js.map
|