@adaptabletools/adaptable 18.1.7 → 18.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/AdaptableInterfaces/IAdaptable.d.ts +2 -1
- package/src/AdaptableOptions/DataChangeHistoryOptions.d.ts +4 -0
- package/src/Api/DataChangeHistoryApi.d.ts +6 -0
- package/src/Api/Implementation/DataChangeHistoryApiImpl.d.ts +2 -0
- package/src/Api/Implementation/DataChangeHistoryApiImpl.js +24 -3
- package/src/Api/Internal/AlertInternalApi.d.ts +0 -3
- package/src/Api/Internal/AlertInternalApi.js +12 -39
- package/src/Api/Internal/FormatColumnInternalApi.d.ts +2 -2
- package/src/Api/Internal/FormatColumnInternalApi.js +6 -6
- package/src/Api/Internal/GridInternalApi.js +13 -7
- package/src/PredefinedConfig/Common/AdaptableFormat.d.ts +9 -9
- package/src/Redux/ActionsReducers/SystemRedux.d.ts +9 -8
- package/src/Redux/ActionsReducers/SystemRedux.js +11 -11
- package/src/Strategy/DataChangeHistoryModule.js +1 -2
- package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +1 -0
- package/src/Utilities/Constants/DocumentationLinkConstants.js +1 -0
- package/src/Utilities/Helpers/FormatContentHelper.d.ts +22 -0
- package/src/Utilities/Helpers/FormatContentHelper.js +34 -0
- package/src/Utilities/Helpers/FormatHelper.d.ts +5 -4
- package/src/Utilities/Helpers/FormatHelper.js +40 -13
- package/src/Utilities/Helpers/Helper.d.ts +6 -0
- package/src/Utilities/Helpers/Helper.js +31 -0
- package/src/View/Alert/Wizard/AlertMessageWizardSection.js +4 -3
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +33 -10
- package/src/agGrid/AdaptableAgGrid.d.ts +2 -1
- package/src/agGrid/AdaptableAgGrid.js +29 -8
- package/src/agGrid/AgGridMenuAdapter.js +15 -1
- package/src/agGrid/defaultAdaptableOptions.js +1 -0
- package/src/env.js +2 -2
- package/src/metamodel/adaptable.metamodel.d.ts +8 -0
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
|
@@ -18,6 +18,9 @@ export declare function meanNumberArray(numericValues: number[]): number;
|
|
|
18
18
|
export declare function medianNumberArray(numericValues: number[]): number;
|
|
19
19
|
export declare function modeNumberArray(numbers: number[]): number;
|
|
20
20
|
export declare function clamp(value: any, boundOne: number, boundTwo: number): number;
|
|
21
|
+
export declare function extractColsFromText(text: string): string[];
|
|
22
|
+
export declare function replaceAll(text: string, toReplace: string, replaceWith: string): string;
|
|
23
|
+
export declare function extractContextKeysFromText(text: string): string[];
|
|
21
24
|
export declare const Helper: {
|
|
22
25
|
objectExists: typeof objectExists;
|
|
23
26
|
objectNotExists: typeof objectNotExists;
|
|
@@ -38,5 +41,8 @@ export declare const Helper: {
|
|
|
38
41
|
medianNumberArray: typeof medianNumberArray;
|
|
39
42
|
modeNumberArray: typeof modeNumberArray;
|
|
40
43
|
clamp: typeof clamp;
|
|
44
|
+
extractColsFromText: typeof extractColsFromText;
|
|
45
|
+
replaceAll: typeof replaceAll;
|
|
46
|
+
extractContextKeysFromText: typeof extractContextKeysFromText;
|
|
41
47
|
};
|
|
42
48
|
export default Helper;
|
|
@@ -227,6 +227,34 @@ export function clamp(value, boundOne, boundTwo) {
|
|
|
227
227
|
}
|
|
228
228
|
return value;
|
|
229
229
|
}
|
|
230
|
+
export function extractColsFromText(text) {
|
|
231
|
+
// rowData.columnName => columnName
|
|
232
|
+
const regex = /\[rowData\.(.*?)\]/g;
|
|
233
|
+
let m;
|
|
234
|
+
const cols = [];
|
|
235
|
+
while ((m = regex.exec(text)) !== null) {
|
|
236
|
+
cols.push(m[1]);
|
|
237
|
+
}
|
|
238
|
+
return cols;
|
|
239
|
+
}
|
|
240
|
+
export function replaceAll(text, toReplace, replaceWith) {
|
|
241
|
+
if (!text) {
|
|
242
|
+
return text;
|
|
243
|
+
}
|
|
244
|
+
// fails for []
|
|
245
|
+
toReplace = toReplace.replace('[', '\\[').replace(']', '\\]');
|
|
246
|
+
return text.replace(new RegExp(toReplace, 'g'), replaceWith);
|
|
247
|
+
}
|
|
248
|
+
export function extractContextKeysFromText(text) {
|
|
249
|
+
// context.columnName => columnName
|
|
250
|
+
const regex = /\[context\.(.*?)\]/g;
|
|
251
|
+
let m;
|
|
252
|
+
const contextKeys = [];
|
|
253
|
+
while ((m = regex.exec(text)) !== null) {
|
|
254
|
+
contextKeys.push(m[1]);
|
|
255
|
+
}
|
|
256
|
+
return contextKeys;
|
|
257
|
+
}
|
|
230
258
|
export const Helper = {
|
|
231
259
|
objectExists,
|
|
232
260
|
objectNotExists,
|
|
@@ -247,5 +275,8 @@ export const Helper = {
|
|
|
247
275
|
medianNumberArray,
|
|
248
276
|
modeNumberArray,
|
|
249
277
|
clamp,
|
|
278
|
+
extractColsFromText,
|
|
279
|
+
replaceAll,
|
|
280
|
+
extractContextKeysFromText,
|
|
250
281
|
};
|
|
251
282
|
export default Helper;
|
|
@@ -20,6 +20,7 @@ export const AlertMessageWizardSection = (props) => {
|
|
|
20
20
|
const messageType = data.MessageType;
|
|
21
21
|
const messageText = api.alertApi.internalApi.getAlertDescriptionForDataChange(data);
|
|
22
22
|
const messageHeader = data.MessageHeader;
|
|
23
|
+
const showDocumentationLinks = api.internalApi.isDocumentationLinksDisplayed();
|
|
23
24
|
const onMessageTextChange = (e) => {
|
|
24
25
|
const { value } = e.target;
|
|
25
26
|
props.onChange(Object.assign(Object.assign({}, data), { MessageText: value }));
|
|
@@ -42,7 +43,7 @@ export const AlertMessageWizardSection = (props) => {
|
|
|
42
43
|
React.createElement(Tabs, { "data-name": "message-text", mt: 2, mb: 3, autoFocus: false },
|
|
43
44
|
React.createElement(Tabs.Tab, null, "Message Text"),
|
|
44
45
|
React.createElement(Tabs.Content, null,
|
|
45
|
-
React.createElement(Text, { fontSize: 2, mt: 3, mb: 2 }, "
|
|
46
|
+
React.createElement(Text, { fontSize: 2, mt: 3, mb: 2 }, "Text to display as the Alert Message (leave blank to show automated Message based on Alert Type)"),
|
|
46
47
|
' ',
|
|
47
48
|
React.createElement(FormLayout, null,
|
|
48
49
|
React.createElement(FormRow, { label: "Header" },
|
|
@@ -51,10 +52,10 @@ export const AlertMessageWizardSection = (props) => {
|
|
|
51
52
|
onChange: (e) => onMessageHeaderChange(e) })),
|
|
52
53
|
React.createElement(FormRow, { label: "Message" },
|
|
53
54
|
React.createElement(Textarea, { minWidth: 300, rows: 3, marginTop: 2, type: 'text', autoFocus: false, value: messageText !== null && messageText !== void 0 ? messageText : '', onChange: (e) => onMessageTextChange(e) }))),
|
|
54
|
-
React.createElement(HelpBlock, { "data-name": "alert-message-documentation", mt: 3, mb: 2, style: {
|
|
55
|
+
showDocumentationLinks && (React.createElement(HelpBlock, { "data-name": "alert-message-documentation", mt: 3, mb: 2, style: {
|
|
55
56
|
fontSize: 'var(--ab-font-size-3)',
|
|
56
57
|
padding: 0,
|
|
57
58
|
} },
|
|
58
59
|
React.createElement(ButtonInfo, { mr: 2, onClick: () => window.open(AlertMessageDocsLink, '_blank') }),
|
|
59
|
-
"See
|
|
60
|
+
"See how to create dynamic Alert Messages using placeholders"))))));
|
|
60
61
|
};
|
|
@@ -17,6 +17,9 @@ import { useAdaptable } from '../../AdaptableContext';
|
|
|
17
17
|
import FormatHelper from '../../../Utilities/Helpers/FormatHelper';
|
|
18
18
|
import { Toggle, ToggleGroup } from '../../../components/Toggle';
|
|
19
19
|
import { DEFAULT_DOUBLE_DISPLAY_VALUE, DEFAULT_STRING_DISPLAY_VALUE, } from '../../../Utilities/Constants/GeneralConstants';
|
|
20
|
+
import Textarea from '../../../components/Textarea';
|
|
21
|
+
import { ButtonInfo } from '../../Components/Buttons/ButtonInfo';
|
|
22
|
+
import { FormatColumnPlaceholderDocsLink } from '../../../Utilities/Constants/DocumentationLinkConstants';
|
|
20
23
|
const DOLLAR_OPTIONS = {
|
|
21
24
|
FractionDigits: 2,
|
|
22
25
|
FractionSeparator: '.',
|
|
@@ -201,8 +204,8 @@ const renderDateFormat = (data, _onChange, setFormatOption, scopedCustomFormatte
|
|
|
201
204
|
},
|
|
202
205
|
] })))))));
|
|
203
206
|
};
|
|
204
|
-
const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatters,
|
|
205
|
-
var _a, _b, _c, _d, _e;
|
|
207
|
+
const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatters, api) => {
|
|
208
|
+
var _a, _b, _c, _d, _e, _f;
|
|
206
209
|
if (data.DisplayFormat.Formatter !== 'NumberFormatter') {
|
|
207
210
|
return null;
|
|
208
211
|
}
|
|
@@ -254,6 +257,7 @@ const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatt
|
|
|
254
257
|
data.DisplayFormat.Options.Multiplier === MILLION_OPTIONS.Multiplier; //isEqual(data.DisplayFormat.Options, MILLION_OPTIONS);
|
|
255
258
|
const IS_DOLLAR = data.DisplayFormat.Options.Prefix === '$'; //isEqual(data.DisplayFormat.Options, DOLLAR_OPTIONS);
|
|
256
259
|
const IS_STERLING = data.DisplayFormat.Options.Prefix === '£'; //isEqual(data.DisplayFormat, STERLING_OPTIONS);
|
|
260
|
+
const showDocumentationLinks = api.internalApi.isDocumentationLinksDisplayed();
|
|
257
261
|
return (React.createElement(Box, { "data-name": 'format-column-display-format', padding: 2 },
|
|
258
262
|
React.createElement(Tabs, null,
|
|
259
263
|
React.createElement(Tabs.Tab, null, "Format"),
|
|
@@ -261,7 +265,8 @@ const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatt
|
|
|
261
265
|
React.createElement(Flex, { flexDirection: "row" },
|
|
262
266
|
React.createElement(FormLayout, { mr: 3 },
|
|
263
267
|
React.createElement(FormRow, { label: "Fraction Separator" },
|
|
264
|
-
React.createElement(Input, { "data-name": "fraction-separator", value: (_a = data.DisplayFormat.Options.FractionSeparator) !== null && _a !== void 0 ? _a : '', onChange: (e) => setFormatOption('FractionSeparator', e.currentTarget.value) })
|
|
268
|
+
React.createElement(Input, { "data-name": "fraction-separator", value: (_a = data.DisplayFormat.Options.FractionSeparator) !== null && _a !== void 0 ? _a : '', onChange: (e) => setFormatOption('FractionSeparator', e.currentTarget.value) }),
|
|
269
|
+
' '),
|
|
265
270
|
React.createElement(FormRow, { label: "Integer Separator" },
|
|
266
271
|
React.createElement(Input, { "data-name": "integer-separator", value: (_b = data.DisplayFormat.Options.IntegerSeparator) !== null && _b !== void 0 ? _b : '', onChange: (e) => setFormatOption('IntegerSeparator', e.currentTarget.value) })),
|
|
267
272
|
React.createElement(FormRow, { label: "Prefix" },
|
|
@@ -291,9 +296,6 @@ const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatt
|
|
|
291
296
|
React.createElement(FormRow, { label: "Multiplier" },
|
|
292
297
|
React.createElement(Input, { "data-name": "multiplier", type: "number", value: data.DisplayFormat.Options.Multiplier, onChange: (e) => setFormatOption('Multiplier', Number(e.currentTarget.value)) })),
|
|
293
298
|
' ',
|
|
294
|
-
React.createElement(FormRow, { label: "Content" },
|
|
295
|
-
React.createElement(Input, { "data-name": "content", value: (_e = data.DisplayFormat.Options.Content) !== null && _e !== void 0 ? _e : '', onChange: (e) => setFormatOption('Content', e.currentTarget.value) })),
|
|
296
|
-
' ',
|
|
297
299
|
React.createElement(FormRow, { label: "Parentheses" },
|
|
298
300
|
React.createElement(CheckBox, { "data-name": "parentheses-checkbox", checked: data.DisplayFormat.Options.Parentheses, onChange: (checked) => setFormatOption('Parentheses', checked) })),
|
|
299
301
|
React.createElement(FormRow, { label: "Floor" },
|
|
@@ -317,6 +319,20 @@ const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatt
|
|
|
317
319
|
React.createElement(Radio, { "data-name": "preset-million", marginLeft: 3, checked: IS_MILLION, onChange: () => setDivideMillionPreset() }, "M (Million)"),
|
|
318
320
|
React.createElement(Radio, { "data-name": "preset-dollar", marginLeft: 3, checked: IS_DOLLAR, onChange: () => setDollarPreset() }, "Dollar"),
|
|
319
321
|
React.createElement(Radio, { "data-name": "preset-sterling", marginLeft: 3, checked: IS_STERLING, onChange: () => setSterlingPreset() }, "Sterling")))))),
|
|
322
|
+
React.createElement(Tabs, { marginTop: 2, autoFocus: false, keyboardNavigation: false },
|
|
323
|
+
React.createElement(Tabs.Tab, null, "Dynamic Content"),
|
|
324
|
+
React.createElement(Tabs.Content, null,
|
|
325
|
+
React.createElement(Text, { padding: 2, fontSize: 2 }, "Provide dynamic content through the use of Placeholders"),
|
|
326
|
+
React.createElement(FormLayout, { margin: 2 },
|
|
327
|
+
React.createElement(FormRow, { label: "" },
|
|
328
|
+
React.createElement(Textarea, { minWidth: 300, rows: 3, placeholder: "", marginTop: 2, type: 'text', autoFocus: false, value: (_f = (_e = data.DisplayFormat.Options.Content) === null || _e === void 0 ? void 0 : _e.toString()) !== null && _f !== void 0 ? _f : '', onChange: (e) => setFormatOption('Content', e.currentTarget.value) }),
|
|
329
|
+
showDocumentationLinks && (React.createElement(HelpBlock, { "data-name": "query-documentation", mt: 3, mb: 2, style: {
|
|
330
|
+
fontSize: 'var(--ab-font-size-3)',
|
|
331
|
+
padding: 0,
|
|
332
|
+
} },
|
|
333
|
+
React.createElement(ButtonInfo, { mr: 2, onClick: () => window.open(FormatColumnPlaceholderDocsLink, '_blank') }),
|
|
334
|
+
"Learn more about using placeholders"))),
|
|
335
|
+
' '))),
|
|
320
336
|
React.createElement(Tabs, { marginTop: 2, autoFocus: false, keyboardNavigation: false },
|
|
321
337
|
React.createElement(Tabs.Tab, null, "Examples"),
|
|
322
338
|
React.createElement(Tabs.Content, null,
|
|
@@ -346,11 +362,12 @@ const renderNumberFormat = (data, onChange, setFormatOption, scopedCustomFormatt
|
|
|
346
362
|
},
|
|
347
363
|
] })))));
|
|
348
364
|
};
|
|
349
|
-
const renderStringFormat = (data, _onChange, setFormatOption, scopedCustomFormatters,
|
|
365
|
+
const renderStringFormat = (data, _onChange, setFormatOption, scopedCustomFormatters, api) => {
|
|
350
366
|
var _a, _b, _c;
|
|
351
367
|
if (data.DisplayFormat.Formatter !== 'StringFormatter') {
|
|
352
368
|
return null;
|
|
353
369
|
}
|
|
370
|
+
const showDocumentationLinks = api.internalApi.isDocumentationLinksDisplayed();
|
|
354
371
|
return (React.createElement(Box, { "data-name": 'format-column-display-format', padding: 2 },
|
|
355
372
|
React.createElement(Tabs, null,
|
|
356
373
|
React.createElement(Tabs.Tab, null, "Format"),
|
|
@@ -369,7 +386,13 @@ const renderStringFormat = (data, _onChange, setFormatOption, scopedCustomFormat
|
|
|
369
386
|
React.createElement(FormRow, { label: "Suffix" },
|
|
370
387
|
React.createElement(Input, { "data-name": "suffix", value: (_b = data.DisplayFormat.Options.Suffix) !== null && _b !== void 0 ? _b : '', onChange: (e) => setFormatOption('Suffix', e.currentTarget.value) })),
|
|
371
388
|
React.createElement(FormRow, { label: "Content" },
|
|
372
|
-
React.createElement(
|
|
389
|
+
React.createElement(Textarea, { minWidth: 300, rows: 3, placeholder: "", marginTop: 2, type: 'text', autoFocus: false, value: (_c = data.DisplayFormat.Options.Content) !== null && _c !== void 0 ? _c : '', onChange: (e) => setFormatOption('Content', e.currentTarget.value) }),
|
|
390
|
+
showDocumentationLinks && (React.createElement(HelpBlock, { "data-name": "query-documentation", mt: 3, mb: 2, style: {
|
|
391
|
+
fontSize: 'var(--ab-font-size-3)',
|
|
392
|
+
padding: 0,
|
|
393
|
+
} },
|
|
394
|
+
React.createElement(ButtonInfo, { mr: 2, onClick: () => window.open(FormatColumnPlaceholderDocsLink, '_blank') }),
|
|
395
|
+
"See how to create dynamic Display Format using placeholders"))),
|
|
373
396
|
React.createElement(FormRow, { label: "Empty" },
|
|
374
397
|
React.createElement(CheckBox, { "data-name": "empty-checkbox", checked: data.DisplayFormat.Options.Empty, onChange: (checked) => setFormatOption('Empty', checked) })))))),
|
|
375
398
|
scopedCustomFormatters.length > 0 && (React.createElement(Tabs, { marginTop: 2, keyboardNavigation: false },
|
|
@@ -412,13 +435,13 @@ export const FormatColumnFormatWizardSection = (props) => {
|
|
|
412
435
|
const Type = data.DisplayFormat && data.DisplayFormat.Formatter;
|
|
413
436
|
const customScopedFormatters = customDisplayFormatters.filter((displayFormatter) => adaptable.api.columnScopeApi.isScopeInScope(data.Scope, displayFormatter.scope));
|
|
414
437
|
if (Type === 'NumberFormatter') {
|
|
415
|
-
return renderNumberFormat(data, update, setFormatOption, customScopedFormatters,
|
|
438
|
+
return renderNumberFormat(data, update, setFormatOption, customScopedFormatters, adaptable.api);
|
|
416
439
|
}
|
|
417
440
|
if (Type === 'DateFormatter') {
|
|
418
441
|
return renderDateFormat(data, update, setFormatOption, customScopedFormatters);
|
|
419
442
|
}
|
|
420
443
|
if (Type === 'StringFormatter') {
|
|
421
|
-
return renderStringFormat(data, update, setFormatOption, customScopedFormatters,
|
|
444
|
+
return renderStringFormat(data, update, setFormatOption, customScopedFormatters, adaptable.api);
|
|
422
445
|
}
|
|
423
446
|
return (React.createElement(HelpBlock, { margin: 3 },
|
|
424
447
|
"Setting a Display Format is only possible if ",
|
|
@@ -243,7 +243,8 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
243
243
|
private getDistinctGridCellsForColumn;
|
|
244
244
|
private addDistinctColumnValue;
|
|
245
245
|
private getUniqueGridCells;
|
|
246
|
-
getGridCellsForColumn(columnId: string,
|
|
246
|
+
getGridCellsForColumn(columnId: string, onlyVisibleRows?: boolean): GridCell[] | undefined;
|
|
247
|
+
getGridCellsForColumnTemp(columnId: string, onlyVisibleRows: boolean): GridCell[] | undefined;
|
|
247
248
|
getRowNodesForPrimaryKeys(primaryKeyValues: any[]): any[];
|
|
248
249
|
getRowNodeByIndex(index: number): IRowNode;
|
|
249
250
|
getAgGridStatusPanels(): import("@ag-grid-community/core").StatusPanelDef[];
|
|
@@ -276,6 +276,7 @@ export class AdaptableAgGrid {
|
|
|
276
276
|
this.adaptableOptions = this.normalizeAdaptableOptions(this.adaptableOptions);
|
|
277
277
|
const { showLoadingScreen, loadingScreenDelay, loadingScreenText, loadingScreenTitle } = this.adaptableOptions.userInterfaceOptions;
|
|
278
278
|
if (showLoadingScreen) {
|
|
279
|
+
this.logger.info(`Show Loading Screen`);
|
|
279
280
|
const portalElement = ensurePortalElement();
|
|
280
281
|
if (portalElement) {
|
|
281
282
|
this.unmountLoadingScreen = this.renderReactRoot(createElement(AdaptableLoadingScreen, {
|
|
@@ -285,6 +286,9 @@ export class AdaptableAgGrid {
|
|
|
285
286
|
loadingScreenTitle,
|
|
286
287
|
}), portalElement);
|
|
287
288
|
}
|
|
289
|
+
else {
|
|
290
|
+
this.logger.consoleError(`Adaptable failed to show the loading screen!`);
|
|
291
|
+
}
|
|
288
292
|
}
|
|
289
293
|
this.forPlugins((plugin) => plugin.afterInitOptions(this, this.adaptableOptions));
|
|
290
294
|
this.api = new AdaptableApiImpl(this);
|
|
@@ -350,6 +354,7 @@ export class AdaptableAgGrid {
|
|
|
350
354
|
this.logger.consoleError(`Adaptable failed to initialize AG Grid!`);
|
|
351
355
|
return Promise.reject('Adaptable failed to initialize AG Grid!');
|
|
352
356
|
}
|
|
357
|
+
this.logger.info(`Hide Loading Screen`);
|
|
353
358
|
(_b = this.unmountLoadingScreen) === null || _b === void 0 ? void 0 : _b.call(this);
|
|
354
359
|
perfInitAgGrid.end();
|
|
355
360
|
// we need to intercept several AG Grid Api methods and trigger Adaptale state changes
|
|
@@ -2356,17 +2361,33 @@ export class AdaptableAgGrid {
|
|
|
2356
2361
|
}
|
|
2357
2362
|
return uniqueVals.slice(0, this.api.columnFilterApi.internalApi.getFilterValuesMaxNumberOfItems(column));
|
|
2358
2363
|
}
|
|
2359
|
-
getGridCellsForColumn(columnId,
|
|
2364
|
+
getGridCellsForColumn(columnId, onlyVisibleRows = false) {
|
|
2360
2365
|
let returnValues = [];
|
|
2361
2366
|
const handler = (rowNode) => {
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
if (gridCell.rawValue
|
|
2365
|
-
|
|
2366
|
-
returnValues.push(gridCell);
|
|
2367
|
-
}
|
|
2367
|
+
if (!this.isGroupRowNode(rowNode)) {
|
|
2368
|
+
const gridCell = this.getGridCellFromRowNode(rowNode, columnId);
|
|
2369
|
+
if (gridCell && gridCell.rawValue !== undefined && gridCell.rawValue !== null) {
|
|
2370
|
+
returnValues.push(gridCell);
|
|
2368
2371
|
}
|
|
2369
|
-
|
|
2372
|
+
}
|
|
2373
|
+
};
|
|
2374
|
+
if (onlyVisibleRows) {
|
|
2375
|
+
this.agGridAdapter.getAgGridApi().forEachNodeAfterFilter(handler);
|
|
2376
|
+
}
|
|
2377
|
+
else {
|
|
2378
|
+
this.agGridAdapter.getAgGridApi().forEachNode(handler);
|
|
2379
|
+
}
|
|
2380
|
+
return returnValues;
|
|
2381
|
+
}
|
|
2382
|
+
// This horrible method is temporary until we can get rid of having predicates inside values which is coming soon
|
|
2383
|
+
// We need it in case Blanks is requested
|
|
2384
|
+
// once we go to the new multi predicate screen then we wont show blanks any more - which we should never have done
|
|
2385
|
+
getGridCellsForColumnTemp(columnId, onlyVisibleRows) {
|
|
2386
|
+
let returnValues = [];
|
|
2387
|
+
const handler = (rowNode) => {
|
|
2388
|
+
if (!this.isGroupRowNode(rowNode)) {
|
|
2389
|
+
const gridCell = this.getGridCellFromRowNode(rowNode, columnId);
|
|
2390
|
+
if (gridCell) {
|
|
2370
2391
|
returnValues.push(gridCell);
|
|
2371
2392
|
}
|
|
2372
2393
|
}
|
|
@@ -470,6 +470,20 @@ export class AgGridMenuAdapter {
|
|
|
470
470
|
...gridInfoMenuItems,
|
|
471
471
|
],
|
|
472
472
|
};
|
|
473
|
+
/*
|
|
474
|
+
const calculatedColumnMenuItem: AdaptableMenuItem = {
|
|
475
|
+
name: 'calculated-column-group',
|
|
476
|
+
label: 'Calculated Column',
|
|
477
|
+
module: 'CalculatedColumn',
|
|
478
|
+
isVisible: true,
|
|
479
|
+
icon: {
|
|
480
|
+
name: 'columns',
|
|
481
|
+
},
|
|
482
|
+
subItems: [
|
|
483
|
+
...calculatedColumnMenuItems,
|
|
484
|
+
],
|
|
485
|
+
};
|
|
486
|
+
*/
|
|
473
487
|
const columnMenuItem = {
|
|
474
488
|
name: 'column-group',
|
|
475
489
|
label: 'Column',
|
|
@@ -480,7 +494,6 @@ export class AgGridMenuAdapter {
|
|
|
480
494
|
},
|
|
481
495
|
subItems: [
|
|
482
496
|
...columnActionGroup,
|
|
483
|
-
...calculatedColumnMenuItems,
|
|
484
497
|
...freeTextColumnMenuItems,
|
|
485
498
|
...customSortMenuItems,
|
|
486
499
|
...plusMinusMenuItems,
|
|
@@ -499,6 +512,7 @@ export class AgGridMenuAdapter {
|
|
|
499
512
|
subItems: [...formatColumnMenuItems, ...styledColumnMenuItems, ...flashingCellMenuItems],
|
|
500
513
|
};
|
|
501
514
|
return this.removeConsecutiveSeparators([
|
|
515
|
+
...calculatedColumnMenuItems,
|
|
502
516
|
...settingsPanelMenuItems,
|
|
503
517
|
...dashboardMenuItems,
|
|
504
518
|
...columnFilterGroup,
|
package/src/env.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
|
|
3
|
-
PUBLISH_TIMESTAMP:
|
|
4
|
-
VERSION: "18.1.
|
|
3
|
+
PUBLISH_TIMESTAMP: 1721129456634 || Date.now(),
|
|
4
|
+
VERSION: "18.1.9" || '--current-version--',
|
|
5
5
|
};
|
|
@@ -2751,6 +2751,14 @@ export declare const ADAPTABLE_METAMODEL: {
|
|
|
2751
2751
|
gridInfo: string;
|
|
2752
2752
|
defVal: string;
|
|
2753
2753
|
noCode?: undefined;
|
|
2754
|
+
} | {
|
|
2755
|
+
name: string;
|
|
2756
|
+
kind: string;
|
|
2757
|
+
desc: string;
|
|
2758
|
+
isOpt: boolean;
|
|
2759
|
+
gridInfo?: undefined;
|
|
2760
|
+
noCode?: undefined;
|
|
2761
|
+
defVal?: undefined;
|
|
2754
2762
|
})[];
|
|
2755
2763
|
};
|
|
2756
2764
|
DataFormatDataType: {
|