@adaptabletools/adaptable 12.1.8-canary.1 → 12.2.0-canary.0

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 (84) hide show
  1. package/base.css +116 -22
  2. package/bundle.cjs.js +108 -108
  3. package/index.css +132 -23
  4. package/package.json +1 -1
  5. package/publishTimestamp.d.ts +1 -1
  6. package/publishTimestamp.js +1 -1
  7. package/src/AdaptableOptions/AdaptableQLOptions.d.ts +44 -10
  8. package/src/AdaptableOptions/LayoutOptions.d.ts +10 -1
  9. package/src/AdaptableOptions/StateOptions.d.ts +1 -1
  10. package/src/Api/Implementation/AlertApiImpl.js +1 -2
  11. package/src/Api/Implementation/InternalApiImpl.d.ts +3 -1
  12. package/src/Api/Implementation/InternalApiImpl.js +34 -0
  13. package/src/Api/Implementation/QueryLanguageApiImpl.d.ts +1 -0
  14. package/src/Api/Implementation/QueryLanguageApiImpl.js +5 -0
  15. package/src/Api/InternalApi.d.ts +6 -1
  16. package/src/Api/QueryLanguageApi.d.ts +5 -0
  17. package/src/Strategy/BulkUpdateModule.d.ts +1 -1
  18. package/src/Strategy/CalculatedColumnModule.js +1 -1
  19. package/src/Strategy/QueryModule.js +1 -1
  20. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +0 -13
  21. package/src/Strategy/Utilities/getExpressionViewItems.d.ts +3 -4
  22. package/src/Strategy/Utilities/getExpressionViewItems.js +3 -3
  23. package/src/Strategy/Utilities/getRuleViewItems.js +1 -1
  24. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +1 -0
  25. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +2 -0
  26. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  27. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +14 -0
  28. package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +2 -0
  29. package/src/Utilities/Services/QueryLanguageService.d.ts +2 -1
  30. package/src/Utilities/Services/QueryLanguageService.js +45 -19
  31. package/src/Utilities/Services/ReportService.js +1 -2
  32. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +1 -1
  33. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.js +10 -10
  34. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/Components/FormBox.d.ts +3 -0
  35. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/Components/FormBox.js +9 -0
  36. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +14 -15
  37. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.d.ts +1 -1
  38. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +2 -2
  39. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.d.ts +7 -0
  40. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +280 -0
  41. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/index.d.ts +1 -0
  42. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/index.js +5 -0
  43. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.d.ts +1 -1
  44. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +4 -4
  45. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UIOptionsStatusbarForm.js +2 -8
  46. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UiOptionsForm.d.ts +1 -1
  47. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UiOptionsForm.js +3 -3
  48. package/src/View/AdaptableWizardView/Wizard.js +2 -2
  49. package/src/View/CalculatedColumn/CalculatedColumnSummary.d.ts +0 -1
  50. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +1 -8
  51. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +4 -3
  52. package/src/View/Components/AdaptableObjectCollection/index.d.ts +3 -4
  53. package/src/View/Components/AdaptableObjectCollection/index.js +7 -8
  54. package/src/View/Components/AdaptableObjectRow/index.js +1 -4
  55. package/src/View/Components/EntityRulesEditor/index.js +2 -2
  56. package/src/View/Components/FilterForm/QuickFilterForm.js +9 -1
  57. package/src/View/Components/Popups/AdaptablePopup/PopupPanel.d.ts +1 -0
  58. package/src/View/Components/Popups/AdaptablePopup/PopupPanel.js +2 -1
  59. package/src/View/Components/ValueSelector/index.js +8 -19
  60. package/src/View/CustomSort/CustomSortSummary.js +1 -1
  61. package/src/View/Dashboard/DashboardPopup.js +11 -10
  62. package/src/View/Export/ExportViewPanel.js +2 -2
  63. package/src/View/Export/Wizard/ReportRowsWizardSection.js +4 -3
  64. package/src/View/Filter/FilterViewPanel.js +3 -2
  65. package/src/View/GridInfo/AdaptableObjectsSummary.js +5 -3
  66. package/src/View/GridInfo/AdaptableOptionsComponent.js +1 -1
  67. package/src/View/GridInfo/GridInfoPopup.js +6 -7
  68. package/src/View/Query/Wizard/NamedQueryExpressionWizardSection.js +3 -4
  69. package/src/View/StateManagement/StateManagementPopup.js +18 -19
  70. package/src/agGrid/Adaptable.d.ts +2 -0
  71. package/src/agGrid/Adaptable.js +56 -13
  72. package/src/components/DragAndDropContext/ModuleManager.js +3 -4
  73. package/src/components/DragAndDropContext/TabList.js +9 -30
  74. package/src/components/DragAndDropContext/UnusedPanel.js +1 -7
  75. package/src/components/DropdownButton/index.js +2 -2
  76. package/src/components/EmptyContent/index.js +2 -2
  77. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -0
  78. package/src/components/ExpressionEditor/index.js +24 -14
  79. package/src/metamodel/adaptable.metamodel.d.ts +31 -4
  80. package/src/metamodel/adaptable.metamodel.js +1 -1
  81. package/src/parser/src/types.d.ts +14 -10
  82. package/src/types.d.ts +1 -1
  83. package/version.d.ts +1 -1
  84. package/version.js +1 -1
package/index.css CHANGED
@@ -2544,6 +2544,23 @@ template {
2544
2544
  --ab-cmp-datepicker__font-family: var(--ab__font-family);
2545
2545
  --ab-cmp-datepicker__cell-size: 30px; }
2546
2546
 
2547
+ :root {
2548
+ --ab-cmp-toggle-button__background: #ccc;
2549
+ --ab-cmp-toggle-button--active__background: var(--ab-color-success);
2550
+ --ab-cmp-toggle-button__font-size: var(--ab-font-size-1);
2551
+ --ab-cmp-toggle-button__color: var(--ab-color-text-on-primary);
2552
+ --ab-cmp-toggle-button--checked__color: var(--ab-color-accentlight); }
2553
+
2554
+ :root {
2555
+ --ab-cmp-module-module-selector__tab-item__border: 1px solid var(--ab-color-primarydark);
2556
+ --ab-cmp-module-module-selector__tab-item__border-radius: var(--ab__border-radius);
2557
+ --ab-cmp-module-module-selector__tab-item__width: 160px;
2558
+ --ab-cmp-module-module-selector__tab-item__header-input__color: var(--ab-color-text-on-primary);
2559
+ --ab-cmp-module-module-selector__toolbar-item__border: 1px solid var(--ab-color-primary);
2560
+ --ab-cmp-module-selector__unused-panel__border: 1px solid var(--ab-color-primarydark);
2561
+ --ab-cmp-module-selector__unused-panel__border-radius: var(--ab__border-radius);
2562
+ --ab-cmp-module-selector__unused-panel__background: var(--ab-color-defaultbackground); }
2563
+
2547
2564
  :root {
2548
2565
  --ab-cmp-loader__background: var(--ab-color-primarydark);
2549
2566
  --ab-cmp-loader__border: var(--ab-color-text-on-primary);
@@ -2564,6 +2581,10 @@ template {
2564
2581
  --ab-cmp-icon__height: 17px;
2565
2582
  --ab-cmp-icon__width: 17px; }
2566
2583
 
2584
+ :root {
2585
+ --ab-cmp-listgroupitem__padding: var(--ab-space-2);
2586
+ --ab-cmp-listgroupitem__margin: 0; }
2587
+
2567
2588
  :root {
2568
2589
  --ab-cmp-wizard__padding: var(--ab-space-5);
2569
2590
  --ab-cmp-wizard__margin: var(--ab-space-1);
@@ -2934,12 +2955,19 @@ template {
2934
2955
 
2935
2956
  .ab-DropdownButton {
2936
2957
  position: relative;
2958
+ overflow: visible;
2959
+ outline: none;
2937
2960
  --ab-overlay-horizontal-align: left; }
2938
2961
 
2939
2962
  .ab-DropdownButton__list {
2940
2963
  text-align: start;
2941
2964
  padding: var(--ab-space-1) 0;
2942
- box-shadow: var(--ab-cmp-dropdownbutton-list__box-shadow); }
2965
+ box-shadow: var(--ab-cmp-dropdownbutton-list__box-shadow);
2966
+ overflow: auto;
2967
+ border: var(--ab-cmp-dropdownbutton-list__border);
2968
+ borderradius: var(--ab-cmp-dropdownbutton-list__border-radius);
2969
+ zindex: var(--ab-cmp-dropdownbutton-list__z-index);
2970
+ background: var(--ab-cmp-dropdownbutton-list__background); }
2943
2971
 
2944
2972
  .ab-DropdownButton__content {
2945
2973
  font-family: var(--ab__font-family);
@@ -2971,11 +2999,23 @@ template {
2971
2999
  border-bottom: var(--ab-cmp-dropdownbutton-list-separator__border); }
2972
3000
 
2973
3001
  .ab-EmptyContent {
2974
- text-align: center; }
3002
+ position: absolute;
3003
+ top: 0;
3004
+ bottom: 0;
3005
+ left: 0;
3006
+ right: 0;
3007
+ font-size: var(--ab-font-size-3);
3008
+ text-align: center;
3009
+ padding: var(--ab-space-4); }
2975
3010
 
2976
3011
  .ab-EmptyContent p {
2977
3012
  color: var(--ab-color-text-on-primary); }
2978
3013
 
3014
+ .ab-EmptyContent__wrapper {
3015
+ position: relative;
3016
+ width: 100%;
3017
+ height: 100%; }
3018
+
2979
3019
  .ab-ErrorBox {
2980
3020
  padding: var(--ab-cmp-error-box__padding);
2981
3021
  border-radius: var(--ab-cmp-error-box__border-radius);
@@ -3692,13 +3732,6 @@ input[type='number'].ab-Input:hover::-webkit-inner-spin-button:active {
3692
3732
  .ab-Datepicker-Overlay .rdp.rdp-with_weeknumber .rdp-row td:nth-child(8) {
3693
3733
  display: table-cell; }
3694
3734
 
3695
- :root {
3696
- --ab-cmp-toggle-button__background: #ccc;
3697
- --ab-cmp-toggle-button--active__background: var(--ab-color-success);
3698
- --ab-cmp-toggle-button__font-size: var(--ab-font-size-1);
3699
- --ab-cmp-toggle-button__color: var(--ab-color-text-on-primary);
3700
- --ab-cmp-toggle-button--checked__color: var(--ab-color-accentlight); }
3701
-
3702
3735
  .ab-ToggleButton {
3703
3736
  position: relative;
3704
3737
  display: inline-block;
@@ -3825,6 +3858,49 @@ input[type='number'].ab-Input:hover::-webkit-inner-spin-button:active {
3825
3858
  font-size: var(--ab-cmp-Tag__font-size);
3826
3859
  max-width: 100%; }
3827
3860
 
3861
+ .ab-ModuleSelector__TabItem {
3862
+ display: flex;
3863
+ flex-direction: column;
3864
+ box-sizing: border-box;
3865
+ margin-right: var(--ab-space-2);
3866
+ width: var(--ab-cmp-module-module-selector__tab-item__width);
3867
+ border: var(--ab-cmp-module-module-selector__tab-item__border);
3868
+ border-radius: var(--ab-cmp-module-module-selector__tab-item__border-radius); }
3869
+
3870
+ .ab-ModuleSelector__TabItem__header {
3871
+ display: flex;
3872
+ align-items: center;
3873
+ padding: var(--ab-space-1);
3874
+ border-bottom: var(--ab-cmp-module-module-selector__tab-item__border); }
3875
+
3876
+ .ab-ModuleSelector__TabItem__header-input {
3877
+ flex: 1;
3878
+ width: 100%;
3879
+ margin-left: var(--ab-space-1);
3880
+ margin-right: var(--ab-space-1);
3881
+ align-self: stretch;
3882
+ background: transparent;
3883
+ border: none;
3884
+ color: var(--ab-cmp-module-module-selector__tab-item__header-input__color); }
3885
+
3886
+ .ab-ModuleSelector__ToolbarList {
3887
+ flex: 1;
3888
+ padding: 4px;
3889
+ padding-bottom: 0;
3890
+ min-height: 200px; }
3891
+
3892
+ .ab-ModuleSelector__ToolbarItem {
3893
+ border: var(--ab-cmp-module-module-selector__toolbar-item__border);
3894
+ padding-left: var(--ab-space-1);
3895
+ margin-bottom: var(--ab-space-1); }
3896
+
3897
+ .ab-ModuleSelector__UnusedPanel {
3898
+ margin-bottom: var(--ab-space-2);
3899
+ padding-bottom: var(--ab-space-1);
3900
+ border: var(--ab-cmp-module-selector__unused-panel__border);
3901
+ border-radius: var(--ab-cmp-module-selector__unused-panel__border-radius);
3902
+ background-color: var(--ab-cmp-module-selector__unused-panel__background); }
3903
+
3828
3904
  .ab-AdaptableOptions {
3829
3905
  background: var(--ab-cmp-adaptable-options__background-color); }
3830
3906
 
@@ -3846,6 +3922,9 @@ input[type='number'].ab-Input:hover::-webkit-inner-spin-button:active {
3846
3922
  color: var(--ab-cmp-listgroupitem--odd__color); }
3847
3923
 
3848
3924
  .ab-AdaptableObjectRow {
3925
+ align-items: center;
3926
+ padding: var(--ab-cmp-listgroupitem__padding);
3927
+ margin: var(--ab-cmp-listgroupitem__margin);
3849
3928
  background: var(--ab-cmp-listgroupitem__background);
3850
3929
  color: var(--ab-cmp-listgroupitem__color);
3851
3930
  border-radius: var(--ab-cmp-listgroupitem__border-radius); }
@@ -3912,19 +3991,24 @@ html.ab--theme-dark .ab-ListBoxFilterForm--aggrid-style {
3912
3991
  bottom: -10px;
3913
3992
  transform: translate3d(-5px, 0px, 0px); }
3914
3993
 
3915
- .ab-nocode-wizard {
3994
+ .ab-NocodeWizard {
3916
3995
  padding: var(--ab-cmp-wizard__padding);
3917
3996
  margin: var(--ab-cmp-wizard__margin);
3918
3997
  background: var(--ab-cmp-wizard__background);
3919
3998
  color: var(--ab-cmp-wizard__color);
3920
3999
  height: 100%; }
3921
4000
 
3922
- .ab-nocode-wizard,
3923
- .ab-nocode-wizard *,
3924
- .ab-nocode-wizard *:before,
3925
- .ab-nocode-wizard *:after {
4001
+ .ab-NocodeWizard,
4002
+ .ab-NocodeWizard *,
4003
+ .ab-NocodeWizard *:before,
4004
+ .ab-NocodeWizard *:after {
3926
4005
  box-sizing: border-box; }
3927
4006
 
4007
+ .ab-NocodeWizardFormBox {
4008
+ border: 1px solid var(--ab-color-primarydark);
4009
+ border-radius: var(--ab__border-radius);
4010
+ background-color: var(--ab-color-defaultbackground); }
4011
+
3928
4012
  .ab-AvailableDropZone .placeholder,
3929
4013
  .ab-SelectedDropZone .placeholder {
3930
4014
  width: 100%; }
@@ -4065,20 +4149,23 @@ html.ab--theme-dark .ab-ListBoxFilterForm--aggrid-style {
4065
4149
  padding: var(--ab-cmp-adaptable-popup--settings__padding);
4066
4150
  min-width: 0; }
4067
4151
 
4152
+ .ab-Adaptable-Popup__Panel {
4153
+ width: 100%; }
4154
+
4068
4155
  .ab-Adaptable-Popup__Panel__Header {
4069
- display: flex;
4070
- padding: 0 var(--ab-cmp-adaptable-popup-panel__padding);
4071
- margin-bottom: var(--ab-cmp-adaptable-popup-panel__margin-bottom);
4072
- margin-top: var(--ab-cmp-adaptable-popup-panel__margin-top); }
4156
+ display: flex;
4157
+ padding: 0 var(--ab-cmp-adaptable-popup-panel__padding);
4158
+ margin-bottom: var(--ab-cmp-adaptable-popup-panel__margin-bottom);
4159
+ margin-top: var(--ab-cmp-adaptable-popup-panel__margin-top); }
4073
4160
 
4074
4161
  .ab-Adaptable-Popup__Panel__Header__Title {
4075
- font-size: var(--ab-cmp-adaptable-popup-panel-title__font-size); }
4162
+ font-size: var(--ab-cmp-adaptable-popup-panel-title__font-size); }
4076
4163
 
4077
4164
  .ab-Adaptable-Popup__Panel__Body {
4078
- padding: var(--ab-cmp-adaptable-popup-panel-body__padding);
4079
- flex: 1 1 0;
4080
- min-height: 0;
4081
- overflow: auto; }
4165
+ padding: var(--ab-cmp-adaptable-popup-panel-body__padding);
4166
+ flex: 1 1 0;
4167
+ min-height: 0;
4168
+ overflow: auto; }
4082
4169
 
4083
4170
  .ab-Adaptable-Popup--window .ab-Adaptable-Popup__TopBar {
4084
4171
  cursor: move; }
@@ -4211,6 +4298,28 @@ button.ab-StatusBar__SubPanel:hover {
4211
4298
  --ab-cmp-adaptable-permitted-values-selector__background-color: var(--ab-color-defaultbackground);
4212
4299
  --ab-cmp-adaptable-permitted-values-selector__padding: var(--ab-space-1); }
4213
4300
 
4301
+ .ab-ValueSelector {
4302
+ overflow: hidden; }
4303
+
4304
+ .ab-ValueSelector__option {
4305
+ border-radius: 'var(--ab__border-radius)'; }
4306
+
4307
+ .ab-ValueSelector__show-selected-only-checkbox {
4308
+ position: sticky;
4309
+ top: 0;
4310
+ z-index: 10000; }
4311
+
4312
+ .ab-ValueSelector__show-selected-only-checkbox__text {
4313
+ position: absolute;
4314
+ top: 2px;
4315
+ right: 4px;
4316
+ overflow: hidden;
4317
+ border-radius: var(--ab__border-radius);
4318
+ margin-right: var(--ab-space-1);
4319
+ margin-top: var(--ab-space-1);
4320
+ padding: 0 var(--ab-space-2);
4321
+ font-size: var(--ab-font-size-2); }
4322
+
4214
4323
  .ab-alert--error {
4215
4324
  background: var(--ab-color-error); }
4216
4325
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "12.1.8-canary.1",
3
+ "version": "12.2.0-canary.0",
4
4
  "description": "Powerful data-agnostic HTML5 datagrid add-on that sits on top of an underlying grid component and provides all the rich functionality that advanced users expect from their DataGrids and Data Tables",
5
5
  "keywords": [
6
6
  "web-components",
@@ -1,2 +1,2 @@
1
- declare const _default: 1661375016938;
1
+ declare const _default: 1661462273542;
2
2
  export default _default;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = 1661375016938;
3
+ exports.default = 1661462273542;
@@ -1,8 +1,10 @@
1
1
  import { ExpressionFunctionMap } from '../parser/src/types';
2
2
  import { AdaptablePredicateDef } from '../PredefinedConfig/Common/AdaptablePredicate';
3
- import { AdaptableModule, AdaptableQLModules } from '../PredefinedConfig/Common/Types';
3
+ import { AdaptableModule, AdaptableQLModule, AdaptableQLModules } from '../PredefinedConfig/Common/Types';
4
+ import { BaseContext } from '../PredefinedConfig/Common/BaseContext';
5
+ import { AdaptableColumn } from '../PredefinedConfig/Common/AdaptableColumn';
4
6
  /**
5
- * Options for managing AdaptableQL - the Adaptable Query Lanaguage which evaluates Predicates and Expressions
7
+ * Options for managing AdaptableQL - the Adaptable Query Language which evaluates Predicates and Expressions
6
8
  */
7
9
  export interface AdaptableQLOptions {
8
10
  /**
@@ -17,10 +19,15 @@ export interface AdaptableQLOptions {
17
19
  *
18
20
  * @defaultValue undefined
19
21
  * @gridInfoItem
22
+ * @deprecated use `evaluateExpressionExternally()` instead
20
23
  */
21
24
  externallyEvaluatedModules?: AdaptableQLModules;
22
25
  /**
23
- * Options for managing Expressions in AdapTableQL
26
+ * Whether a specific expression (or all expressions in a given module) must be evaluated on the server
27
+ */
28
+ evaluateExpressionExternally?: (context: EvaluateExpressionExternallyContext) => boolean;
29
+ /**
30
+ * Options for managing Expressions in AdaptableQL
24
31
  *
25
32
  */
26
33
  expressionOptions?: ExpressionOptions;
@@ -28,41 +35,47 @@ export interface AdaptableQLOptions {
28
35
  * Definitions for Custom provided Predicates
29
36
  */
30
37
  customPredicateDefs?: AdaptablePredicateDef[];
38
+ /**
39
+ * Whether to display the column friendly names in all expression overviews (instead of their technical IDs)
40
+ *
41
+ * @defaultValue true
42
+ */
43
+ displayColumnFriendlyNamesForExpressions?: boolean;
31
44
  }
32
45
  /**
33
- * Options for managing Expressions using AdapTableQL
46
+ * Options for managing Expressions using AdaptableQL
34
47
  */
35
48
  export interface ExpressionOptions {
36
49
  /**
37
- * Boolean Expression Functions available in AdapTableQL
50
+ * Boolean Expression Functions available in AdaptableQL
38
51
  *
39
52
  * @defaultValue null (sets all)
40
53
  * @gridInfoItem
41
54
  */
42
55
  defaultBooleanFunctions?: ExpressionFunctionMap;
43
56
  /**
44
- * Scalar Expression Functions available in AdapTableQL
57
+ * Scalar Expression Functions available in AdaptableQL
45
58
  *
46
59
  * @defaultValue null (sets all)
47
60
  * @gridInfoItem
48
61
  */
49
62
  defaultScalarFunctions?: ExpressionFunctionMap;
50
63
  /**
51
- * Observable Expression Functions available in AdapTableQL
64
+ * Observable Expression Functions available in AdaptableQL
52
65
  *
53
66
  * @defaultValue null (sets all)
54
67
  * @gridInfoItem
55
68
  */
56
69
  defaultObservableFunctions?: ExpressionFunctionMap;
57
70
  /**
58
- * Aggregated Boolean Expression Functions available in AdapTableQL
71
+ * Aggregated Boolean Expression Functions available in AdaptableQL
59
72
  *
60
73
  * @defaultValue null (sets all)
61
74
  * @gridInfoItem
62
75
  */
63
76
  defaultAggregatedBooleanFunctions?: ExpressionFunctionMap;
64
77
  /**
65
- * Aggregated Scalar Expression Functions available in AdapTableQL
78
+ * Aggregated Scalar Expression Functions available in AdaptableQL
66
79
  *
67
80
  * @defaultValue null (sets all)
68
81
  * @gridInfoItem
@@ -78,7 +91,7 @@ export interface ExpressionOptions {
78
91
  [module in AdaptableModule]?: ModuleExpressionFunctions;
79
92
  };
80
93
  /**
81
- * Columns that can be included in AdapTableQL Expressions; leave unset to include **ALL**, provide empty array to set **NONE**
94
+ * Columns that can be included in AdaptableQL Expressions; leave unset to include **ALL**, provide empty array to set **NONE**
82
95
  *
83
96
  * @defaultValue undefined
84
97
  * @gridInfoItem
@@ -98,6 +111,10 @@ export interface ExpressionOptions {
98
111
  * @gridInfoItem
99
112
  */
100
113
  maxTimeframeSize?: number;
114
+ /**
115
+ * Custom query variables allow values to be attached to variables so that a single value can easily be expressed multiple times within a query, or quickly changed to affect the results of a query. Variables are evaluated synchronously with each expression evaluation.
116
+ */
117
+ customQueryVariable?: Record<string, string | number | boolean | Date | ((context: CustomQueryVariableContext) => string | number | boolean | Date)>;
101
118
  }
102
119
  /**
103
120
  * Module specific Expression Functions
@@ -109,3 +126,20 @@ export interface ModuleExpressionFunctions {
109
126
  aggregatedBooleanFunctions?: ExpressionFunctionMap;
110
127
  aggregatedScalarFunctions?: ExpressionFunctionMap;
111
128
  }
129
+ /**
130
+ * Context passed when evaluating `ExpressionOptions.customQueryVariable`
131
+ */
132
+ export interface CustomQueryVariableContext extends BaseContext {
133
+ /**
134
+ * Optional variable arguments
135
+ */
136
+ args?: any[];
137
+ }
138
+ /**
139
+ * Context passed when evaluating `AdaptableQLOptions.evaluateExpressionExternally()`
140
+ */
141
+ export interface EvaluateExpressionExternallyContext extends BaseContext {
142
+ module: AdaptableQLModule;
143
+ expression?: string;
144
+ referencedColumns?: AdaptableColumn[];
145
+ }
@@ -9,7 +9,8 @@ import { BaseSchedule } from '../PredefinedConfig/Common/Schedule';
9
9
  import { Layout } from '../PredefinedConfig/LayoutState';
10
10
  import { AdaptableModule } from '../PredefinedConfig/Common/Types';
11
11
  import { AdaptableObjectTag } from '../PredefinedConfig/Common/AdaptableObject';
12
- import { BaseContext } from '../../types';
12
+ import { AdaptableColumn, BaseContext } from '../../types';
13
+ import { KeyCreatorParams } from '@ag-grid-community/all-modules';
13
14
  /**
14
15
  * Options for configuring Layouts; these manage Column visibility, order, sorting, grouping and width
15
16
  *
@@ -64,6 +65,10 @@ export interface LayoutOptions {
64
65
  * Options for leveraging Object Tags to extend Layouts
65
66
  */
66
67
  layoutTagOptions?: LayoutTagOptions;
68
+ /**
69
+ * When defined ungrouped rows are grouped under this key.
70
+ */
71
+ groupUnbalancedGroupsUnderKey?: string | ((context: GroupUnbalancedGroupsUnderKeyContext) => string);
67
72
  }
68
73
  export interface LayoutTagOptions {
69
74
  /**
@@ -130,3 +135,7 @@ export interface AutoGenerateTagsForLayoutsContext extends BaseContext {
130
135
  */
131
136
  objectTags: AdaptableObjectTag[];
132
137
  }
138
+ export interface GroupUnbalancedGroupsUnderKeyContext extends BaseContext {
139
+ adaptableColumn: AdaptableColumn;
140
+ params: KeyCreatorParams;
141
+ }
@@ -51,7 +51,7 @@ export interface AdaptableStateFunctionConfig {
51
51
  */
52
52
  userName: string;
53
53
  /**
54
- * optional url
54
+ * @deprecated unused will be removed in v.13
55
55
  */
56
56
  url?: string;
57
57
  }
@@ -313,10 +313,9 @@ class AlertApiImpl extends ApiBase_1.ApiBase {
313
313
  return scopeDescription + ' - ' + ruleDescription;
314
314
  }
315
315
  getAlertRuleDescription(alert) {
316
- var _a, _b;
317
316
  let ruleDescription = alert.Rule.Predicate
318
317
  ? this.adaptable.api.predicateApi.predicateToString(alert.Rule.Predicate)
319
- : (_b = (_a = alert.Rule.BooleanExpression) !== null && _a !== void 0 ? _a : alert.Rule.ObservableExpression) !== null && _b !== void 0 ? _b : alert.Rule.AggregatedBooleanExpression;
318
+ : this.adaptable.api.internalApi.getAdaptableQueryExpressionText(alert.Rule);
320
319
  return ruleDescription;
321
320
  }
322
321
  }
@@ -11,7 +11,7 @@ import { SelectedRowInfo } from '../../PredefinedConfig/Selection/SelectedRowInf
11
11
  import { AdaptableModule, AdaptableQLModule } from '../../PredefinedConfig/Common/Types';
12
12
  import { GridCell } from '../../PredefinedConfig/Selection/GridCell';
13
13
  import { CellDataChangedInfo } from '../../PredefinedConfig/Common/CellDataChangedInfo';
14
- import { AdaptableCellChangedAlert, AdaptableOptions, AdaptableRowChangedAlert, AdaptableState, AlertFormContext, BaseContext, Layout, LayoutAssociatedObject, SystemStatusMessageInfo, SharedEntity, AdaptableIcon } from '../../types';
14
+ import { AdaptableCellChangedAlert, AdaptableOptions, AdaptableRowChangedAlert, AdaptableState, AlertFormContext, BaseContext, Layout, LayoutAssociatedObject, SystemStatusMessageInfo, SharedEntity, AdaptableIcon, AdaptableQuery } from '../../types';
15
15
  import { IValidationService } from '../../Utilities/Services/Interface/IValidationService';
16
16
  import { IModuleService } from '../../Utilities/Services/Interface/IModuleService';
17
17
  import { IReportService } from '../../Utilities/Services/Interface/IReportService';
@@ -102,6 +102,7 @@ export declare class InternalApiImpl extends ApiBase implements InternalApi {
102
102
  getModules(): IModuleCollection;
103
103
  getModuleFriendlyName(adaptableModule: AdaptableModule): string;
104
104
  runModuleInAdaptableQL(adaptableQLModule: AdaptableQLModule): boolean;
105
+ evaluateExpressionInAdaptableQL(module: AdaptableQLModule, expression?: string): boolean;
105
106
  forAllRowNodesDo(func: (rowNode: RowNode) => void): void;
106
107
  forAllVisibleRowNodesDo(func: (rowNode: RowNode) => void): void;
107
108
  buildStandaloneColumnHeader(column: AdaptableColumn): AdaptableMenuItem[];
@@ -140,4 +141,5 @@ export declare class InternalApiImpl extends ApiBase implements InternalApi {
140
141
  getLabelForTag(adaptableObjectTag: AdaptableObjectTag): string;
141
142
  getValueForTag(adaptableObjectTag: AdaptableObjectTag): string | number;
142
143
  getEditLookUpValuesForColumn(editLookUpItem: EditLookUpPermittedValues, column: AdaptableColumn, gridCell?: GridCell): any[] | undefined;
144
+ getAdaptableQueryExpressionText(query: Partial<AdaptableQuery>): string;
143
145
  }
@@ -299,6 +299,30 @@ class InternalApiImpl extends ApiBase_1.ApiBase {
299
299
  const adaptableQLModules = this.getAdaptableQLOptions().externallyEvaluatedModules;
300
300
  return !adaptableQLModules.includes(adaptableQLModule);
301
301
  }
302
+ evaluateExpressionInAdaptableQL(module, expression) {
303
+ var _a;
304
+ // temporary, until `externallyEvaluatedModules` is removed completely
305
+ const externallyEvaluatedModules = this.getAdaptableQLOptions().externallyEvaluatedModules;
306
+ if (externallyEvaluatedModules === null || externallyEvaluatedModules === void 0 ? void 0 : externallyEvaluatedModules.length) {
307
+ // fallback to deprecated property
308
+ return this.runModuleInAdaptableQL(module);
309
+ }
310
+ const evaluateExpressionExternallyFn = (_a = this.getAdaptableQLOptions()) === null || _a === void 0 ? void 0 : _a.evaluateExpressionExternally;
311
+ if (typeof evaluateExpressionExternallyFn !== 'function') {
312
+ return true;
313
+ }
314
+ const context = {
315
+ adaptableApi: this.getAdaptableApi(),
316
+ module,
317
+ };
318
+ if (expression) {
319
+ context.expression = expression;
320
+ context.referencedColumns = this.getAdaptableApi()
321
+ .queryLanguageApi.getColumnsFromExpression(expression)
322
+ .map((columnId) => this.getAdaptableApi().columnApi.getColumnFromId(columnId));
323
+ }
324
+ return evaluateExpressionExternallyFn(context);
325
+ }
302
326
  forAllRowNodesDo(func) {
303
327
  this.adaptable.forAllRowNodesDo(func);
304
328
  }
@@ -616,5 +640,15 @@ class InternalApiImpl extends ApiBase_1.ApiBase {
616
640
  // this will use the columnApi method that first looks for permitted values and then distinct values
617
641
  return this.adaptable.api.columnApi.getDistinctDisplayValuesForColumn(column.columnId);
618
642
  }
643
+ getAdaptableQueryExpressionText(query) {
644
+ var _a;
645
+ if (!query) {
646
+ return '';
647
+ }
648
+ const displayColumnFriendlyNames = (_a = this.adaptable.adaptableOptions.adaptableQLOptions) === null || _a === void 0 ? void 0 : _a.displayColumnFriendlyNamesForExpressions;
649
+ return displayColumnFriendlyNames
650
+ ? this.adaptable.api.queryLanguageApi.getAdaptableQueryExpressionWithColumnFriendlyNames(query)
651
+ : this.adaptable.api.queryLanguageApi.getAdaptableQueryExpression(query);
652
+ }
619
653
  }
620
654
  exports.InternalApiImpl = InternalApiImpl;
@@ -13,4 +13,5 @@ export declare class QueryLanguageApiImpl extends ApiBase implements QueryLangua
13
13
  getQueryableColumnIds(): string[] | undefined;
14
14
  getModuleExpressionFunctionMap(): ExpressionFunctionMap;
15
15
  getAdaptableQueryExpression(query: Partial<AdaptableQuery>): string | undefined;
16
+ getAdaptableQueryExpressionWithColumnFriendlyNames(query: Partial<AdaptableQuery>): string | undefined;
16
17
  }
@@ -90,5 +90,10 @@ class QueryLanguageApiImpl extends ApiBase_1.ApiBase {
90
90
  var _a, _b, _c, _d;
91
91
  return ((_d = (_c = (_b = (_a = query.BooleanExpression) !== null && _a !== void 0 ? _a : query.ScalarExpression) !== null && _b !== void 0 ? _b : query.ObservableExpression) !== null && _c !== void 0 ? _c : query.AggregatedBooleanExpression) !== null && _d !== void 0 ? _d : query.AggregatedScalarExpression);
92
92
  }
93
+ getAdaptableQueryExpressionWithColumnFriendlyNames(query) {
94
+ return this.adaptable.api.internalApi
95
+ .getQueryLanguageService()
96
+ .getExpressionWithColumnFriendlyNames(this.getAdaptableQueryExpression(query));
97
+ }
93
98
  }
94
99
  exports.QueryLanguageApiImpl = QueryLanguageApiImpl;
@@ -17,7 +17,7 @@ import { AdaptableOptions } from '../AdaptableOptions/AdaptableOptions';
17
17
  import { Layout } from '../PredefinedConfig/LayoutState';
18
18
  import { AdaptableAlert, AdaptableCellChangedAlert, AdaptableRowChangedAlert } from '../PredefinedConfig/Common/AdaptableAlert';
19
19
  import { IDataService } from '../Utilities/Services/Interface/IDataService';
20
- import { AdaptableIcon, AdaptableMessageType, AlertDefinition, BaseContext, CellDataChangedInfo, EditLookUpPermittedValues, LayoutAssociatedObject, SharedEntity, SystemStatusMessageInfo } from '../types';
20
+ import { AdaptableIcon, AdaptableMessageType, AdaptableQuery, AlertDefinition, BaseContext, CellDataChangedInfo, EditLookUpPermittedValues, LayoutAssociatedObject, SharedEntity, SystemStatusMessageInfo } from '../types';
21
21
  import { IEntitlementService } from '../Utilities/Services/Interface/IEntitlementService';
22
22
  import { AdaptableFlashingCell } from '../PredefinedConfig/Common/AdaptableFlashingCell';
23
23
  import { IQueryLanguageService } from '../Utilities/Services/Interface/IQueryLanguageService';
@@ -104,7 +104,11 @@ export interface InternalApi {
104
104
  getRowEditService(): IRowEditService;
105
105
  getModules(): IModuleCollection;
106
106
  getModuleFriendlyName(adaptableModule: AdaptableModule): string;
107
+ /**
108
+ * @deprecated use `evaluateExpressionInAdaptableQL()` instead
109
+ */
107
110
  runModuleInAdaptableQL(adaptableQLModule: AdaptableQLModule): boolean;
111
+ evaluateExpressionInAdaptableQL(adaptableQLModule: AdaptableQLModule, expression?: string): boolean;
108
112
  forAllRowNodesDo(func: (rowNode: RowNode) => void): void;
109
113
  forAllVisibleRowNodesDo(func: (rowNode: RowNode) => void): void;
110
114
  buildStandaloneColumnHeader(column: AdaptableColumn): AdaptableMenuItem[];
@@ -139,4 +143,5 @@ export interface InternalApi {
139
143
  getLabelForTag(adaptableObjectTag: AdaptableObjectTag): string;
140
144
  getValueForTag(adaptableObjectTag: AdaptableObjectTag): string | number;
141
145
  getEditLookUpValuesForColumn(editLookUpItem: EditLookUpPermittedValues, column: AdaptableColumn, gridCell?: GridCell): any[] | undefined;
146
+ getAdaptableQueryExpressionText(query: Partial<AdaptableQuery>): string;
142
147
  }
@@ -56,4 +56,9 @@ export interface QueryLanguageApi {
56
56
  * @param query - the AdaptableQuery
57
57
  */
58
58
  getAdaptableQueryExpression(query: Partial<AdaptableQuery>): string | undefined;
59
+ /**
60
+ * Returns the Expression string of the given AdaptableQuery with the column friendly names (instead of their technical IDs)
61
+ * @param query - the AdaptableQuery
62
+ */
63
+ getAdaptableQueryExpressionWithColumnFriendlyNames(query: Partial<AdaptableQuery>): string | undefined;
59
64
  }
@@ -1,5 +1,5 @@
1
1
  import { AdaptableModuleBase } from './AdaptableModuleBase';
2
- import { IBulkUpdateModule, BulkUpdateValidationResult } from './Interface/IBulkUpdateModule';
2
+ import { BulkUpdateValidationResult, IBulkUpdateModule } from './Interface/IBulkUpdateModule';
3
3
  import { PreviewInfo } from '../Utilities/Interface/Preview';
4
4
  import { AdaptableMenuItem, ContextMenuContext } from '../PredefinedConfig/Common/Menu';
5
5
  import { AccessLevel, AdaptableApi } from '../types';
@@ -81,7 +81,7 @@ class CalculatedColumnModule extends AdaptableModuleBase_1.AdaptableModuleBase {
81
81
  label: 'Column Name',
82
82
  values: [calculateColumn.FriendlyName],
83
83
  },
84
- getExpressionViewItems_1.getExpressionViewItems(calculateColumn.Query),
84
+ getExpressionViewItems_1.getExpressionViewItems(calculateColumn.Query, this.api),
85
85
  ].filter(Boolean);
86
86
  if (ArrayExtensions_1.default.IsNotNullOrEmpty(settingsTags)) {
87
87
  items.push({
@@ -38,7 +38,7 @@ class QueryModule extends AdaptableModuleBase_1.AdaptableModuleBase {
38
38
  },
39
39
  {
40
40
  name: 'Expression',
41
- values: [query.BooleanExpression],
41
+ values: [this.api.internalApi.getAdaptableQueryExpressionText(query)],
42
42
  },
43
43
  getObjectTagsViewItems_1.getObjectTagsViewItems(query, this.api),
44
44
  ],
@@ -2,19 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getExportRowsViewItems = void 0;
4
4
  const getExportRowsViewItems = (report, api) => {
5
- var _a;
6
- const values = [];
7
- switch (report.ReportRowScope) {
8
- case 'AllRows':
9
- values.push('All Rows');
10
- break;
11
- case 'VisibleRows':
12
- values.push('Visible Rows');
13
- break;
14
- case 'ExpressionRows':
15
- values.push((_a = report.Query) === null || _a === void 0 ? void 0 : _a.BooleanExpression);
16
- break;
17
- }
18
5
  return {
19
6
  name: 'Rows',
20
7
  values: [
@@ -1,5 +1,4 @@
1
1
  import { AdaptableCalculatedColumnQuery } from '../../PredefinedConfig/CalculatedColumnState';
2
- export declare const getExpressionViewItems: (query: AdaptableCalculatedColumnQuery) => {
3
- name: string;
4
- values: string[];
5
- };
2
+ import { AdaptableApi } from '../../Api/AdaptableApi';
3
+ import { AdaptableObjectItemView } from '../Interface/IModule';
4
+ export declare const getExpressionViewItems: (query: AdaptableCalculatedColumnQuery, api: AdaptableApi) => AdaptableObjectItemView;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getExpressionViewItems = void 0;
4
- const getExpressionViewItems = (query) => {
5
- var _a;
4
+ const getExpressionViewItems = (query, api) => {
5
+ const expressionText = api.internalApi.getAdaptableQueryExpressionText(query);
6
6
  return {
7
7
  name: 'Expression',
8
- values: [(_a = query === null || query === void 0 ? void 0 : query.ScalarExpression) !== null && _a !== void 0 ? _a : query === null || query === void 0 ? void 0 : query.AggregatedScalarExpression],
8
+ values: [expressionText],
9
9
  };
10
10
  };
11
11
  exports.getExpressionViewItems = getExpressionViewItems;
@@ -7,7 +7,7 @@ const getRuleViewItems = (rule, api) => {
7
7
  values: [
8
8
  rule.Predicate
9
9
  ? api.predicateApi.predicateToString(rule.Predicate)
10
- : api.queryLanguageApi.getAdaptableQueryExpression(rule),
10
+ : api.internalApi.getAdaptableQueryExpressionText(rule),
11
11
  ],
12
12
  };
13
13
  };