@adaptabletools/adaptable-cjs
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
91 lines (90 loc) • 5.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CalculatedColumnSettingsWizardSection = exports.isValidCalculatedColumnSettings = exports.renderCalculatedColumnSettingsSummary = void 0;
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const react_1 = require("react");
const rebass_1 = require("rebass");
const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
const Input_1 = tslib_1.__importDefault(require("../../../components/Input"));
const ErrorBox_1 = tslib_1.__importDefault(require("../../../components/ErrorBox"));
const Tabs_1 = require("../../../components/Tabs");
const ValueSelector_1 = require("../../Components/ValueSelector");
const SpecialColumnSettingsWizardStep_1 = require("../../SpecialColumnSettingsWizardStep");
const getCalculatedColumnSettingsTags_1 = require("../Utilities/getCalculatedColumnSettingsTags");
const Select_1 = require("../../../components/Select");
const renderCalculatedColumnSettingsSummary = (data) => {
const options = (0, getCalculatedColumnSettingsTags_1.getCalculatedColumnSettingsTags)(data.CalculatedColumnSettings);
return (React.createElement(rebass_1.Box, { fontSize: 2 },
React.createElement(ValueSelector_1.ValueOptionsTags, { toLabel: (x) => x, toIdentifier: (c) => c, readOnly: true, options: options, value: options })));
};
exports.renderCalculatedColumnSettingsSummary = renderCalculatedColumnSettingsSummary;
const isValidCalculatedColumnSettings = (data) => {
if (!data.CalculatedColumnSettings?.DataType) {
return 'No data type is specified and it could not be inferred from the defined expression';
}
return true;
};
exports.isValidCalculatedColumnSettings = isValidCalculatedColumnSettings;
const CalculatedColumnSettingsWizardSection = (props) => {
const { data, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
const calculatedColumnExpressionService = (0, react_1.useMemo)(() => api.internalApi.getCalculatedColumnExpressionService(), []);
const handleDataTypeChange = (dataType) => {
const aggregatable = dataType == 'number' ? data.CalculatedColumnSettings?.Aggregatable : false;
props.onChange({
...data,
CalculatedColumnSettings: {
...data.CalculatedColumnSettings,
DataType: dataType,
Aggregatable: aggregatable,
},
});
};
const validCheck = (0, exports.isValidCalculatedColumnSettings)(data);
const ErrorMessage = validCheck === true ? null : validCheck;
const { DataType: dataType } = data.CalculatedColumnSettings ?? {};
const { Width } = data.CalculatedColumnSettings ?? {};
const handleSpecialColumnSettingsChange = (settings) => {
props.onChange({
...data,
CalculatedColumnSettings: {
...data.CalculatedColumnSettings,
...settings,
},
});
};
React.useEffect(() => {
if (!dataType) {
const computedDataType = calculatedColumnExpressionService.getCalculatedColumnDataType(data.Query);
handleSpecialColumnSettingsChange({
...data?.CalculatedColumnSettings,
DataType: computedDataType,
});
}
}, []);
const options = [
{ value: 'number', label: 'Number' },
{ value: 'text', label: 'Text' },
{ value: 'date', label: 'Date' },
{ value: 'boolean', label: 'Boolean' },
{ value: 'numberArray', label: 'NumberArray' },
];
return (React.createElement(rebass_1.Box, { "data-name": 'calculated-column-settings' },
React.createElement(Tabs_1.Tabs, { autoFocus: false },
React.createElement(Tabs_1.Tabs.Tab, null, "Column Settings"),
React.createElement(Tabs_1.Tabs.Content, null,
React.createElement(rebass_1.Flex, { flexDirection: "row" },
React.createElement(FormLayout_1.default, null,
React.createElement(FormLayout_1.FormRow, { label: "Data Type" },
React.createElement(Select_1.Select, { "data-name": "column-type", placeholder: "Select Data Type", options: options, value: dataType, onChange: (value) => handleDataTypeChange(value) })),
React.createElement(FormLayout_1.FormRow, { label: "Width" },
React.createElement(Input_1.default, { "data-name": "column-width", type: "number", width: 300, value: Width || '', onChange: (e) => handleSpecialColumnSettingsChange({
Width: Number(e.target.value),
}) })))))),
ErrorMessage ? React.createElement(ErrorBox_1.default, { marginTop: 2 }, ErrorMessage) : null,
React.createElement(SpecialColumnSettingsWizardStep_1.SpecialColumnSettingsWizardStep, { isEditable: false,
// @ts-ignore CalculatedColumn has a broader DataType
settings: data.CalculatedColumnSettings, onChange: handleSpecialColumnSettingsChange })));
};
exports.CalculatedColumnSettingsWizardSection = CalculatedColumnSettingsWizardSection;