UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

78 lines (77 loc) 4.94 kB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useMemo } from 'react'; import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard'; import { ExpressionEditor } from '../../../components/ExpressionEditor'; import { CodeBlock } from '../../../components/CodeBlock'; import { Humanize } from '../../../Utilities/Extensions/StringExtensions'; import { Box, Flex } from '../../../components/Flex'; import { Card } from '../../../components/Card'; const getExpressionTypeDescription = (expressionType) => { switch (expressionType) { case 'ScalarExpression': return 'Define an expression using values from other cells in each row'; case 'AggregatedScalarExpression': return 'Define an expression using aggregated values from other rows'; case 'CumulativeAggregatedExpression': return 'Define a cumulative expression using values from other rows'; case 'QuantileAggregatedExpression': return 'Define a quantile expression using values from other rows'; default: return ''; } }; export const renderCalculatedColumnExpressionSummary = (data, api) => { return (_jsxs(Box, { className: "twa:text-2", children: ["Column scalar expression:", ' ', _jsx(CodeBlock, { children: api.internalApi.getAdaptableQueryExpressionText(data.Query) })] })); }; export const isValidCalculatedColumnExpression = (data, api) => { const calculatedColumnExpressionService = api.internalApi.getCalculatedColumnExpressionService(); const expression = api.expressionApi.getAdaptableQueryExpression(data.Query)?.trim(); if (!expression) { return 'An expression is required for the Calculated Column.'; } const isValid = calculatedColumnExpressionService.isCalculatedColumnQueryValid(data.Query); if (!isValid) { return 'The Calculated Column expression is not valid.'; } return true; }; export const CalculatedColumnExpressionWizardSection = (props) => { const { api, data, moduleInfo } = useOnePageAdaptableWizardContext(); const initialData = useMemo(() => api.internalApi.getQueryPreviewData(), []); const setCalculatedColumnExpression = (calculatedColumnQuery) => { const calculatedColumnExpressionService = api.internalApi.getCalculatedColumnExpressionService(); const dataType = calculatedColumnExpressionService.getCalculatedColumnDataType(calculatedColumnQuery); props.onChange({ ...data, Query: calculatedColumnQuery, CalculatedColumnSettings: { ...data.CalculatedColumnSettings, DataType: dataType, }, }); }; const getEditorType = (expressionType) => { switch (expressionType) { case 'AggregatedScalarExpression': return 'aggregatedScalar'; case 'CumulativeAggregatedExpression': return 'cumulativeAggregatedScalar'; case 'QuantileAggregatedExpression': return 'quantileAggregatedScalar'; } }; const columns = api.columnApi.internalApi.getQueryableColumnsForUIEditor(); const expressionEditor = (() => { switch (props.expressionType) { case 'ScalarExpression': return (_jsx(ExpressionEditor, { type: 'scalar', module: moduleInfo.ModuleName, className: "twa:pl-0", value: data.Query.ScalarExpression, onChange: (ScalarExpression) => setCalculatedColumnExpression({ ScalarExpression }), initialData: initialData, columns: columns, fields: api.expressionApi.internalApi.getAvailableFields(), namedQueries: api.namedQueryApi.getNamedQueries(), isFullExpression: true, api: api })); case 'AggregatedScalarExpression': case 'CumulativeAggregatedExpression': case 'QuantileAggregatedExpression': return (_jsx(ExpressionEditor, { type: getEditorType(props.expressionType), module: moduleInfo.ModuleName, className: "twa:pl-0", value: data.Query.AggregatedScalarExpression, onChange: (AggregatedScalarExpression) => setCalculatedColumnExpression({ AggregatedScalarExpression }), initialData: initialData, columns: columns, namedQueries: api.namedQueryApi.getNamedQueries(), isFullExpression: true, api: api })); default: return null; } })(); return (_jsx(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: _jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: Humanize(props.expressionType) }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: getExpressionTypeDescription(props.expressionType) })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: expressionEditor })] }) })); };