@vuu-ui/vuu-table-extras 0.8.84 → 0.8.86

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.
Files changed (75) hide show
  1. package/cjs/cell-renderers/background-cell/BackgroundCell.js.map +1 -1
  2. package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -1
  3. package/cjs/cell-renderers/background-cell/useDirection.js.map +1 -1
  4. package/cjs/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -1
  5. package/cjs/cell-renderers/lookup-cell/LookupCell.js.map +1 -1
  6. package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -1
  7. package/cjs/cell-renderers/progress-cell/ProgressCell.js.map +1 -1
  8. package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +1 -0
  9. package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -1
  10. package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
  11. package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -1
  12. package/cjs/column-expression-input/functionDocInfo.js.map +1 -1
  13. package/cjs/column-expression-input/highlighting.js.map +1 -1
  14. package/cjs/column-expression-input/theme.js.map +1 -1
  15. package/cjs/column-expression-input/useColumnAutoComplete.js.map +1 -1
  16. package/cjs/column-expression-input/useColumnExpressionEditor.js.map +1 -1
  17. package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js +1 -0
  18. package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
  19. package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +1 -1
  20. package/cjs/column-expression-panel/useColumnExpression.js.map +1 -1
  21. package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
  22. package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
  23. package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
  24. package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
  25. package/cjs/column-list/ColumnList.js.map +1 -1
  26. package/cjs/column-settings/ColumnNameLabel.js.map +1 -1
  27. package/cjs/column-settings/ColumnSettingsPanel.js.map +1 -1
  28. package/cjs/column-settings/useColumnSettings.js.map +1 -1
  29. package/cjs/datasource-stats/DatasourceStats.js.map +1 -1
  30. package/cjs/table-settings/TableSettingsPanel.js.map +1 -1
  31. package/cjs/table-settings/useTableSettings.js.map +1 -1
  32. package/esm/cell-renderers/background-cell/BackgroundCell.js.map +1 -1
  33. package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -1
  34. package/esm/cell-renderers/background-cell/useDirection.js.map +1 -1
  35. package/esm/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -1
  36. package/esm/cell-renderers/lookup-cell/LookupCell.js.map +1 -1
  37. package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -1
  38. package/esm/cell-renderers/progress-cell/ProgressCell.js.map +1 -1
  39. package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +1 -0
  40. package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -1
  41. package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
  42. package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -1
  43. package/esm/column-expression-input/functionDocInfo.js.map +1 -1
  44. package/esm/column-expression-input/highlighting.js.map +1 -1
  45. package/esm/column-expression-input/theme.js.map +1 -1
  46. package/esm/column-expression-input/useColumnAutoComplete.js.map +1 -1
  47. package/esm/column-expression-input/useColumnExpressionEditor.js.map +1 -1
  48. package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js +1 -0
  49. package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
  50. package/esm/column-expression-panel/ColumnExpressionPanel.js.map +1 -1
  51. package/esm/column-expression-panel/useColumnExpression.js.map +1 -1
  52. package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
  53. package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
  54. package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
  55. package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
  56. package/esm/column-list/ColumnList.js.map +1 -1
  57. package/esm/column-settings/ColumnNameLabel.js.map +1 -1
  58. package/esm/column-settings/ColumnSettingsPanel.js.map +1 -1
  59. package/esm/column-settings/useColumnSettings.js.map +1 -1
  60. package/esm/datasource-stats/DatasourceStats.js.map +1 -1
  61. package/esm/table-settings/TableSettingsPanel.js.map +1 -1
  62. package/esm/table-settings/useTableSettings.js.map +1 -1
  63. package/package.json +12 -12
  64. package/types/cell-renderers/background-cell/BackgroundCellConfigurationEditor.d.ts +1 -1
  65. package/types/column-expression-input/functionDocInfo.d.ts +1 -1
  66. package/types/column-expression-input/useColumnExpressionEditor.d.ts +1 -1
  67. package/types/column-expression-input/useColumnExpressionSuggestionProvider.d.ts +1 -1
  68. package/types/column-expression-panel/ColumnExpressionPanel.d.ts +1 -1
  69. package/types/column-expression-panel/useColumnExpression.d.ts +1 -1
  70. package/types/column-formatting-settings/BaseNumericFormattingSettings.d.ts +1 -1
  71. package/types/column-settings/ColumnSettingsPanel.d.ts +1 -1
  72. package/types/column-settings/useColumnSettings.d.ts +1 -1
  73. package/types/datasource-stats/DatasourceStats.d.ts +1 -1
  74. package/types/table-settings/TableSettingsPanel.d.ts +1 -1
  75. package/types/table-settings/useTableSettings.d.ts +1 -1
@@ -1 +1 @@
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
+ {"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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"}
@@ -159,6 +159,7 @@ const useColumnExpressionSuggestionProvider = ({
159
159
  const params = vuuDataReact.getTypeaheadParams(
160
160
  table,
161
161
  columnName
162
+ /*, startsWith*/
162
163
  );
163
164
  const suggestions = await getTypeaheadSuggestions(params);
164
165
  latestSuggestionsRef.current = vuuCodemirror.toSuggestions(suggestions, {
@@ -1 +1 @@
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":";;;;;;;;;AA4BA,MAAM,eAAe,EAAC,CAAA;AAEtB,MAAM,iBAAiB,CAAC,WAAA,KACtB,WAAY,CAAA,GAAA,CAAI,CAAC,UAAgB,MAAA;AAAA,EAC/B,GAAG,UAAA;AAAA,EACH,KAAQ,EAAA,CAAA,UAAA,CAAW,KAAS,IAAA,UAAA,CAAW,KAAS,IAAA,GAAA;AAClD,CAAE,CAAA,CAAA,CAAA;AAQJ,MAAM,kBAAkB,CACtB,OAAA,EACA,EAAE,YAAA,EAAc,UACb,KAAA;AACH,EAAA,IAAI,QAAU,EAAA;AACZ,IAAO,OAAA,OAAA,CAAQ,OAAOA,wBAAe,CAAA,CAAA;AAAA,aAC5B,YAAc,EAAA;AACvB,IAAA,MAAM,KAAKC,mDAA0B,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,YAAY,CAAA,CAAA;AACxE,IAAA,IAAI,EAAI,EAAA;AACN,MAAA,QAAQ,GAAG,OAAS;AAAA,QAClB,KAAK,QAAA;AACH,UAAO,OAAA,OAAA,CAAQ,OAAOC,qBAAY,CAAA,CAAA;AAAA,QACpC,KAAK,QAAA;AACH,UAAO,OAAA,OAAA,CAAQ,OAAOF,wBAAe,CAAA,CAAA;AAAA,QACvC;AACE,UAAO,OAAA,OAAA,CAAA;AAAA,OACX;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,OAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,OAAA,EAA6B,OAA2B,KAAA;AAC1E,EAAM,MAAA,YAAA,GAAe,eAAgB,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACrD,EAAO,OAAA,YAAA,CAAa,GAAI,CAAA,CAAC,MAAW,KAAA;AAClC,IAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,IAAS,MAAO,CAAA,IAAA,CAAA;AACrC,IAAO,OAAA;AAAA,MACL,KAAA,EAAO,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA,OAAA,CAAQ,MAAM,CAAG,EAAA,MAAA,CAAO,IAAI,CAAA,CAAA,GAAK,MAAO,CAAA,IAAA;AAAA,MACnE,KAAA;AAAA,MACA,KAAO,EAAA,CAAA;AAAA,MACP,IAAM,EAAA,QAAA;AAAA,MACN,gBAAgB,MAAO,CAAA,cAAA;AAAA,KACzB,CAAA;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAGA,MAAM,mBAAsB,GAAA;AAAA,EAC1B,EAAE,OAAO,IAAM,EAAA,KAAA,EAAO,GAAG,KAAO,EAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AAAA,EACtD,EAAE,OAAO,IAAM,EAAA,KAAA,EAAO,GAAG,KAAO,EAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AAAA,EACtD,EAAE,OAAO,IAAM,EAAA,KAAA,EAAO,GAAG,KAAO,EAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AAAA,EACtD,EAAE,OAAO,IAAM,EAAA,KAAA,EAAO,GAAG,KAAO,EAAA,GAAA,EAAK,MAAM,UAAW,EAAA;AACxD,CAAA,CAAA;AAEA,MAAM,YAAA,GAAe,CAAC,MAA8B,KAAA;AAClD,EAAA,IAAI,MAAW,KAAA,KAAA,CAAA,IAAaA,wBAAgB,CAAA,MAAM,CAAG,EAAA;AACnD,IAAO,OAAA,mBAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,YAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,MAAM,qBAAA,GAAwB,CAAC,MAA6B,KAAA;AAC1D,EAAA,QAAQ,OAAO,cAAgB;AAAA,IAC7B,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAO,OAAA,cAAA;AAAA,QAAeG,6BAAA;AAAA;AAAA,OAAgC,CAAA;AAAA,IACxD,KAAK,KAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,eAAeC,8BAAgB,CAAA,CAAA;AAAA,GAC1C;AACF,CAAA,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAC3B,kBACI,MAAA;AAAA,EACJ,KAAA,EAAO,CAAG,EAAA,kBAAA,CAAmB,IAAI,CAAA,EAAA,CAAA;AAAA,EACjC,KAAO,EAAA,CAAA;AAAA,EACP,gBAAgB,kBAAmB,CAAA,IAAA;AAAA,EACnC,IAAA,EAAM,MAAMC,+BAAA,CAAgB,kBAAkB,CAAA;AAAA,EAC9C,OAAO,kBAAmB,CAAA,IAAA;AAAA,EAC1B,IAAM,EAAA,UAAA;AACR,CAAA,CAAA,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,EAAkC,KAAA;AAC1D,EAAA,IAAI,EAAI,EAAA;AACN,IAAI,IAAA,OAAO,EAAG,CAAA,OAAA,KAAY,QAAU,EAAA;AAClC,MAAA,OAAO,EAAG,CAAA,OAAA,CAAA;AAAA,KACD,MAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,EAAA,CAAG,OAAO,CAAG,EAAA;AACpC,MAAA,IAAI,GAAG,OAAQ,CAAA,KAAA,CAAM,CAAC,CAAM,KAAA,CAAA,KAAM,QAAQ,CAAG,EAAA;AAC3C,QAAO,OAAA,QAAA,CAAA;AAAA,OACF,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,SAAA,GACJJ,mDAA0B,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA;AAEpD,MAAM,YAAe,GAAA,CAAC,EAAE,YAAA,EAAkC,KAAA;AACxD,EAAA,IAAI,YAAc,EAAA;AAChB,IAAA,MAAM,KAAKA,mDAA0B,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,YAAY,CAAA,CAAA;AACxE,IAAM,MAAA,aAAA,GAAgB,iBAAiB,EAAE,CAAA,CAAA;AACzC,IAAA,IAAI,EAAI,EAAA;AACN,MAAA,QAAQ,aAAe;AAAA,QACrB,KAAK,QAAA;AACH,UAAA,OAAOA,mDACJ,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,KAAS,QAAY,IAAA,CAAA,CAAE,IAAS,KAAA,UAAU,CAC1D,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA;AAAA,QAC7B,KAAK,QAAA;AACH,UAAA,OAAOA,mDACJ,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,KAAS,QAAY,IAAA,CAAA,CAAE,IAAS,KAAA,UAAU,CAC1D,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA;AAC7B,OACF;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAOA,MAAM,OAAO,EAAC,CAAA;AAEP,MAAM,wCAAwC,CAAC;AAAA,EACpD,OAAA;AAAA,EACA,KAAA;AACF,CAAkE,KAAA;AAChE,EAAA,MAAM,UAAa,GAAAK,iBAAA;AAAA,IACjB,CAAC,IACC,KAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAS,KAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAAA,IACpD,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,uBAAuBC,YAAqB,EAAA,CAAA;AAClD,EAAA,MAAM,0BAA0BC,oCAAwB,EAAA,CAAA;AAExD,EAAA,MAAM,cACJ,GAAAF,iBAAA;AAAA,IACE,OAAO,cAAgB,EAAA,OAAA,GAAU,IAAgC,KAAA;AAC/D,MAAA,MAAM,EAAE,UAAA,EAAY,YAAc,EAAA,QAAA,EAAU,QAAW,GAAA,OAAA,CAAA;AAEvD,MAAA,QAAQ,cAAgB;AAAA,QACtB,KAAK,YAAc,EAAA;AACjB,UAAA,MAAM,cAAc,MAAM,cAAA;AAAA,YACxB,UAAW,CAAA,OAAA,EAAS,EAAE,YAAA,EAAc,QAAQ,CAAA;AAAA,WAC5C,CAAA,MAAA,CAAO,YAAa,CAAA,OAAO,CAAC,CAAA,CAAA;AAC9B,UAAA,OAAQ,qBAAqB,OAAU,GAAA,WAAA,CAAA;AAAA,SACzC;AAAA,QACA,KAAK,QAAU,EAAA;AACb,UAAA,MAAM,WAAc,GAAA,MAAM,UAAW,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACrD,UAAQ,OAAA,oBAAA,CAAqB,OAAU,GAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAAA,SACnE;AAAA,QACA,KAAK,UAAY,EAAA;AACf,UAAA,MAAM,WAAc,GAAA,MAAM,YAAa,CAAA,UAAA,CAAW,UAAU,CAAC,CAAA,CAAA;AAC7D,UAAQ,OAAA,oBAAA,CAAqB,OAAU,GAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAAA,SACnE;AAAA,QACA,KAAK,qBAAuB,EAAA;AAC1B,UAAA,MAAM,cAAc,MAAMG,oCAAA;AAAA,YACxB,WAAW,UAAU,CAAA;AAAA,WACvB,CAAA;AACA,UAAQ,OAAA,oBAAA,CAAqB,OAAU,GAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAAA,SACnE;AAAA,QACA,KAAK,oBAAA;AACH,UAAA;AACE,YAAM,MAAA,MAAA,GAAS,WAAW,UAAU,CAAA,CAAA;AACpC,YAAA,IAAI,MAAQ,EAAA;AACV,cAAM,MAAA,WAAA,GAAc,MAAM,qBAAA,CAAsB,MAAM,CAAA,CAAA;AACtD,cAAA,IAAI,WAAa,EAAA;AACf,gBAAQ,OAAA,oBAAA,CAAqB,OAC3B,GAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAAA,eAC9B;AAAA,aACF;AAAA,WACF;AACA,UAAA,MAAA;AAAA,QACF,KAAK,aAAA;AACH,UAAA,IAAI,cAAc,QAAU,EAAA;AAE1B,YAAA,MAAM,MAAS,GAAAC,+BAAA;AAAA,cACb,KAAA;AAAA,cACA,UAAA;AAAA,aACF,CAAA;AACA,YAAM,MAAA,WAAA,GAAc,MAAM,uBAAA,CAAwB,MAAM,CAAA,CAAA;AACxD,YAAqB,oBAAA,CAAA,OAAA,GAAUC,4BAAc,WAAa,EAAA;AAAA,cACxD,MAAQ,EAAA,EAAA;AAAA,aACT,CAAA,CAAA;AAED,YAAqB,oBAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,UAAe,KAAA;AACnD,cAAA,UAAA,CAAW,KAAQ,GAAA,CACjB,IACA,EAAA,UAAA,EACA,IACG,KAAA;AACH,gBAAM,MAAA,UAAA,GAAa,IAAIC,4BAA2B,EAAA,CAAA;AAClD,gBAAA,MAAM,SAAY,GAAA,IAAA,GAAO,UAAW,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA;AACnD,gBAAA,IAAA,CAAK,QAAS,CAAA;AAAA,kBACZ,OAAS,EAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,WAAW,KAAM,EAAA;AAAA,kBAC1C,SAAW,EAAA,EAAE,MAAQ,EAAA,SAAA,EAAW,MAAM,SAAU,EAAA;AAAA,kBAChD,WAAA,EAAa,UAAW,CAAA,EAAA,CAAG,UAAU,CAAA;AAAA,iBACtC,CAAA,CAAA;AAAA,eACH,CAAA;AAAA,aACD,CAAA,CAAA;AACD,YAAA,OAAO,oBAAqB,CAAA,OAAA,CAAA;AAAA,WAC9B;AACA,UAAA,MAAA;AAAA,OACJ;AAEA,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAAA,IACA,CAAC,OAAA,EAAS,UAAY,EAAA,uBAAA,EAAyB,KAAK,CAAA;AAAA,GACtD,CAAA;AAEF,EAAA,MAAM,cAAiB,GAAAN,iBAAA;AAAA,IACrB,OACE,SACA,EAAA,UAAA,EACA,OACG,KAAA;AACH,MAAM,MAAA,EAAE,OAAS,EAAA,iBAAA,EAAsB,GAAA,oBAAA,CAAA;AACvC,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,MAAA,MAAM,cACJ,iBAAsB,IAAA,MAAM,eAAe,SAAW,EAAA,EAAE,YAAY,CAAA,CAAA;AACtE,MAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,QAAA,KAAA,MAAW,UAAU,WAAa,EAAA;AAChC,UAAI,IAAA,MAAA,CAAO,UAAU,OAAS,EAAA;AAC5B,YAAO,OAAA,KAAA,CAAA;AAAA,WACE,MAAA,IAAA,MAAA,CAAO,KAAM,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AAC3C,YAAQ,KAAA,GAAA,IAAA,CAAA;AAAA,WACV;AAAA,SACF;AAAA,OACF;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF;;;;"}
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 +1 @@
1
- {"version":3,"file":"ColumnExpressionPanel.js","sources":["../../src/column-expression-panel/ColumnExpressionPanel.tsx"],"sourcesContent":["import { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor, ColumnSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { getCalculatedColumnDetails } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Input,\n Option,\n} from \"@salt-ds/core\";\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<HTMLButtonElement>(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 getCalculatedColumnDetails(column).expression ?? \"\",\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 const { name, serverDataType } = getCalculatedColumnDetails(column);\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 className=\"vuuInput\" onChange={onChangeName} value={name} />\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={serverDataType ? [serverDataType] : []}\n value={serverDataType}\n >\n <Option value=\"boolean\">Boolean</Option>\n <Option value=\"double\">Double</Option>\n <Option value=\"long\">Long</Option>\n <Option value=\"string\">String</Option>\n </Dropdown>\n </FormField>\n </div>\n );\n};\n"],"names":["useRef","useColumnExpression","getCalculatedColumnDetails","useColumnExpressionSuggestionProvider","useCallback","jsxs","jsx","FormField","FormFieldLabel","Input","ColumnExpressionInput","Dropdown","Option"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnExpressionPanel.js","sources":["../../src/column-expression-panel/ColumnExpressionPanel.tsx"],"sourcesContent":["import { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor, ColumnSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { getCalculatedColumnDetails } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Input,\n Option\n} from \"@salt-ds/core\";\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<HTMLButtonElement>(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 getCalculatedColumnDetails(column).expression ?? \"\"\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 const { name, serverDataType } = getCalculatedColumnDetails(column);\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 className=\"vuuInput\" onChange={onChangeName} value={name} />\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={serverDataType ? [serverDataType] : []}\n value={serverDataType}\n >\n <Option value=\"boolean\">Boolean</Option>\n <Option value=\"double\">Double</Option>\n <Option value=\"long\">Long</Option>\n <Option value=\"string\">String</Option>\n </Dropdown>\n </FormField>\n </div>\n );\n};\n"],"names":["useRef","useColumnExpression","getCalculatedColumnDetails","useColumnExpressionSuggestionProvider","useCallback","jsxs","jsx","FormField","FormFieldLabel","Input","ColumnExpressionInput","Dropdown","Option"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnExpression.js","sources":["../../src/column-expression-panel/useColumnExpression.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n getCalculatedColumnDetails,\n isVuuColumnDataType,\n setCalculatedColumnExpression,\n setCalculatedColumnName,\n setCalculatedColumnType,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FormEventHandler,\n SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnExpressionPanelProps } from \"./ColumnExpressionPanel\";\n\nexport type ColumnExpressionHookProps = Pick<\n ColumnExpressionPanelProps,\n \"column\" | \"onChangeName\" | \"onChangeServerDataType\"\n>;\n\nconst applyDefaults = (column: ColumnDescriptor) => {\n const { name, expression, serverDataType } =\n getCalculatedColumnDetails(column);\n if (serverDataType === undefined) {\n return {\n ...column,\n name: `${name}:string:${expression}`,\n };\n } else {\n return column;\n }\n};\n\nexport const useColumnExpression = ({\n column: columnProp,\n onChangeName: onChangeNameProp,\n onChangeServerDataType: onChangeServerDataTypeProp,\n}: ColumnExpressionHookProps) => {\n const [column, _setColumn] = useState<ColumnDescriptor>(\n applyDefaults(columnProp),\n );\n const columnRef = useRef<ColumnDescriptor>(columnProp);\n const setColumn = useCallback((column: ColumnDescriptor) => {\n columnRef.current = column;\n _setColumn(column);\n }, []);\n\n // We need to track column name in a ref because ColunExpressionInput\n // is not a pure React component, it hosts a CodeMirror editor. We\n // do not want to cause it to render mid-edit. Therefore it uses memo\n // and only renders on initial load. onChangeExpression must be stable.\n // const columnNameRef = useRef<string>(column.name);\n // const expressionRef = useRef(getCalculatedColumnDetails(column)[1]);\n\n const onChangeName = useCallback<FormEventHandler>(\n (evt) => {\n const { value } = evt.target as HTMLInputElement;\n const newColumn = setCalculatedColumnName(column, value);\n // columnNameRef.current = newColumn.name;\n setColumn(newColumn);\n onChangeNameProp?.(newColumn.name);\n },\n [column, onChangeNameProp, setColumn],\n );\n\n const onChangeExpression = useCallback(\n (value: string) => {\n // we do not set state when this changes as the codemirror editor\n // manages state of the expression for us until complete\n const expression = value.trim();\n // expressionRef.current = expression;\n // const [name, , type] = column.name.split(\":\");\n // columnNameRef.current = `${name}:${expression}:${type}`;\n\n const { current: column } = columnRef;\n const newColumn = setCalculatedColumnExpression(column, expression);\n setColumn(newColumn);\n\n onChangeNameProp?.(newColumn.name);\n\n // console.log(`calculatedColumnName ${columnNameRef.current}`);\n },\n [onChangeNameProp, setColumn],\n );\n\n const onChangeServerDataType = useCallback(\n (_e: SyntheticEvent, [serverDataType]: string[]) => {\n if (isVuuColumnDataType(serverDataType)) {\n const newColumn = setCalculatedColumnType(column, serverDataType);\n setColumn(newColumn);\n onChangeNameProp?.(newColumn.name);\n onChangeServerDataTypeProp?.(serverDataType);\n }\n },\n [column, onChangeNameProp, onChangeServerDataTypeProp, setColumn],\n );\n\n return {\n column,\n onChangeExpression,\n onChangeName,\n onChangeServerDataType,\n };\n};\n"],"names":["getCalculatedColumnDetails","useState","useRef","useCallback","column","setCalculatedColumnName","setCalculatedColumnExpression","isVuuColumnDataType","setCalculatedColumnType"],"mappings":";;;;;AAsBA,MAAM,aAAA,GAAgB,CAAC,MAA6B,KAAA;AAClD,EAAA,MAAM,EAAE,IAAM,EAAA,UAAA,EAAY,cAAe,EAAA,GACvCA,oCAA2B,MAAM,CAAA,CAAA;AACnC,EAAA,IAAI,mBAAmB,KAAW,CAAA,EAAA;AAChC,IAAO,OAAA;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAM,EAAA,CAAA,EAAG,IAAI,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA;AAAA,KACpC,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC,MAAQ,EAAA,UAAA;AAAA,EACR,YAAc,EAAA,gBAAA;AAAA,EACd,sBAAwB,EAAA,0BAAA;AAC1B,CAAiC,KAAA;AAC/B,EAAM,MAAA,CAAC,MAAQ,EAAA,UAAU,CAAI,GAAAC,cAAA;AAAA,IAC3B,cAAc,UAAU,CAAA;AAAA,GAC1B,CAAA;AACA,EAAM,MAAA,SAAA,GAAYC,aAAyB,UAAU,CAAA,CAAA;AACrD,EAAM,MAAA,SAAA,GAAYC,iBAAY,CAAA,CAACC,OAA6B,KAAA;AAC1D,IAAA,SAAA,CAAU,OAAUA,GAAAA,OAAAA,CAAAA;AACpB,IAAA,UAAA,CAAWA,OAAM,CAAA,CAAA;AAAA,GACnB,EAAG,EAAE,CAAA,CAAA;AASL,EAAA,MAAM,YAAe,GAAAD,iBAAA;AAAA,IACnB,CAAC,GAAQ,KAAA;AACP,MAAM,MAAA,EAAE,KAAM,EAAA,GAAI,GAAI,CAAA,MAAA,CAAA;AACtB,MAAM,MAAA,SAAA,GAAYE,gCAAwB,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAEvD,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AACnB,MAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AAAA,KACnC;AAAA,IACA,CAAC,MAAQ,EAAA,gBAAA,EAAkB,SAAS,CAAA;AAAA,GACtC,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAF,iBAAA;AAAA,IACzB,CAAC,KAAkB,KAAA;AAGjB,MAAM,MAAA,UAAA,GAAa,MAAM,IAAK,EAAA,CAAA;AAK9B,MAAM,MAAA,EAAE,OAASC,EAAAA,OAAAA,EAAW,GAAA,SAAA,CAAA;AAC5B,MAAM,MAAA,SAAA,GAAYE,sCAA8BF,CAAAA,OAAAA,EAAQ,UAAU,CAAA,CAAA;AAClE,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAEnB,MAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AAAA,KAGnC;AAAA,IACA,CAAC,kBAAkB,SAAS,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,MAAM,sBAAyB,GAAAD,iBAAA;AAAA,IAC7B,CAAC,EAAA,EAAoB,CAAC,cAAc,CAAgB,KAAA;AAClD,MAAI,IAAAI,4BAAA,CAAoB,cAAc,CAAG,EAAA;AACvC,QAAM,MAAA,SAAA,GAAYC,gCAAwB,CAAA,MAAA,EAAQ,cAAc,CAAA,CAAA;AAChE,QAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AACnB,QAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AACjC,QAAA,0BAAA,GAA6B,cAAc,CAAA,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,CAAC,MAAA,EAAQ,gBAAkB,EAAA,0BAAA,EAA4B,SAAS,CAAA;AAAA,GAClE,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,sBAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useColumnExpression.js","sources":["../../src/column-expression-panel/useColumnExpression.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n getCalculatedColumnDetails,\n isVuuColumnDataType,\n setCalculatedColumnExpression,\n setCalculatedColumnName,\n setCalculatedColumnType\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FormEventHandler,\n SyntheticEvent,\n useCallback,\n useRef,\n useState\n} from \"react\";\nimport { ColumnExpressionPanelProps } from \"./ColumnExpressionPanel\";\n\nexport type ColumnExpressionHookProps = Pick<\n ColumnExpressionPanelProps,\n \"column\" | \"onChangeName\" | \"onChangeServerDataType\"\n>;\n\nconst applyDefaults = (column: ColumnDescriptor) => {\n const { name, expression, serverDataType } =\n getCalculatedColumnDetails(column);\n if (serverDataType === undefined) {\n return {\n ...column,\n name: `${name}:string:${expression}`\n };\n } else {\n return column;\n }\n};\n\nexport const useColumnExpression = ({\n column: columnProp,\n onChangeName: onChangeNameProp,\n onChangeServerDataType: onChangeServerDataTypeProp\n}: ColumnExpressionHookProps) => {\n const [column, _setColumn] = useState<ColumnDescriptor>(\n applyDefaults(columnProp)\n );\n const columnRef = useRef<ColumnDescriptor>(columnProp);\n const setColumn = useCallback((column: ColumnDescriptor) => {\n columnRef.current = column;\n _setColumn(column);\n }, []);\n\n // We need to track column name in a ref because ColunExpressionInput\n // is not a pure React component, it hosts a CodeMirror editor. We\n // do not want to cause it to render mid-edit. Therefore it uses memo\n // and only renders on initial load. onChangeExpression must be stable.\n // const columnNameRef = useRef<string>(column.name);\n // const expressionRef = useRef(getCalculatedColumnDetails(column)[1]);\n\n const onChangeName = useCallback<FormEventHandler>(\n (evt) => {\n const { value } = evt.target as HTMLInputElement;\n const newColumn = setCalculatedColumnName(column, value);\n // columnNameRef.current = newColumn.name;\n setColumn(newColumn);\n onChangeNameProp?.(newColumn.name);\n },\n [column, onChangeNameProp, setColumn]\n );\n\n const onChangeExpression = useCallback(\n (value: string) => {\n // we do not set state when this changes as the codemirror editor\n // manages state of the expression for us until complete\n const expression = value.trim();\n // expressionRef.current = expression;\n // const [name, , type] = column.name.split(\":\");\n // columnNameRef.current = `${name}:${expression}:${type}`;\n\n const { current: column } = columnRef;\n const newColumn = setCalculatedColumnExpression(column, expression);\n setColumn(newColumn);\n\n onChangeNameProp?.(newColumn.name);\n\n // console.log(`calculatedColumnName ${columnNameRef.current}`);\n },\n [onChangeNameProp, setColumn]\n );\n\n const onChangeServerDataType = useCallback(\n (_e: SyntheticEvent, [serverDataType]: string[]) => {\n if (isVuuColumnDataType(serverDataType)) {\n const newColumn = setCalculatedColumnType(column, serverDataType);\n setColumn(newColumn);\n onChangeNameProp?.(newColumn.name);\n onChangeServerDataTypeProp?.(serverDataType);\n }\n },\n [column, onChangeNameProp, onChangeServerDataTypeProp, setColumn]\n );\n\n return {\n column,\n onChangeExpression,\n onChangeName,\n onChangeServerDataType\n };\n};\n"],"names":["getCalculatedColumnDetails","useState","useRef","useCallback","column","setCalculatedColumnName","setCalculatedColumnExpression","isVuuColumnDataType","setCalculatedColumnType"],"mappings":";;;;;AAsBA,MAAM,aAAA,GAAgB,CAAC,MAA6B,KAAA;AAClD,EAAA,MAAM,EAAE,IAAM,EAAA,UAAA,EAAY,cAAe,EAAA,GACvCA,oCAA2B,MAAM,CAAA,CAAA;AACnC,EAAA,IAAI,mBAAmB,KAAW,CAAA,EAAA;AAChC,IAAO,OAAA;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAM,EAAA,CAAA,EAAG,IAAI,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA;AAAA,KACpC,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC,MAAQ,EAAA,UAAA;AAAA,EACR,YAAc,EAAA,gBAAA;AAAA,EACd,sBAAwB,EAAA,0BAAA;AAC1B,CAAiC,KAAA;AAC/B,EAAM,MAAA,CAAC,MAAQ,EAAA,UAAU,CAAI,GAAAC,cAAA;AAAA,IAC3B,cAAc,UAAU,CAAA;AAAA,GAC1B,CAAA;AACA,EAAM,MAAA,SAAA,GAAYC,aAAyB,UAAU,CAAA,CAAA;AACrD,EAAM,MAAA,SAAA,GAAYC,iBAAY,CAAA,CAACC,OAA6B,KAAA;AAC1D,IAAA,SAAA,CAAU,OAAUA,GAAAA,OAAAA,CAAAA;AACpB,IAAA,UAAA,CAAWA,OAAM,CAAA,CAAA;AAAA,GACnB,EAAG,EAAE,CAAA,CAAA;AASL,EAAA,MAAM,YAAe,GAAAD,iBAAA;AAAA,IACnB,CAAC,GAAQ,KAAA;AACP,MAAM,MAAA,EAAE,KAAM,EAAA,GAAI,GAAI,CAAA,MAAA,CAAA;AACtB,MAAM,MAAA,SAAA,GAAYE,gCAAwB,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAEvD,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AACnB,MAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AAAA,KACnC;AAAA,IACA,CAAC,MAAQ,EAAA,gBAAA,EAAkB,SAAS,CAAA;AAAA,GACtC,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAAF,iBAAA;AAAA,IACzB,CAAC,KAAkB,KAAA;AAGjB,MAAM,MAAA,UAAA,GAAa,MAAM,IAAK,EAAA,CAAA;AAK9B,MAAM,MAAA,EAAE,OAASC,EAAAA,OAAAA,EAAW,GAAA,SAAA,CAAA;AAC5B,MAAM,MAAA,SAAA,GAAYE,sCAA8BF,CAAAA,OAAAA,EAAQ,UAAU,CAAA,CAAA;AAClE,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAEnB,MAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AAAA,KAGnC;AAAA,IACA,CAAC,kBAAkB,SAAS,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,MAAM,sBAAyB,GAAAD,iBAAA;AAAA,IAC7B,CAAC,EAAA,EAAoB,CAAC,cAAc,CAAgB,KAAA;AAClD,MAAI,IAAAI,4BAAA,CAAoB,cAAc,CAAG,EAAA;AACvC,QAAM,MAAA,SAAA,GAAYC,gCAAwB,CAAA,MAAA,EAAQ,cAAc,CAAA,CAAA;AAChE,QAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AACnB,QAAA,gBAAA,GAAmB,UAAU,IAAI,CAAA,CAAA;AACjC,QAAA,0BAAA,GAA6B,cAAc,CAAA,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,CAAC,MAAA,EAAQ,gBAAkB,EAAA,0BAAA,EAA4B,SAAS,CAAA;AAAA,GAClE,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,sBAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseNumericFormattingSettings.js","sources":["../../src/column-formatting-settings/BaseNumericFormattingSettings.tsx"],"sourcesContent":["import { FormField, FormFieldLabel, Input, Switch } from \"@salt-ds/core\";\nimport {\n ColumnTypeFormatting,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypeFormattingFromColumn } from \"@vuu-ui/vuu-utils\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\n\nconst classBase = \"vuuFormattingSettings\";\n\nexport const BaseNumericFormattingSettings = ({\n column,\n onChangeFormatting: onChange,\n}: FormattingSettingsProps) => {\n const [formattingSettings, setFormattingSettings] =\n useState<ColumnTypeFormatting>(getTypeFormattingFromColumn(column));\n\n const handleInputKeyDown = useCallback(\n (evt: KeyboardEvent<HTMLInputElement>) => {\n if (evt.key === \"Enter\" || evt.key === \"Tab\") {\n onChange(formattingSettings);\n }\n },\n [formattingSettings, onChange],\n );\n\n const handleChangeDecimals = useCallback(\n (evt: SyntheticEvent) => {\n const { value } = evt.target as HTMLFormElement;\n const numericValue: number | undefined =\n value === \"\"\n ? undefined\n : isNaN(parseInt(value))\n ? undefined\n : parseInt(value);\n\n const newFormattingSettings = {\n ...formattingSettings,\n decimals: numericValue,\n };\n setFormattingSettings(newFormattingSettings);\n },\n [formattingSettings],\n );\n\n const handleChangeAlignDecimals = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n alignOnDecimals: checked,\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange],\n );\n\n const handleChangeZeroPad = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n zeroPad: checked,\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange],\n );\n\n return (\n <div className={classBase}>\n <FormField data-field=\"decimals\">\n <FormFieldLabel>Number of decimals</FormFieldLabel>\n <Input\n className=\"vuuInput\"\n onChange={handleChangeDecimals}\n onKeyDown={handleInputKeyDown}\n value={formattingSettings.decimals ?? \"\"}\n />\n </FormField>\n\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Align on decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.alignOnDecimals ?? false}\n onChange={handleChangeAlignDecimals}\n value=\"align-decimals\"\n />\n </FormField>\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Zero pad decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.zeroPad ?? false}\n onChange={handleChangeZeroPad}\n value=\"zero-pad\"\n />\n </FormField>\n </div>\n );\n};\n"],"names":["useState","getTypeFormattingFromColumn","useCallback","jsxs","FormField","jsx","FormFieldLabel","Input","Switch"],"mappings":"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"}
1
+ {"version":3,"file":"BaseNumericFormattingSettings.js","sources":["../../src/column-formatting-settings/BaseNumericFormattingSettings.tsx"],"sourcesContent":["import { FormField, FormFieldLabel, Input, Switch } from \"@salt-ds/core\";\nimport {\n ColumnTypeFormatting,\n FormattingSettingsProps\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypeFormattingFromColumn } from \"@vuu-ui/vuu-utils\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n SyntheticEvent,\n useCallback,\n useState\n} from \"react\";\n\nconst classBase = \"vuuFormattingSettings\";\n\nexport const BaseNumericFormattingSettings = ({\n column,\n onChangeFormatting: onChange\n}: FormattingSettingsProps) => {\n const [formattingSettings, setFormattingSettings] =\n useState<ColumnTypeFormatting>(getTypeFormattingFromColumn(column));\n\n const handleInputKeyDown = useCallback(\n (evt: KeyboardEvent<HTMLInputElement>) => {\n if (evt.key === \"Enter\" || evt.key === \"Tab\") {\n onChange(formattingSettings);\n }\n },\n [formattingSettings, onChange]\n );\n\n const handleChangeDecimals = useCallback(\n (evt: SyntheticEvent) => {\n const { value } = evt.target as HTMLFormElement;\n const numericValue: number | undefined =\n value === \"\"\n ? undefined\n : isNaN(parseInt(value))\n ? undefined\n : parseInt(value);\n\n const newFormattingSettings = {\n ...formattingSettings,\n decimals: numericValue\n };\n setFormattingSettings(newFormattingSettings);\n },\n [formattingSettings]\n );\n\n const handleChangeAlignDecimals = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n alignOnDecimals: checked\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange]\n );\n\n const handleChangeZeroPad = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const { checked } = evt.target as HTMLInputElement;\n const newFormattingSettings = {\n ...formattingSettings,\n zeroPad: checked\n };\n setFormattingSettings(newFormattingSettings);\n onChange(newFormattingSettings);\n },\n [formattingSettings, onChange]\n );\n\n return (\n <div className={classBase}>\n <FormField data-field=\"decimals\">\n <FormFieldLabel>Number of decimals</FormFieldLabel>\n <Input\n className=\"vuuInput\"\n onChange={handleChangeDecimals}\n onKeyDown={handleInputKeyDown}\n value={formattingSettings.decimals ?? \"\"}\n />\n </FormField>\n\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Align on decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.alignOnDecimals ?? false}\n onChange={handleChangeAlignDecimals}\n value=\"align-decimals\"\n />\n </FormField>\n <FormField labelPlacement=\"left\">\n <FormFieldLabel>Zero pad decimals</FormFieldLabel>\n <Switch\n checked={formattingSettings.zeroPad ?? false}\n onChange={handleChangeZeroPad}\n value=\"zero-pad\"\n />\n </FormField>\n </div>\n );\n};\n"],"names":["useState","getTypeFormattingFromColumn","useCallback","jsxs","FormField","jsx","FormFieldLabel","Input","Switch"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnFormattingPanel.js","sources":["../../src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType,\n }),\n [column, onChangeColumnType, onChangeFormatting],\n );\n\n console.log({ formattingSettingsComponent });\n\n const ConfigEditor = useMemo<\n React.FC<ConfigurationEditorProps> | undefined\n >(() => {\n const { type } = column;\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const cellRendererOptions = getCellRendererOptions(type.renderer.name);\n return getConfigurationEditor(cellRendererOptions?.configEditor);\n }\n return undefined;\n }, [column]);\n\n const selectedCellRenderer = useMemo(() => {\n const { type } = column;\n const [defaultRenderer] = availableRenderers;\n const rendererName =\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)\n ? type.renderer.name\n : undefined;\n const configuredRenderer = availableRenderers.find(\n (renderer) => renderer.name === rendererName,\n );\n return configuredRenderer ?? defaultRenderer;\n }, [availableRenderers, column]);\n\n const handleChangeRenderer = useCallback(\n (\n _e: SyntheticEvent,\n [cellRendererDescriptor]: CellRendererDescriptor[],\n ) => {\n const renderProps: ColumnTypeRendering = {\n name: cellRendererDescriptor.name,\n };\n onChangeRendering?.(renderProps);\n },\n [onChangeRendering],\n );\n\n const { serverDataType = \"string\" } = column;\n\n return (\n <div {...htmlAttributes} className={`vuuColumnSettingsPanel-header`}>\n <div>Formatting</div>\n\n <FormField>\n <FormFieldLabel>\n {`Renderer (data type ${column.serverDataType})`}\n </FormFieldLabel>\n <Dropdown<CellRendererDescriptor>\n className={cx(`${classBase}-renderer`)}\n onSelectionChange={handleChangeRenderer}\n selected={selectedCellRenderer ? [selectedCellRenderer] : []}\n value={selectedCellRenderer?.label ?? selectedCellRenderer?.name}\n >\n {availableRenderers.map((cellRenderer, i) => (\n <Option key={i} value={cellRenderer}>\n {cellRenderer.label ?? cellRenderer.name}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n <div\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {formattingSettingsComponent}\n {ConfigEditor ? (\n <ConfigEditor\n column={column as ColumnDescriptorCustomRenderer}\n onChangeRendering={onChangeRendering}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nfunction getFormattingSettingsComponent(props: FormattingSettingsProps) {\n const { column } = props;\n\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n return <BaseNumericFormattingSettings {...props} />;\n case \"long\":\n return <LongTypeFormattingSettings {...props} />;\n default:\n return null;\n }\n}\n"],"names":["useMemo","isTypeDescriptor","isColumnTypeRenderer","getCellRendererOptions","getConfigurationEditor","useCallback","jsxs","jsx","FormField","FormFieldLabel","Dropdown","Option","BaseNumericFormattingSettings","LongTypeFormattingSettings"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnFormattingPanel.js","sources":["../../src/column-formatting-settings/ColumnFormattingPanel.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n FormattingSettingsProps\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CellRendererDescriptor,\n ConfigurationEditorProps,\n getCellRendererOptions,\n getConfigurationEditor,\n isColumnTypeRenderer,\n isTypeDescriptor\n} from \"@vuu-ui/vuu-utils\";\nimport { Dropdown, FormField, FormFieldLabel, Option } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useMemo } from \"react\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { LongTypeFormattingSettings } from \"./LongTypeFormattingSettings\";\n\nconst classBase = \"vuuColumnFormattingPanel\";\n\nexport interface ColumnFormattingPanelProps\n extends HTMLAttributes<HTMLDivElement>,\n FormattingSettingsProps {\n availableRenderers: CellRendererDescriptor[];\n column: ColumnDescriptor;\n onChangeRendering: (renderProps: ColumnTypeRendering) => void;\n}\n\nexport const ColumnFormattingPanel = ({\n availableRenderers,\n className,\n column,\n onChangeFormatting,\n onChangeColumnType,\n onChangeRendering,\n ...htmlAttributes\n}: ColumnFormattingPanelProps) => {\n const formattingSettingsComponent = useMemo(\n () =>\n getFormattingSettingsComponent({\n column,\n onChangeFormatting,\n onChangeColumnType\n }),\n [column, onChangeColumnType, onChangeFormatting]\n );\n\n console.log({ formattingSettingsComponent });\n\n const ConfigEditor = useMemo<\n React.FC<ConfigurationEditorProps> | undefined\n >(() => {\n const { type } = column;\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const cellRendererOptions = getCellRendererOptions(type.renderer.name);\n return getConfigurationEditor(cellRendererOptions?.configEditor);\n }\n return undefined;\n }, [column]);\n\n const selectedCellRenderer = useMemo(() => {\n const { type } = column;\n const [defaultRenderer] = availableRenderers;\n const rendererName =\n isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)\n ? type.renderer.name\n : undefined;\n const configuredRenderer = availableRenderers.find(\n (renderer) => renderer.name === rendererName\n );\n return configuredRenderer ?? defaultRenderer;\n }, [availableRenderers, column]);\n\n const handleChangeRenderer = useCallback(\n (\n _e: SyntheticEvent,\n [cellRendererDescriptor]: CellRendererDescriptor[]\n ) => {\n const renderProps: ColumnTypeRendering = {\n name: cellRendererDescriptor.name\n };\n onChangeRendering?.(renderProps);\n },\n [onChangeRendering]\n );\n\n const { serverDataType = \"string\" } = column;\n\n return (\n <div {...htmlAttributes} className={`vuuColumnSettingsPanel-header`}>\n <div>Formatting</div>\n\n <FormField>\n <FormFieldLabel>\n {`Renderer (data type ${column.serverDataType})`}\n </FormFieldLabel>\n <Dropdown<CellRendererDescriptor>\n className={cx(`${classBase}-renderer`)}\n onSelectionChange={handleChangeRenderer}\n selected={selectedCellRenderer ? [selectedCellRenderer] : []}\n value={selectedCellRenderer?.label ?? selectedCellRenderer?.name}\n >\n {availableRenderers.map((cellRenderer, i) => (\n <Option key={i} value={cellRenderer}>\n {cellRenderer.label ?? cellRenderer.name}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n <div\n className={cx(classBase, className, `${classBase}-${serverDataType}`)}\n >\n {formattingSettingsComponent}\n {ConfigEditor ? (\n <ConfigEditor\n column={column as ColumnDescriptorCustomRenderer}\n onChangeRendering={onChangeRendering}\n />\n ) : null}\n </div>\n </div>\n );\n};\n\nfunction getFormattingSettingsComponent(props: FormattingSettingsProps) {\n const { column } = props;\n\n switch (column.serverDataType) {\n case \"double\":\n case \"int\":\n return <BaseNumericFormattingSettings {...props} />;\n case \"long\":\n return <LongTypeFormattingSettings {...props} />;\n default:\n return null;\n }\n}\n"],"names":["useMemo","isTypeDescriptor","isColumnTypeRenderer","getCellRendererOptions","getConfigurationEditor","useCallback","jsxs","jsx","FormField","FormFieldLabel","Dropdown","Option","BaseNumericFormattingSettings","LongTypeFormattingSettings"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import React, { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\nimport {\n DateTimePattern,\n TimePattern,\n dateTimeLabelByType,\n defaultPatternsByType,\n fallbackDateTimePattern,\n getTypeFormattingFromColumn,\n isDatePattern,\n isTimePattern,\n supportedDateTimePatterns,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Option,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport {\n DateTimeColumnDescriptor,\n FormattingSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { DatePattern } from \"@vuu-ui/vuu-utils\";\n\nconst toggleValues = [\"date\", \"time\", \"both\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n\nfunction getToggleValue(pattern: DateTimePattern): ToggleValue {\n return !pattern.time ? \"date\" : !pattern.date ? \"time\" : \"both\";\n}\n\ntype DateTime = keyof DateTimePattern;\n\nconst getSelectedPattern = (\n pattern?: DatePattern | TimePattern,\n): DatePattern[] | TimePattern[] | undefined => {\n if (isDatePattern(pattern)) {\n return [pattern] as DatePattern[];\n } else if (isTimePattern(pattern)) {\n return [pattern] as TimePattern[];\n } else {\n return undefined;\n }\n};\n\nexport const DateTimeFormattingSettings: React.FC<\n FormattingSettingsProps<DateTimeColumnDescriptor>\n> = ({ column, onChangeFormatting: onChange }) => {\n const formatting = getTypeFormattingFromColumn(column);\n const { pattern = fallbackDateTimePattern } = formatting;\n const toggleValue = useMemo(() => getToggleValue(pattern), [pattern]);\n\n const [fallbackState, setFallbackState] = useState<Required<DateTimePattern>>(\n {\n time: pattern.time ?? defaultPatternsByType.time,\n date: pattern.date ?? defaultPatternsByType.date,\n },\n );\n\n const onPatternChange = useCallback(\n (pattern: DateTimePattern) => onChange({ ...formatting, pattern }),\n [onChange, formatting],\n );\n\n const onDropdownChange = useCallback<\n <T extends DateTime>(\n dateTime: T,\n ) => (\n e: SyntheticEvent,\n newSelected: Array<Required<DateTimePattern>[T]>,\n ) => void\n >(\n (dateTime) =>\n (_, [selectedPattern]) => {\n const updatedPattern = {\n ...(pattern ?? {}),\n [dateTime]: selectedPattern,\n };\n setFallbackState((s) => ({\n time: updatedPattern.time ?? s.time,\n date: updatedPattern.date ?? s.date,\n }));\n onPatternChange(updatedPattern);\n },\n [onPatternChange, pattern],\n );\n\n const onToggleChange = useCallback(\n (evnt: SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = evnt.currentTarget.value as ToggleValue;\n switch (value) {\n case \"time\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"date\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value],\n });\n case \"both\":\n return onPatternChange({\n time: pattern.time ?? fallbackState.time,\n date: pattern.date ?? fallbackState.date,\n });\n }\n },\n [onPatternChange, pattern, fallbackState],\n );\n\n return (\n <>\n <FormField labelPlacement=\"top\">\n <FormFieldLabel>{\"Display\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={onToggleChange}\n value={toggleValue}\n data-variant=\"primary\"\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {([\"date\", \"time\"] as const)\n .filter((v) => !!pattern[v])\n .map((v) => (\n <FormField labelPlacement=\"top\" key={v}>\n <FormFieldLabel>{`${dateTimeLabelByType[v]} pattern`}</FormFieldLabel>\n <Dropdown<Required<DateTimePattern>[typeof v]>\n onSelectionChange={onDropdownChange(v)}\n selected={getSelectedPattern(pattern[v])}\n >\n {supportedDateTimePatterns[v].map((pattern, i) => (\n <Option key={i} value={pattern}>\n {pattern}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n ))}\n </>\n );\n};\n"],"names":["isDatePattern","isTimePattern","getTypeFormattingFromColumn","fallbackDateTimePattern","useMemo","useState","defaultPatternsByType","useCallback","pattern","jsxs","Fragment","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","dateTimeLabelByType","Dropdown","supportedDateTimePatterns","Option"],"mappings":"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"}
1
+ {"version":3,"file":"DateTimeFormattingSettings.js","sources":["../../src/column-formatting-settings/DateTimeFormattingSettings.tsx"],"sourcesContent":["import React, { SyntheticEvent, useCallback, useMemo, useState } from \"react\";\nimport {\n DateTimePattern,\n TimePattern,\n dateTimeLabelByType,\n defaultPatternsByType,\n fallbackDateTimePattern,\n getTypeFormattingFromColumn,\n isDatePattern,\n isTimePattern,\n supportedDateTimePatterns\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n FormField,\n FormFieldLabel,\n Option,\n ToggleButton,\n ToggleButtonGroup\n} from \"@salt-ds/core\";\nimport {\n DateTimeColumnDescriptor,\n FormattingSettingsProps\n} from \"@vuu-ui/vuu-table-types\";\nimport { DatePattern } from \"@vuu-ui/vuu-utils\";\n\nconst toggleValues = [\"date\", \"time\", \"both\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n\nfunction getToggleValue(pattern: DateTimePattern): ToggleValue {\n return !pattern.time ? \"date\" : !pattern.date ? \"time\" : \"both\";\n}\n\ntype DateTime = keyof DateTimePattern;\n\nconst getSelectedPattern = (\n pattern?: DatePattern | TimePattern\n): DatePattern[] | TimePattern[] | undefined => {\n if (isDatePattern(pattern)) {\n return [pattern] as DatePattern[];\n } else if (isTimePattern(pattern)) {\n return [pattern] as TimePattern[];\n } else {\n return undefined;\n }\n};\n\nexport const DateTimeFormattingSettings: React.FC<\n FormattingSettingsProps<DateTimeColumnDescriptor>\n> = ({ column, onChangeFormatting: onChange }) => {\n const formatting = getTypeFormattingFromColumn(column);\n const { pattern = fallbackDateTimePattern } = formatting;\n const toggleValue = useMemo(() => getToggleValue(pattern), [pattern]);\n\n const [fallbackState, setFallbackState] = useState<Required<DateTimePattern>>(\n {\n time: pattern.time ?? defaultPatternsByType.time,\n date: pattern.date ?? defaultPatternsByType.date\n }\n );\n\n const onPatternChange = useCallback(\n (pattern: DateTimePattern) => onChange({ ...formatting, pattern }),\n [onChange, formatting]\n );\n\n const onDropdownChange = useCallback<\n <T extends DateTime>(\n dateTime: T\n ) => (\n e: SyntheticEvent,\n newSelected: Array<Required<DateTimePattern>[T]>\n ) => void\n >(\n (dateTime) =>\n (_, [selectedPattern]) => {\n const updatedPattern = {\n ...(pattern ?? {}),\n [dateTime]: selectedPattern\n };\n setFallbackState((s) => ({\n time: updatedPattern.time ?? s.time,\n date: updatedPattern.date ?? s.date\n }));\n onPatternChange(updatedPattern);\n },\n [onPatternChange, pattern]\n );\n\n const onToggleChange = useCallback(\n (evnt: SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = evnt.currentTarget.value as ToggleValue;\n switch (value) {\n case \"time\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value]\n });\n case \"date\":\n return onPatternChange({\n [value]: pattern[value] ?? fallbackState[value]\n });\n case \"both\":\n return onPatternChange({\n time: pattern.time ?? fallbackState.time,\n date: pattern.date ?? fallbackState.date\n });\n }\n },\n [onPatternChange, pattern, fallbackState]\n );\n\n return (\n <>\n <FormField labelPlacement=\"top\">\n <FormFieldLabel>{\"Display\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={onToggleChange}\n value={toggleValue}\n data-variant=\"primary\"\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {([\"date\", \"time\"] as const)\n .filter((v) => !!pattern[v])\n .map((v) => (\n <FormField labelPlacement=\"top\" key={v}>\n <FormFieldLabel>{`${dateTimeLabelByType[v]} pattern`}</FormFieldLabel>\n <Dropdown<Required<DateTimePattern>[typeof v]>\n onSelectionChange={onDropdownChange(v)}\n selected={getSelectedPattern(pattern[v])}\n >\n {supportedDateTimePatterns[v].map((pattern, i) => (\n <Option key={i} value={pattern}>\n {pattern}\n </Option>\n ))}\n </Dropdown>\n </FormField>\n ))}\n </>\n );\n};\n"],"names":["isDatePattern","isTimePattern","getTypeFormattingFromColumn","fallbackDateTimePattern","useMemo","useState","defaultPatternsByType","useCallback","pattern","jsxs","Fragment","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","dateTimeLabelByType","Dropdown","supportedDateTimePatterns","Option"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport {\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { isDateTimeColumn, isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\nimport { DateTimeFormattingSettings } from \"./DateTimeFormattingSettings\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\n\nimport longTypeFormattingSettingsCss from \"./LongTypeFormattingSettings.css\";\n\nconst classBase = \"vuuLongColumnFormattingSettings\";\n\nexport const LongTypeFormattingSettings = (props: FormattingSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-long-formatting-settings\",\n css: longTypeFormattingSettingsCss,\n window: targetWindow,\n });\n\n const { column, onChangeColumnType: onChangeType } = props;\n const type = isTypeDescriptor(column.type) ? column.type.name : column.type;\n\n const handleToggleChange = useCallback(\n (event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = event.currentTarget.value as ToggleValue;\n onChangeType(value);\n },\n [onChangeType],\n );\n\n return (\n <div className={classBase}>\n <FormField>\n <FormFieldLabel>{\"Type inferred as\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={handleToggleChange}\n value={type ?? \"number\"}\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {isDateTimeColumn(column) ? (\n <DateTimeFormattingSettings {...props} column={column} />\n ) : (\n <BaseNumericFormattingSettings {...props} />\n )}\n </div>\n );\n};\n\nconst toggleValues = [\"number\", \"date/time\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n"],"names":["useWindow","useComponentCssInjection","longTypeFormattingSettingsCss","isTypeDescriptor","useCallback","jsxs","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","isDateTimeColumn","DateTimeFormattingSettings","BaseNumericFormattingSettings"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,SAAY,GAAA,iCAAA,CAAA;AAEL,MAAA,0BAAA,GAA6B,CAAC,KAAmC,KAAA;AAC5E,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,8BAAA;AAAA,IACR,GAAK,EAAAC,4BAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAoB,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AACrD,EAAM,MAAA,IAAA,GAAOC,0BAAiB,MAAO,CAAA,IAAI,IAAI,MAAO,CAAA,IAAA,CAAK,OAAO,MAAO,CAAA,IAAA,CAAA;AAEvE,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,KAA0D,KAAA;AACzD,MAAM,MAAA,KAAA,GAAQ,MAAM,aAAc,CAAA,KAAA,CAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AAEA,EACE,uBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAACC,cACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,uBAAgB,QAAmB,EAAA,kBAAA,EAAA,CAAA;AAAA,sBACpCD,cAAA;AAAA,QAACE,sBAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,sBAAA;AAAA,UACV,QAAU,EAAA,kBAAA;AAAA,UACV,OAAO,IAAQ,IAAA,QAAA;AAAA,UAEd,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,CAAA,qBAChBF,cAAA,CAAAG,iBAAA,EAAA,EAAqB,KAAO,EAAA,CAAA,EAC1B,QAAE,EAAA,CAAA,CAAA,WAAA,EADc,EAAA,EAAA,CAEnB,CACD,CAAA;AAAA,SAAA;AAAA,OACH;AAAA,KACF,EAAA,CAAA;AAAA,IAECC,yBAAiB,CAAA,MAAM,CACtB,mBAAAJ,cAAA,CAACK,qDAA4B,EAAA,EAAA,GAAG,KAAO,EAAA,MAAA,EAAgB,CAEvD,mBAAAL,cAAA,CAACM,2DAA+B,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA;AAAA,GAE9C,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,WAAW,CAAA;;;;"}
1
+ {"version":3,"file":"LongTypeFormattingSettings.js","sources":["../../src/column-formatting-settings/LongTypeFormattingSettings.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport {\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { isDateTimeColumn, isTypeDescriptor } from \"@vuu-ui/vuu-utils\";\nimport { DateTimeFormattingSettings } from \"./DateTimeFormattingSettings\";\nimport { BaseNumericFormattingSettings } from \"./BaseNumericFormattingSettings\";\nimport { FormattingSettingsProps } from \"@vuu-ui/vuu-table-types\";\n\nimport longTypeFormattingSettingsCss from \"./LongTypeFormattingSettings.css\";\n\nconst classBase = \"vuuLongColumnFormattingSettings\";\n\nexport const LongTypeFormattingSettings = (props: FormattingSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-long-formatting-settings\",\n css: longTypeFormattingSettingsCss,\n window: targetWindow\n });\n\n const { column, onChangeColumnType: onChangeType } = props;\n const type = isTypeDescriptor(column.type) ? column.type.name : column.type;\n\n const handleToggleChange = useCallback(\n (event: React.SyntheticEvent<HTMLButtonElement, Event>) => {\n const value = event.currentTarget.value as ToggleValue;\n onChangeType(value);\n },\n [onChangeType]\n );\n\n return (\n <div className={classBase}>\n <FormField>\n <FormFieldLabel>{\"Type inferred as\"}</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={handleToggleChange}\n value={type ?? \"number\"}\n >\n {toggleValues.map((v) => (\n <ToggleButton key={v} value={v}>\n {v.toUpperCase()}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </FormField>\n\n {isDateTimeColumn(column) ? (\n <DateTimeFormattingSettings {...props} column={column} />\n ) : (\n <BaseNumericFormattingSettings {...props} />\n )}\n </div>\n );\n};\n\nconst toggleValues = [\"number\", \"date/time\"] as const;\ntype ToggleValue = (typeof toggleValues)[number];\n"],"names":["useWindow","useComponentCssInjection","longTypeFormattingSettingsCss","isTypeDescriptor","useCallback","jsxs","FormField","jsx","FormFieldLabel","ToggleButtonGroup","ToggleButton","isDateTimeColumn","DateTimeFormattingSettings","BaseNumericFormattingSettings"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,SAAY,GAAA,iCAAA,CAAA;AAEL,MAAA,0BAAA,GAA6B,CAAC,KAAmC,KAAA;AAC5E,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,8BAAA;AAAA,IACR,GAAK,EAAAC,4BAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAoB,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AACrD,EAAM,MAAA,IAAA,GAAOC,0BAAiB,MAAO,CAAA,IAAI,IAAI,MAAO,CAAA,IAAA,CAAK,OAAO,MAAO,CAAA,IAAA,CAAA;AAEvE,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,KAA0D,KAAA;AACzD,MAAM,MAAA,KAAA,GAAQ,MAAM,aAAc,CAAA,KAAA,CAAA;AAClC,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,YAAY,CAAA;AAAA,GACf,CAAA;AAEA,EACE,uBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAACC,cACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,uBAAgB,QAAmB,EAAA,kBAAA,EAAA,CAAA;AAAA,sBACpCD,cAAA;AAAA,QAACE,sBAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,sBAAA;AAAA,UACV,QAAU,EAAA,kBAAA;AAAA,UACV,OAAO,IAAQ,IAAA,QAAA;AAAA,UAEd,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,CAAA,qBAChBF,cAAA,CAAAG,iBAAA,EAAA,EAAqB,KAAO,EAAA,CAAA,EAC1B,QAAE,EAAA,CAAA,CAAA,WAAA,EADc,EAAA,EAAA,CAEnB,CACD,CAAA;AAAA,SAAA;AAAA,OACH;AAAA,KACF,EAAA,CAAA;AAAA,IAECC,yBAAiB,CAAA,MAAM,CACtB,mBAAAJ,cAAA,CAACK,qDAA4B,EAAA,EAAA,GAAG,KAAO,EAAA,MAAA,EAAgB,CAEvD,mBAAAL,cAAA,CAACM,2DAA+B,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA;AAAA,GAE9C,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,WAAW,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnList.js","sources":["../../src/column-list/ColumnList.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n Icon,\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox, Switch } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { ColumnItem } from \"../table-settings\";\nimport { getColumnLabel, queryClosest } from \"@vuu-ui/vuu-utils\";\n\nimport columnList from \"./ColumnList.css\";\n\nconst classBase = \"vuuColumnList\";\nconst classBaseListItem = \"vuuColumnListItem\";\n\nexport type ColumnChangeHandler = (\n columnName: string,\n propertyName: keyof ColumnDescriptor | \"subscribed\",\n value: string | number | boolean,\n) => void;\n\nexport interface ColumnListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n columnItems: ColumnItem[];\n onChange: ColumnChangeHandler;\n onMoveListItem: ListProps[\"onMoveListItem\"];\n onNavigateToColumn?: (columnName: string) => void;\n}\n\nconst ColumnListItem = ({\n className: classNameProp,\n item,\n ...listItemProps\n}: ListItemProps<ColumnItem>) => {\n return (\n <ListItem\n {...listItemProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item?.name}\n >\n <Icon name=\"draggable\" size={16} />\n {item?.isCalculated ? (\n <Icon name=\"function\" />\n ) : (\n <Checkbox\n className={`${classBase}-checkBox`}\n checked={item?.subscribed}\n />\n )}\n <span className={`${classBase}-text`}>\n {getColumnLabel(item as ColumnDescriptor)}\n </span>\n <Switch\n className={`${classBase}-switch`}\n checked={item?.hidden !== true}\n disabled={item?.subscribed !== true}\n />\n </ListItem>\n );\n};\n\nexport const ColumnList = ({\n className,\n columnItems,\n onChange,\n onMoveListItem,\n onNavigateToColumn,\n ...htmlAttributes\n}: ColumnListProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-list\",\n css: columnList,\n window: targetWindow,\n });\n\n const handleChange = useCallback(\n ({ target }: SyntheticEvent) => {\n const input = target as HTMLInputElement;\n const listItem = queryClosest(target, `.${classBaseListItem}`);\n if (listItem) {\n const {\n dataset: { name },\n } = listItem;\n if (name) {\n const saltCheckbox = queryClosest(target, `.${classBase}-checkBox`);\n const saltSwitch = queryClosest(target, `.${classBase}-switch`);\n\n if (saltCheckbox) {\n onChange(name, \"subscribed\", input.checked);\n } else if (saltSwitch) {\n onChange(name, \"hidden\", input.checked === false);\n }\n }\n }\n },\n [onChange],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n const targetEl = evt.target as HTMLElement;\n if (targetEl.classList.contains(\"vuuColumnList-text\")) {\n const listItemEl = targetEl.closest(\".vuuListItem\") as HTMLElement;\n if (listItemEl?.dataset.name) {\n onNavigateToColumn?.(listItemEl.dataset.name);\n }\n }\n },\n [onNavigateToColumn],\n );\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className, {\n [`${classBase}-withColumnNavigation`]:\n typeof onNavigateToColumn === \"function\",\n })}\n >\n <div className={`${classBase}-header`}>\n <span>Column Selection</span>\n </div>\n <div className={`${classBase}-colHeadings`}>\n <span>Column subscription</span>\n <span>Visibility</span>\n </div>\n <List<ColumnItem, \"none\">\n ListItem={ColumnListItem}\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onClick={handleClick}\n onMoveListItem={onMoveListItem}\n selectionStrategy=\"none\"\n source={columnItems}\n itemHeight={33}\n />\n </div>\n );\n};\n"],"names":["jsxs","ListItem","jsx","Icon","Checkbox","getColumnLabel","Switch","useWindow","useComponentCssInjection","columnList","useCallback","queryClosest","List"],"mappings":";;;;;;;;;;;;AAuBA,MAAM,SAAY,GAAA,eAAA,CAAA;AAClB,MAAM,iBAAoB,GAAA,mBAAA,CAAA;AAgB1B,MAAM,iBAAiB,CAAC;AAAA,EACtB,SAAW,EAAA,aAAA;AAAA,EACX,IAAA;AAAA,EACA,GAAG,aAAA;AACL,CAAiC,KAAA;AAC/B,EACE,uBAAAA,eAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,aAAA,EAAe,iBAAiB,CAAA;AAAA,MAC9C,aAAW,IAAM,EAAA,IAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,kBAAK,EAAA,EAAA,IAAA,EAAK,WAAY,EAAA,IAAA,EAAM,EAAI,EAAA,CAAA;AAAA,QAChC,MAAM,YACL,mBAAAD,cAAA,CAACC,kBAAK,EAAA,EAAA,IAAA,EAAK,YAAW,CAEtB,mBAAAD,cAAA;AAAA,UAACE,aAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,YACvB,SAAS,IAAM,EAAA,UAAA;AAAA,WAAA;AAAA,SACjB;AAAA,wBAEFF,cAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,KAAA,CAAA,EAAA,QAAA,EAAAG,uBAAA,CAAe,IAAwB,CAC1C,EAAA,CAAA;AAAA,wBACAH,cAAA;AAAA,UAACI,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,OAAA,CAAA;AAAA,YACvB,OAAA,EAAS,MAAM,MAAW,KAAA,IAAA;AAAA,YAC1B,QAAA,EAAU,MAAM,UAAe,KAAA,IAAA;AAAA,WAAA;AAAA,SACjC;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,aAAa,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,GAAG,cAAA;AACL,CAAuB,KAAA;AACrB,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,EAAE,MAAA,EAA6B,KAAA;AAC9B,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AACd,MAAA,MAAM,QAAW,GAAAC,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,iBAAiB,CAAE,CAAA,CAAA,CAAA;AAC7D,MAAA,IAAI,QAAU,EAAA;AACZ,QAAM,MAAA;AAAA,UACJ,OAAA,EAAS,EAAE,IAAK,EAAA;AAAA,SACd,GAAA,QAAA,CAAA;AACJ,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,YAAe,GAAAA,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,SAAS,CAAW,SAAA,CAAA,CAAA,CAAA;AAClE,UAAA,MAAM,UAAa,GAAAA,qBAAA,CAAa,MAAQ,EAAA,CAAA,CAAA,EAAI,SAAS,CAAS,OAAA,CAAA,CAAA,CAAA;AAE9D,UAAA,IAAI,YAAc,EAAA;AAChB,YAAS,QAAA,CAAA,IAAA,EAAM,YAAc,EAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,qBACjC,UAAY,EAAA;AACrB,YAAA,QAAA,CAAS,IAAM,EAAA,QAAA,EAAU,KAAM,CAAA,OAAA,KAAY,KAAK,CAAA,CAAA;AAAA,WAClD;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,WAAc,GAAAD,iBAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,MAAM,WAAW,GAAI,CAAA,MAAA,CAAA;AACrB,MAAA,IAAI,QAAS,CAAA,SAAA,CAAU,QAAS,CAAA,oBAAoB,CAAG,EAAA;AACrD,QAAM,MAAA,UAAA,GAAa,QAAS,CAAA,OAAA,CAAQ,cAAc,CAAA,CAAA;AAClD,QAAI,IAAA,UAAA,EAAY,QAAQ,IAAM,EAAA;AAC5B,UAAqB,kBAAA,GAAA,UAAA,CAAW,QAAQ,IAAI,CAAA,CAAA;AAAA,SAC9C;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,kBAAkB,CAAA;AAAA,GACrB,CAAA;AAEA,EACE,uBAAAV,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAG,EAAA,SAAS,CAAuB,qBAAA,CAAA,GAClC,OAAO,kBAAuB,KAAA,UAAA;AAAA,OACjC,CAAA;AAAA,MAED,QAAA,EAAA;AAAA,wBAACE,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,CAAG,EAAA,SAAS,WAC1B,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA,EAAK,8BAAgB,CACxB,EAAA,CAAA;AAAA,wBACCF,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,YAAA,CAAA,EAAA,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAAC,UAAK,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,0BACzBA,cAAA,CAAC,UAAK,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,SAClB,EAAA,CAAA;AAAA,wBACAA,cAAA;AAAA,UAACU,kBAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,cAAA;AAAA,YACV,aAAa,EAAA,IAAA;AAAA,YACb,MAAO,EAAA,MAAA;AAAA,YACP,QAAU,EAAA,YAAA;AAAA,YACV,OAAS,EAAA,WAAA;AAAA,YACT,cAAA;AAAA,YACA,iBAAkB,EAAA,MAAA;AAAA,YAClB,MAAQ,EAAA,WAAA;AAAA,YACR,UAAY,EAAA,EAAA;AAAA,WAAA;AAAA,SACd;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ColumnList.js","sources":["../../src/column-list/ColumnList.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n Icon,\n List,\n ListItem,\n ListItemProps,\n ListProps\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox, Switch } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n SyntheticEvent,\n useCallback\n} from \"react\";\nimport { ColumnItem } from \"../table-settings\";\nimport { getColumnLabel, queryClosest } from \"@vuu-ui/vuu-utils\";\n\nimport columnList from \"./ColumnList.css\";\n\nconst classBase = \"vuuColumnList\";\nconst classBaseListItem = \"vuuColumnListItem\";\n\nexport type ColumnChangeHandler = (\n columnName: string,\n propertyName: keyof ColumnDescriptor | \"subscribed\",\n value: string | number | boolean\n) => void;\n\nexport interface ColumnListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n columnItems: ColumnItem[];\n onChange: ColumnChangeHandler;\n onMoveListItem: ListProps[\"onMoveListItem\"];\n onNavigateToColumn?: (columnName: string) => void;\n}\n\nconst ColumnListItem = ({\n className: classNameProp,\n item,\n ...listItemProps\n}: ListItemProps<ColumnItem>) => {\n return (\n <ListItem\n {...listItemProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item?.name}\n >\n <Icon name=\"draggable\" size={16} />\n {item?.isCalculated ? (\n <Icon name=\"function\" />\n ) : (\n <Checkbox\n className={`${classBase}-checkBox`}\n checked={item?.subscribed}\n />\n )}\n <span className={`${classBase}-text`}>\n {getColumnLabel(item as ColumnDescriptor)}\n </span>\n <Switch\n className={`${classBase}-switch`}\n checked={item?.hidden !== true}\n disabled={item?.subscribed !== true}\n />\n </ListItem>\n );\n};\n\nexport const ColumnList = ({\n className,\n columnItems,\n onChange,\n onMoveListItem,\n onNavigateToColumn,\n ...htmlAttributes\n}: ColumnListProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-list\",\n css: columnList,\n window: targetWindow\n });\n\n const handleChange = useCallback(\n ({ target }: SyntheticEvent) => {\n const input = target as HTMLInputElement;\n const listItem = queryClosest(target, `.${classBaseListItem}`);\n if (listItem) {\n const {\n dataset: { name }\n } = listItem;\n if (name) {\n const saltCheckbox = queryClosest(target, `.${classBase}-checkBox`);\n const saltSwitch = queryClosest(target, `.${classBase}-switch`);\n\n if (saltCheckbox) {\n onChange(name, \"subscribed\", input.checked);\n } else if (saltSwitch) {\n onChange(name, \"hidden\", input.checked === false);\n }\n }\n }\n },\n [onChange]\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n const targetEl = evt.target as HTMLElement;\n if (targetEl.classList.contains(\"vuuColumnList-text\")) {\n const listItemEl = targetEl.closest(\".vuuListItem\") as HTMLElement;\n if (listItemEl?.dataset.name) {\n onNavigateToColumn?.(listItemEl.dataset.name);\n }\n }\n },\n [onNavigateToColumn]\n );\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className, {\n [`${classBase}-withColumnNavigation`]:\n typeof onNavigateToColumn === \"function\"\n })}\n >\n <div className={`${classBase}-header`}>\n <span>Column Selection</span>\n </div>\n <div className={`${classBase}-colHeadings`}>\n <span>Column subscription</span>\n <span>Visibility</span>\n </div>\n <List<ColumnItem, \"none\">\n ListItem={ColumnListItem}\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onClick={handleClick}\n onMoveListItem={onMoveListItem}\n selectionStrategy=\"none\"\n source={columnItems}\n itemHeight={33}\n />\n </div>\n );\n};\n"],"names":["jsxs","ListItem","jsx","Icon","Checkbox","getColumnLabel","Switch","useWindow","useComponentCssInjection","columnList","useCallback","queryClosest","List"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnNameLabel.js","sources":["../../src/column-settings/ColumnNameLabel.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n getCalculatedColumnDetails,\n isCalculatedColumn,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler } from \"react\";\n\nimport columnNameLabelCss from \"./ColumnNameLabel.css\";\n\nconst classBase = \"vuuColumnNameLabel\";\n\nexport interface ColumnNameLabelProps {\n column: ColumnDescriptor;\n onClick: MouseEventHandler;\n}\n\nexport const ColumnNameLabel = ({ column, onClick }: ColumnNameLabelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-label\",\n css: columnNameLabelCss,\n window: targetWindow,\n });\n\n if (isCalculatedColumn(column.name)) {\n const { name, serverDataType, expression } =\n getCalculatedColumnDetails(column);\n const displayName = name || \"name\";\n const displayExpression = \"=expression\";\n\n const nameClass =\n displayName === \"name\" ? `${classBase}-placeholder` : undefined;\n const expressionClass =\n expression === \"\" ? `${classBase}-placeholder` : undefined;\n return (\n <div\n className={cx(classBase, `${classBase}-calculated`)}\n onClick={onClick}\n >\n <span className={nameClass}>{displayName}</span>\n <span>:</span>\n <span>{serverDataType || \"string\"}</span>\n <span>:</span>\n <span className={expressionClass}>{displayExpression}</span>\n <span className={`${classBase}-edit`} data-icon=\"edit\" />\n </div>\n );\n } else {\n return <div className={classBase}>{column.name}</div>;\n }\n};\n"],"names":["useWindow","useComponentCssInjection","columnNameLabelCss","isCalculatedColumn","getCalculatedColumnDetails","jsxs","jsx"],"mappings":";;;;;;;;;AAYA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAOX,MAAM,eAAkB,GAAA,CAAC,EAAE,MAAA,EAAQ,SAAoC,KAAA;AAC5E,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAAC,2BAAA,CAAmB,MAAO,CAAA,IAAI,CAAG,EAAA;AACnC,IAAA,MAAM,EAAE,IAAM,EAAA,cAAA,EAAgB,UAAW,EAAA,GACvCC,oCAA2B,MAAM,CAAA,CAAA;AACnC,IAAA,MAAM,cAAc,IAAQ,IAAA,MAAA,CAAA;AAC5B,IAAA,MAAM,iBAAoB,GAAA,aAAA,CAAA;AAE1B,IAAA,MAAM,SACJ,GAAA,WAAA,KAAgB,MAAS,GAAA,CAAA,EAAG,SAAS,CAAiB,YAAA,CAAA,GAAA,KAAA,CAAA,CAAA;AACxD,IAAA,MAAM,eACJ,GAAA,UAAA,KAAe,EAAK,GAAA,CAAA,EAAG,SAAS,CAAiB,YAAA,CAAA,GAAA,KAAA,CAAA,CAAA;AACnD,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,EAAA,CAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAa,WAAA,CAAA,CAAA;AAAA,QAClD,OAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAACC,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,SAAA,EAAY,QAAY,EAAA,WAAA,EAAA,CAAA;AAAA,0BACzCA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,0BACPA,cAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,cAAA,IAAkB,QAAS,EAAA,CAAA;AAAA,0BAClCA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,0BACNA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,eAAA,EAAkB,QAAkB,EAAA,iBAAA,EAAA,CAAA;AAAA,yCACpD,MAAK,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,KAAA,CAAA,EAAS,aAAU,MAAO,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KACzD,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,uBAAQA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,SAAA,EAAY,iBAAO,IAAK,EAAA,CAAA,CAAA;AAAA,GACjD;AACF;;;;"}
1
+ {"version":3,"file":"ColumnNameLabel.js","sources":["../../src/column-settings/ColumnNameLabel.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n getCalculatedColumnDetails,\n isCalculatedColumn\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler } from \"react\";\n\nimport columnNameLabelCss from \"./ColumnNameLabel.css\";\n\nconst classBase = \"vuuColumnNameLabel\";\n\nexport interface ColumnNameLabelProps {\n column: ColumnDescriptor;\n onClick: MouseEventHandler;\n}\n\nexport const ColumnNameLabel = ({ column, onClick }: ColumnNameLabelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-label\",\n css: columnNameLabelCss,\n window: targetWindow\n });\n\n if (isCalculatedColumn(column.name)) {\n const { name, serverDataType, expression } =\n getCalculatedColumnDetails(column);\n const displayName = name || \"name\";\n const displayExpression = \"=expression\";\n\n const nameClass =\n displayName === \"name\" ? `${classBase}-placeholder` : undefined;\n const expressionClass =\n expression === \"\" ? `${classBase}-placeholder` : undefined;\n return (\n <div\n className={cx(classBase, `${classBase}-calculated`)}\n onClick={onClick}\n >\n <span className={nameClass}>{displayName}</span>\n <span>:</span>\n <span>{serverDataType || \"string\"}</span>\n <span>:</span>\n <span className={expressionClass}>{displayExpression}</span>\n <span className={`${classBase}-edit`} data-icon=\"edit\" />\n </div>\n );\n } else {\n return <div className={classBase}>{column.name}</div>;\n }\n};\n"],"names":["useWindow","useComponentCssInjection","columnNameLabelCss","isCalculatedColumn","getCalculatedColumnDetails","jsxs","jsx"],"mappings":";;;;;;;;;AAYA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAOX,MAAM,eAAkB,GAAA,CAAC,EAAE,MAAA,EAAQ,SAAoC,KAAA;AAC5E,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAAC,2BAAA,CAAmB,MAAO,CAAA,IAAI,CAAG,EAAA;AACnC,IAAA,MAAM,EAAE,IAAM,EAAA,cAAA,EAAgB,UAAW,EAAA,GACvCC,oCAA2B,MAAM,CAAA,CAAA;AACnC,IAAA,MAAM,cAAc,IAAQ,IAAA,MAAA,CAAA;AAC5B,IAAA,MAAM,iBAAoB,GAAA,aAAA,CAAA;AAE1B,IAAA,MAAM,SACJ,GAAA,WAAA,KAAgB,MAAS,GAAA,CAAA,EAAG,SAAS,CAAiB,YAAA,CAAA,GAAA,KAAA,CAAA,CAAA;AACxD,IAAA,MAAM,eACJ,GAAA,UAAA,KAAe,EAAK,GAAA,CAAA,EAAG,SAAS,CAAiB,YAAA,CAAA,GAAA,KAAA,CAAA,CAAA;AACnD,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,EAAA,CAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAa,WAAA,CAAA,CAAA;AAAA,QAClD,OAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAACC,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,SAAA,EAAY,QAAY,EAAA,WAAA,EAAA,CAAA;AAAA,0BACzCA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,0BACPA,cAAA,CAAC,MAAM,EAAA,EAAA,QAAA,EAAA,cAAA,IAAkB,QAAS,EAAA,CAAA;AAAA,0BAClCA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,0BACNA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,eAAA,EAAkB,QAAkB,EAAA,iBAAA,EAAA,CAAA;AAAA,yCACpD,MAAK,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,KAAA,CAAA,EAAS,aAAU,MAAO,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KACzD,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,uBAAQA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,SAAA,EAAY,iBAAO,IAAK,EAAA,CAAA,CAAA;AAAA,GACjD;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSettingsPanel.js","sources":["../../src/column-settings/ColumnSettingsPanel.tsx"],"sourcesContent":["import { ColumnDescriptor, ColumnSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getCalculatedColumnDetails,\n getDefaultAlignment,\n isCalculatedColumn,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Button,\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { ColumnExpressionPanel } from \"../column-expression-panel\";\nimport { ColumnFormattingPanel } from \"../column-formatting-settings\";\nimport { ColumnNameLabel } from \"./ColumnNameLabel\";\nimport { useColumnSettings } from \"./useColumnSettings\";\n\nimport colunSettingsPanelCss from \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst getColumnLabel = (column: ColumnDescriptor) => {\n const { name, label } = column;\n if (isCalculatedColumn(name)) {\n return label ?? getCalculatedColumnDetails(column).name;\n } else {\n return label ?? name;\n }\n};\n\nexport const ColumnSettingsPanel = ({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig,\n vuuTable,\n}: ColumnSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-settings-panel\",\n css: colunSettingsPanelCss,\n window: targetWindow,\n });\n\n const isNewCalculatedColumn = columnProp.name === \"::\";\n const {\n availableRenderers,\n editCalculatedColumn,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onCancel,\n onChange,\n onChangeCalculatedColumnName,\n onChangeFormatting,\n onChangeRendering,\n onChangeServerDataType,\n onChangeToggleButton,\n onChangeType,\n onEditCalculatedColumn,\n onInputCommit,\n onSave,\n } = useColumnSettings({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig,\n });\n\n const {\n serverDataType,\n align = getDefaultAlignment(serverDataType),\n pin,\n width,\n } = column;\n\n return (\n <div\n className={cx(classBase, {\n [`${classBase}-editing`]: editCalculatedColumn,\n })}\n >\n <div className={`${classBase}-header`}>\n <ColumnNameLabel column={column} onClick={onEditCalculatedColumn} />\n </div>\n\n {editCalculatedColumn ? (\n <ColumnExpressionPanel\n column={column}\n onChangeName={onChangeCalculatedColumnName}\n onChangeServerDataType={onChangeServerDataType}\n tableConfig={tableConfig}\n vuuTable={vuuTable}\n />\n ) : null}\n\n <FormField data-field=\"column-label\">\n <FormFieldLabel>Column Label</FormFieldLabel>\n <VuuInput\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n onCommit={onInputCommit}\n value={getColumnLabel(column)}\n />\n </FormField>\n\n <FormField data-field=\"column-width\">\n <FormFieldLabel>Column Width</FormFieldLabel>\n <VuuInput\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n value={width}\n onCommit={onInputCommit}\n />\n </FormField>\n <FormField data-field=\"column-alignment\">\n <FormFieldLabel>Alignment</FormFieldLabel>\n <ToggleButtonGroup onChange={onChangeToggleButton} value={align}>\n <ToggleButton value=\"left\">\n <Icon name=\"align-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"align-right\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <FormField data-field=\"column-pin\">\n <FormFieldLabel>Pin Column</FormFieldLabel>\n <ToggleButtonGroup onChange={onChangeToggleButton} value={pin ?? \"\"}>\n <ToggleButton value=\"left\">\n <Icon name=\"pin-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"floating\">\n <Icon name=\"pin-float\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"pin-right\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"\">\n <Icon name=\"cross-circle\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <ColumnFormattingPanel\n availableRenderers={availableRenderers}\n column={column}\n onChangeFormatting={onChangeFormatting}\n onChangeRendering={onChangeRendering}\n onChangeColumnType={onChangeType}\n />\n\n {editCalculatedColumn ? (\n <div className=\"vuuColumnSettingsPanel-buttonBar\" data-align=\"right\">\n <Button\n className={`${classBase}-buttonCancel`}\n onClick={onCancel}\n tabIndex={-1}\n >\n cancel\n </Button>\n <Button\n className={`${classBase}-buttonSave`}\n onClick={onSave}\n variant=\"cta\"\n >\n save\n </Button>\n </div>\n ) : (\n <div\n className={`${classBase}-buttonBar`}\n data-align={isNewCalculatedColumn ? \"right\" : undefined}\n >\n <Button\n className={`${classBase}-buttonNavPrev`}\n variant=\"secondary\"\n data-icon=\"arrow-left\"\n onClick={navigatePrevColumn}\n >\n PREVIOUS\n </Button>\n <Button\n className={`${classBase}-buttonNavNext`}\n variant=\"secondary\"\n data-icon=\"arrow-right\"\n onClick={navigateNextColumn}\n >\n NEXT\n </Button>\n </div>\n )}\n </div>\n );\n};\n"],"names":["isCalculatedColumn","getCalculatedColumnDetails","useWindow","useComponentCssInjection","colunSettingsPanelCss","useColumnSettings","getDefaultAlignment","jsxs","jsx","ColumnNameLabel","ColumnExpressionPanel","FormField","FormFieldLabel","VuuInput","ToggleButtonGroup","ToggleButton","Icon","ColumnFormattingPanel","Button"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnSettingsPanel.js","sources":["../../src/column-settings/ColumnSettingsPanel.tsx"],"sourcesContent":["import { ColumnDescriptor, ColumnSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getCalculatedColumnDetails,\n getDefaultAlignment,\n isCalculatedColumn\n} from \"@vuu-ui/vuu-utils\";\nimport {\n Button,\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { ColumnExpressionPanel } from \"../column-expression-panel\";\nimport { ColumnFormattingPanel } from \"../column-formatting-settings\";\nimport { ColumnNameLabel } from \"./ColumnNameLabel\";\nimport { useColumnSettings } from \"./useColumnSettings\";\n\nimport colunSettingsPanelCss from \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst getColumnLabel = (column: ColumnDescriptor) => {\n const { name, label } = column;\n if (isCalculatedColumn(name)) {\n return label ?? getCalculatedColumnDetails(column).name;\n } else {\n return label ?? name;\n }\n};\n\nexport const ColumnSettingsPanel = ({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig,\n vuuTable\n}: ColumnSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-settings-panel\",\n css: colunSettingsPanelCss,\n window: targetWindow\n });\n\n const isNewCalculatedColumn = columnProp.name === \"::\";\n const {\n availableRenderers,\n editCalculatedColumn,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onCancel,\n onChange,\n onChangeCalculatedColumnName,\n onChangeFormatting,\n onChangeRendering,\n onChangeServerDataType,\n onChangeToggleButton,\n onChangeType,\n onEditCalculatedColumn,\n onInputCommit,\n onSave\n } = useColumnSettings({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig\n });\n\n const {\n serverDataType,\n align = getDefaultAlignment(serverDataType),\n pin,\n width\n } = column;\n\n return (\n <div\n className={cx(classBase, {\n [`${classBase}-editing`]: editCalculatedColumn\n })}\n >\n <div className={`${classBase}-header`}>\n <ColumnNameLabel column={column} onClick={onEditCalculatedColumn} />\n </div>\n\n {editCalculatedColumn ? (\n <ColumnExpressionPanel\n column={column}\n onChangeName={onChangeCalculatedColumnName}\n onChangeServerDataType={onChangeServerDataType}\n tableConfig={tableConfig}\n vuuTable={vuuTable}\n />\n ) : null}\n\n <FormField data-field=\"column-label\">\n <FormFieldLabel>Column Label</FormFieldLabel>\n <VuuInput\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n onCommit={onInputCommit}\n value={getColumnLabel(column)}\n />\n </FormField>\n\n <FormField data-field=\"column-width\">\n <FormFieldLabel>Column Width</FormFieldLabel>\n <VuuInput\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n value={width}\n onCommit={onInputCommit}\n />\n </FormField>\n <FormField data-field=\"column-alignment\">\n <FormFieldLabel>Alignment</FormFieldLabel>\n <ToggleButtonGroup onChange={onChangeToggleButton} value={align}>\n <ToggleButton value=\"left\">\n <Icon name=\"align-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"align-right\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <FormField data-field=\"column-pin\">\n <FormFieldLabel>Pin Column</FormFieldLabel>\n <ToggleButtonGroup onChange={onChangeToggleButton} value={pin ?? \"\"}>\n <ToggleButton value=\"left\">\n <Icon name=\"pin-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"floating\">\n <Icon name=\"pin-float\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"pin-right\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"\">\n <Icon name=\"cross-circle\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <ColumnFormattingPanel\n availableRenderers={availableRenderers}\n column={column}\n onChangeFormatting={onChangeFormatting}\n onChangeRendering={onChangeRendering}\n onChangeColumnType={onChangeType}\n />\n\n {editCalculatedColumn ? (\n <div className=\"vuuColumnSettingsPanel-buttonBar\" data-align=\"right\">\n <Button\n className={`${classBase}-buttonCancel`}\n onClick={onCancel}\n tabIndex={-1}\n >\n cancel\n </Button>\n <Button\n className={`${classBase}-buttonSave`}\n onClick={onSave}\n variant=\"cta\"\n >\n save\n </Button>\n </div>\n ) : (\n <div\n className={`${classBase}-buttonBar`}\n data-align={isNewCalculatedColumn ? \"right\" : undefined}\n >\n <Button\n className={`${classBase}-buttonNavPrev`}\n variant=\"secondary\"\n data-icon=\"arrow-left\"\n onClick={navigatePrevColumn}\n >\n PREVIOUS\n </Button>\n <Button\n className={`${classBase}-buttonNavNext`}\n variant=\"secondary\"\n data-icon=\"arrow-right\"\n onClick={navigateNextColumn}\n >\n NEXT\n </Button>\n </div>\n )}\n </div>\n );\n};\n"],"names":["isCalculatedColumn","getCalculatedColumnDetails","useWindow","useComponentCssInjection","colunSettingsPanelCss","useColumnSettings","getDefaultAlignment","jsxs","jsx","ColumnNameLabel","ColumnExpressionPanel","FormField","FormFieldLabel","VuuInput","ToggleButtonGroup","ToggleButton","Icon","ColumnFormattingPanel","Button"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnSettings.js","sources":["../../src/column-settings/useColumnSettings.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n TableConfig,\n ColumnTypeFormatting,\n ColumnSettingsProps,\n ColumnTypeSimple,\n} from \"@vuu-ui/vuu-table-types\";\n\nimport {\n CellRendererDescriptor,\n ColumnRenderPropsChangeHandler,\n getFieldName,\n getRegisteredCellRenderers,\n isValidColumnAlignment,\n isValidPinLocation,\n setCalculatedColumnName,\n updateColumnRenderProps,\n updateColumnFormatting,\n updateColumnType,\n queryClosest,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n FormEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nconst integerCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type integer\",\n label: \"Default Renderer (int, long)\",\n name: \"default-int\",\n },\n];\nconst doubleCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type double\",\n label: \"Default Renderer (double)\",\n name: \"default-double\",\n },\n];\n\nconst stringCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type string\",\n label: \"Default Renderer (string)\",\n name: \"default-string\",\n },\n];\n\nconst booleanCellRenderers: CellRendererDescriptor[] = [];\n\nconst getAvailableCellRenderers = (\n column: ColumnDescriptor,\n): CellRendererDescriptor[] => {\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers.concat(getRegisteredCellRenderers(\"string\"));\n case \"int\":\n case \"long\":\n return integerCellRenderers.concat(getRegisteredCellRenderers(\"int\"));\n case \"double\":\n return doubleCellRenderers.concat(getRegisteredCellRenderers(\"double\"));\n case \"boolean\":\n return booleanCellRenderers.concat(getRegisteredCellRenderers(\"boolean\"));\n default:\n return stringCellRenderers;\n }\n};\n\nconst getColumn = (columns: ColumnDescriptor[], column: ColumnDescriptor) => {\n if (column.name === \"::\") {\n // this is a new calculated column\n return column;\n } else {\n const col = columns.find((col) => col.name === column.name);\n if (col) {\n return col;\n }\n throw Error(`columns does not contain column ${name}`);\n }\n};\n\nconst replaceColumn = (\n tableConfig: TableConfig,\n column: ColumnDescriptor,\n): TableConfig => ({\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n col.name === column.name ? column : col,\n ),\n});\n\nexport const useColumnSettings = ({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig,\n}: Omit<ColumnSettingsProps, \"vuuTable\">) => {\n const [column, setColumn] = useState<ColumnDescriptor>(\n getColumn(tableConfig.columns, columnProp),\n );\n const columnRef = useRef<ColumnDescriptor>(column);\n const [inEditMode, setEditMode] = useState(column.name === \"::\");\n\n const handleEditCalculatedcolumn = useCallback(() => {\n columnRef.current = column;\n setEditMode(true);\n }, [column]);\n\n useEffect(() => {\n setColumn(columnProp);\n setEditMode(columnProp.name === \"::\");\n }, [columnProp]);\n\n const availableRenderers = useMemo(() => {\n return getAvailableCellRenderers(column);\n }, [column]);\n\n const handleInputCommit = useCallback(() => {\n onConfigChange(replaceColumn(tableConfig, column));\n }, [column, onConfigChange, tableConfig]);\n\n const handleChangeToggleButton = useCallback<FormEventHandler>(\n (evt) => {\n const button = queryClosest<HTMLButtonElement>(evt.target, \"button\");\n if (button) {\n const fieldName = getFieldName(button);\n const { value } = button;\n switch (fieldName) {\n case \"column-alignment\":\n if (isValidColumnAlignment(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n align: value || undefined,\n };\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n }\n break;\n case \"column-pin\":\n if (isValidPinLocation(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n pin: value || undefined,\n };\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n\n break;\n }\n }\n }\n },\n [column, onConfigChange, tableConfig],\n );\n\n const handleChange = useCallback<FormEventHandler>((evt) => {\n const input = evt.target as HTMLInputElement;\n const fieldName = getFieldName(input);\n const { value } = input;\n switch (fieldName) {\n case \"column-label\":\n setColumn((state) => ({ ...state, label: value }));\n break;\n case \"column-name\":\n setColumn((state) => setCalculatedColumnName(state, value));\n break;\n case \"column-width\":\n setColumn((state) => ({ ...state, width: parseInt(value) }));\n break;\n }\n }, []);\n\n const handleChangeCalculatedColumnName = useCallback((name: string) => {\n setColumn((state) => ({ ...state, name }));\n }, []);\n\n const handleChangeFormatting = useCallback(\n (formatting: ColumnTypeFormatting) => {\n const newColumn = updateColumnFormatting(column, formatting);\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n },\n [column, onConfigChange, tableConfig],\n );\n\n const handleChangeType = useCallback(\n (type: ColumnTypeSimple) => {\n const updatedColumn = updateColumnType(column, type);\n setColumn(updatedColumn);\n onConfigChange(replaceColumn(tableConfig, updatedColumn));\n },\n [column, onConfigChange, tableConfig],\n );\n\n // Changing the server data type applies only to calculated columns\n const handleChangeServerDataType = useCallback(\n (serverDataType: VuuColumnDataType) => {\n setColumn((col) => ({ ...col, serverDataType }));\n },\n [],\n );\n\n const handleChangeRendering = useCallback<ColumnRenderPropsChangeHandler>(\n (renderProps) => {\n if (renderProps) {\n const newColumn: ColumnDescriptor = updateColumnRenderProps(\n column,\n renderProps,\n );\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n }\n },\n [column, onConfigChange, tableConfig],\n );\n\n const navigateColumn = useCallback(\n ({ moveBy }: { moveBy: number }) => {\n const { columns } = tableConfig;\n const index = columns.indexOf(column) + moveBy;\n const newColumn = columns[index];\n if (newColumn) {\n setColumn(newColumn);\n }\n },\n [column, tableConfig],\n );\n const navigateNextColumn = useCallback(() => {\n navigateColumn({ moveBy: 1 });\n }, [navigateColumn]);\n\n const navigatePrevColumn = useCallback(() => {\n navigateColumn({ moveBy: -1 });\n }, [navigateColumn]);\n\n const handleSaveCalculatedColumn = useCallback(() => {\n // TODO validate expression, unique name\n onCreateCalculatedColumn(column);\n }, [column, onCreateCalculatedColumn]);\n\n const handleCancelEdit = useCallback(() => {\n if (columnProp.name === \"::\") {\n onCancelCreateColumn();\n } else {\n if (columnRef.current !== undefined && columnRef.current !== column) {\n setColumn(columnRef.current);\n }\n setEditMode(false);\n }\n }, [column, columnProp.name, onCancelCreateColumn]);\n\n return {\n availableRenderers,\n editCalculatedColumn: inEditMode,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onCancel: handleCancelEdit,\n onChange: handleChange,\n onChangeCalculatedColumnName: handleChangeCalculatedColumnName,\n onChangeFormatting: handleChangeFormatting,\n onChangeRendering: handleChangeRendering,\n onChangeServerDataType: handleChangeServerDataType,\n onChangeToggleButton: handleChangeToggleButton,\n onChangeType: handleChangeType,\n onEditCalculatedColumn: handleEditCalculatedcolumn,\n onInputCommit: handleInputCommit,\n onSave: handleSaveCalculatedColumn,\n };\n};\n"],"names":["getRegisteredCellRenderers","col","useState","useRef","useCallback","useEffect","useMemo","queryClosest","getFieldName","isValidColumnAlignment","isValidPinLocation","setCalculatedColumnName","name","updateColumnFormatting","updateColumnType","updateColumnRenderProps"],"mappings":"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"}
1
+ {"version":3,"file":"useColumnSettings.js","sources":["../../src/column-settings/useColumnSettings.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n TableConfig,\n ColumnTypeFormatting,\n ColumnSettingsProps,\n ColumnTypeSimple\n} from \"@vuu-ui/vuu-table-types\";\n\nimport {\n CellRendererDescriptor,\n ColumnRenderPropsChangeHandler,\n getFieldName,\n getRegisteredCellRenderers,\n isValidColumnAlignment,\n isValidPinLocation,\n setCalculatedColumnName,\n updateColumnRenderProps,\n updateColumnFormatting,\n updateColumnType,\n queryClosest\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n FormEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\n\nconst integerCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type integer\",\n label: \"Default Renderer (int, long)\",\n name: \"default-int\"\n }\n];\nconst doubleCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type double\",\n label: \"Default Renderer (double)\",\n name: \"default-double\"\n }\n];\n\nconst stringCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type string\",\n label: \"Default Renderer (string)\",\n name: \"default-string\"\n }\n];\n\nconst booleanCellRenderers: CellRendererDescriptor[] = [];\n\nconst getAvailableCellRenderers = (\n column: ColumnDescriptor\n): CellRendererDescriptor[] => {\n switch (column.serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers.concat(getRegisteredCellRenderers(\"string\"));\n case \"int\":\n case \"long\":\n return integerCellRenderers.concat(getRegisteredCellRenderers(\"int\"));\n case \"double\":\n return doubleCellRenderers.concat(getRegisteredCellRenderers(\"double\"));\n case \"boolean\":\n return booleanCellRenderers.concat(getRegisteredCellRenderers(\"boolean\"));\n default:\n return stringCellRenderers;\n }\n};\n\nconst getColumn = (columns: ColumnDescriptor[], column: ColumnDescriptor) => {\n if (column.name === \"::\") {\n // this is a new calculated column\n return column;\n } else {\n const col = columns.find((col) => col.name === column.name);\n if (col) {\n return col;\n }\n throw Error(`columns does not contain column ${name}`);\n }\n};\n\nconst replaceColumn = (\n tableConfig: TableConfig,\n column: ColumnDescriptor\n): TableConfig => ({\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n col.name === column.name ? column : col\n )\n});\n\nexport const useColumnSettings = ({\n column: columnProp,\n onCancelCreateColumn,\n onConfigChange,\n onCreateCalculatedColumn,\n tableConfig\n}: Omit<ColumnSettingsProps, \"vuuTable\">) => {\n const [column, setColumn] = useState<ColumnDescriptor>(\n getColumn(tableConfig.columns, columnProp)\n );\n const columnRef = useRef<ColumnDescriptor>(column);\n const [inEditMode, setEditMode] = useState(column.name === \"::\");\n\n const handleEditCalculatedcolumn = useCallback(() => {\n columnRef.current = column;\n setEditMode(true);\n }, [column]);\n\n useEffect(() => {\n setColumn(columnProp);\n setEditMode(columnProp.name === \"::\");\n }, [columnProp]);\n\n const availableRenderers = useMemo(() => {\n return getAvailableCellRenderers(column);\n }, [column]);\n\n const handleInputCommit = useCallback(() => {\n onConfigChange(replaceColumn(tableConfig, column));\n }, [column, onConfigChange, tableConfig]);\n\n const handleChangeToggleButton = useCallback<FormEventHandler>(\n (evt) => {\n const button = queryClosest<HTMLButtonElement>(evt.target, \"button\");\n if (button) {\n const fieldName = getFieldName(button);\n const { value } = button;\n switch (fieldName) {\n case \"column-alignment\":\n if (isValidColumnAlignment(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n align: value || undefined\n };\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n }\n break;\n case \"column-pin\":\n if (isValidPinLocation(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n pin: value || undefined\n };\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n\n break;\n }\n }\n }\n },\n [column, onConfigChange, tableConfig]\n );\n\n const handleChange = useCallback<FormEventHandler>((evt) => {\n const input = evt.target as HTMLInputElement;\n const fieldName = getFieldName(input);\n const { value } = input;\n switch (fieldName) {\n case \"column-label\":\n setColumn((state) => ({ ...state, label: value }));\n break;\n case \"column-name\":\n setColumn((state) => setCalculatedColumnName(state, value));\n break;\n case \"column-width\":\n setColumn((state) => ({ ...state, width: parseInt(value) }));\n break;\n }\n }, []);\n\n const handleChangeCalculatedColumnName = useCallback((name: string) => {\n setColumn((state) => ({ ...state, name }));\n }, []);\n\n const handleChangeFormatting = useCallback(\n (formatting: ColumnTypeFormatting) => {\n const newColumn = updateColumnFormatting(column, formatting);\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n },\n [column, onConfigChange, tableConfig]\n );\n\n const handleChangeType = useCallback(\n (type: ColumnTypeSimple) => {\n const updatedColumn = updateColumnType(column, type);\n setColumn(updatedColumn);\n onConfigChange(replaceColumn(tableConfig, updatedColumn));\n },\n [column, onConfigChange, tableConfig]\n );\n\n // Changing the server data type applies only to calculated columns\n const handleChangeServerDataType = useCallback(\n (serverDataType: VuuColumnDataType) => {\n setColumn((col) => ({ ...col, serverDataType }));\n },\n []\n );\n\n const handleChangeRendering = useCallback<ColumnRenderPropsChangeHandler>(\n (renderProps) => {\n if (renderProps) {\n const newColumn: ColumnDescriptor = updateColumnRenderProps(\n column,\n renderProps\n );\n setColumn(newColumn);\n onConfigChange(replaceColumn(tableConfig, newColumn));\n }\n },\n [column, onConfigChange, tableConfig]\n );\n\n const navigateColumn = useCallback(\n ({ moveBy }: { moveBy: number }) => {\n const { columns } = tableConfig;\n const index = columns.indexOf(column) + moveBy;\n const newColumn = columns[index];\n if (newColumn) {\n setColumn(newColumn);\n }\n },\n [column, tableConfig]\n );\n const navigateNextColumn = useCallback(() => {\n navigateColumn({ moveBy: 1 });\n }, [navigateColumn]);\n\n const navigatePrevColumn = useCallback(() => {\n navigateColumn({ moveBy: -1 });\n }, [navigateColumn]);\n\n const handleSaveCalculatedColumn = useCallback(() => {\n // TODO validate expression, unique name\n onCreateCalculatedColumn(column);\n }, [column, onCreateCalculatedColumn]);\n\n const handleCancelEdit = useCallback(() => {\n if (columnProp.name === \"::\") {\n onCancelCreateColumn();\n } else {\n if (columnRef.current !== undefined && columnRef.current !== column) {\n setColumn(columnRef.current);\n }\n setEditMode(false);\n }\n }, [column, columnProp.name, onCancelCreateColumn]);\n\n return {\n availableRenderers,\n editCalculatedColumn: inEditMode,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onCancel: handleCancelEdit,\n onChange: handleChange,\n onChangeCalculatedColumnName: handleChangeCalculatedColumnName,\n onChangeFormatting: handleChangeFormatting,\n onChangeRendering: handleChangeRendering,\n onChangeServerDataType: handleChangeServerDataType,\n onChangeToggleButton: handleChangeToggleButton,\n onChangeType: handleChangeType,\n onEditCalculatedColumn: handleEditCalculatedcolumn,\n onInputCommit: handleInputCommit,\n onSave: handleSaveCalculatedColumn\n };\n};\n"],"names":["getRegisteredCellRenderers","col","useState","useRef","useCallback","useEffect","useMemo","queryClosest","getFieldName","isValidColumnAlignment","isValidPinLocation","setCalculatedColumnName","name","updateColumnFormatting","updateColumnType","updateColumnRenderProps"],"mappings":"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"}