@adaptabletools/adaptable 13.0.4-canary.2 → 13.0.5

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 (47) hide show
  1. package/README.md +3 -3
  2. package/bundle.cjs.js +193 -193
  3. package/package.json +1 -1
  4. package/publishTimestamp.d.ts +1 -1
  5. package/publishTimestamp.js +1 -1
  6. package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -0
  7. package/src/AdaptableOptions/ActionOptions.d.ts +1 -5
  8. package/src/AdaptableOptions/GeneralOptions.d.ts +33 -5
  9. package/src/Api/AdaptableApi.d.ts +5 -0
  10. package/src/Api/CalendarApi.d.ts +29 -0
  11. package/src/Api/CalendarApi.js +2 -0
  12. package/src/Api/Implementation/AdaptableApiImpl.d.ts +2 -0
  13. package/src/Api/Implementation/AdaptableApiImpl.js +2 -0
  14. package/src/Api/Implementation/CalendarApiImpl.d.ts +9 -0
  15. package/src/Api/Implementation/CalendarApiImpl.js +55 -0
  16. package/src/Api/Implementation/InternalApiImpl.d.ts +1 -0
  17. package/src/Api/Implementation/InternalApiImpl.js +8 -0
  18. package/src/Api/Implementation/LayoutApiImpl.d.ts +7 -0
  19. package/src/Api/Implementation/LayoutApiImpl.js +15 -0
  20. package/src/Api/Implementation/QueryApiImpl.js +3 -8
  21. package/src/Api/InternalApi.d.ts +1 -0
  22. package/src/Api/LayoutApi.d.ts +11 -0
  23. package/src/PredefinedConfig/Common/AdaptablePredicate.d.ts +1 -1
  24. package/src/PredefinedConfig/Common/AdaptablePredicate.js +55 -41
  25. package/src/PredefinedConfig/StyledColumnState.d.ts +16 -24
  26. package/src/Redux/ActionsReducers/PopupRedux.js +10 -2
  27. package/src/Strategy/FilterModule.js +2 -2
  28. package/src/Strategy/LayoutModule.d.ts +3 -0
  29. package/src/Strategy/LayoutModule.js +98 -4
  30. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -2
  31. package/src/Utilities/Defaults/DefaultSettingsPanel.js +18 -15
  32. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +1 -0
  33. package/src/View/Components/Popups/WindowPopups/windowFactory.js +4 -1
  34. package/src/View/Layout/PivotDetailsPopoup.d.ts +3 -0
  35. package/src/View/Layout/PivotDetailsPopoup.js +43 -0
  36. package/src/View/Layout/Wizard/LayoutWizard.js +6 -1
  37. package/src/View/Layout/Wizard/sections/SortSection.js +1 -4
  38. package/src/agGrid/Adaptable.d.ts +1 -0
  39. package/src/agGrid/Adaptable.js +10 -13
  40. package/src/components/Modal/index.js +0 -2
  41. package/src/metamodel/adaptable.metamodel.d.ts +53 -23
  42. package/src/metamodel/adaptable.metamodel.js +1 -1
  43. package/src/types.d.ts +3 -2
  44. package/version.d.ts +1 -1
  45. package/version.js +1 -1
  46. package/src/Utilities/Helpers/CalendarHelper.d.ts +0 -25
  47. package/src/Utilities/Helpers/CalendarHelper.js +0 -342
@@ -15,7 +15,6 @@ const isFuture_1 = tslib_1.__importDefault(require("date-fns/isFuture"));
15
15
  const isAfter_1 = tslib_1.__importDefault(require("date-fns/isAfter"));
16
16
  const isBefore_1 = tslib_1.__importDefault(require("date-fns/isBefore"));
17
17
  const isSameDay_1 = tslib_1.__importDefault(require("date-fns/isSameDay"));
18
- const CalendarHelper_1 = tslib_1.__importDefault(require("../../Utilities/Helpers/CalendarHelper"));
19
18
  const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions"));
20
19
  const DateHelper_1 = require("../../Utilities/Helpers/DateHelper");
21
20
  /**
@@ -27,7 +26,7 @@ exports.SystemPredicateDefs = [
27
26
  label: 'Values',
28
27
  icon: { text: 'IN' },
29
28
  columnScope: { DataTypes: ['String', 'Number', 'Date'] },
30
- moduleScope: ['filter', 'conditionalstyle', 'formatColumn', 'alert'],
29
+ moduleScope: ['filter', 'formatColumn', 'alert'],
31
30
  handler: ({ inputs, column, value }) => {
32
31
  if (inputs.length === 0) {
33
32
  return true;
@@ -53,7 +52,7 @@ exports.SystemPredicateDefs = [
53
52
  label: 'Exclude Values',
54
53
  icon: { text: '!IN' },
55
54
  columnScope: { DataTypes: ['String', 'Number', 'Date'] },
56
- moduleScope: ['filter', 'conditionalstyle', 'formatColumn', 'alert'],
55
+ moduleScope: ['filter', 'formatColumn', 'alert'],
57
56
  handler: ({ inputs, column, value }) => {
58
57
  // basically negation of IN
59
58
  if (inputs.length === 0) {
@@ -79,7 +78,7 @@ exports.SystemPredicateDefs = [
79
78
  label: 'Blanks',
80
79
  icon: { name: 'blanks' },
81
80
  columnScope: { All: true },
82
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
81
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
83
82
  handler: ({ value }) => Helper_1.default.IsInputNullOrEmpty(value),
84
83
  },
85
84
  {
@@ -87,7 +86,7 @@ exports.SystemPredicateDefs = [
87
86
  label: 'Non Blanks',
88
87
  icon: { name: 'non-blanks' },
89
88
  columnScope: { All: true },
90
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
89
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
91
90
  handler: ({ value }) => Helper_1.default.IsInputNotNullOrEmpty(value),
92
91
  },
93
92
  // Numeric System Filters
@@ -96,7 +95,7 @@ exports.SystemPredicateDefs = [
96
95
  label: 'Greater Than',
97
96
  icon: { name: 'greater-than' },
98
97
  columnScope: { DataTypes: ['Number'] },
99
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
98
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
100
99
  inputs: [{ type: 'number' }],
101
100
  handler: ({ value, inputs }) => Number(value) > Number(inputs[0]),
102
101
  toString: ({ inputs }) => `> ${inputs[0]}`,
@@ -107,7 +106,7 @@ exports.SystemPredicateDefs = [
107
106
  label: 'Less Than',
108
107
  icon: { name: 'less-than' },
109
108
  columnScope: { DataTypes: ['Number'] },
110
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
109
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
111
110
  inputs: [{ type: 'number' }],
112
111
  handler: ({ value, inputs }) => Number(value) < Number(inputs[0]),
113
112
  toString: ({ inputs }) => `< ${inputs[0]}`,
@@ -118,7 +117,7 @@ exports.SystemPredicateDefs = [
118
117
  label: 'Positive',
119
118
  icon: { text: '>0' },
120
119
  columnScope: { DataTypes: ['Number'] },
121
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
120
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
122
121
  handler: ({ value }) => Number(value) > 0,
123
122
  },
124
123
  {
@@ -126,7 +125,7 @@ exports.SystemPredicateDefs = [
126
125
  label: 'Negative',
127
126
  icon: { text: '<0' },
128
127
  columnScope: { DataTypes: ['Number'] },
129
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
128
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
130
129
  handler: ({ value }) => Number(value) < 0,
131
130
  },
132
131
  {
@@ -134,7 +133,7 @@ exports.SystemPredicateDefs = [
134
133
  label: 'Zero',
135
134
  icon: { text: '=0' },
136
135
  columnScope: { DataTypes: ['Number'] },
137
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
136
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
138
137
  handler: ({ value }) => {
139
138
  if (typeof value === 'string' && !StringExtensions_1.default.IsNumeric(value)) {
140
139
  return false;
@@ -147,7 +146,7 @@ exports.SystemPredicateDefs = [
147
146
  label: 'Equals',
148
147
  icon: { name: 'equal' },
149
148
  columnScope: { DataTypes: ['Number'] },
150
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
149
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
151
150
  inputs: [{ type: 'number' }],
152
151
  handler: ({ value, inputs }) => {
153
152
  const input = inputs[0];
@@ -165,7 +164,7 @@ exports.SystemPredicateDefs = [
165
164
  label: 'Not Equals',
166
165
  icon: { name: 'not-equal' },
167
166
  columnScope: { DataTypes: ['Number'] },
168
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
167
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
169
168
  inputs: [{ type: 'number' }],
170
169
  handler: ({ value, inputs }) => {
171
170
  const input = inputs[0];
@@ -183,7 +182,7 @@ exports.SystemPredicateDefs = [
183
182
  label: 'Between',
184
183
  icon: { text: 'BE' },
185
184
  columnScope: { DataTypes: ['Number'] },
186
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
185
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
187
186
  inputs: [{ type: 'number' }, { type: 'number' }],
188
187
  handler: ({ value, inputs }) => Number(value) >= Number(inputs[0]) && Number(value) <= Number(inputs[1]),
189
188
  toString: ({ inputs }) => `Between ${inputs[0]}:${inputs[1]}`,
@@ -194,7 +193,7 @@ exports.SystemPredicateDefs = [
194
193
  label: 'Not Between',
195
194
  icon: { text: '!BE' },
196
195
  columnScope: { DataTypes: ['Number'] },
197
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
196
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
198
197
  inputs: [{ type: 'number' }, { type: 'number' }],
199
198
  handler: ({ value, inputs }) => Number(value) < Number(inputs[0]) || Number(value) > Number(inputs[1]),
200
199
  toString: ({ inputs }) => `Not Between ${inputs[0]}:${inputs[1]}`,
@@ -222,7 +221,7 @@ exports.SystemPredicateDefs = [
222
221
  label: 'Equals',
223
222
  icon: { name: 'equal' },
224
223
  columnScope: { DataTypes: ['String'] },
225
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
224
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
226
225
  inputs: [{ type: 'text' }],
227
226
  handler: ({ value, inputs, api }) => {
228
227
  if (!value) {
@@ -241,7 +240,7 @@ exports.SystemPredicateDefs = [
241
240
  label: 'Not Equals',
242
241
  icon: { name: 'not-equal' },
243
242
  columnScope: { DataTypes: ['String'] },
244
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
243
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
245
244
  inputs: [{ type: 'text' }],
246
245
  handler: ({ value, inputs, api }) => {
247
246
  if (!value) {
@@ -260,7 +259,7 @@ exports.SystemPredicateDefs = [
260
259
  label: 'Contains',
261
260
  icon: { name: 'contains' },
262
261
  columnScope: { DataTypes: ['String'] },
263
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
262
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
264
263
  inputs: [{ type: 'text' }],
265
264
  handler: ({ value, inputs, api }) => {
266
265
  if (!value) {
@@ -278,7 +277,7 @@ exports.SystemPredicateDefs = [
278
277
  label: 'Not Contains',
279
278
  icon: { name: 'not-contains' },
280
279
  columnScope: { DataTypes: ['String'] },
281
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
280
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
282
281
  inputs: [{ type: 'text' }],
283
282
  handler: ({ value, inputs, api }) => {
284
283
  if (!value) {
@@ -296,7 +295,7 @@ exports.SystemPredicateDefs = [
296
295
  label: 'Starts With',
297
296
  icon: { name: 'starts-with' },
298
297
  columnScope: { DataTypes: ['String'] },
299
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
298
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
300
299
  inputs: [{ type: 'text' }],
301
300
  handler: ({ value, inputs, api }) => {
302
301
  if (!value) {
@@ -314,7 +313,7 @@ exports.SystemPredicateDefs = [
314
313
  label: 'Ends With',
315
314
  icon: { name: 'ends-with' },
316
315
  columnScope: { DataTypes: ['String'] },
317
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
316
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
318
317
  inputs: [{ type: 'text' }],
319
318
  handler: ({ value, inputs, api }) => {
320
319
  if (!value) {
@@ -332,7 +331,7 @@ exports.SystemPredicateDefs = [
332
331
  label: 'Regex',
333
332
  icon: { name: 'regex' },
334
333
  columnScope: { DataTypes: ['String'] },
335
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
334
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
336
335
  inputs: [{ type: 'text' }],
337
336
  handler: ({ value, inputs }) => new RegExp(inputs[0]).test(value),
338
337
  toString: ({ inputs }) => `Regex ${inputs[0]}`,
@@ -343,7 +342,7 @@ exports.SystemPredicateDefs = [
343
342
  label: 'Today',
344
343
  icon: { name: 'calendar' },
345
344
  columnScope: { DataTypes: ['Date'] },
346
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
345
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
347
346
  handler: ({ value }) => (0, isToday_1.default)((0, DateHelper_1.parseDateValue)(value)),
348
347
  },
349
348
  {
@@ -351,7 +350,7 @@ exports.SystemPredicateDefs = [
351
350
  label: 'Yesterday',
352
351
  icon: { name: 'calendar' },
353
352
  columnScope: { DataTypes: ['Date'] },
354
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
353
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
355
354
  handler: ({ value }) => (0, isYesterday_1.default)((0, DateHelper_1.parseDateValue)(value)),
356
355
  },
357
356
  {
@@ -359,7 +358,7 @@ exports.SystemPredicateDefs = [
359
358
  label: 'Tomorrow',
360
359
  icon: { name: 'calendar' },
361
360
  columnScope: { DataTypes: ['Date'] },
362
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
361
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
363
362
  handler: ({ value }) => (0, isTomorrow_1.default)((0, DateHelper_1.parseDateValue)(value)),
364
363
  },
365
364
  {
@@ -367,7 +366,7 @@ exports.SystemPredicateDefs = [
367
366
  label: 'This Week',
368
367
  icon: { name: 'calendar' },
369
368
  columnScope: { DataTypes: ['Date'] },
370
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
369
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
371
370
  handler: ({ value }) => (0, isThisWeek_1.default)((0, DateHelper_1.parseDateValue)(value)),
372
371
  },
373
372
  {
@@ -375,7 +374,7 @@ exports.SystemPredicateDefs = [
375
374
  label: 'This Month',
376
375
  icon: { name: 'calendar' },
377
376
  columnScope: { DataTypes: ['Date'] },
378
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
377
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
379
378
  handler: ({ value }) => (0, isThisMonth_1.default)((0, DateHelper_1.parseDateValue)(value)),
380
379
  },
381
380
  {
@@ -383,7 +382,7 @@ exports.SystemPredicateDefs = [
383
382
  label: 'This Quarter',
384
383
  icon: { name: 'calendar' },
385
384
  columnScope: { DataTypes: ['Date'] },
386
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
385
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
387
386
  handler: ({ value }) => (0, isThisQuarter_1.default)((0, DateHelper_1.parseDateValue)(value)),
388
387
  },
389
388
  {
@@ -391,7 +390,7 @@ exports.SystemPredicateDefs = [
391
390
  label: 'This Year',
392
391
  icon: { name: 'calendar' },
393
392
  columnScope: { DataTypes: ['Date'] },
394
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
393
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
395
394
  handler: ({ value }) => (0, isThisYear_1.default)((0, DateHelper_1.parseDateValue)(value)),
396
395
  },
397
396
  {
@@ -399,7 +398,7 @@ exports.SystemPredicateDefs = [
399
398
  label: 'In Past',
400
399
  icon: { name: 'calendar' },
401
400
  columnScope: { DataTypes: ['Date'] },
402
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
401
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
403
402
  handler: ({ value }) => (0, isPast_1.default)((0, DateHelper_1.parseDateValue)(value)),
404
403
  },
405
404
  {
@@ -407,7 +406,7 @@ exports.SystemPredicateDefs = [
407
406
  label: 'In Future',
408
407
  icon: { name: 'calendar' },
409
408
  columnScope: { DataTypes: ['Date'] },
410
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
409
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
411
410
  handler: ({ value }) => (0, isFuture_1.default)((0, DateHelper_1.parseDateValue)(value)),
412
411
  },
413
412
  {
@@ -415,7 +414,7 @@ exports.SystemPredicateDefs = [
415
414
  label: 'After',
416
415
  icon: { name: 'greater-than' },
417
416
  columnScope: { DataTypes: ['Date'] },
418
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
417
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
419
418
  inputs: [{ type: 'date' }],
420
419
  handler: ({ value, inputs }) => (0, isAfter_1.default)((0, DateHelper_1.parseDateValue)(value), (0, DateHelper_1.parseDateValue)(inputs[0])),
421
420
  toString: ({ inputs }) => `> ${inputs[0]}`,
@@ -425,7 +424,7 @@ exports.SystemPredicateDefs = [
425
424
  label: 'Before',
426
425
  icon: { name: 'less-than' },
427
426
  columnScope: { DataTypes: ['Date'] },
428
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
427
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
429
428
  inputs: [{ type: 'date' }],
430
429
  handler: ({ value, inputs }) => (0, isBefore_1.default)((0, DateHelper_1.parseDateValue)(value), (0, DateHelper_1.parseDateValue)(inputs[0])),
431
430
  toString: ({ inputs }) => `< ${inputs[0]}`,
@@ -435,7 +434,7 @@ exports.SystemPredicateDefs = [
435
434
  label: 'Equals',
436
435
  icon: { name: 'equal' },
437
436
  columnScope: { DataTypes: ['Date'] },
438
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
437
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
439
438
  inputs: [{ type: 'date' }],
440
439
  handler: ({ value, inputs }) => (0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), (0, DateHelper_1.parseDateValue)(inputs[0])),
441
440
  toString: ({ inputs }) => `= ${inputs[0]}`,
@@ -445,7 +444,7 @@ exports.SystemPredicateDefs = [
445
444
  label: 'NotEquals',
446
445
  icon: { name: 'not-equal' },
447
446
  columnScope: { DataTypes: ['Date'] },
448
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
447
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
449
448
  inputs: [{ type: 'date' }],
450
449
  handler: ({ value, inputs }) => !(0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), (0, DateHelper_1.parseDateValue)(inputs[0])),
451
450
  toString: ({ inputs }) => `!= ${inputs[0]}`,
@@ -455,16 +454,32 @@ exports.SystemPredicateDefs = [
455
454
  label: 'Next Work Day',
456
455
  icon: { name: 'calendar' },
457
456
  columnScope: { DataTypes: ['Date'] },
458
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
459
- handler: ({ value, api }) => (0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), CalendarHelper_1.default.getNextWorkingDay()),
457
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
458
+ handler: ({ value, api }) => (0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), api.calendarApi.getNextWorkingDay()),
460
459
  },
461
460
  {
462
461
  id: 'LastWorkDay',
463
462
  label: 'Last Work Day',
464
463
  icon: { name: 'calendar' },
465
464
  columnScope: { DataTypes: ['Date'] },
466
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
467
- handler: ({ value, api }) => (0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), CalendarHelper_1.default.getPreviousWorkingDay()),
465
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
466
+ handler: ({ value, api }) => (0, isSameDay_1.default)((0, DateHelper_1.parseDateValue)(value), api.calendarApi.getPreviousWorkingDay()),
467
+ },
468
+ {
469
+ id: 'WorkDay',
470
+ label: 'Working Day',
471
+ icon: { name: 'calendar' },
472
+ columnScope: { DataTypes: ['Date'] },
473
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
474
+ handler: ({ value, api }) => api.calendarApi.isWorkingDay(value),
475
+ },
476
+ {
477
+ id: 'Holiday',
478
+ label: 'Holiday',
479
+ icon: { name: 'calendar' },
480
+ columnScope: { DataTypes: ['Date'] },
481
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
482
+ handler: ({ value, api }) => api.calendarApi.isHoliday(value),
468
483
  },
469
484
  {
470
485
  id: 'InRange',
@@ -474,7 +489,6 @@ exports.SystemPredicateDefs = [
474
489
  moduleScope: ['filter'],
475
490
  inputs: [{ type: 'date' }, { type: 'date' }],
476
491
  handler: ({ value, inputs }) => new Date(value) >= new Date(inputs[0]) && new Date(value) <= new Date(inputs[1]),
477
- // toString: ({ inputs }) => `From ${inputs[0]} To ${inputs[1]}`,
478
492
  },
479
493
  // Boolean System Filters
480
494
  {
@@ -482,7 +496,7 @@ exports.SystemPredicateDefs = [
482
496
  label: 'True',
483
497
  icon: { text: 'T' },
484
498
  columnScope: { DataTypes: ['Boolean'] },
485
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
499
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
486
500
  handler: ({ value }) => Boolean(value) === true,
487
501
  },
488
502
  {
@@ -490,7 +504,7 @@ exports.SystemPredicateDefs = [
490
504
  label: 'False',
491
505
  icon: { text: 'F' },
492
506
  columnScope: { DataTypes: ['Boolean'] },
493
- moduleScope: ['filter', 'alert', 'flashingcell', 'conditionalstyle', 'formatColumn'],
507
+ moduleScope: ['filter', 'alert', 'flashingcell', 'formatColumn'],
494
508
  handler: ({ value }) => Boolean(value) === false,
495
509
  },
496
510
  {
@@ -30,7 +30,7 @@ export interface StyledColumn extends SuspendableObject {
30
30
  */
31
31
  CheckBoxStyle?: boolean;
32
32
  /**
33
- * Whether to Format the Column in Grouped Rows
33
+ * Includes the Styled Column in Grouped Rows
34
34
  * @defaultValue false
35
35
  */
36
36
  IncludeGroupedRows?: boolean;
@@ -39,14 +39,6 @@ export interface StyledColumn extends SuspendableObject {
39
39
  * Style used to display Percent Bars in Special Column Style
40
40
  */
41
41
  export interface PercentBarStyle extends NumericStyledColumn {
42
- /**
43
- * Ranges (e.g. to allow a traffic light effect)
44
- */
45
- CellRanges?: CellColorRange[];
46
- /**
47
- * Compares Cell values to another Column
48
- */
49
- ColumnComparison?: ColumnComparison;
50
42
  /**
51
43
  * Whether Cell shows Cell Value, Percent Value, both or none
52
44
  */
@@ -62,28 +54,24 @@ export interface PercentBarStyle extends NumericStyledColumn {
62
54
  BackColor?: string;
63
55
  }
64
56
  export interface NumericStyledColumn {
65
- /**
66
- * Specify what the range number represents.
67
- *
68
- * Number: can be any number, or Col-Min/Col-Max
69
- * Percentage: can have only values between 0 and 100
70
- *
71
- * @defaults Number
72
- */
73
- RangeValueType?: 'Number' | 'Percentage';
74
- }
75
- /**
76
- * Used to display Gradient Styles in Special Column Style
77
- */
78
- export interface GradientStyle extends NumericStyledColumn {
79
57
  /**
80
58
  * Ranges (e.g. to allow a traffic light effect)
81
59
  */
82
60
  CellRanges?: CellColorRange[];
83
61
  /**
84
- * Compares cell values to another Column
62
+ * Compares Cell values to another Column
85
63
  */
86
64
  ColumnComparison?: ColumnComparison;
65
+ /**
66
+ * Range can represent 'Number' (any number or Col-Min/Col-Max) or 'Percentage' (values 0-100)
67
+ * @defaultValue Number
68
+ */
69
+ RangeValueType?: RangeValueType;
70
+ }
71
+ /**
72
+ * Used to display Gradient Styles in Special Column Style
73
+ */
74
+ export interface GradientStyle extends NumericStyledColumn {
87
75
  }
88
76
  /**
89
77
  * Defines which Colours to show in Gradient and Percent Bar Styles
@@ -131,3 +119,7 @@ export declare type CellTextOptions = CellTextOption[];
131
119
  * Text optionally to show in a Special Column Style special style: 'CellValue' or 'PercentageValue'
132
120
  */
133
121
  export declare type CellTextOption = 'CellValue' | 'PercentageValue';
122
+ /**
123
+ * Whether the Range is Number or Percent based
124
+ */
125
+ export declare type RangeValueType = 'Number' | 'Percentage';
@@ -272,11 +272,19 @@ const PopupReducer = (state = initialState, action) => {
272
272
  Title: showWindowAction.Title,
273
273
  PopupProps: showWindowAction.PopupProps,
274
274
  };
275
+ let PopupList = [...state.WindowPopup.PopupList];
275
276
  // Prevent opening the same popup twice
276
277
  if (state.WindowPopup.PopupList.some((windowPopup) => windowPopup.Id === windowSettings.Id)) {
277
- return state;
278
+ PopupList = PopupList.map((windowPopup) => {
279
+ if (windowPopup.Id !== windowSettings.Id) {
280
+ return windowPopup;
281
+ }
282
+ return Object.assign(Object.assign({}, windowPopup), windowSettings);
283
+ });
284
+ }
285
+ else {
286
+ PopupList = [...PopupList, windowSettings];
278
287
  }
279
- const PopupList = [...state.WindowPopup.PopupList, windowSettings];
280
288
  return Object.assign(Object.assign({}, state), { WindowPopup: Object.assign(Object.assign({}, state.WindowPopup), { PopupList }) });
281
289
  }
282
290
  case exports.POPUP_HIDE_WINDOW: {
@@ -117,9 +117,9 @@ class FilterModule extends AdaptableModuleBase_1.AdaptableModuleBase {
117
117
  getCompactDeleteAction: LayoutRedux.LayoutColumnFilterClear,
118
118
  getDeleteAllAction: LayoutRedux.LayoutColumnFilterClearAll,
119
119
  emptyView: `
120
- There are currently no column filters applied. \n
120
+ There are currently no Column Filters applied. \n
121
121
 
122
- Create column filters by using the filter dropdown the Quick Filter Bar or the Filter Form in the Column Header Menu.
122
+ Create Column Filters by using the Filter Bar, the Filter Form (in the Column Header Menu) or by editing a Layout.
123
123
  `,
124
124
  getStatusBarPanelProps() {
125
125
  let text;
@@ -9,6 +9,8 @@ import { AdaptableObject } from '../PredefinedConfig/Common/AdaptableObject';
9
9
  export declare class LayoutModule extends AdaptableModuleBase implements IModule {
10
10
  protected LayoutState: LayoutState;
11
11
  constructor(api: AdaptableApi);
12
+ updateOldConfig(): void;
13
+ private clearUnsuportedFeaturesFromLayout;
12
14
  getModuleAdaptableObjects(): AdaptableObject[];
13
15
  getExplicitlyReferencedColumnIds(layout: Layout): string[];
14
16
  getTeamSharingReferences(adaptableObject: AdaptableObject): TeamSharingReferences;
@@ -16,6 +18,7 @@ export declare class LayoutModule extends AdaptableModuleBase implements IModule
16
18
  handleAdaptableReady(): void;
17
19
  addColumnMenuItems(column: AdaptableColumn): AdaptableMenuItem[] | undefined;
18
20
  addContextMenuItems(menuContext: ContextMenuContext): AdaptableMenuItem[] | undefined;
21
+ private createViewPivotItemsMenuItem;
19
22
  getTeamSharingAction(): TeamSharingImportInfo<Layout>;
20
23
  toViewAll(): {
21
24
  items: {
@@ -15,9 +15,40 @@ const LayoutWizard_1 = require("../View/Layout/Wizard/LayoutWizard");
15
15
  const getLayoutFilterViewItems_1 = require("./Utilities/Layout/getLayoutFilterViewItems");
16
16
  const getLayoutSortViewItems_1 = require("./Utilities/Layout/getLayoutSortViewItems");
17
17
  const AggregationColumns_1 = require("../PredefinedConfig/Common/AggregationColumns");
18
+ const windowFactory_1 = require("../View/Components/Popups/WindowPopups/windowFactory");
19
+ const flattenDeep_1 = tslib_1.__importDefault(require("lodash/flattenDeep"));
18
20
  class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
19
21
  constructor(api) {
20
22
  super(ModuleConstants.LayoutModuleId, ModuleConstants.LayoutFriendlyName, 'layout', 'LayoutPopup', 'Named sets of column visibility, order, groupings, aggregation, pivots etc.', api);
23
+ this.clearUnsuportedFeaturesFromLayout = (layout) => {
24
+ const layoutSupportedFeatures = this.api.layoutApi.getLayoutSupportedFeatures();
25
+ let needsUpdate = false;
26
+ const layoutToSave = Object.assign({}, layout);
27
+ if (!layoutSupportedFeatures.RowGroupedColumns && layout.RowGroupedColumns) {
28
+ delete layoutToSave.RowGroupedColumns;
29
+ needsUpdate = true;
30
+ }
31
+ if (!layoutSupportedFeatures.AggregationColumns && layout.AggregationColumns) {
32
+ delete layoutToSave.AggregationColumns;
33
+ needsUpdate = true;
34
+ }
35
+ if (!layoutSupportedFeatures.PivotColumns && layout.PivotColumns) {
36
+ delete layoutToSave.PivotColumns;
37
+ delete layoutToSave.EnablePivot;
38
+ needsUpdate = true;
39
+ }
40
+ if (!layoutSupportedFeatures.ColumnFilters && layout.ColumnFilters) {
41
+ delete layoutToSave.ColumnFilters;
42
+ needsUpdate = true;
43
+ }
44
+ if (!layoutSupportedFeatures.ColumnSorts && layout.ColumnSorts) {
45
+ delete layoutToSave.ColumnSorts;
46
+ needsUpdate = true;
47
+ }
48
+ if (needsUpdate) {
49
+ this.api.layoutApi.createOrUpdateLayout(layoutToSave);
50
+ }
51
+ };
21
52
  this.api.eventApi.on('LayoutChanged', (layoutChangedInfo) => {
22
53
  var _a;
23
54
  if (layoutChangedInfo.newLayoutState.CurrentLayout !==
@@ -27,6 +58,17 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
27
58
  }
28
59
  });
29
60
  }
61
+ updateOldConfig() {
62
+ /**
63
+ * Viewport mode does not support a few
64
+ * features instead of complicating the
65
+ * logic where layout is applied, it is easier and
66
+ * less error prone to just remove it.
67
+ */
68
+ if (this.api.internalApi.getAdaptableInstance().getRowModel() === 'viewport') {
69
+ this.api.layoutApi.getAllLayout().forEach(this.clearUnsuportedFeaturesFromLayout);
70
+ }
71
+ }
30
72
  getModuleAdaptableObjects() {
31
73
  return this.api.layoutApi.getAllLayout();
32
74
  }
@@ -187,8 +229,60 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
187
229
  });
188
230
  }
189
231
  }
232
+ const viewPivotItemsMenuItem = this.createViewPivotItemsMenuItem(menuContext);
233
+ if (viewPivotItemsMenuItem) {
234
+ returnColumnMenuItems.push(viewPivotItemsMenuItem);
235
+ }
190
236
  return returnColumnMenuItems;
191
237
  }
238
+ createViewPivotItemsMenuItem(menuContext) {
239
+ var _a, _b;
240
+ // current group => menuContext.rowNode.field;
241
+ if (((_b = (_a = menuContext.selectedCellInfo) === null || _a === void 0 ? void 0 : _a.gridCells) === null || _b === void 0 ? void 0 : _b.length) !== 1) {
242
+ return;
243
+ }
244
+ const currentLayout = this.api.layoutApi.getCurrentLayout();
245
+ if (!currentLayout.EnablePivot) {
246
+ return;
247
+ }
248
+ const { agGridColumn } = menuContext;
249
+ const columnId = agGridColumn.getColId();
250
+ const isPivotColumn = this.api.columnApi.isAutoPivotColumn(columnId);
251
+ if (!isPivotColumn && this.api.columnApi.getColumnDataTypeFromColumnId(columnId) !== 'Number') {
252
+ return;
253
+ }
254
+ function getData(rows) {
255
+ return [
256
+ ...rows.map((row) => {
257
+ if (row.childrenAfterFilter) {
258
+ return getData(row.childrenAfterFilter);
259
+ }
260
+ return row.data;
261
+ }),
262
+ ];
263
+ }
264
+ const data = (0, flattenDeep_1.default)(getData(menuContext.rowNode.childrenAfterFilter));
265
+ const rowGroups = currentLayout.RowGroupedColumns;
266
+ const cellValue = isPivotColumn
267
+ ? menuContext.rowNode.aggData[columnId]
268
+ : menuContext.gridCell.displayValue;
269
+ const popupProps = {
270
+ hasPivotValue: isPivotColumn,
271
+ columnId,
272
+ rowGroups,
273
+ rows: data,
274
+ };
275
+ return {
276
+ isVisible: true,
277
+ label: 'Expand Aggregated Value',
278
+ onClick: () => {
279
+ this.api.internalApi.showPopupWindow(windowFactory_1.SHOW_PIVOT_COLUMN_DETAILS, `Rows for Aggregated Value: ${cellValue}`, undefined, popupProps);
280
+ },
281
+ icon: {
282
+ name: 'arrowexpand',
283
+ },
284
+ };
285
+ }
192
286
  getTeamSharingAction() {
193
287
  return {
194
288
  ModuleEntities: this.api.layoutApi.getAllLayout(),
@@ -200,7 +294,7 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
200
294
  return this.getModuleAdaptableObjects().map((layout) => this.toView(layout));
201
295
  }
202
296
  toView(layout) {
203
- var _a, _b, _c, _d, _e, _f, _g;
297
+ var _a, _b, _c, _d, _e, _f, _g, _h;
204
298
  const maxColumnsToDisplay = (_d = (_c = (_b = (_a = this.api.internalApi.getAdaptableOptions()) === null || _a === void 0 ? void 0 : _a.layoutOptions) === null || _b === void 0 ? void 0 : _b.layoutViewOptions) === null || _c === void 0 ? void 0 : _c.maxColumnsToDisplay) !== null && _d !== void 0 ? _d : 10;
205
299
  const columnIdToFriendlyName = (columnId) => {
206
300
  return this.api.columnApi.getFriendlyNameFromColumnId(columnId);
@@ -238,12 +332,12 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
238
332
  values: columns,
239
333
  },
240
334
  ((_e = layout.ColumnSorts) === null || _e === void 0 ? void 0 : _e.length) && (0, getLayoutSortViewItems_1.getLayoutSortViewItems)(layout, this.api),
241
- (layout === null || layout === void 0 ? void 0 : layout.ColumnFilters) && (0, getLayoutFilterViewItems_1.getLayoutFilterViewItems)(layout, this.api),
242
- ((_f = layout === null || layout === void 0 ? void 0 : layout.RowGroupedColumns) === null || _f === void 0 ? void 0 : _f.length) && {
335
+ ((_f = layout === null || layout === void 0 ? void 0 : layout.ColumnFilters) === null || _f === void 0 ? void 0 : _f.length) && (0, getLayoutFilterViewItems_1.getLayoutFilterViewItems)(layout, this.api),
336
+ ((_g = layout === null || layout === void 0 ? void 0 : layout.RowGroupedColumns) === null || _g === void 0 ? void 0 : _g.length) && {
243
337
  name: 'Grouped Columns',
244
338
  values: layout.RowGroupedColumns.map((colId) => columnIdToFriendlyName(colId)),
245
339
  },
246
- ((_g = layout === null || layout === void 0 ? void 0 : layout.PivotColumns) === null || _g === void 0 ? void 0 : _g.length) && {
340
+ ((_h = layout === null || layout === void 0 ? void 0 : layout.PivotColumns) === null || _h === void 0 ? void 0 : _h.length) && {
247
341
  name: 'Pivot Columns',
248
342
  values: layout.PivotColumns.map((colId) => columnIdToFriendlyName(colId)),
249
343
  },
@@ -96,7 +96,7 @@ exports.DefaultAdaptableOptions = {
96
96
  actionRowButtons: undefined,
97
97
  actionRowButtonCustomConfiguration: undefined,
98
98
  actionRowButtonsPosition: 'pinnedLeft',
99
- autoHandleActionRowButtons: false,
99
+ autoHandleActionRowButtons: true,
100
100
  setPrimaryKeyValue: undefined,
101
101
  actionRowFormOptions: {
102
102
  formTitle: undefined,
@@ -142,7 +142,6 @@ exports.DefaultAdaptableOptions = {
142
142
  dataSets: GeneralConstants_1.EMPTY_ARRAY,
143
143
  showGroupingTotalsAsHeader: false,
144
144
  alternativeModuleNames: undefined,
145
- currentCalendar: 'United Kingdom',
146
145
  cellSummaryOperations: undefined,
147
146
  customSortComparers: undefined,
148
147
  englishVariant: 'GB',