@adaptabletools/adaptable-cjs 22.0.0-canary.6 → 22.0.0-canary.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.css +0 -3
- package/index.css.map +1 -1
- package/package.json +1 -1
- package/src/AdaptableState/AlertState.d.ts +1 -2
- package/src/AdaptableState/Common/AdaptableObject.d.ts +4 -0
- package/src/AdaptableState/Common/BaseContext.d.ts +2 -0
- package/src/AdaptableState/Common/NamedObject.d.ts +10 -0
- package/src/AdaptableState/Common/NamedObject.js +2 -0
- package/src/AdaptableState/Common/RowSummary.d.ts +1 -1
- package/src/AdaptableState/Common/Schedule.d.ts +2 -2
- package/src/AdaptableState/Common/SuspendableObject.d.ts +10 -0
- package/src/AdaptableState/Common/SuspendableObject.js +2 -0
- package/src/AdaptableState/CustomSortState.d.ts +1 -1
- package/src/AdaptableState/FormatColumnState.d.ts +1 -1
- package/src/AdaptableState/LayoutState.d.ts +1 -1
- package/src/AdaptableState/PlusMinusState.d.ts +1 -1
- package/src/AdaptableState/ShortcutState.d.ts +1 -1
- package/src/AdaptableState/StyledColumnState.d.ts +1 -1
- package/src/Api/AlertApi.d.ts +6 -0
- package/src/Api/CustomSortApi.d.ts +6 -0
- package/src/Api/FlashingCellApi.d.ts +6 -0
- package/src/Api/FormatColumnApi.d.ts +10 -4
- package/src/Api/Implementation/AlertApiImpl.d.ts +1 -0
- package/src/Api/Implementation/AlertApiImpl.js +3 -0
- package/src/Api/Implementation/ChartingApiImpl.js +2 -2
- package/src/Api/Implementation/CustomSortApiImpl.d.ts +1 -0
- package/src/Api/Implementation/CustomSortApiImpl.js +3 -0
- package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
- package/src/Api/Implementation/FlashingCellApiImpl.js +3 -0
- package/src/Api/Implementation/FormatColumnApiImpl.d.ts +6 -5
- package/src/Api/Implementation/FormatColumnApiImpl.js +6 -5
- package/src/Api/Implementation/LayoutApiImpl.js +1 -1
- package/src/Api/Implementation/NamedQueryApiImpl.js +2 -2
- package/src/Api/Implementation/PlusMinusApiImpl.d.ts +1 -0
- package/src/Api/Implementation/PlusMinusApiImpl.js +3 -0
- package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ScheduleApiImpl.js +3 -0
- package/src/Api/Implementation/ShortcutApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ShortcutApiImpl.js +3 -0
- package/src/Api/Implementation/SystemStatusApiImpl.js +4 -4
- package/src/Api/Internal/CalculatedColumnInternalApi.js +2 -2
- package/src/Api/Internal/FreeTextColumnInternalApi.js +2 -2
- package/src/Api/Internal/LayoutInternalApi.js +1 -1
- package/src/Api/Internal/NamedQueryInternalApi.js +4 -4
- package/src/Api/PlusMinusApi.d.ts +6 -0
- package/src/Api/ScheduleApi.d.ts +6 -0
- package/src/Api/ShortcutApi.d.ts +6 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +8 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.js +17 -1
- package/src/Redux/Store/AdaptableStore.js +18 -16
- package/src/Strategy/BulkUpdateModule.js +8 -8
- package/src/Strategy/PlusMinusModule.js +1 -1
- package/src/Strategy/QuickSearchModule.js +1 -1
- package/src/Strategy/SettingsPanelModule.js +11 -7
- package/src/Strategy/SmartEditModule.js +10 -10
- package/src/Utilities/Services/DataService.js +1 -1
- package/src/Utilities/Services/Fdc3Service.js +4 -4
- package/src/Utilities/Services/ModuleService.js +1 -3
- package/src/Utilities/Services/ThemeService.js +2 -6
- package/src/Utilities/Services/ValidationService.js +1 -1
- package/src/Utilities/logDeprecation.js +3 -4
- package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
- package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +2 -2
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +2 -2
- package/src/View/Components/CellPopup/index.js +1 -1
- package/src/View/Components/EntityRulesEditor/Utilities.js +5 -5
- package/src/View/Components/NewScopeComponent.js +3 -3
- package/src/View/Components/Popups/AdaptablePopupConfirmation.js +1 -1
- package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +3 -3
- package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
- package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +3 -3
- package/src/View/Layout/LayoutViewPanel.js +1 -1
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +1 -1
- package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/GridFilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +3 -3
- package/src/View/Layout/Wizard/sections/RowSummarySection.js +1 -1
- package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +2 -2
- package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +5 -5
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.d.ts +1 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +11 -11
- package/src/View/StateManagement/handleExportState.js +1 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +1 -1
- package/src/agGrid/AdaptableAgGrid.js +38 -51
- package/src/agGrid/AgGridAdapter.js +8 -8
- package/src/agGrid/AgGridColumnAdapter.js +1 -1
- package/src/agGrid/AgGridExportAdapter.js +5 -5
- package/src/agGrid/AgGridThemeAdapter.js +2 -2
- package/src/components/OverlayTrigger/index.js +1 -1
- package/src/env.js +2 -2
- package/src/migration/AdaptableUpgradeHelper.js +2 -2
- package/src/migration/VersionUpgrade17.js +4 -4
- package/src/migration/VersionUpgrade20.js +4 -4
- package/tsconfig.cjs.tsbuildinfo +1 -1
|
@@ -47,8 +47,8 @@ class SmartEditModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
47
47
|
return {
|
|
48
48
|
Alert: {
|
|
49
49
|
alertType: 'generic',
|
|
50
|
-
header: 'Smart Edit
|
|
51
|
-
message: '
|
|
50
|
+
header: 'Smart Edit',
|
|
51
|
+
message: 'Editing is not available in Pivot Mode.',
|
|
52
52
|
alertDefinition: ObjectFactory_1.default.CreateInternalAlertDefinitionForMessages('Error'),
|
|
53
53
|
},
|
|
54
54
|
};
|
|
@@ -57,8 +57,8 @@ class SmartEditModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
57
57
|
return {
|
|
58
58
|
Alert: {
|
|
59
59
|
alertType: 'generic',
|
|
60
|
-
header: 'Smart Edit
|
|
61
|
-
message: 'No cells
|
|
60
|
+
header: 'Smart Edit',
|
|
61
|
+
message: 'No cells selected. Please select one or more cells to continue.',
|
|
62
62
|
alertDefinition: ObjectFactory_1.default.CreateInternalAlertDefinitionForMessages('Error'),
|
|
63
63
|
},
|
|
64
64
|
};
|
|
@@ -67,8 +67,8 @@ class SmartEditModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
67
67
|
return {
|
|
68
68
|
Alert: {
|
|
69
69
|
alertType: 'generic',
|
|
70
|
-
header: 'Smart Edit
|
|
71
|
-
message: 'Smart Edit
|
|
70
|
+
header: 'Smart Edit',
|
|
71
|
+
message: 'Smart Edit supports editing a single column at a time. Please adjust your selection.',
|
|
72
72
|
alertDefinition: ObjectFactory_1.default.CreateInternalAlertDefinitionForMessages('Error'),
|
|
73
73
|
},
|
|
74
74
|
};
|
|
@@ -79,8 +79,8 @@ class SmartEditModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
79
79
|
return {
|
|
80
80
|
Alert: {
|
|
81
81
|
alertType: 'generic',
|
|
82
|
-
header: 'Smart Edit
|
|
83
|
-
message: 'Smart Edit only
|
|
82
|
+
header: 'Smart Edit',
|
|
83
|
+
message: 'Smart Edit only applies to numeric columns. Please adjust your selection.',
|
|
84
84
|
alertDefinition: ObjectFactory_1.default.CreateInternalAlertDefinitionForMessages('Error'),
|
|
85
85
|
},
|
|
86
86
|
};
|
|
@@ -91,8 +91,8 @@ class SmartEditModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
91
91
|
return {
|
|
92
92
|
Alert: {
|
|
93
93
|
alertType: 'generic',
|
|
94
|
-
header: 'Smart Edit
|
|
95
|
-
message: 'Smart Edit is not
|
|
94
|
+
header: 'Smart Edit',
|
|
95
|
+
message: 'Smart Edit is not available for read-only cells. Please adjust your selection.',
|
|
96
96
|
alertDefinition: ObjectFactory_1.default.CreateInternalAlertDefinitionForMessages('Error'),
|
|
97
97
|
},
|
|
98
98
|
};
|
|
@@ -68,7 +68,7 @@ class DataService {
|
|
|
68
68
|
// why 2 and not 3 or 1? no good reason, only seems like a reasonable waiting time :)
|
|
69
69
|
const UNDO_WAIT = 2000;
|
|
70
70
|
const timeoutId = setTimeout(() => {
|
|
71
|
-
this.adaptable.logger.warn(`Undo change was
|
|
71
|
+
this.adaptable.logger.warn(`Undo change was not handled within timeout: column="${change.column}", primaryKey="${change.primaryKeyValue}", from=${change.newValue} to=${change.oldValue}.`);
|
|
72
72
|
this.extractUndoChange(change);
|
|
73
73
|
}, UNDO_WAIT);
|
|
74
74
|
this.undoChangeTimers.set(undoChangeKey, timeoutId);
|
|
@@ -81,7 +81,7 @@ class Fdc3Service {
|
|
|
81
81
|
getDesktopAgent() {
|
|
82
82
|
if (globalThis.fdc3 == null && !this.loggedAgentError) {
|
|
83
83
|
this.loggedAgentError = true;
|
|
84
|
-
this.adaptableApi.consoleError('FDC3 Desktop Agent not found.
|
|
84
|
+
this.adaptableApi.consoleError('FDC3 Desktop Agent not found. The host application must provide the FDC3 agent on globalThis.fdc3.');
|
|
85
85
|
}
|
|
86
86
|
return globalThis.fdc3;
|
|
87
87
|
}
|
|
@@ -164,11 +164,11 @@ class Fdc3Service {
|
|
|
164
164
|
if (!this.getFdc3Options().enableLogging) {
|
|
165
165
|
return;
|
|
166
166
|
}
|
|
167
|
-
this.adaptableApi.consoleLog(`FDC3
|
|
167
|
+
this.adaptableApi.consoleLog(`FDC3 ${type}: ${params.join(' : ')}`);
|
|
168
168
|
}
|
|
169
169
|
logFdc3Error(error) {
|
|
170
|
-
this.adaptableApi.consoleError(
|
|
171
|
-
this.adaptableApi.alertApi.showAlertError('FDC3
|
|
170
|
+
this.adaptableApi.consoleError('FDC3 operation failed.', error);
|
|
171
|
+
this.adaptableApi.alertApi.showAlertError('FDC3', 'An error occurred. See the browser console for details.');
|
|
172
172
|
}
|
|
173
173
|
getFdc3Api() {
|
|
174
174
|
return this.adaptableApi.fdc3Api;
|
|
@@ -36,9 +36,7 @@ class ModuleService {
|
|
|
36
36
|
const registeredAgGridModuleNames = agGridModulesAdapter.getAgGridRegisteredModuleNames();
|
|
37
37
|
const missingAgGridModuleNames = mandatoryAgGridModuleNames.filter((moduleName) => !registeredAgGridModuleNames.includes(moduleName));
|
|
38
38
|
if (missingAgGridModuleNames.length) {
|
|
39
|
-
this.adaptableApi.consoleError(`
|
|
40
|
-
|
|
41
|
-
See for more information: ${DocumentationLinkConstants_1.AgGridRequiredModulesDocsLink}`);
|
|
39
|
+
this.adaptableApi.consoleError(`Adaptable requires these AG Grid modules: ${missingAgGridModuleNames.join(', ')}. Please register them. See: ${DocumentationLinkConstants_1.AgGridRequiredModulesDocsLink}`);
|
|
42
40
|
}
|
|
43
41
|
// log optional missing AG Grid dependencies for all modules
|
|
44
42
|
this.getModuleCollection().forEach((adaptableModule) => {
|
|
@@ -73,15 +73,11 @@ class ThemeService {
|
|
|
73
73
|
return val;
|
|
74
74
|
});
|
|
75
75
|
if (abLoaded !== '777') {
|
|
76
|
-
logger.consoleError('
|
|
76
|
+
logger.consoleError('Adaptable styles not detected. Please import "@adaptabletools/adaptable/index.css".');
|
|
77
77
|
}
|
|
78
78
|
const isCustomUserTheme = !this.api.themeApi.internalApi.isSystemTheme(themeName);
|
|
79
79
|
if (!isCustomUserTheme && abThemeLoaded !== themeName) {
|
|
80
|
-
logger.consoleWarn(`Theme "${themeName}"
|
|
81
|
-
|
|
82
|
-
If it's an AdapTable system theme, try
|
|
83
|
-
|
|
84
|
-
import "@adaptabletools/adaptable/themes/${themeName}.css"`);
|
|
80
|
+
logger.consoleWarn(`Theme "${themeName}" does not appear to be loaded. Ensure the CSS file is imported, e.g.: import "@adaptabletools/adaptable/themes/${themeName}.css".`);
|
|
85
81
|
}
|
|
86
82
|
}
|
|
87
83
|
// prefers-color-scheme
|
|
@@ -57,7 +57,7 @@ class ValidationService {
|
|
|
57
57
|
let alert = {
|
|
58
58
|
alertType: 'cellChanged',
|
|
59
59
|
header: 'Alert',
|
|
60
|
-
message: '
|
|
60
|
+
message: 'A validation rule was triggered for this edit.',
|
|
61
61
|
alertDefinition: failedRules[0],
|
|
62
62
|
cellDataChangedInfo: cellDataChangedInfo,
|
|
63
63
|
};
|
|
@@ -14,16 +14,15 @@ const doOnce = (func, key) => {
|
|
|
14
14
|
};
|
|
15
15
|
const logDeprecation = (logger, typeName, oldProp, newProp, message) => {
|
|
16
16
|
const newPropMsg = newProp ? `Please use '${typeName}.${newProp}()' instead. ` : '';
|
|
17
|
-
doOnce(() => logger.consoleWarn(
|
|
17
|
+
doOnce(() => logger.consoleWarn(`${typeName}.${oldProp}() is deprecated. ${newPropMsg}${message ?? ''}`), `Deprecated_${oldProp}`);
|
|
18
18
|
};
|
|
19
19
|
exports.logDeprecation = logDeprecation;
|
|
20
20
|
const logDeprecationExternal = (logger, oldTypeName, oldProp, newTypeName, newProp, message) => {
|
|
21
21
|
const newPropMsg = newProp ? `Please use '${newTypeName}.${newProp}()' instead. ` : '';
|
|
22
|
-
doOnce(() => logger.consoleWarn(
|
|
22
|
+
doOnce(() => logger.consoleWarn(`${oldTypeName}.${oldProp}() is deprecated. ${newPropMsg}${message ?? ''}`), `Deprecated_${oldProp}`);
|
|
23
23
|
};
|
|
24
24
|
exports.logDeprecationExternal = logDeprecationExternal;
|
|
25
25
|
const logDeprecationInternal = (logger, typeName, oldProp) => {
|
|
26
|
-
doOnce(() => logger.consoleWarn(
|
|
27
|
-
Please contact support if you need the missing functionality.`), `Deprecated_${oldProp}`);
|
|
26
|
+
doOnce(() => logger.consoleWarn(`${typeName}.${oldProp}() is deprecated and will be removed in the next major release. Contact support if you need this functionality.`), `Deprecated_${oldProp}`);
|
|
28
27
|
};
|
|
29
28
|
exports.logDeprecationInternal = logDeprecationInternal;
|
|
@@ -7,7 +7,7 @@ const isValidAlertRules = (alert, api, context) => {
|
|
|
7
7
|
!alert.Rule.BooleanExpression &&
|
|
8
8
|
!alert.Rule.ObservableExpression &&
|
|
9
9
|
!alert.Rule.AggregatedBooleanExpression) {
|
|
10
|
-
return '
|
|
10
|
+
return 'A rule is required for the Alert.';
|
|
11
11
|
}
|
|
12
12
|
const isRuleValid = (0, Utilities_1.isAdaptableRuleValid)(alert, api, context);
|
|
13
13
|
if (typeof isRuleValid === 'string') {
|
|
@@ -26,11 +26,11 @@ exports.renderCalculatedColumnDefinitionSummary = renderCalculatedColumnDefiniti
|
|
|
26
26
|
const isValidCalculatedColumnDefinition = (data, api) => {
|
|
27
27
|
const columns = api.columnApi.getColumns();
|
|
28
28
|
if (!data.ColumnId) {
|
|
29
|
-
return 'Column
|
|
29
|
+
return 'A Column ID is required.';
|
|
30
30
|
}
|
|
31
31
|
const columnsWithSameIdCount = columns.filter((c) => c.columnId === data.ColumnId).length;
|
|
32
32
|
const hasAlreadyExistingId = data.Uuid ? columnsWithSameIdCount > 1 : columnsWithSameIdCount > 0;
|
|
33
|
-
return hasAlreadyExistingId ? 'A
|
|
33
|
+
return hasAlreadyExistingId ? 'A column with this ID already exists.' : true;
|
|
34
34
|
};
|
|
35
35
|
exports.isValidCalculatedColumnDefinition = isValidCalculatedColumnDefinition;
|
|
36
36
|
const CalculatedColumnDefinitionWizardSection = (props) => {
|
|
@@ -22,11 +22,11 @@ const isValidCalculatedColumnExpression = (data, api) => {
|
|
|
22
22
|
const calculatedColumnExpressionService = api.internalApi.getCalculatedColumnExpressionService();
|
|
23
23
|
const expression = api.expressionApi.getAdaptableQueryExpression(data.Query)?.trim();
|
|
24
24
|
if (!expression) {
|
|
25
|
-
return '
|
|
25
|
+
return 'An expression is required for the Calculated Column.';
|
|
26
26
|
}
|
|
27
27
|
const isValid = calculatedColumnExpressionService.isCalculatedColumnQueryValid(data.Query);
|
|
28
28
|
if (!isValid) {
|
|
29
|
-
return 'Calculated Column
|
|
29
|
+
return 'The Calculated Column expression is not valid.';
|
|
30
30
|
}
|
|
31
31
|
return true;
|
|
32
32
|
};
|
|
@@ -21,7 +21,7 @@ const renderCalculatedColumnSettingsSummary = (data) => {
|
|
|
21
21
|
exports.renderCalculatedColumnSettingsSummary = renderCalculatedColumnSettingsSummary;
|
|
22
22
|
const isValidCalculatedColumnSettings = (data) => {
|
|
23
23
|
if (!data.CalculatedColumnSettings?.DataType) {
|
|
24
|
-
return '
|
|
24
|
+
return 'A data type is required. It could not be inferred from the expression.';
|
|
25
25
|
}
|
|
26
26
|
return true;
|
|
27
27
|
};
|
|
@@ -9,12 +9,12 @@ const FormLayout_1 = tslib_1.__importStar(require("../../../../components/FormLa
|
|
|
9
9
|
const AdaptableInput_1 = tslib_1.__importDefault(require("../../../Components/AdaptableInput"));
|
|
10
10
|
const isSettingsValid = (chartDefinition, api) => {
|
|
11
11
|
if (!chartDefinition.Name) {
|
|
12
|
-
return '
|
|
12
|
+
return 'A name is required.';
|
|
13
13
|
}
|
|
14
14
|
const allChartDefinitions = api.chartingApi.getChartDefinitions();
|
|
15
15
|
if (allChartDefinitions.some((chartDefinitionLoopItem) => chartDefinitionLoopItem.Uuid !== chartDefinition.Uuid &&
|
|
16
16
|
chartDefinitionLoopItem.Name === chartDefinition.Name)) {
|
|
17
|
-
return '
|
|
17
|
+
return 'A Chart with this name already exists.';
|
|
18
18
|
}
|
|
19
19
|
return true;
|
|
20
20
|
};
|
|
@@ -7,12 +7,12 @@ const FormLayout_1 = tslib_1.__importStar(require("../../../../components/FormLa
|
|
|
7
7
|
const AdaptableInput_1 = tslib_1.__importDefault(require("../../../Components/AdaptableInput"));
|
|
8
8
|
const isSettingsValid = (chartDefinition, api) => {
|
|
9
9
|
if (!chartDefinition.Name) {
|
|
10
|
-
return '
|
|
10
|
+
return 'A name is required.';
|
|
11
11
|
}
|
|
12
12
|
const allChartDefinitions = api.chartingApi.getExternalChartDefinitions();
|
|
13
13
|
if (allChartDefinitions.some((chartDefinitionLoopItem) => chartDefinitionLoopItem.Uuid !== chartDefinition.Uuid &&
|
|
14
14
|
chartDefinitionLoopItem.Name === chartDefinition.Name)) {
|
|
15
|
-
return '
|
|
15
|
+
return 'A Chart with this name already exists.';
|
|
16
16
|
}
|
|
17
17
|
return true;
|
|
18
18
|
};
|
|
@@ -36,7 +36,7 @@ exports.CellPopup = React.forwardRef((props, ref) => {
|
|
|
36
36
|
const cellSelector = `[row-id="${props.primaryKeyValue}"] [col-id="${props.columnId}"]`;
|
|
37
37
|
const alignTo = document.querySelector(cellSelector);
|
|
38
38
|
if (!alignTo) {
|
|
39
|
-
adaptable.logger.consoleError(`
|
|
39
|
+
adaptable.logger.consoleError(`Cell not found for selector "${cellSelector}". Unable to display popup.`);
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
const showOverlayOptions = {
|
|
@@ -4,28 +4,28 @@ exports.isAdaptableRuleValid = void 0;
|
|
|
4
4
|
const isAdaptableRuleValid = (abObject, api, context) => {
|
|
5
5
|
if (abObject?.Rule?.Predicates?.length) {
|
|
6
6
|
if (!api.predicateApi.isEveryPredicateValid(abObject?.Rule?.Predicates)) {
|
|
7
|
-
return `The
|
|
7
|
+
return `The predicate${abObject?.Rule?.Predicates?.length === 1 ? ' is' : 's are'} not valid.`;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
if (abObject?.Rule?.BooleanExpression) {
|
|
11
11
|
if (!api.expressionApi.isValidBooleanExpression(abObject?.Rule?.BooleanExpression, context.moduleInfo.ModuleName)) {
|
|
12
|
-
return 'The
|
|
12
|
+
return 'The Boolean expression is not valid.';
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
if (abObject?.Rule?.ObservableExpression) {
|
|
16
16
|
if (!api.expressionApi.isValidObservableExpression(abObject?.Rule?.ObservableExpression, context.moduleInfo.ModuleName)) {
|
|
17
|
-
return 'The
|
|
17
|
+
return 'The Observable expression is not valid.';
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
if (abObject?.Rule?.AggregatedBooleanExpression) {
|
|
21
21
|
if (!api.expressionApi.isValidAggregatedBooleanExpression(abObject?.Rule?.AggregatedBooleanExpression, context.moduleInfo.ModuleName)) {
|
|
22
|
-
return 'The
|
|
22
|
+
return 'The Aggregated Boolean expression is not valid.';
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
if (abObject?.Rule?.Predicates?.length) {
|
|
26
26
|
const isAPredicateWithInvalidColumnId = abObject?.Rule?.Predicates?.some((predicate) => predicate.ColumnId !== undefined && predicate.ColumnId === '');
|
|
27
27
|
if (isAPredicateWithInvalidColumnId) {
|
|
28
|
-
return 'Predicates with custom scope
|
|
28
|
+
return 'Predicates with a custom scope require a valid column.';
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
return true;
|
|
@@ -18,13 +18,13 @@ const Tag_1 = require("../../components/Tag/Tag");
|
|
|
18
18
|
const isScopeValid = ({ Scope }) => {
|
|
19
19
|
const result = [];
|
|
20
20
|
if (!Scope) {
|
|
21
|
-
return '
|
|
21
|
+
return 'A scope is required.';
|
|
22
22
|
}
|
|
23
23
|
if (Scope && 'ColumnIds' in Scope && Scope.ColumnIds.length === 0) {
|
|
24
|
-
result.push('
|
|
24
|
+
result.push('Please select at least one column for the scope.');
|
|
25
25
|
}
|
|
26
26
|
if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
|
|
27
|
-
result.push('
|
|
27
|
+
result.push('Please select at least one data type for the scope.');
|
|
28
28
|
}
|
|
29
29
|
return result.length ? result.join(', ') : true;
|
|
30
30
|
};
|
|
@@ -55,7 +55,7 @@ const AdaptablePopupConfirmation = (props) => {
|
|
|
55
55
|
setDisableDeleteConfirmation(!disableDeleteConfirmation);
|
|
56
56
|
} }, "Do not show this again")),
|
|
57
57
|
props.showInputBox && (React.createElement(Flex_1.Box, { className: "twa:p-2", "data-name": "body" },
|
|
58
|
-
React.createElement("p", null, "Please enter a comment to confirm"),
|
|
58
|
+
React.createElement("p", null, "Please enter a comment to confirm."),
|
|
59
59
|
React.createElement(Input_1.default, { className: "twa:mt-2 twa:w-full", value: promptText, type: "string", placeholder: "Enter text", onChange: (e) => changeContent(e) }))),
|
|
60
60
|
React.createElement(Flex_1.Flex, { className: "twa:mt-3 twa:p-2", "data-name": "footer", justifyContent: "space-between" },
|
|
61
61
|
props.cancelButtonText != null ? (React.createElement(SimpleButton_1.default, { "data-name": "cancel", tone: "neutral", variant: "raised", onClick: () => onCancelForm() }, props.cancelButtonText)) : (React.createElement("div", null)),
|
|
@@ -23,13 +23,13 @@ const renderCustomSortColumn = (data) => {
|
|
|
23
23
|
exports.renderCustomSortColumn = renderCustomSortColumn;
|
|
24
24
|
const isValidCustomSortColumn = (data, allCustomSorts) => {
|
|
25
25
|
if (!data.Name) {
|
|
26
|
-
return '
|
|
26
|
+
return 'A name is required.';
|
|
27
27
|
}
|
|
28
28
|
if (allCustomSorts.some((customSort) => customSort.Name === data.Name && customSort.Uuid !== data.Uuid)) {
|
|
29
|
-
return 'A Custom Sort
|
|
29
|
+
return 'A Custom Sort with this name already exists.';
|
|
30
30
|
}
|
|
31
31
|
if (!data.ColumnId) {
|
|
32
|
-
return '
|
|
32
|
+
return 'Please select a column for the Custom Sort.';
|
|
33
33
|
}
|
|
34
34
|
return true;
|
|
35
35
|
};
|
|
@@ -15,7 +15,7 @@ const DateHelper_1 = require("../../../Utilities/Helpers/DateHelper");
|
|
|
15
15
|
const Tag_1 = require("../../../components/Tag");
|
|
16
16
|
const isValidCustomSortOrder = (data) => {
|
|
17
17
|
if (!data.SortedValues || !data.SortedValues.length) {
|
|
18
|
-
return '
|
|
18
|
+
return 'At least one value is required for the Custom Sort order.';
|
|
19
19
|
}
|
|
20
20
|
return true;
|
|
21
21
|
};
|
|
@@ -4,7 +4,7 @@ exports.isValidFlashingCellRules = void 0;
|
|
|
4
4
|
const Utilities_1 = require("../../Components/EntityRulesEditor/Utilities");
|
|
5
5
|
const isValidFlashingCellRules = (flashingCell, api, context) => {
|
|
6
6
|
if (!flashingCell.Rule?.Predicates?.length && !flashingCell.Rule.BooleanExpression) {
|
|
7
|
-
return '
|
|
7
|
+
return 'A rule is required for the Flashing Cell.';
|
|
8
8
|
}
|
|
9
9
|
const isRuleValid = (0, Utilities_1.isAdaptableRuleValid)(flashingCell, api, context);
|
|
10
10
|
if (typeof isRuleValid === 'string') {
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { FreeTextColumn } from '../../../AdaptableState/FreeTextColumnState';
|
|
3
3
|
import { AdaptableApi } from '../../../Api/AdaptableApi';
|
|
4
4
|
export declare const renderFreeTextColumnSummary: (data: FreeTextColumn) => React.JSX.Element;
|
|
5
|
-
export declare const isValidFreeTextColumn: (data: FreeTextColumn, api: AdaptableApi) => true | "Column
|
|
5
|
+
export declare const isValidFreeTextColumn: (data: FreeTextColumn, api: AdaptableApi) => true | "A Column ID is required." | "A column with this ID already exists." | "A data type is required for the column.";
|
|
6
6
|
export type FreeTextColumnSettingsWizardSectionProps = {
|
|
7
7
|
onChange: (data: FreeTextColumn) => void;
|
|
8
8
|
isEdit: boolean;
|
|
@@ -45,15 +45,15 @@ exports.renderFreeTextColumnSummary = renderFreeTextColumnSummary;
|
|
|
45
45
|
const isValidFreeTextColumn = (data, api) => {
|
|
46
46
|
const columns = api.columnApi.getUIAvailableColumns();
|
|
47
47
|
if (!data.ColumnId) {
|
|
48
|
-
return 'Column
|
|
48
|
+
return 'A Column ID is required.';
|
|
49
49
|
}
|
|
50
50
|
const columnsWithSameIdCount = columns.filter((c) => c.columnId === data.ColumnId).length;
|
|
51
51
|
const hasAlreadyExistingId = data.Uuid ? columnsWithSameIdCount > 1 : columnsWithSameIdCount > 0;
|
|
52
52
|
if (hasAlreadyExistingId) {
|
|
53
|
-
return 'A
|
|
53
|
+
return 'A column with this ID already exists.';
|
|
54
54
|
}
|
|
55
55
|
if (!data.FreeTextColumnSettings.DataType) {
|
|
56
|
-
return '
|
|
56
|
+
return 'A data type is required for the column.';
|
|
57
57
|
}
|
|
58
58
|
return true;
|
|
59
59
|
};
|
|
@@ -83,7 +83,7 @@ function mapDispatchToProps(dispatch) {
|
|
|
83
83
|
showMissingLayoutsError: () => {
|
|
84
84
|
dispatch(PopupRedux.PopupShowConfirmation({
|
|
85
85
|
Header: 'Missing Layouts',
|
|
86
|
-
Msg: '
|
|
86
|
+
Msg: 'No Layouts have been defined. Please check the console for details.',
|
|
87
87
|
ConfirmAction: null,
|
|
88
88
|
ConfirmButtonText: 'OK',
|
|
89
89
|
CancelButtonText: null,
|
|
@@ -23,7 +23,7 @@ const isAggregationsSectionValid = (data) => {
|
|
|
23
23
|
AggFunc.type === 'weightedAverage')?.AggFunc
|
|
24
24
|
: null;
|
|
25
25
|
if (weightedAvg && !weightedAvg.weightedColumnId) {
|
|
26
|
-
return '
|
|
26
|
+
return 'Weighted Average requires a weight column to be selected.';
|
|
27
27
|
}
|
|
28
28
|
return true;
|
|
29
29
|
};
|
|
@@ -17,7 +17,7 @@ const Flex_1 = require("../../../../components/Flex");
|
|
|
17
17
|
const isColumnFiltersValid = (layout) => {
|
|
18
18
|
const invalidColumnFilters = (layout.ColumnFilters ?? [])?.filter((columnFilter) => !columnFilter?.Predicates[0]?.PredicateId);
|
|
19
19
|
if (invalidColumnFilters.length > 0) {
|
|
20
|
-
return 'Please select a
|
|
20
|
+
return 'Please select a predicate for each column filter.';
|
|
21
21
|
}
|
|
22
22
|
return true;
|
|
23
23
|
};
|
|
@@ -17,7 +17,7 @@ const isGridFiltersValid = (layout, api) => {
|
|
|
17
17
|
return true;
|
|
18
18
|
}
|
|
19
19
|
return (api.internalApi.getQueryLanguageService().validateBoolean(expression, ModuleConstants_1.GridFilterModuleId)
|
|
20
|
-
.isValid || '
|
|
20
|
+
.isValid || 'The expression is not valid.');
|
|
21
21
|
};
|
|
22
22
|
exports.isGridFiltersValid = isGridFiltersValid;
|
|
23
23
|
const GridFilterSectionSummary = () => {
|
|
@@ -220,7 +220,7 @@ const isPivotAggregationsSectionValid = (data) => {
|
|
|
220
220
|
.find((agg) => typeof agg === 'object' && agg.type === 'weightedAverage')
|
|
221
221
|
: null;
|
|
222
222
|
if (weightedAvg && !weightedAvg.weightedColumnId) {
|
|
223
|
-
return '
|
|
223
|
+
return 'Weighted Average requires a weight column to be selected.';
|
|
224
224
|
}
|
|
225
225
|
return true;
|
|
226
226
|
};
|
|
@@ -309,12 +309,12 @@ const PivotAggregationsSection = (props) => {
|
|
|
309
309
|
}
|
|
310
310
|
const firstAggFuncName = (0, AggregationColumns_1.getAggFuncName)(aggregationColumns[0].AggFunc);
|
|
311
311
|
if (layout.PivotAggregationColumns?.some((aggCol) => (0, AggregationColumns_1.getAggFuncName)(aggCol.AggFunc) !== firstAggFuncName)) {
|
|
312
|
-
return '
|
|
312
|
+
return 'All columns must use the same aggregation function.';
|
|
313
313
|
}
|
|
314
314
|
// check that no Aggregation Total Column is enabled
|
|
315
315
|
const hasAggregationTotalColumn = aggregationColumns.some((aggCol) => aggCol.Total !== false && aggCol.Total != null);
|
|
316
316
|
if (hasAggregationTotalColumn) {
|
|
317
|
-
return '
|
|
317
|
+
return 'This option is not available when an Aggregation Total Column is present.';
|
|
318
318
|
}
|
|
319
319
|
return true;
|
|
320
320
|
};
|
|
@@ -28,7 +28,7 @@ const areSummaryRowsValid = (layout) => {
|
|
|
28
28
|
layout.RowSummaries?.find((rowSummary) => {
|
|
29
29
|
for (const [_, fn] of Object.entries(rowSummary.ColumnsMap ?? {})) {
|
|
30
30
|
if (!fn) {
|
|
31
|
-
valid = '
|
|
31
|
+
valid = 'Each row summary column requires an aggregation function.';
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -11,11 +11,11 @@ const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
|
|
|
11
11
|
const Flex_1 = require("../../../components/Flex");
|
|
12
12
|
const isValidNamedQueryExpression = (data, api) => {
|
|
13
13
|
if (!data.BooleanExpression) {
|
|
14
|
-
return '
|
|
14
|
+
return 'An expression is required.';
|
|
15
15
|
}
|
|
16
16
|
const valid = api.expressionApi.isValidBooleanExpression(data.BooleanExpression, ModuleConstants_1.NamedQueryModuleId);
|
|
17
17
|
if (!valid) {
|
|
18
|
-
return '
|
|
18
|
+
return 'The query is not a valid Boolean expression.';
|
|
19
19
|
}
|
|
20
20
|
return valid;
|
|
21
21
|
};
|
|
@@ -29,16 +29,16 @@ const PlusMinusSettingsSummary = (props) => {
|
|
|
29
29
|
exports.PlusMinusSettingsSummary = PlusMinusSettingsSummary;
|
|
30
30
|
const isSettingsValid = (hasCondition) => (data, api, context) => {
|
|
31
31
|
if (!data.Name?.trim()) {
|
|
32
|
-
return '
|
|
32
|
+
return 'A name is required.';
|
|
33
33
|
}
|
|
34
34
|
const allPlusMinusNudges = api.plusMinusApi.getAllPlusMinus();
|
|
35
35
|
const isDuplicateName = allPlusMinusNudges.some((nudge) => nudge.Name === data.Name && nudge.Uuid !== data.Uuid);
|
|
36
36
|
if (isDuplicateName) {
|
|
37
|
-
return 'A Plus
|
|
37
|
+
return 'A Plus/Minus Nudge with this name already exists.';
|
|
38
38
|
}
|
|
39
39
|
if (hasCondition) {
|
|
40
40
|
if (!data?.Rule?.BooleanExpression) {
|
|
41
|
-
return '
|
|
41
|
+
return 'A valid rule is required.';
|
|
42
42
|
}
|
|
43
43
|
const ruleValidation = (0, Utilities_1.isAdaptableRuleValid)(data, api, context);
|
|
44
44
|
if (typeof ruleValidation === 'string') {
|
|
@@ -46,10 +46,10 @@ const isSettingsValid = (hasCondition) => (data, api, context) => {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
if (typeof data.NudgeValue !== 'number') {
|
|
49
|
-
return '
|
|
49
|
+
return 'A nudge value is required.';
|
|
50
50
|
}
|
|
51
51
|
if (data.NudgeValue === 0) {
|
|
52
|
-
return 'Nudge value must be
|
|
52
|
+
return 'Nudge value must not be zero.';
|
|
53
53
|
}
|
|
54
54
|
return true;
|
|
55
55
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { AdaptableApi } from '../../../../Api/AdaptableApi';
|
|
2
2
|
import { BaseSchedule } from '../../../../AdaptableState/Common/Schedule';
|
|
3
|
-
export declare const isSettingsValid: (schedule: BaseSchedule, api: AdaptableApi) => true | "
|
|
3
|
+
export declare const isSettingsValid: (schedule: BaseSchedule, api: AdaptableApi) => true | "A name is required." | "A Schedule with this name already exists." | "Please select a message type." | "A reminder header is required." | "A reminder message is required." | "Please select a report." | "Please select a report format." | "Please select a report folder." | "Please select a report page.";
|
|
@@ -7,50 +7,50 @@ const StringExtensions_1 = tslib_1.__importDefault(require("../../../../Utilitie
|
|
|
7
7
|
const isSettingsValid = (schedule, api) => {
|
|
8
8
|
// Validate Name - mandatory and unique
|
|
9
9
|
if (!schedule.Name?.trim()) {
|
|
10
|
-
return '
|
|
10
|
+
return 'A name is required.';
|
|
11
11
|
}
|
|
12
12
|
const allSchedules = api.scheduleApi.getSchedules();
|
|
13
13
|
const isDuplicateName = allSchedules.some((s) => s.Name === schedule.Name && s.Uuid !== schedule.Uuid);
|
|
14
14
|
if (isDuplicateName) {
|
|
15
|
-
return 'A Schedule with this name already exists';
|
|
15
|
+
return 'A Schedule with this name already exists.';
|
|
16
16
|
}
|
|
17
17
|
if (schedule.ScheduleType === Enums_1.ScheduleType.Reminder) {
|
|
18
18
|
const reminder = schedule;
|
|
19
19
|
if (!reminder.MessageType) {
|
|
20
|
-
return '
|
|
20
|
+
return 'Please select a message type.';
|
|
21
21
|
}
|
|
22
22
|
if (StringExtensions_1.default.IsNullOrEmpty(reminder?.Header)) {
|
|
23
|
-
return '
|
|
23
|
+
return 'A reminder header is required.';
|
|
24
24
|
}
|
|
25
25
|
if (StringExtensions_1.default.IsNullOrEmpty(reminder?.Message)) {
|
|
26
|
-
return '
|
|
26
|
+
return 'A reminder message is required.';
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
if (schedule.ScheduleType === Enums_1.ScheduleType.Report) {
|
|
30
30
|
const report = schedule;
|
|
31
31
|
if (StringExtensions_1.default.IsNullOrEmpty(report?.ReportName)) {
|
|
32
|
-
return '
|
|
32
|
+
return 'Please select a report.';
|
|
33
33
|
}
|
|
34
34
|
if (StringExtensions_1.default.IsNullOrEmpty(report?.ReportFormat)) {
|
|
35
|
-
return '
|
|
35
|
+
return 'Please select a report format.';
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
if (schedule.ScheduleType === Enums_1.ScheduleType.ipushpull) {
|
|
39
39
|
const ipushpull = schedule;
|
|
40
40
|
if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.ReportName)) {
|
|
41
|
-
return '
|
|
41
|
+
return 'Please select a report.';
|
|
42
42
|
}
|
|
43
43
|
if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.Folder)) {
|
|
44
|
-
return '
|
|
44
|
+
return 'Please select a report folder.';
|
|
45
45
|
}
|
|
46
46
|
if (StringExtensions_1.default.IsNullOrEmpty(ipushpull?.IPushPullReport?.Page)) {
|
|
47
|
-
return '
|
|
47
|
+
return 'Please select a report page.';
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
if (schedule.ScheduleType === Enums_1.ScheduleType.OpenFin) {
|
|
51
51
|
const openfin = schedule;
|
|
52
52
|
if (StringExtensions_1.default.IsNullOrEmpty(openfin?.OpenFinReport?.ReportName)) {
|
|
53
|
-
return '
|
|
53
|
+
return 'Please select a report.';
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
return true;
|
|
@@ -10,7 +10,7 @@ const handleExportState = (type, name, state, api) => {
|
|
|
10
10
|
Helper_1.default.copyToClipboard(stringifiedState);
|
|
11
11
|
break;
|
|
12
12
|
case 'Console':
|
|
13
|
-
api.consoleLog('Adaptable
|
|
13
|
+
api.consoleLog('Adaptable state:', state);
|
|
14
14
|
break;
|
|
15
15
|
case 'JSON':
|
|
16
16
|
const jsonFileName = name + '.json';
|
|
@@ -20,7 +20,7 @@ const renderStyledColumnColumnSummary = (data) => {
|
|
|
20
20
|
exports.renderStyledColumnColumnSummary = renderStyledColumnColumnSummary;
|
|
21
21
|
const isValidStyledColumnColumn = (data) => {
|
|
22
22
|
if (!data.ColumnId) {
|
|
23
|
-
return '
|
|
23
|
+
return 'Please select a column for the Styled Column.';
|
|
24
24
|
}
|
|
25
25
|
return true;
|
|
26
26
|
};
|