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

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 (93) 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/FinancePluginOptions.d.ts +5 -11
  9. package/src/AdaptableOptions/GeneralOptions.d.ts +19 -1
  10. package/src/AdaptableOptions/StateOptions.d.ts +1 -1
  11. package/src/Api/Implementation/AlertApiImpl.js +1 -2
  12. package/src/Api/Implementation/CellSummaryApiImpl.d.ts +5 -0
  13. package/src/Api/Implementation/CellSummaryApiImpl.js +23 -1
  14. package/src/Api/Implementation/InternalApiImpl.d.ts +3 -1
  15. package/src/Api/Implementation/InternalApiImpl.js +34 -0
  16. package/src/Api/Implementation/LayoutApiImpl.js +2 -2
  17. package/src/Api/Implementation/QueryLanguageApiImpl.d.ts +1 -0
  18. package/src/Api/Implementation/QueryLanguageApiImpl.js +5 -0
  19. package/src/Api/InternalApi.d.ts +6 -1
  20. package/src/Api/QueryLanguageApi.d.ts +5 -0
  21. package/src/Strategy/BulkUpdateModule.d.ts +1 -1
  22. package/src/Strategy/CalculatedColumnModule.js +1 -1
  23. package/src/Strategy/QueryModule.js +1 -1
  24. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +0 -13
  25. package/src/Strategy/Utilities/getExpressionViewItems.d.ts +3 -4
  26. package/src/Strategy/Utilities/getExpressionViewItems.js +3 -3
  27. package/src/Strategy/Utilities/getRuleViewItems.js +1 -1
  28. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +2 -0
  29. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +1 -1
  30. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +2 -0
  31. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  32. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +14 -0
  33. package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +2 -0
  34. package/src/Utilities/Services/QueryLanguageService.d.ts +2 -1
  35. package/src/Utilities/Services/QueryLanguageService.js +45 -19
  36. package/src/Utilities/Services/ReportService.js +1 -2
  37. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +1 -1
  38. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.js +10 -10
  39. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/Components/FormBox.d.ts +3 -0
  40. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/Components/FormBox.js +9 -0
  41. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +13 -15
  42. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.d.ts +1 -1
  43. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +2 -2
  44. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.d.ts +7 -0
  45. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +280 -0
  46. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/index.d.ts +1 -0
  47. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/index.js +5 -0
  48. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.d.ts +1 -1
  49. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +4 -4
  50. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UIOptionsStatusbarForm.js +2 -8
  51. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UiOptionsForm.d.ts +1 -1
  52. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/UIOptions/UiOptionsForm.js +3 -3
  53. package/src/View/AdaptableWizardView/Wizard.js +2 -2
  54. package/src/View/CalculatedColumn/CalculatedColumnSummary.d.ts +0 -1
  55. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +1 -8
  56. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +6 -5
  57. package/src/View/CellSummary/CellSummaryViewPanel.js +1 -1
  58. package/src/View/Components/AdaptableObjectCollection/index.d.ts +3 -4
  59. package/src/View/Components/AdaptableObjectCollection/index.js +7 -8
  60. package/src/View/Components/AdaptableObjectRow/index.js +1 -4
  61. package/src/View/Components/EntityRulesEditor/index.js +3 -3
  62. package/src/View/Components/FilterForm/QuickFilterForm.js +9 -1
  63. package/src/View/Components/Popups/AdaptablePopup/PopupPanel.d.ts +1 -0
  64. package/src/View/Components/Popups/AdaptablePopup/PopupPanel.js +2 -1
  65. package/src/View/Components/ValueSelector/index.js +8 -19
  66. package/src/View/CustomSort/CustomSortSummary.js +1 -1
  67. package/src/View/Dashboard/DashboardPopup.js +11 -10
  68. package/src/View/Export/ExportViewPanel.js +2 -2
  69. package/src/View/Export/Wizard/ReportRowsWizardSection.js +4 -3
  70. package/src/View/Filter/FilterViewPanel.js +3 -2
  71. package/src/View/GridInfo/AdaptableObjectsSummary.js +5 -3
  72. package/src/View/GridInfo/AdaptableOptionsComponent.js +1 -1
  73. package/src/View/GridInfo/GridInfoPopup.js +6 -7
  74. package/src/View/Query/Wizard/NamedQueryExpressionWizardSection.js +3 -4
  75. package/src/View/StateManagement/StateManagementPopup.js +18 -19
  76. package/src/agGrid/Adaptable.d.ts +2 -0
  77. package/src/agGrid/Adaptable.js +78 -30
  78. package/src/agGrid/weightedAverage.d.ts +2 -0
  79. package/src/agGrid/weightedAverage.js +52 -1
  80. package/src/bundle-dependencies/bundles/react-toastify/index.js +1 -1
  81. package/src/components/DragAndDropContext/ModuleManager.js +3 -4
  82. package/src/components/DragAndDropContext/TabList.js +9 -30
  83. package/src/components/DragAndDropContext/UnusedPanel.js +1 -7
  84. package/src/components/DropdownButton/index.js +2 -2
  85. package/src/components/EmptyContent/index.js +2 -2
  86. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -0
  87. package/src/components/ExpressionEditor/index.js +24 -14
  88. package/src/metamodel/adaptable.metamodel.d.ts +34 -10
  89. package/src/metamodel/adaptable.metamodel.js +1 -1
  90. package/src/parser/src/types.d.ts +14 -10
  91. package/src/types.d.ts +1 -1
  92. package/version.d.ts +1 -1
  93. 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.0",
3
+ "version": "12.2.0-canary.1",
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: 1661370166897;
1
+ declare const _default: 1661757179502;
2
2
  export default _default;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = 1661370166897;
3
+ exports.default = 1661757179502;
@@ -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 `evaluateAdaptableQLExternally()` 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
+ evaluateAdaptableQLExternally?: (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
+ }
@@ -37,14 +37,14 @@ export interface FinancePluginOptions {
37
37
  */
38
38
  customFDC3Intents?: CustomFDC3Intent[];
39
39
  };
40
- /**
41
- * Columns to use a Weighted Average aggregation
42
- */
43
- weightedAverageColumns?: WeightedAverageColumn[];
44
40
  /**
45
41
  * Intents to which to subscribe.
46
42
  */
47
43
  availableFDC3Intents?: (FDC3Intent | CustomFDC3Intent)[];
44
+ /**
45
+ * @deprecated - use Weighted Average Layout Aggregation
46
+ */
47
+ weightedAverageColumns?: WeightedAverageColumn[];
48
48
  /**
49
49
  * Called when an intent from `availableIntents` is raised.
50
50
  */
@@ -55,16 +55,10 @@ export interface FinancePluginOptions {
55
55
  onFDC3Context?: (context: FDC3Context, adaptableApi: AdaptableApi) => void;
56
56
  }
57
57
  /**
58
- * An Column which contains a Weighted Average aggregation
58
+ * @deprecated - use Weighted Average Layout Aggregation
59
59
  */
60
60
  export interface WeightedAverageColumn {
61
- /**
62
- * Column which will contain the aggregation
63
- */
64
61
  columnId: string;
65
- /**
66
- * Column used to perform the aggreation calculation
67
- */
68
62
  weightedColumnId: string;
69
63
  }
70
64
  /**
@@ -1,8 +1,9 @@
1
- import { AdaptableForm, AdaptableObject, AdaptableScope } from '../../types';
1
+ import { AdaptableColumn, AdaptableForm, AdaptableObject, AdaptableScope, BaseContext } from '../../types';
2
2
  import { AdaptableComparerFunction } from '../PredefinedConfig/Common/AdaptableComparerFunction';
3
3
  import { AlternativeModuleName } from '../PredefinedConfig/Common/AlternativeModuleName';
4
4
  import { FormContext } from '../PredefinedConfig/Common/FormContext';
5
5
  import { CellSummaryOperation } from '../PredefinedConfig/Common/CellSummary';
6
+ import { KeyCreatorParams } from '@ag-grid-community/all-modules';
6
7
  /**
7
8
  * General options for configuring AdapTable including managing Primary Keys
8
9
  */
@@ -60,6 +61,10 @@ export interface GeneralOptions {
60
61
  * Collection of Data Sets to provide Data to AdapTable
61
62
  */
62
63
  dataSets?: DataSet[];
64
+ /**
65
+ * Value to use for 'Unbalanced Groups' (string columns)
66
+ */
67
+ unbalancedGroupsKey?: string | ((context: UnbalancedGroupsKeyContext) => string);
63
68
  }
64
69
  /**
65
70
  * Comparer object for Column Values - used for custom sorting
@@ -100,3 +105,16 @@ export interface DataSetFormContext extends FormContext {
100
105
  */
101
106
  dataSet: DataSet;
102
107
  }
108
+ /**
109
+ * Context used when setting a value for Unbalanced Row Groups
110
+ */
111
+ export interface UnbalancedGroupsKeyContext extends BaseContext {
112
+ /**
113
+ * Adaptable Column being grouped
114
+ */
115
+ adaptableColumn: AdaptableColumn;
116
+ /**
117
+ * AG Grid's Key Creator Params
118
+ */
119
+ params: KeyCreatorParams;
120
+ }
@@ -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
  }
@@ -9,4 +9,9 @@ export declare class CellSummaryApiImpl extends ApiBase implements CellSummaryAp
9
9
  setCurrentCellSummaryOperation(operation: SummaryOperation | string): void;
10
10
  getCellSummaryOperationValue(operation: SummaryOperation | string): any;
11
11
  getCurrentCellSummaryOperationValue(): any;
12
+ /**
13
+ * Weighted average is availabe only if the current layout has at leat a Weighted Average aggregation defined.
14
+ */
15
+ private isWeightedAvetageCellSummaryAvailable;
16
+ private getWeightedAverageCellSummaryOperation;
12
17
  }
@@ -6,12 +6,21 @@ const ApiBase_1 = require("./ApiBase");
6
6
  const ModuleConstants = tslib_1.__importStar(require("../../Utilities/Constants/ModuleConstants"));
7
7
  const SystemRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/SystemRedux"));
8
8
  const Enums_1 = require("../../PredefinedConfig/Common/Enums");
9
+ const weightedAverage_1 = require("../../agGrid/weightedAverage");
9
10
  class CellSummaryApiImpl extends ApiBase_1.ApiBase {
10
11
  getCurrentCellSummaryOperation() {
11
12
  return this.getAdaptableState().System.CellSummaryOperation;
12
13
  }
13
14
  getCellSummaryOperationDefinitions() {
14
- return this.getGeneralOptions().cellSummaryOperations;
15
+ var _a;
16
+ let cellSummaryOperations = (_a = this.getGeneralOptions().cellSummaryOperations) !== null && _a !== void 0 ? _a : [];
17
+ if (this.isWeightedAvetageCellSummaryAvailable()) {
18
+ cellSummaryOperations = [
19
+ ...cellSummaryOperations,
20
+ this.getWeightedAverageCellSummaryOperation(),
21
+ ];
22
+ }
23
+ return cellSummaryOperations;
15
24
  }
16
25
  showCellSummaryPopup() {
17
26
  this.showModulePopup(ModuleConstants.CellSummaryModuleId);
@@ -52,5 +61,18 @@ class CellSummaryApiImpl extends ApiBase_1.ApiBase {
52
61
  : cellSummaryOperation.operationName;
53
62
  return this.getCellSummaryOperationValue(summaryOperation);
54
63
  }
64
+ /**
65
+ * Weighted average is availabe only if the current layout has at leat a Weighted Average aggregation defined.
66
+ */
67
+ isWeightedAvetageCellSummaryAvailable() {
68
+ const currentLayout = this.getAdaptableApi().layoutApi.getCurrentLayout();
69
+ return Object.values(currentLayout.AggregationColumns).some((aggCol) => typeof aggCol === 'object' && aggCol.type === 'weightedAverage');
70
+ }
71
+ getWeightedAverageCellSummaryOperation() {
72
+ return {
73
+ operationName: 'Weighted Avg',
74
+ operationFunction: weightedAverage_1.cellSummaryWeightedAverage,
75
+ };
76
+ }
55
77
  }
56
78
  exports.CellSummaryApiImpl = CellSummaryApiImpl;
@@ -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.evaluateAdaptableQLExternally;
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;
@@ -106,7 +106,7 @@ class LayoutApiImpl extends ApiBase_1.ApiBase {
106
106
  currentLayout = this.getAdaptableState().Grid.CurrentLayout || currentLayout;
107
107
  }
108
108
  if (currentLayout) {
109
- this.saveLayout(currentLayout);
109
+ this.createOrUpdateLayout(currentLayout);
110
110
  }
111
111
  }
112
112
  doesLayoutExist(layout) {
@@ -244,7 +244,7 @@ class LayoutApiImpl extends ApiBase_1.ApiBase {
244
244
  return acc;
245
245
  }, {}),
246
246
  }, gridState.Columns);
247
- this.saveLayout(defaultLayout);
247
+ this.createOrUpdateLayout(defaultLayout);
248
248
  return defaultLayout;
249
249
  }
250
250
  }
@@ -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;