@adaptabletools/adaptable-cjs 18.0.12 → 18.1.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 (123) hide show
  1. package/agGrid.d.ts +4 -3
  2. package/agGrid.js +6 -1
  3. package/base.css +7 -2
  4. package/base.css.map +1 -1
  5. package/index.css +11 -2
  6. package/index.css.map +1 -1
  7. package/package.json +2 -2
  8. package/src/AdaptableOptions/ActionColumnOptions.d.ts +1 -1
  9. package/src/AdaptableOptions/ColumnFilterOptions.d.ts +27 -1
  10. package/src/AdaptableOptions/ExportOptions.d.ts +20 -7
  11. package/src/AdaptableOptions/ExpressionOptions.d.ts +12 -2
  12. package/src/AdaptableOptions/Fdc3Options.d.ts +48 -43
  13. package/src/Api/ColumnApi.d.ts +1 -1
  14. package/src/Api/Events/Fdc3MessageInfo.d.ts +5 -7
  15. package/src/Api/ExpressionApi.d.ts +2 -2
  16. package/src/Api/Fdc3Api.d.ts +14 -19
  17. package/src/Api/Implementation/ConfigApiImpl.js +3 -0
  18. package/src/Api/Implementation/Fdc3ApiImpl.d.ts +14 -16
  19. package/src/Api/Implementation/Fdc3ApiImpl.js +35 -11
  20. package/src/Api/Internal/AlertInternalApi.d.ts +17 -2
  21. package/src/Api/Internal/AlertInternalApi.js +196 -25
  22. package/src/Api/Internal/ColumnFilterInternalApi.d.ts +2 -0
  23. package/src/Api/Internal/ColumnFilterInternalApi.js +20 -0
  24. package/src/Api/Internal/ExportInternalApi.d.ts +3 -3
  25. package/src/Api/Internal/ExportInternalApi.js +31 -17
  26. package/src/Api/Internal/ExpressionInternalApi.d.ts +5 -1
  27. package/src/Api/Internal/ExpressionInternalApi.js +80 -0
  28. package/src/Api/Internal/Fdc3InternalApi.d.ts +8 -10
  29. package/src/Api/Internal/Fdc3InternalApi.js +5 -9
  30. package/src/PredefinedConfig/Common/AdaptableField.d.ts +18 -0
  31. package/src/PredefinedConfig/Common/AdaptableField.js +2 -0
  32. package/src/PredefinedConfig/Common/AdaptableIcon.d.ts +1 -1
  33. package/src/PredefinedConfig/Common/AdaptablePredicate.js +18 -1
  34. package/src/PredefinedConfig/Common/Fdc3Context.d.ts +7 -226
  35. package/src/PredefinedConfig/Common/Fdc3Context.js +44 -32
  36. package/src/PredefinedConfig/Common/Fdc3Intent.d.ts +6 -89
  37. package/src/PredefinedConfig/Common/Fdc3Intent.js +27 -74
  38. package/src/PredefinedConfig/Common/RowSummary.d.ts +2 -1
  39. package/src/PredefinedConfig/StyledColumnState.d.ts +1 -1
  40. package/src/Redux/ActionsReducers/FormatColumnRedux.js +0 -3
  41. package/src/Strategy/AdaptableModuleBase.js +1 -3
  42. package/src/Strategy/AlertModule.d.ts +1 -1
  43. package/src/Strategy/AlertModule.js +8 -8
  44. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.d.ts +3 -1
  45. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +14 -13
  46. package/src/Utilities/Services/Fdc3Service.d.ts +1 -1
  47. package/src/Utilities/Services/QueryLanguageService.d.ts +8 -4
  48. package/src/Utilities/Services/QueryLanguageService.js +105 -6
  49. package/src/Utilities/Services/ReportService.js +8 -5
  50. package/src/Utilities/Services/RowSummaryService.js +3 -1
  51. package/src/Utilities/divideBy100.d.ts +1 -0
  52. package/src/Utilities/divideBy100.js +34 -0
  53. package/src/Utilities/times100.d.ts +1 -0
  54. package/src/Utilities/times100.js +27 -0
  55. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +1 -1
  56. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +2 -2
  57. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +2 -1
  58. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +1 -1
  59. package/src/View/Components/EntityRulesEditor/index.d.ts +1 -0
  60. package/src/View/Components/EntityRulesEditor/index.js +11 -7
  61. package/src/View/Components/ExpressionWizard.js +1 -1
  62. package/src/View/Components/FilterForm/QuickFilterValues.js +28 -4
  63. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupModuleView.js +6 -2
  64. package/src/View/Components/Selectors/FieldSelector.d.ts +13 -0
  65. package/src/View/Components/Selectors/FieldSelector.js +26 -0
  66. package/src/View/Components/Selectors/PermittedValuesSelector.js +8 -4
  67. package/src/View/Export/Wizard/ReportRowsWizardSection.js +1 -1
  68. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +1 -1
  69. package/src/View/GridFilter/GridFilterExpressionEditor.js +1 -1
  70. package/src/View/Layout/Wizard/sections/GridFilterSection.js +4 -2
  71. package/src/View/Layout/Wizard/sections/RowSummarySection.js +7 -1
  72. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  73. package/src/View/Wizard/OnePageAdaptableWizard.js +3 -2
  74. package/src/agGrid/AdaptableAgGrid.d.ts +1 -2
  75. package/src/agGrid/AdaptableAgGrid.js +63 -32
  76. package/src/agGrid/AgGridColumnAdapter.d.ts +3 -0
  77. package/src/agGrid/AgGridColumnAdapter.js +24 -1
  78. package/src/agGrid/AgGridMenuAdapter.js +1 -1
  79. package/src/agGrid/editors/AdaptableDateEditor/InternalAdaptableDateEditor.d.ts +0 -1
  80. package/src/agGrid/editors/AdaptableDateEditor/InternalAdaptableDateEditor.js +0 -2
  81. package/src/agGrid/editors/AdaptableDateEditor/index.d.ts +4 -16
  82. package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -19
  83. package/src/agGrid/editors/AdaptableNumberEditor/InternalAdaptableNumberEditor.js +6 -1
  84. package/src/agGrid/editors/AdaptableNumberEditor/index.d.ts +4 -3
  85. package/src/agGrid/editors/AdaptableNumberEditor/index.js +6 -2
  86. package/src/agGrid/editors/AdaptablePercentageEditor/InternalAdaptablePercentageEditor.d.ts +23 -0
  87. package/src/agGrid/editors/AdaptablePercentageEditor/InternalAdaptablePercentageEditor.js +84 -0
  88. package/src/agGrid/editors/AdaptablePercentageEditor/index.d.ts +47 -0
  89. package/src/agGrid/editors/AdaptablePercentageEditor/index.js +153 -0
  90. package/src/components/Accordion.js +1 -1
  91. package/src/components/Datepicker/DatepickerContext.d.ts +0 -2
  92. package/src/components/Datepicker/index.js +3 -4
  93. package/src/components/ExpressionEditor/DataTableEditor.d.ts +17 -0
  94. package/src/components/ExpressionEditor/DataTableEditor.js +68 -0
  95. package/src/components/ExpressionEditor/EditorInput.js +21 -8
  96. package/src/components/ExpressionEditor/NamedQueryEditor.d.ts +5 -0
  97. package/src/components/ExpressionEditor/NamedQueryEditor.js +35 -0
  98. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.d.ts +10 -0
  99. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +7 -4
  100. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.d.ts +3 -2
  101. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +72 -14
  102. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +27 -19
  103. package/src/components/ExpressionEditor/QueryBuilder/utils.d.ts +9 -1
  104. package/src/components/ExpressionEditor/QueryBuilder/utils.js +46 -4
  105. package/src/components/ExpressionEditor/index.d.ts +3 -1
  106. package/src/components/ExpressionEditor/index.js +67 -92
  107. package/src/components/Input/NumberInput.d.ts +2 -1
  108. package/src/components/Input/NumberInput.js +6 -5
  109. package/src/components/OverlayTrigger/index.js +10 -6
  110. package/src/components/icons/column-outline.d.ts +3 -0
  111. package/src/components/icons/column-outline.js +7 -0
  112. package/src/components/icons/index.js +5 -1
  113. package/src/components/icons/sync.d.ts +3 -0
  114. package/src/components/icons/sync.js +7 -0
  115. package/src/env.js +2 -2
  116. package/src/metamodel/adaptable.metamodel.d.ts +78 -200
  117. package/src/metamodel/adaptable.metamodel.js +1 -1
  118. package/src/parser/src/predicate/mapExpressionToQlPredicate.d.ts +1 -0
  119. package/src/parser/src/predicate/mapExpressionToQlPredicate.js +13 -3
  120. package/src/parser/src/predicate/mapQlPredicateToExpression.js +4 -1
  121. package/src/parser/src/types.d.ts +101 -1
  122. package/src/types.d.ts +9 -7
  123. package/tsconfig.cjs.tsbuildinfo +1 -1
@@ -22,8 +22,8 @@ const Handle = (props) => (react_1.default.createElement(rebass_1.Flex, Object.a
22
22
  const QueryPredicateButtons = (props) => {
23
23
  return (react_1.default.createElement(react_1.default.Fragment, null,
24
24
  !props.hideAdd && (react_1.default.createElement(DropdownButton_1.default, { listMinWidth: 150, columns: ['label'], items: [
25
- { label: 'Add Column Condition', onClick: () => props.onNewPredicate('filter') },
26
- { label: 'Add AND / OR Group', onClick: () => props.onNewPredicate('group') },
25
+ { label: 'Condition', onClick: () => props.onNewPredicate('filter') },
26
+ { label: 'AND / OR Group', onClick: () => props.onNewPredicate('group') },
27
27
  ], variant: "text" },
28
28
  react_1.default.createElement(icons_1.Icon, { name: "plus" }))),
29
29
  !props.hideDelete && (react_1.default.createElement(SimpleButton_1.default, { icon: "delete", variant: "text", onClick: () => {
@@ -100,22 +100,31 @@ const PrimitiveFunctionEditor = (props) => {
100
100
  var _a;
101
101
  // [handle] [column] [operator-dropdown] [...args] [delete-button] [plus-button]
102
102
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
103
- const [columnExpression, ...restOfArgs] = props.predicate.args;
104
- const col = columnExpression;
105
- let columnId = null;
106
- let columnDataType = null;
103
+ const [columnOrFieldExpression, ...restOfArgs] = props.predicate.args;
104
+ const columnOrField = columnOrFieldExpression;
105
+ let columnOrFieldId = null;
106
+ let columnOrFieldDataType = null;
107
107
  let columnInputDataType = null;
108
108
  let functionInputInputDataTypes = null;
109
109
  // Thsese are the type of inputs ommiting the column
110
110
  // [[column-data-type], number, number]
111
111
  let restOfFunctionInputDataTypes = [];
112
- if (col) {
113
- if (typeof col !== 'string' || !col.includes('[')) {
114
- return react_1.default.createElement(ErrorBox_1.default, null, "Expression must start with a column!");
112
+ if (columnOrField) {
113
+ if (!(0, predicate_1.isArgumentColumnOrField)(columnOrField)) {
114
+ return react_1.default.createElement(ErrorBox_1.default, null, "Expression must start with a column or a filed!");
115
115
  }
116
- columnId = col.replace(/[\[\]]/g, '');
117
- columnDataType = adaptable.api.columnApi.getColumnDataTypeForColumnId(columnId);
118
- columnInputDataType = (0, adaptableQlUtils_1.mapColumnDataTypeToExpressionFunctionType)(columnDataType);
116
+ if (columnOrField.includes('FIELD')) {
117
+ // we let the full expression so we can difirienciate between column and field
118
+ columnOrFieldId = columnOrField;
119
+ const fieldValue = (0, utils_1.mapExpressionToFieldValue)(columnOrField);
120
+ columnOrFieldDataType = adaptable.api.expressionApi.internalApi.getFieldType(fieldValue);
121
+ }
122
+ else if (columnOrField.includes('[')) {
123
+ columnOrFieldId = columnOrField;
124
+ const columnId = columnOrField.replace(/[\[\]]/g, '');
125
+ columnOrFieldDataType = adaptable.api.columnApi.getColumnDataTypeForColumnId(columnId);
126
+ }
127
+ columnInputDataType = (0, adaptableQlUtils_1.mapColumnDataTypeToExpressionFunctionType)(columnOrFieldDataType);
119
128
  functionInputInputDataTypes = (_a = booleanExpressionFunctions_1.booleanExpressionFunctions[props.predicate.operator]) === null || _a === void 0 ? void 0 : _a.inputs;
120
129
  restOfFunctionInputDataTypes = functionInputInputDataTypes
121
130
  ? (0, utils_1.getOperatorMatchingInputs)(columnInputDataType, functionInputInputDataTypes)
@@ -132,12 +141,12 @@ const PrimitiveFunctionEditor = (props) => {
132
141
  react_1.default.createElement(Handle, Object.assign({}, provided.dragHandleProps)),
133
142
  react_1.default.createElement(rebass_1.Flex, { alignItems: "center", height: ITEM_HEIGHT },
134
143
  react_1.default.createElement(rebass_1.Box, { mr: 2 },
135
- react_1.default.createElement(QueryBuilderInputs_1.PrimitiveColumnSelector, { onChange: (colId) => {
136
- props.onChange(Object.assign(Object.assign({}, props.predicate), { args: [colId], operator: null }));
137
- }, columnId: columnId })),
138
- columnId && columnDataType && (react_1.default.createElement(QueryBuilderInputs_1.ExpressionSelector, { dataType: columnDataType, onExpressionChange: (operator) => {
144
+ react_1.default.createElement(QueryBuilderInputs_1.PrimitiveColumnOrFieldSelector, { onChange: (colOrField) => {
145
+ props.onChange(Object.assign(Object.assign({}, props.predicate), { args: [colOrField], operator: null }));
146
+ }, fieldOrColumn: columnOrFieldId })),
147
+ columnOrFieldId && columnOrFieldDataType && (react_1.default.createElement(QueryBuilderInputs_1.ExpressionSelector, { dataType: columnOrFieldDataType, onExpressionChange: (operator) => {
139
148
  let args = [props.predicate.args[0]];
140
- if (columnDataType === 'Boolean' && operator !== 'NOT') {
149
+ if (columnOrFieldDataType === 'Boolean' && operator !== 'NOT') {
141
150
  args = [props.predicate.args[0], 'TRUE'];
142
151
  }
143
152
  props.onChange(Object.assign(Object.assign({}, props.predicate), { operator,
@@ -146,10 +155,9 @@ const PrimitiveFunctionEditor = (props) => {
146
155
  }, value: props.predicate.operator })),
147
156
  react_1.default.createElement(rebass_1.Flex, { flex: 1, ml: 2 }, restOfFunctionInputDataTypes.map((type, index) => {
148
157
  var _a;
149
- let value = restOfArgs[index];
150
158
  const commonProps = {
151
159
  key: type + index,
152
- lefthandColumnIdParam: columnId,
160
+ lefthandColumnIdParam: columnOrFieldId,
153
161
  inputType: type,
154
162
  };
155
163
  if (type.includes('[]')) {
@@ -5,4 +5,12 @@ export declare const reorder: (predicate: QlPredicate, from: string, to: string)
5
5
  export declare const mapExpressionFunctionTypeToColumnDataType: (type: ExpressionFunctionInputType) => AdaptableColumnDataType;
6
6
  export declare const getOperatorMatchingInputs: (columnType: ExpressionFunctionInputType, inputs: ExpressionFunctionInputType[] | Array<ExpressionFunctionInputType>[]) => ExpressionFunctionInputType[];
7
7
  export declare const getFunctionsForColumnType: (dataType: AdaptableColumnDataType, availableBooleanFunctions: BooleanFunctionName[]) => BooleanFunctionName[];
8
- export declare const getUnsuportedExpressionFromQlPredicate: (predicate: QlPredicate | QlPredicateError) => string;
8
+ export declare const getUnsuportedExpressionFromQlPredicate: (predicate: QlPredicate | QlPredicateError, context: {
9
+ supportedFields: {
10
+ value: string;
11
+ }[];
12
+ }) => string;
13
+ export declare const mapFieldValueToExpression: (field: string) => string;
14
+ export declare const mapExpressionToFieldValue: (expression: string) => string;
15
+ export declare const mapColumnExpressionToColumnId: (expression: string) => string;
16
+ export declare const isFieldValue: (expression: string) => boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUnsuportedExpressionFromQlPredicate = exports.getFunctionsForColumnType = exports.getOperatorMatchingInputs = exports.mapExpressionFunctionTypeToColumnDataType = exports.reorder = void 0;
3
+ exports.isFieldValue = exports.mapColumnExpressionToColumnId = exports.mapExpressionToFieldValue = exports.mapFieldValueToExpression = exports.getUnsuportedExpressionFromQlPredicate = exports.getFunctionsForColumnType = exports.getOperatorMatchingInputs = exports.mapExpressionFunctionTypeToColumnDataType = exports.reorder = void 0;
4
4
  const adaptableQlUtils_1 = require("../../../Utilities/adaptableQlUtils");
5
5
  const predicate_1 = require("../../../parser/src/predicate");
6
6
  const booleanExpressionFunctions_1 = require("../../../Utilities/ExpressionFunctions/booleanExpressionFunctions");
@@ -50,7 +50,7 @@ exports.mapExpressionFunctionTypeToColumnDataType = mapExpressionFunctionTypeToC
50
50
  const getOperatorMatchingInputs = (columnType, inputs) => {
51
51
  if (Array.isArray(inputs[0])) {
52
52
  const matchingInput = inputs.find((input) => input[0] === columnType);
53
- const [_, ...restOfArgs] = matchingInput;
53
+ const [_, ...restOfArgs] = matchingInput !== null && matchingInput !== void 0 ? matchingInput : [];
54
54
  return restOfArgs;
55
55
  }
56
56
  const [_, ...restOfArgs] = inputs;
@@ -76,10 +76,20 @@ const getFunctionsForColumnType = (dataType, availableBooleanFunctions) => {
76
76
  });
77
77
  };
78
78
  exports.getFunctionsForColumnType = getFunctionsForColumnType;
79
- const getUnsuportedExpressionFromQlPredicate = (predicate) => {
79
+ const getUnsuportedExpressionFromQlPredicate = (predicate, context) => {
80
+ var _a;
80
81
  if (!predicate) {
81
82
  return null;
82
83
  }
84
+ if (typeof predicate === 'string' && (0, exports.isFieldValue)(predicate)) {
85
+ const field = (0, exports.mapExpressionToFieldValue)(predicate);
86
+ if (!((_a = context.supportedFields) === null || _a === void 0 ? void 0 : _a.some((field) => (field === null || field === void 0 ? void 0 : field.value) === (0, exports.mapExpressionToFieldValue)(predicate)))) {
87
+ return `Expression uses an unregistered field: "${field}"`;
88
+ }
89
+ else {
90
+ return null;
91
+ }
92
+ }
83
93
  if (typeof predicate === 'object' && 'errorMessage' in predicate) {
84
94
  return null;
85
95
  }
@@ -95,7 +105,7 @@ const getUnsuportedExpressionFromQlPredicate = (predicate) => {
95
105
  }
96
106
  let firstInvalidArg = null;
97
107
  for (let arg of predicate.args) {
98
- firstInvalidArg = (0, exports.getUnsuportedExpressionFromQlPredicate)(arg);
108
+ firstInvalidArg = (0, exports.getUnsuportedExpressionFromQlPredicate)(arg, context);
99
109
  if (firstInvalidArg) {
100
110
  break;
101
111
  }
@@ -106,3 +116,35 @@ const getUnsuportedExpressionFromQlPredicate = (predicate) => {
106
116
  return null;
107
117
  };
108
118
  exports.getUnsuportedExpressionFromQlPredicate = getUnsuportedExpressionFromQlPredicate;
119
+ const mapFieldValueToExpression = (field) => `FIELD('${field}')`;
120
+ exports.mapFieldValueToExpression = mapFieldValueToExpression;
121
+ const mapExpressionToFieldValue = (expression) => {
122
+ var _a;
123
+ if (!expression) {
124
+ return '';
125
+ }
126
+ try {
127
+ return (_a = expression.match(/FIELD\(['"](.+)['"]\)/)) === null || _a === void 0 ? void 0 : _a[1];
128
+ }
129
+ catch (e) {
130
+ return '';
131
+ }
132
+ };
133
+ exports.mapExpressionToFieldValue = mapExpressionToFieldValue;
134
+ const mapColumnExpressionToColumnId = (expression) => {
135
+ var _a;
136
+ if (!expression) {
137
+ return null;
138
+ }
139
+ try {
140
+ return (_a = expression.match(/\[(.+)\]/)) === null || _a === void 0 ? void 0 : _a[1];
141
+ }
142
+ catch (e) {
143
+ return expression;
144
+ }
145
+ };
146
+ exports.mapColumnExpressionToColumnId = mapColumnExpressionToColumnId;
147
+ const isFieldValue = (expression) => {
148
+ return typeof expression === 'string' && expression.includes('FIELD');
149
+ };
150
+ exports.isFieldValue = isFieldValue;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { AdaptableApi, AdaptableColumn, AdaptableModule, NamedQuery } from '../../types';
2
+ import { AdaptableApi, AdaptableColumn, AdaptableField, AdaptableModule, NamedQuery } from '../../types';
3
3
  export type ExpressionEditorType = 'boolean' | 'scalar' | 'observable' | 'aggregatedBoolean' | 'aggregatedScalar' | 'cumulativeAggregatedScalar' | 'quantileAggregatedScalar';
4
4
  interface ExpressionEditorProps {
5
5
  value: string;
@@ -10,6 +10,7 @@ interface ExpressionEditorProps {
10
10
  [key: string]: any;
11
11
  };
12
12
  columns: AdaptableColumn[];
13
+ fields?: AdaptableField[];
13
14
  namedQueries: NamedQuery[];
14
15
  allowSaveNamedQuery?: boolean;
15
16
  style?: React.CSSProperties;
@@ -18,5 +19,6 @@ interface ExpressionEditorProps {
18
19
  showQueryBuilder?: boolean;
19
20
  showExpressionEditor?: boolean;
20
21
  }
22
+ export declare const baseClassName = "ab-ExpressionEditor";
21
23
  export declare function ExpressionEditor(props: ExpressionEditorProps): JSX.Element;
22
24
  export {};
@@ -1,40 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExpressionEditor = void 0;
3
+ exports.ExpressionEditor = exports.baseClassName = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
7
  const rebass_1 = require("rebass");
8
- const CheckBox_1 = require("../CheckBox");
9
- const FormLayout_1 = tslib_1.__importStar(require("../FormLayout"));
10
- const HelpBlock_1 = tslib_1.__importDefault(require("../HelpBlock"));
11
- const Input_1 = tslib_1.__importDefault(require("../Input"));
12
- const EditorButton_1 = tslib_1.__importDefault(require("./EditorButton"));
13
- const AdaptableInput_1 = tslib_1.__importDefault(require("../../View/Components/AdaptableInput"));
14
- const Radio_1 = tslib_1.__importDefault(require("../Radio"));
15
- const ArrayExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/ArrayExtensions"));
16
- const EditorInputWithWhereClause_1 = tslib_1.__importDefault(require("./EditorInputWithWhereClause"));
17
- const EditorInput_1 = tslib_1.__importDefault(require("./EditorInput"));
18
- const EditorContext_1 = require("./EditorContext");
19
- const ExpressionFunctionDocumentation_1 = require("./ExpressionFunctionDocumentation");
20
8
  const DocumentationLinkConstants_1 = require("../../Utilities/Constants/DocumentationLinkConstants");
9
+ const ModuleConstants_1 = require("../../Utilities/Constants/ModuleConstants");
10
+ const ArrayExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/ArrayExtensions"));
21
11
  const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions"));
12
+ const AdaptableInput_1 = tslib_1.__importDefault(require("../../View/Components/AdaptableInput"));
22
13
  const ButtonInfo_1 = require("../../View/Components/Buttons/ButtonInfo");
14
+ const CheckBox_1 = require("../CheckBox");
23
15
  const CodeBlock_1 = require("../CodeBlock");
24
- const NamedQueryContext_1 = require("./NamedQueryContext");
25
- const ModuleConstants_1 = require("../../Utilities/Constants/ModuleConstants");
26
- const DateHelper_1 = require("../../Utilities/Helpers/DateHelper");
27
- const AdaptableFormControlTextClear_1 = require("../../View/Components/Forms/AdaptableFormControlTextClear");
16
+ const HelpBlock_1 = tslib_1.__importDefault(require("../HelpBlock"));
17
+ const Panel_1 = tslib_1.__importDefault(require("../Panel"));
28
18
  const Tabs_1 = require("../Tabs");
19
+ const DataTableEditor_1 = require("./DataTableEditor");
20
+ const EditorContext_1 = require("./EditorContext");
21
+ const EditorInput_1 = tslib_1.__importDefault(require("./EditorInput"));
22
+ const EditorInputWithWhereClause_1 = tslib_1.__importDefault(require("./EditorInputWithWhereClause"));
23
+ const ExpressionFunctionDocumentation_1 = require("./ExpressionFunctionDocumentation");
24
+ const NamedQueryContext_1 = require("./NamedQueryContext");
25
+ const NamedQueryEditor_1 = require("./NamedQueryEditor");
29
26
  const QueryBuilder_1 = require("./QueryBuilder");
27
+ exports.baseClassName = `ab-ExpressionEditor`;
30
28
  function ExpressionEditor(props) {
31
29
  var _a, _b, _c;
32
30
  const { type, module } = props;
33
- const [data, setData] = (0, react_1.useState)(props.initialData);
34
- const [showColumnIds, setShowColumnIds] = (0, react_1.useState)(false);
35
- const [inlineQuery, setInlineQuery] = (0, react_1.useState)(false);
36
- const [showNamedQueries, setShowNamedQueries] = (0, react_1.useState)(false);
37
- const baseClassName = `ab-ExpressionEditor`;
38
31
  const [selectedFunction, setSelectedFunction] = (0, react_1.useState)(null);
39
32
  const [expressionText, setExpressionText] = (0, react_1.useState)(props.value);
40
33
  const { namedQuery, setNamedQuery } = (0, NamedQueryContext_1.useNamedQueryContext)();
@@ -43,80 +36,20 @@ function ExpressionEditor(props) {
43
36
  const editorInput = type === 'observable' || type === 'aggregatedBoolean' ? (React.createElement(EditorInputWithWhereClause_1.default, { type: type, module: module, value: props.value, onChange: (value) => {
44
37
  setExpressionText(value);
45
38
  props.onChange(value);
46
- }, testData: data, api: props.api })) : (
39
+ }, testData: props.initialData, api: props.api })) : (
47
40
  // 'boolean','scalar','aggregatedScalar'/'cumulativeAggregatedScalar'/'quantileAggregatedScalar'
48
41
  (React.createElement(
49
42
  EditorInput_1.default,
50
43
  { type: type, module: module, value: props.value, onChange: (value) => {
51
44
  setExpressionText(value);
52
45
  props.onChange(value);
53
- }, testData: data, isFullExpression: props.isFullExpression, api: props.api }
46
+ }, testData: props.initialData, isFullExpression: props.isFullExpression, api: props.api }
54
47
  )));
48
+ const adaptableFields = props.api.expressionApi.internalApi.getAvailableFields();
55
49
  // currently only boolean and scalar expressions support nested calculated columns (calc cols which reference other calc cols)
56
50
  const queryableColumns = type === 'scalar' || type === 'boolean' || type === 'aggregatedScalar'
57
51
  ? props.columns
58
52
  : props.columns.filter((c) => !props.api.columnApi.isCalculatedColumn(c.columnId));
59
- const getColValue = (column) => {
60
- var _a;
61
- return props.api.internalApi.getValueUsingField(data, (_a = column.field) !== null && _a !== void 0 ? _a : column.columnId);
62
- };
63
- const updateColValue = (rowData, column, newValue) => {
64
- var _a;
65
- const updatedRowData = props.api.internalApi.setValueUsingField(rowData, (_a = column.field) !== null && _a !== void 0 ? _a : column.columnId, newValue);
66
- return Object.assign({}, updatedRowData);
67
- };
68
- const getColDateValue = (column) => {
69
- const colValue = getColValue(column);
70
- return colValue && (0, DateHelper_1.isValueValidDate)(colValue)
71
- ? new Date(colValue).toISOString().substr(0, 10)
72
- : '';
73
- };
74
- const [searchInputValue, setSearchInputValue] = React.useState('');
75
- const dataTableEditor = (React.createElement(React.Fragment, null,
76
- React.createElement(rebass_1.Flex, { className: `${baseClassName}__columns-list`, flexDirection: "column", alignItems: "start", style: { marginTop: 2 } },
77
- React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked), style: {
78
- float: 'right',
79
- margin: 0,
80
- paddingTop: 'var(--ab-space-1)',
81
- paddingBottom: 'var(--ab-space-1)',
82
- } }, 'Show Column IDs'),
83
- React.createElement(AdaptableFormControlTextClear_1.AdaptableFormControlTextClear, { value: searchInputValue, OnTextChange: setSearchInputValue, placeholder: "Filter columns...", style: { flex: 1, marginBottom: 3 } })),
84
- React.createElement(FormLayout_1.default, { className: "ab-ExpressionEditor__columns", gridColumnGap: "var(--ab-space-1)", gridRowGap: "var(--ab-space-1)", sizes: ['auto', '100px'], style: { alignItems: 'stretch' } }, queryableColumns
85
- .filter((column) => {
86
- if (!searchInputValue) {
87
- return true;
88
- }
89
- return (column.columnId.includes(searchInputValue) ||
90
- column.friendlyName.includes(searchInputValue));
91
- })
92
- .map((column) => (React.createElement(FormLayout_1.FormRow, { key: column.columnId, label: React.createElement(EditorButton_1.default, { width: "100%", height: "100%", style: {
93
- background: 'var(--ab-color-primary)',
94
- cursor: 'grab',
95
- marginRight: 'var(--ab-space-1)',
96
- }, data: `[${column.columnId}]`, "data-name": "column", icon: "drag" },
97
- React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, showColumnIds ? `[${column.columnId}]` : column.friendlyName)) }, column.dataType === 'Number' ? (React.createElement(Input_1.default, { type: "number", "data-name": "column-input", "data-value": column.columnId, value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, Number(e.target.value))), width: "100%", disabled: column.readOnly })) : column.dataType === 'String' ? (React.createElement(Input_1.default, { type: "text", "data-name": "column-input", "data-value": column.columnId, value: getColValue(column), onChange: (e) => setData(updateColValue(data, column, e.target.value)), width: "100%", disabled: column.readOnly })) : column.dataType === 'Date' ? (React.createElement(AdaptableInput_1.default, { type: "date", "data-name": "column-input", "data-value": column.columnId, value: getColDateValue(column), onChange: (e) => {
98
- setData(updateColValue(data, column, new Date(e.target.value)));
99
- }, style: { width: '100%' }, disabled: column.readOnly })) : column.dataType === 'Boolean' ? (React.createElement(CheckBox_1.CheckBox, { "data-name": "column-input", "data-value": column.columnId, checked: getColValue(column), onChange: (checked) => setData(updateColValue(data, column, checked)), disabled: column.readOnly })) : null))))));
100
- const namedQueries = (React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start", style: { marginTop: 2 } },
101
- React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked) }, "Show Column IDs"),
102
- React.createElement(CheckBox_1.CheckBox, { checked: inlineQuery, onChange: (checked) => setInlineQuery(checked) }, "Inline Query"),
103
- props.namedQueries.map((namedQuery) => (React.createElement(rebass_1.Flex, { key: namedQuery.Uuid, flexDirection: "column", alignItems: "start", style: {
104
- padding: 3,
105
- marginTop: 'var(--ab-space-2)',
106
- marginBottom: 'var(--ab-space-2)',
107
- width: '100%',
108
- }, backgroundColor: "primarylight" },
109
- ' ',
110
- React.createElement(EditorButton_1.default, { width: "100%", height: "100%", style: {
111
- background: 'var(--ab-color-primary)',
112
- cursor: 'grab',
113
- }, data: inlineQuery ? namedQuery.BooleanExpression : `QUERY("${namedQuery.Name}")`, "data-name": "column", icon: "drag" },
114
- React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, namedQuery.Name)),
115
- React.createElement(rebass_1.Flex, { alignItems: "start", style: {
116
- padding: 5,
117
- } }, showColumnIds
118
- ? namedQuery.BooleanExpression
119
- : props.api.expressionApi.getAdaptableQueryExpressionWithColumnFriendlyNames(namedQuery)))))));
120
53
  const showDocumentationLinks = props.api.internalApi.isDocumentationLinksDisplayed();
121
54
  // @Bogdan i did this to be sure but i think we can get rid of this as the button does the same (and better IMO)
122
55
  const showNamedQueryStuff = false;
@@ -144,7 +77,7 @@ function ExpressionEditor(props) {
144
77
  BooleanExpression: expressionText,
145
78
  });
146
79
  } })) : null));
147
- const editorElement = (React.createElement(rebass_1.Flex, { className: baseClassName, flex: 1, "data-name": "expression-editor-wrapper", pl: 2, style: props.style },
80
+ const editorElement = (React.createElement(rebass_1.Flex, { className: exports.baseClassName, flex: 1, "data-name": "expression-editor-wrapper", pl: 2, style: props.style },
148
81
  React.createElement(rebass_1.Flex, { flex: 1, style: { minHeight: 0 }, flexDirection: "column", onFocus: (event) => {
149
82
  if (event.target.tagName === 'TEXTAREA') {
150
83
  textAreaRef.current = event.target;
@@ -163,14 +96,56 @@ function ExpressionEditor(props) {
163
96
  " Query documentation for more details and examples")),
164
97
  React.createElement(rebass_1.Box, { flex: 1 }),
165
98
  showNamedQueryStuff && saveAsNamedQueryElement),
166
- React.createElement(rebass_1.Box, { className: `${baseClassName}__column-picker`, "data-name": "expression-column-picker", pb: 2, paddingLeft: 2, pr: 2 },
167
- ArrayExtensions_1.default.IsNotNullOrEmpty(props.namedQueries) && (React.createElement(rebass_1.Flex, { flexDirection: "row", alignItems: "start", p: 1, mt: 2, backgroundColor: "primarylight" },
168
- React.createElement(Radio_1.default, { checked: !showNamedQueries, onChange: (checked) => setShowNamedQueries(!checked), style: { marginRight: 10 } }, "Columns"),
169
- React.createElement(Radio_1.default, { checked: showNamedQueries, onChange: (checked) => setShowNamedQueries(checked), style: { marginLeft: 10, whiteSpace: 'nowrap' } }, "Named Queries"))),
170
- showNamedQueries ? React.createElement("div", null, namedQueries) : React.createElement("div", null, dataTableEditor))))));
99
+ React.createElement(rebass_1.Box, { className: `${exports.baseClassName}__sidebar`, "data-name": "expression-sidebar", pb: 2, paddingLeft: 2, pr: 2 },
100
+ React.createElement(Panel_1.default, { bodyProps: { style: { height: '100%' } }, style: { height: '100%' } },
101
+ React.createElement(Tabs_1.Tabs, { style: { height: '100%' }, variant: "" },
102
+ React.createElement(Tabs_1.Tabs.Tab, { value: "column" }, "Columns"),
103
+ React.createElement(Tabs_1.Tabs.Tab, { value: "field" }, "Fields"),
104
+ React.createElement(Tabs_1.Tabs.Tab, { value: "named-query" }, "Named Queries"),
105
+ React.createElement(Tabs_1.Tabs.Content, { flex: 1, style: { height: '100%' } },
106
+ React.createElement(DataTableEditor_1.DataTableEditor, { type: "column", dataFormatter: (value) => `[${value}]`, fields: queryableColumns.map((column) => ({
107
+ label: column.friendlyName,
108
+ value: column.columnId,
109
+ dataType: column.dataType,
110
+ readOnly: column.readOnly,
111
+ })), data: props.initialData })),
112
+ React.createElement(Tabs_1.Tabs.Content, null, adaptableFields && adaptableFields.length > 0 ? (React.createElement(DataTableEditor_1.DataTableEditor, { type: "field", labels: {
113
+ showIds: 'Show Field path',
114
+ filterPlaceholder: 'Filter fields...',
115
+ }, dataFormatter: (value) => `FIELD("${value}")`, data: props.initialData, fields: adaptableFields === null || adaptableFields === void 0 ? void 0 : adaptableFields.map((field) => ({
116
+ label: field.label,
117
+ value: field.name,
118
+ dataType: field.dataType,
119
+ readOnly: true,
120
+ })) })) : (React.createElement(rebass_1.Text, { p: 2 }, "No Data Fields provided"))),
121
+ React.createElement(Tabs_1.Tabs.Content, null, ArrayExtensions_1.default.IsNullOrEmpty(props.namedQueries) ? (React.createElement("div", null,
122
+ React.createElement(rebass_1.Text, { p: 2 }, "No Named Queries defined"),
123
+ React.createElement(rebass_1.Text, { fontSize: 2, padding: 2, p: 2 },
124
+ "Named Queries are saved Expressions which can be referenced in other Expressions using the ",
125
+ React.createElement("i", null, "QUERY"),
126
+ " keyword",
127
+ ' '))) : (React.createElement(NamedQueryEditor_1.NamedQueryEditor, { namedQueries: props.namedQueries }))))))))));
171
128
  const queryBuilderElement = (React.createElement(QueryBuilder_1.QueryBuilder, { module: module, query: expressionText, onChange: (query) => {
172
129
  setExpressionText(query);
173
130
  props.onChange(query);
131
+ }, getFields: (type) => {
132
+ return props.fields
133
+ .filter((field) => {
134
+ if (!type) {
135
+ return (field.dataType === 'String' ||
136
+ field.dataType === 'Number' ||
137
+ field.dataType === 'Boolean' ||
138
+ field.dataType === 'Date');
139
+ }
140
+ else {
141
+ return field.dataType === type;
142
+ }
143
+ })
144
+ .map((field) => ({
145
+ value: field.name,
146
+ label: field.label,
147
+ type: field.dataType,
148
+ }));
174
149
  }, getColumns: (type) => {
175
150
  return props.columns
176
151
  .filter((column) => {
@@ -202,7 +177,7 @@ function ExpressionEditor(props) {
202
177
  } }, (() => {
203
178
  switch (true) {
204
179
  case showQueryBuilder && showExpressionEditor:
205
- return (React.createElement(Tabs_1.Tabs, { mb: 2, p: 2, minHeight: 0, flex: 1 },
180
+ return (React.createElement(Tabs_1.Tabs, { "data-name": "editor-selector-tabs", mb: 2, p: 2, minHeight: 0, flex: 1 },
206
181
  React.createElement(Tabs_1.Tabs.Tab, { value: "editor" }, "Expression Editor"),
207
182
  React.createElement(Tabs_1.Tabs.Tab, { value: "ui" }, "Query Builder"),
208
183
  React.createElement(Tabs_1.Tabs.Content, null, editorElement),
@@ -2,9 +2,10 @@ import * as React from 'react';
2
2
  import { InputProps } from './index';
3
3
  export type NumberInputProps = {
4
4
  onChange: (value: number) => void;
5
+ noArrows?: boolean;
5
6
  } & Omit<InputProps, 'onChange'>;
6
7
  /**
7
8
  * This component allows - and empty values as intermediery values
8
9
  * it calls change only with valid numeric values
9
10
  */
10
- export declare const NumberInput: React.FunctionComponent<NumberInputProps>;
11
+ export declare const NumberInput: React.ForwardRefExoticComponent<Pick<NumberInputProps, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "step" | "sizes" | "variant" | "tx" | "as" | "css" | "key" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "type" | "useMap" | "wmode" | "noArrows"> & React.RefAttributes<HTMLInputElement>>;
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NumberInput = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
- const index_1 = tslib_1.__importDefault(require("./index"));
6
+ const index_1 = tslib_1.__importStar(require("./index"));
7
+ const join_1 = tslib_1.__importDefault(require("../utils/join"));
7
8
  /**
8
9
  * This component allows - and empty values as intermediery values
9
10
  * it calls change only with valid numeric values
10
11
  */
11
- const NumberInput = (props) => {
12
+ exports.NumberInput = React.forwardRef((props, ref) => {
12
13
  const [value, setValue] = React.useState(() => {
13
14
  var _a;
14
15
  // awlays controlled
@@ -41,6 +42,6 @@ const NumberInput = (props) => {
41
42
  setValue(props.value);
42
43
  }
43
44
  }, [props.value, value]);
44
- return React.createElement(index_1.default, Object.assign({}, props, { value: value, onBlur: handleBlur, onChange: handleChange }));
45
- };
46
- exports.NumberInput = NumberInput;
45
+ const { noArrows } = props, restOfProps = tslib_1.__rest(props, ["noArrows"]);
46
+ return (React.createElement(index_1.default, Object.assign({}, restOfProps, { ref: ref, className: (0, join_1.default)(noArrows ? `${index_1.baseClassName}--no-arrows` : '', props.className), value: value, onBlur: handleBlur, onChange: handleChange })));
47
+ });
@@ -66,6 +66,8 @@ const OverlayTrigger = React.forwardRef((givenProps, ref) => {
66
66
  // overlay - target
67
67
  ['TopLeft', 'BottomLeft'],
68
68
  ['TopRight', 'BottomRight'],
69
+ ['TopCenter', 'BottomCenter'],
70
+ ['BottomCenter', 'TopCenter'],
69
71
  ['TopRight', 'BottomCenter'],
70
72
  ['TopRight', 'BottomLeft'],
71
73
  ['TopRight', 'BottomLeft'],
@@ -73,6 +75,11 @@ const OverlayTrigger = React.forwardRef((givenProps, ref) => {
73
75
  ['BottomRight', 'TopRight'],
74
76
  ['BottomRight', 'TopCenter'],
75
77
  ['BottomRight', 'TopLeft'],
78
+ ['TopRight', 'CenterLeft'],
79
+ ['TopRight', 'TopLeft'],
80
+ ['TopLeft', 'TopRight'],
81
+ ['CenterRight', 'CenterLeft'],
82
+ ['CenterLeft', 'CenterRight'],
76
83
  ], constrainTo, target: targetProp } = props, domProps = tslib_1.__rest(props, ["visible", "showTriangle", "showEvent", "hideEvent", "render", "targetOffset", "preventPortalEventPropagation", "defaultZIndex", "anchor", "hideDelay", "opacityTransitionDuration", "onVisibleChange", "alignPosition", "constrainTo", "target"]);
77
84
  const { showOverlay, clearAll: clearAllOverlays, hideOverlay, portal, } = (0, InfiniteTable_1.useOverlay)({
78
85
  portalContainer: portalElement,
@@ -184,19 +191,16 @@ const OverlayTrigger = React.forwardRef((givenProps, ref) => {
184
191
  hideOverlay('overlay-trigger');
185
192
  }
186
193
  } }), props.render({ targetWidth: targetWidth })));
187
- let preparedConstrinTo;
194
+ let preparedConstrainTo;
188
195
  if (constrainTo) {
189
- preparedConstrinTo = (0, exports.getConstrainElement)(targetRef.current, constrainTo);
190
- }
191
- else {
192
- preparedConstrinTo = adaptable === null || adaptable === void 0 ? void 0 : adaptable.getAgGridContainerElement();
196
+ preparedConstrainTo = (0, exports.getConstrainElement)(targetRef.current, constrainTo);
193
197
  }
194
198
  // show only if visible or if it was visible and now it is invisible
195
199
  const alignToRect = (0, utils_1.getRect)(target, targetOffset !== null && targetOffset !== void 0 ? targetOffset : 0);
196
200
  const showOverlayOptions = {
197
201
  id: 'overlay-trigger',
198
202
  alignPosition,
199
- constrainTo: (_b = (_a = preparedConstrinTo === null || preparedConstrinTo === void 0 ? void 0 : preparedConstrinTo.getBoundingClientRect) === null || _a === void 0 ? void 0 : _a.call(preparedConstrinTo)) !== null && _b !== void 0 ? _b : true,
203
+ constrainTo: (_b = (_a = preparedConstrainTo === null || preparedConstrainTo === void 0 ? void 0 : preparedConstrainTo.getBoundingClientRect) === null || _a === void 0 ? void 0 : _a.call(preparedConstrainTo)) !== null && _b !== void 0 ? _b : true,
200
204
  alignTo: alignToRect,
201
205
  };
202
206
  showOverlay(() => overlayContent, showOverlayOptions);
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const _default: (props: any) => JSX.Element;
3
+ export default _default;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const React = tslib_1.__importStar(require("react"));
5
+ const DefaultIcon_1 = tslib_1.__importDefault(require("./DefaultIcon"));
6
+ exports.default = (props) => (React.createElement(DefaultIcon_1.default, Object.assign({}, props, { viewBox: "0 -960 960 960" }),
7
+ React.createElement("path", { d: "M121-280v-400q0-33 23.5-56.5T201-760h559q33 0 56.5 23.5T840-680v400q0 33-23.5 56.5T760-200H201q-33 0-56.5-23.5T121-280Zm79 0h133v-400H200v400Zm213 0h133v-400H413v400Zm213 0h133v-400H626v400Z" })));
@@ -55,6 +55,7 @@ const column_chooser_1 = tslib_1.__importDefault(require("./column-chooser"));
55
55
  const column_add_1 = tslib_1.__importDefault(require("./column-add"));
56
56
  const cell_validation_1 = tslib_1.__importDefault(require("./cell-validation"));
57
57
  const column_filter_1 = tslib_1.__importDefault(require("./column-filter"));
58
+ const column_outline_1 = tslib_1.__importDefault(require("./column-outline"));
58
59
  const system_status_1 = tslib_1.__importDefault(require("./system-status"));
59
60
  const data_set_1 = tslib_1.__importDefault(require("./data-set"));
60
61
  const data_object_1 = tslib_1.__importDefault(require("./data-object"));
@@ -170,6 +171,7 @@ const select_fwd_1 = tslib_1.__importDefault(require("./select-fwd"));
170
171
  const copy_1 = tslib_1.__importDefault(require("./copy"));
171
172
  const expand_all_1 = tslib_1.__importDefault(require("./expand-all"));
172
173
  const collapse_all_1 = tslib_1.__importDefault(require("./collapse-all"));
174
+ const sync_1 = tslib_1.__importDefault(require("./sync"));
173
175
  const Icon_1 = require("../Icon");
174
176
  const AdaptableLogger_1 = require("../../agGrid/AdaptableLogger");
175
177
  exports.allIcons = {
@@ -191,7 +193,7 @@ exports.allIcons = {
191
193
  news: news_1.default,
192
194
  brush: brush_1.default,
193
195
  'data-set': data_set_1.default,
194
- 'excel': excel_1.default,
196
+ excel: excel_1.default,
195
197
  json: data_object_1.default,
196
198
  export: export_1.default,
197
199
  broadcast: campaign_1.default,
@@ -200,6 +202,7 @@ exports.allIcons = {
200
202
  calendar: calendar_1.default,
201
203
  chat: chat_1.default,
202
204
  'filter-list': column_filter_1.default,
205
+ 'column-outline': column_outline_1.default,
203
206
  'grid-filter': grid_filter_1.default,
204
207
  'grid-info': grid_info_1.default,
205
208
  filter: filter_1.default,
@@ -340,6 +343,7 @@ exports.allIcons = {
340
343
  rows: rows_1.default,
341
344
  'expand-all': expand_all_1.default,
342
345
  'collapse-all': collapse_all_1.default,
346
+ sync: sync_1.default,
343
347
  };
344
348
  Object.keys(exports.allIcons).forEach((name) => {
345
349
  const ReactCmp = exports.allIcons[name];
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const _default: (props: any) => JSX.Element;
3
+ export default _default;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const React = tslib_1.__importStar(require("react"));
5
+ const DefaultIcon_1 = tslib_1.__importDefault(require("./DefaultIcon"));
6
+ exports.default = (props) => (React.createElement(DefaultIcon_1.default, Object.assign({}, props, { viewBox: "0 -960 960 960" }),
7
+ React.createElement("path", { d: "M280-120 80-320l200-200 57 56-104 104h607v80H233l104 104-57 56Zm400-320-57-56 104-104H120v-80h607L623-784l57-56 200 200-200 200Z" })));
package/src/env.js CHANGED
@@ -2,6 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = {
4
4
  INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
5
- PUBLISH_TIMESTAMP: 1716379134351 || Date.now(),
6
- VERSION: "18.0.12" || '--current-version--',
5
+ PUBLISH_TIMESTAMP: 1716641902456 || Date.now(),
6
+ VERSION: "18.1.0-canary.0" || '--current-version--',
7
7
  };