@infomaximum/widget-sdk 4.0.0-beta6 → 4.0.0-beta60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -2,103 +2,73 @@ import { Localization } from '@infomaximum/localization';
2
2
  export { ELanguages } from '@infomaximum/localization';
3
3
  export { EFilteringMethodValues } from '@infomaximum/base-filter';
4
4
 
5
- /******************************************************************************
6
- Copyright (c) Microsoft Corporation.
7
-
8
- Permission to use, copy, modify, and/or distribute this software for any
9
- purpose with or without fee is hereby granted.
10
-
11
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
- PERFORMANCE OF THIS SOFTWARE.
18
- ***************************************************************************** */
19
- /* global Reflect, Promise, SuppressedError, Symbol */
20
-
21
-
22
- var __assign = function() {
23
- __assign = Object.assign || function __assign(t) {
24
- for (var s, i = 1, n = arguments.length; i < n; i++) {
25
- s = arguments[i];
26
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27
- }
28
- return t;
29
- };
30
- return __assign.apply(this, arguments);
31
- };
32
-
33
- function __read(o, n) {
34
- var m = typeof Symbol === "function" && o[Symbol.iterator];
35
- if (!m) return o;
36
- var i = m.call(o), r, ar = [], e;
37
- try {
38
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
39
- }
40
- catch (error) { e = { error: error }; }
41
- finally {
42
- try {
43
- if (r && !r.done && (m = i["return"])) m.call(i);
44
- }
45
- finally { if (e) throw e.error; }
46
- }
47
- return ar;
48
- }
49
-
50
- function __spreadArray(to, from, pack) {
51
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
52
- if (ar || !(i in from)) {
53
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
54
- ar[i] = from[i];
55
- }
56
- }
57
- return to.concat(ar || Array.prototype.slice.call(from));
58
- }
59
-
60
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
61
- var e = new Error(message);
62
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
63
- };
64
-
65
- var EWidgetActionInputMode;
66
- (function (EWidgetActionInputMode) {
67
- EWidgetActionInputMode["FROM_COLUMN"] = "FROM_COLUMN";
68
- EWidgetActionInputMode["FROM_VARIABLE"] = "FROM_VARIABLE";
69
- EWidgetActionInputMode["STATIC_LIST"] = "STATIC_LIST";
70
- EWidgetActionInputMode["DYNAMIC_LIST"] = "DYNAMIC_LIST";
71
- EWidgetActionInputMode["FORMULA"] = "FORMULA";
72
- EWidgetActionInputMode["MANUALLY"] = "MANUALLY";
73
- })(EWidgetActionInputMode || (EWidgetActionInputMode = {}));
74
- var isActionValid = function (action, _a) {
5
+ var EWidgetActionInputMethod;
6
+ (function (EWidgetActionInputMethod) {
7
+ EWidgetActionInputMethod["COLUMN"] = "COLUMN";
8
+ EWidgetActionInputMethod["VARIABLE"] = "VARIABLE";
9
+ EWidgetActionInputMethod["STATIC_LIST"] = "STATIC_LIST";
10
+ EWidgetActionInputMethod["DYNAMIC_LIST"] = "DYNAMIC_LIST";
11
+ EWidgetActionInputMethod["FORMULA"] = "FORMULA";
12
+ EWidgetActionInputMethod["MANUALLY"] = "MANUALLY";
13
+ EWidgetActionInputMethod["EVENT"] = "EVENT";
14
+ EWidgetActionInputMethod["START_EVENT"] = "START_EVENT";
15
+ EWidgetActionInputMethod["FINISH_EVENT"] = "FINISH_EVENT";
16
+ })(EWidgetActionInputMethod || (EWidgetActionInputMethod = {}));
17
+ var EActionTypes;
18
+ (function (EActionTypes) {
19
+ EActionTypes["OPEN_URL"] = "OPEN_URL";
20
+ EActionTypes["UPDATE_VARIABLE"] = "UPDATE_VARIABLE";
21
+ EActionTypes["EXECUTE_SCRIPT"] = "EXECUTE_SCRIPT";
22
+ EActionTypes["OPEN_VIEW"] = "OPEN_VIEW";
23
+ })(EActionTypes || (EActionTypes = {}));
24
+ var EViewMode;
25
+ (function (EViewMode) {
26
+ EViewMode["EXISTED_VIEW"] = "EXISTED_VIEW";
27
+ EViewMode["GENERATED_BY_SCRIPT"] = "GENERATED_BY_SCRIPT";
28
+ EViewMode["EMPTY"] = "EMPTY";
29
+ })(EViewMode || (EViewMode = {}));
30
+ var EViewOpenIn;
31
+ (function (EViewOpenIn) {
32
+ EViewOpenIn["NEW_WINDOW"] = "NEW_WINDOW";
33
+ EViewOpenIn["CURRENT_WINDOW"] = "CURRENT_WINDOW";
34
+ EViewOpenIn["PLACEHOLDER"] = "PLACEHOLDER";
35
+ EViewOpenIn["MODAL_WINDOW"] = "MODAL_WINDOW";
36
+ EViewOpenIn["DRAWER_WINDOW"] = "DRAWER_WINDOW";
37
+ })(EViewOpenIn || (EViewOpenIn = {}));
38
+ var EDrawerPlacement;
39
+ (function (EDrawerPlacement) {
40
+ EDrawerPlacement["LEFT"] = "LEFT";
41
+ EDrawerPlacement["RIGHT"] = "RIGHT";
42
+ })(EDrawerPlacement || (EDrawerPlacement = {}));
43
+ var isExecuteScriptActionValid = function (action, _a) {
75
44
  var _b;
76
- var scripts = _a.scripts, tables = _a.tables;
77
- var currentScript = scripts.get((_b = action.scriptGuid) !== null && _b !== void 0 ? _b : "");
45
+ var scripts = _a.scripts, tables = _a.tables, variables = _a.variables;
46
+ var currentScript = scripts.get((_b = action.scriptKey) !== null && _b !== void 0 ? _b : "");
78
47
  if (!currentScript) {
79
48
  return false;
80
49
  }
81
- var actionInputsMap = new Map(action.inputs.map(function (input) { return [input.guid, input]; }));
82
- if (actionInputsMap.size < currentScript.fieldsGuids.size) {
50
+ var actionInputsMap = new Map(action.parameters.map(function (parameter) { return [parameter.name, parameter]; }));
51
+ if (actionInputsMap.size < currentScript.fields.length) {
83
52
  return false;
84
53
  }
85
- return __spreadArray([], __read(currentScript.fieldsGuids), false).every(function (guid) {
86
- var actionInput = actionInputsMap.get(guid !== null && guid !== void 0 ? guid : "");
54
+ return currentScript.fields.every(function (_a) {
55
+ var name = _a.name;
56
+ var actionInput = actionInputsMap.get(name !== null && name !== void 0 ? name : "");
87
57
  if (!actionInput) {
88
58
  return false;
89
59
  }
90
- var value = actionInput.value;
91
- if (value.mode === EWidgetActionInputMode.FROM_VARIABLE && !value.guid) {
60
+ if (actionInput.inputMethod === EWidgetActionInputMethod.VARIABLE &&
61
+ !variables.has(actionInput.sourceVariable)) {
92
62
  return false;
93
63
  }
94
- if (value.mode === EWidgetActionInputMode.FORMULA && !value.formula) {
64
+ if (actionInput.inputMethod === EWidgetActionInputMethod.FORMULA && !actionInput.formula) {
95
65
  return false;
96
66
  }
97
- if (value.mode === EWidgetActionInputMode.DYNAMIC_LIST && !value.formula) {
67
+ if (actionInput.inputMethod === EWidgetActionInputMethod.DYNAMIC_LIST && !actionInput.formula) {
98
68
  return false;
99
69
  }
100
- if (value.mode === EWidgetActionInputMode.FROM_COLUMN &&
101
- !tables.has(value.tableName)) {
70
+ if (actionInput.inputMethod === EWidgetActionInputMethod.COLUMN &&
71
+ !tables.has(actionInput.tableName)) {
102
72
  return false;
103
73
  }
104
74
  return true;
@@ -123,9 +93,7 @@ var prepareValuesForSql = function (dataType, values) {
123
93
  dataType === ESimpleDataType.BOOLEAN
124
94
  ? values
125
95
  : values.map(function (value) {
126
- return value === null
127
- ? null
128
- : "'".concat(escapeSingularQuotes(escapeReverseSlash(value)), "'");
96
+ return value === null ? null : "'".concat(escapeSingularQuotes(escapeReverseSlash(value)), "'");
129
97
  });
130
98
  };
131
99
  var escapeReverseSlash = function (formula) {
@@ -135,19 +103,39 @@ var escapeSingularQuotes = function (formula) {
135
103
  return formula.replaceAll("'", "\\'");
136
104
  };
137
105
 
138
- var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
139
- var compactMap = function (items, f) { return compact(items === null || items === void 0 ? void 0 : items.map(f)); };
140
- var isNil = function (value) {
141
- return value === null || value === undefined;
106
+ /******************************************************************************
107
+ Copyright (c) Microsoft Corporation.
108
+
109
+ Permission to use, copy, modify, and/or distribute this software for any
110
+ purpose with or without fee is hereby granted.
111
+
112
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
113
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
114
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
115
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
116
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
117
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
118
+ PERFORMANCE OF THIS SOFTWARE.
119
+ ***************************************************************************** */
120
+ /* global Reflect, Promise, SuppressedError, Symbol */
121
+
122
+
123
+ var __assign = function() {
124
+ __assign = Object.assign || function __assign(t) {
125
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
126
+ s = arguments[i];
127
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
128
+ }
129
+ return t;
130
+ };
131
+ return __assign.apply(this, arguments);
132
+ };
133
+
134
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
135
+ var e = new Error(message);
136
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
142
137
  };
143
138
 
144
- function mapVariablesToInputs(variables) {
145
- return new Map(compactMap(__spreadArray([], __read(variables.values()), false), function (_a) {
146
- var name = _a.name, dataType = _a.dataType, value = _a.value;
147
- return !isNil(value) ? [name, { dataType: dataType, value: value }] : null;
148
- }));
149
- }
150
-
151
139
  var ECalculatorFilterMethods;
152
140
  (function (ECalculatorFilterMethods) {
153
141
  ECalculatorFilterMethods["EQUAL_TO"] = "EQUAL_TO";
@@ -192,6 +180,17 @@ var EFormulaFilterFieldKeys;
192
180
  EFormulaFilterFieldKeys["lastTimeUnit"] = "lastTimeUnit";
193
181
  EFormulaFilterFieldKeys["durationUnit"] = "durationUnit";
194
182
  })(EFormulaFilterFieldKeys || (EFormulaFilterFieldKeys = {}));
183
+ var isFormulaFilterValue = function (value) {
184
+ return "filteringMethod" in value;
185
+ };
186
+
187
+ var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
188
+ var compactMap = function (items, f) {
189
+ return compact(items === null || items === void 0 ? void 0 : items.map(f));
190
+ };
191
+ var isNil = function (value) {
192
+ return value === null || value === undefined;
193
+ };
195
194
 
196
195
  var EFormatTypes;
197
196
  (function (EFormatTypes) {
@@ -230,7 +229,7 @@ var EFormattingPresets;
230
229
  (function (EFormattingPresets) {
231
230
  //Общая группа шаблонов
232
231
  EFormattingPresets["AUTO"] = "AUTO";
233
- EFormattingPresets["TUNE"] = "TUNE";
232
+ EFormattingPresets["CUSTOM"] = "CUSTOM";
234
233
  //Группа шаблонов для формата DATE
235
234
  EFormattingPresets["DD/M/YYYY"] = "DD/M/YYYY";
236
235
  EFormattingPresets["DD-MM-YYYY"] = "DD-MM-YYYY";
@@ -446,10 +445,10 @@ var mapFormulaFilterToCalculatorInput = function (filterValue) {
446
445
  if (!filterValue) {
447
446
  return null;
448
447
  }
449
- if (typeof filterValue === "string") {
448
+ if (!isFormulaFilterValue(filterValue)) {
450
449
  return {
451
450
  dataType: ESimpleDataType.OTHER,
452
- formula: filterValue,
451
+ formula: filterValue.formula,
453
452
  values: ["1"],
454
453
  filteringMethod: formulaFilterMethods.EQUAL_TO,
455
454
  };
@@ -474,25 +473,28 @@ var EWidgetFilterMode;
474
473
  EWidgetFilterMode["MULTI"] = "MULTI";
475
474
  EWidgetFilterMode["DISABLED"] = "DISABLED";
476
475
  })(EWidgetFilterMode || (EWidgetFilterMode = {}));
477
- var EColorMode;
478
- (function (EColorMode) {
479
- EColorMode["FORMULA"] = "FORMULA";
480
- EColorMode["BASE"] = "BASE";
481
- EColorMode["GRADIENT"] = "GRADIENT";
482
- EColorMode["AUTO"] = "AUTO";
483
- })(EColorMode || (EColorMode = {}));
476
+ var EMarkdownDisplayMode;
477
+ (function (EMarkdownDisplayMode) {
478
+ EMarkdownDisplayMode["NONE"] = "NONE";
479
+ EMarkdownDisplayMode["INDICATOR"] = "INDICATOR";
480
+ })(EMarkdownDisplayMode || (EMarkdownDisplayMode = {}));
484
481
  var EDisplayConditionMode;
485
482
  (function (EDisplayConditionMode) {
486
483
  EDisplayConditionMode["DISABLED"] = "DISABLED";
487
484
  EDisplayConditionMode["FORMULA"] = "FORMULA";
488
485
  EDisplayConditionMode["VARIABLE"] = "VARIABLE";
489
486
  })(EDisplayConditionMode || (EDisplayConditionMode = {}));
487
+ var EFontWeight;
488
+ (function (EFontWeight) {
489
+ EFontWeight["NORMAL"] = "NORMAL";
490
+ EFontWeight["BOLD"] = "BOLD";
491
+ })(EFontWeight || (EFontWeight = {}));
490
492
 
491
493
  function checkDisplayCondition(displayCondition, variables) {
492
494
  var _a;
493
495
  if ((displayCondition === null || displayCondition === void 0 ? void 0 : displayCondition.mode) === EDisplayConditionMode.VARIABLE) {
494
- var variableGuid = displayCondition.variableGuid, variableValue = displayCondition.variableValue;
495
- var currentVariableValue = variableGuid && ((_a = variables.get(variableGuid)) === null || _a === void 0 ? void 0 : _a.value);
496
+ var variableName = displayCondition.variableName, variableValue = displayCondition.variableValue;
497
+ var currentVariableValue = variableName && ((_a = variables.get(variableName)) === null || _a === void 0 ? void 0 : _a.value);
496
498
  var isCurrentVariableMatch = Array.isArray(currentVariableValue)
497
499
  ? !!variableValue && (currentVariableValue === null || currentVariableValue === void 0 ? void 0 : currentVariableValue.includes(variableValue))
498
500
  : currentVariableValue === variableValue;
@@ -508,17 +510,14 @@ function getDisplayConditionFormula(displayCondition) {
508
510
  }
509
511
  }
510
512
  var replaceDisplayCondition = function (dimension, displayCondition) {
511
- return isNil(displayCondition)
512
- ? dimension
513
- : __assign(__assign({}, dimension), { displayCondition: displayCondition });
513
+ return isNil(displayCondition) ? dimension : __assign(__assign({}, dimension), { displayCondition: displayCondition });
514
514
  };
515
515
 
516
516
  var escapeSpecialCharacters = function (formula) {
517
517
  return formula
518
518
  .replaceAll("\\", "\\\\")
519
519
  .replaceAll('"', '\\"')
520
- .replaceAll("`", "\\`")
521
- .replaceAll("-", "\\-");
520
+ .replaceAll("`", "\\`");
522
521
  };
523
522
 
524
523
  function generateColumnFormula(tableName, columnName) {
@@ -536,10 +535,7 @@ var EWidgetIndicatorType;
536
535
  EWidgetIndicatorType["EVENT_INDICATOR"] = "EVENT_INDICATOR";
537
536
  EWidgetIndicatorType["TRANSITION_INDICATOR"] = "TRANSITION_INDICATOR";
538
537
  EWidgetIndicatorType["DIMENSION"] = "DIMENSION";
539
- EWidgetIndicatorType["DIMENSION_HIERARCHY"] = "DIMENSION_HIERARCHY";
540
- EWidgetIndicatorType["VARIABLE"] = "VARIABLE";
541
538
  EWidgetIndicatorType["SORTING"] = "SORTING";
542
- EWidgetIndicatorType["CUSTOM"] = "CUSTOM";
543
539
  })(EWidgetIndicatorType || (EWidgetIndicatorType = {}));
544
540
  var EDbType;
545
541
  (function (EDbType) {
@@ -559,18 +555,8 @@ var ESortingValueModes;
559
555
  (function (ESortingValueModes) {
560
556
  /** Сортировка по формуле */
561
557
  ESortingValueModes["FORMULA"] = "FORMULA";
562
- /** Пункт "Количество" */
563
- ESortingValueModes["QUANTITY"] = "QUANTITY";
564
- /** @deprecated Для сортировки по иерархии используется режим DIMENSION_IN_WIDGET */
565
- ESortingValueModes["HIERARCHY"] = "HIERARCHY";
566
- /** Сортировка по мере виджета */
567
- ESortingValueModes["MEASURE_IN_WIDGET"] = "MEASURE_IN_WIDGET";
568
- /** Сортировка по разрезу(в т.ч. по иерархии) виджета */
569
- ESortingValueModes["DIMENSION_IN_WIDGET"] = "DIMENSION_IN_WIDGET";
570
- /** Сортировка по мере отчета */
571
- ESortingValueModes["IN_DASHBOARD"] = "IN_DASHBOARD";
572
- /** Сортировка по мере пространства */
573
- ESortingValueModes["IN_WORKSPACE"] = "IN_WORKSPACE";
558
+ /** Сортировка по показателю(разрезу или мере) виджета */
559
+ ESortingValueModes["IN_WIDGET"] = "IN_WIDGET";
574
560
  })(ESortingValueModes || (ESortingValueModes = {}));
575
561
  /** Тип показателя */
576
562
  var EIndicatorType;
@@ -592,8 +578,8 @@ var EIndicatorType;
592
578
  /** Пользовательская сортировка */
593
579
  EIndicatorType["USER_SORTING"] = "USER_SORTING";
594
580
  })(EIndicatorType || (EIndicatorType = {}));
595
- function isHierarchy(indicator) {
596
- return indicator.type === EWidgetIndicatorType.DIMENSION_HIERARCHY;
581
+ function isDimensionsHierarchy(indicator) {
582
+ return "hierarchyDimensions" in indicator;
597
583
  }
598
584
 
599
585
  var _a$3;
@@ -689,11 +675,11 @@ function getMeasureFormula(_a) {
689
675
  var _a$1;
690
676
  var EEventMeasureTemplateNames;
691
677
  (function (EEventMeasureTemplateNames) {
692
- EEventMeasureTemplateNames["count"] = "count";
678
+ EEventMeasureTemplateNames["eventsCount"] = "eventsCount";
693
679
  EEventMeasureTemplateNames["reworksCount"] = "reworksCount";
694
680
  })(EEventMeasureTemplateNames || (EEventMeasureTemplateNames = {}));
695
681
  var eventMeasureTemplateFormulas = (_a$1 = {},
696
- _a$1[EEventMeasureTemplateNames.count] = "count()",
682
+ _a$1[EEventMeasureTemplateNames.eventsCount] = "count()",
697
683
  _a$1[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
698
684
  _a$1);
699
685
  function getEventMeasureFormula(_a, process) {
@@ -714,11 +700,11 @@ function getEventMeasureFormula(_a, process) {
714
700
  var _a;
715
701
  var ETransitionMeasureTemplateNames;
716
702
  (function (ETransitionMeasureTemplateNames) {
717
- ETransitionMeasureTemplateNames["count"] = "count";
703
+ ETransitionMeasureTemplateNames["transitionsCount"] = "transitionsCount";
718
704
  ETransitionMeasureTemplateNames["medianTime"] = "medianTime";
719
705
  })(ETransitionMeasureTemplateNames || (ETransitionMeasureTemplateNames = {}));
720
706
  var transitionMeasureTemplateFormulas = (_a = {},
721
- _a[ETransitionMeasureTemplateNames.count] = "count()",
707
+ _a[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
722
708
  _a[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
723
709
  _a);
724
710
  function getTransitionMeasureFormula(_a, process) {
@@ -736,6 +722,32 @@ function getTransitionMeasureFormula(_a, process) {
736
722
  return "";
737
723
  }
738
724
 
725
+ /**
726
+ * Регулярное выражение для поиска имени ссылки внутри формулы.
727
+ * Учитывает, что имя внутри формулы содержит экраны.
728
+ *
729
+ * Принцип работы:
730
+ * Пробовать следующие вхождения:
731
+ * - \\\\ - экранированный символ обратного слэша.
732
+ * - Иначе \\" - экранированный символ кавычки.
733
+ * - Иначе [^"] - любой символ кроме кавычки.
734
+ * Если встречается любой другой символ, то это закрывающая кавычка имени переменной.
735
+ */
736
+ var linkNameRegExp = "(?:\\\\\\\\|\\\\\"|[^\"])+";
737
+ var dashboardLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"(?!\\.\"").concat(linkNameRegExp, "\")"), "g");
738
+ var workspaceLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"\\.\"(").concat(linkNameRegExp, ")\""), "g");
739
+ var parseIndicatorLink = function (formula) {
740
+ var dashboardMatch = formula.match(dashboardLinkRegExp.source);
741
+ if (dashboardMatch) {
742
+ return { scopeName: null, indicatorName: dashboardMatch[1] };
743
+ }
744
+ var workspaceMatch = formula.match(workspaceLinkRegExp.source);
745
+ if (workspaceMatch) {
746
+ return { scopeName: workspaceMatch[1], indicatorName: workspaceMatch[2] };
747
+ }
748
+ return null;
749
+ };
750
+
739
751
  function mapMeasureToInput(measure, variables, addFormulas) {
740
752
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
741
753
  var mainFormula = getMeasureFormula(measure);
@@ -755,9 +767,7 @@ function mapMeasureToInput(measure, variables, addFormulas) {
755
767
  }
756
768
  /** Конвертировать меры виджета во входы для вычислителя */
757
769
  function mapMeasuresToInputs(measures, variables, addFormulas) {
758
- return compactMap(measures, function (measure) {
759
- return mapMeasureToInput(measure, variables, addFormulas);
760
- });
770
+ return compactMap(measures, function (measure) { return mapMeasureToInput(measure, variables, addFormulas); });
761
771
  }
762
772
 
763
773
  function mapDimensionToInput(dimension, variables) {
@@ -778,9 +788,7 @@ function mapDimensionToInput(dimension, variables) {
778
788
  }
779
789
  /** Конвертировать разрезы виджета во входы для вычислителя */
780
790
  function mapDimensionsToInputs(dimensions, variables) {
781
- return compactMap(dimensions, function (dimension) {
782
- return mapDimensionToInput(dimension, variables);
783
- });
791
+ return compactMap(dimensions, function (dimension) { return mapDimensionToInput(dimension, variables); });
784
792
  }
785
793
 
786
794
  function mapTransitionMeasureToInput(indicator, process, variables, addFormulas) {
@@ -831,36 +839,13 @@ function mapEventMeasuresToInputs(indicators, process, variables, addFormulas) {
831
839
  });
832
840
  }
833
841
 
834
- /**
835
- * Преобразовать объекты сортировок из settings виджета в sortOrders вычислителя
836
- * @param sortingIndicators объекты сортировок из settings виджета
837
- * @param dimensionsInOriginalOrder разрезы виджета (конкретный разрез будет браться по индексу)
838
- * @param measuresInOriginalOrder меры виджета (конкретная мера будет браться по индексу)
839
- * @returns
840
- */
841
- function mapSortingToInputs(sortingIndicators, dimensionsInOriginalOrder, measuresInOriginalOrder) {
842
- if (sortingIndicators === void 0) { sortingIndicators = []; }
843
- if (dimensionsInOriginalOrder === void 0) { dimensionsInOriginalOrder = []; }
844
- if (measuresInOriginalOrder === void 0) { measuresInOriginalOrder = []; }
845
- return compactMap(sortingIndicators, function (_a) {
846
- var value = _a.value, direction = _a.direction;
847
- if (value.mode === ESortingValueModes.FORMULA ||
848
- value.mode === ESortingValueModes.QUANTITY ||
849
- value.mode === ESortingValueModes.IN_DASHBOARD ||
850
- value.mode === ESortingValueModes.IN_WORKSPACE) {
851
- return value.formula ? { formula: value.formula, direction: direction } : undefined;
852
- }
853
- if (value.mode === ESortingValueModes.DIMENSION_IN_WIDGET ||
854
- value.mode === ESortingValueModes.HIERARCHY) {
855
- var dimension = dimensionsInOriginalOrder[value.index];
856
- return (dimension && { formula: getDimensionFormula(dimension), direction: direction });
857
- }
858
- if (value.mode === ESortingValueModes.MEASURE_IN_WIDGET) {
859
- var measure = measuresInOriginalOrder[value.index];
860
- return measure && { formula: getMeasureFormula(measure), direction: direction };
861
- }
862
- });
863
- }
842
+ var ESortDirection;
843
+ (function (ESortDirection) {
844
+ ESortDirection["descend"] = "DESC";
845
+ ESortDirection["ascend"] = "ASC";
846
+ ESortDirection["ASC"] = "ascend";
847
+ ESortDirection["DESC"] = "descend";
848
+ })(ESortDirection || (ESortDirection = {}));
864
849
 
865
850
  /**
866
851
  * Выбрать активный разрез иерархии на основе активных фильтров.
@@ -869,9 +854,9 @@ function mapSortingToInputs(sortingIndicators, dimensionsInOriginalOrder, measur
869
854
  * Если к разрезу иерархии применяется INCLUDE-фильтр с несколькими значениями - выбираем данный разрез
870
855
  */
871
856
  function selectDimensionFromHierarchy(_a, filters) {
872
- var dimensions = _a.dimensions;
857
+ var hierarchyDimensions = _a.hierarchyDimensions;
873
858
  var _loop_1 = function (i) {
874
- var dimension = dimensions[i];
859
+ var dimension = hierarchyDimensions[i];
875
860
  // todo: widgets - возможно, стоит использовать Map фильтров для быстрого поиска
876
861
  var matchedFilter = filters.find(function (_a) {
877
862
  var formula = _a.formula, filteringMethod = _a.filteringMethod;
@@ -881,25 +866,123 @@ function selectDimensionFromHierarchy(_a, filters) {
881
866
  if (!matchedFilter) {
882
867
  return "continue";
883
868
  }
884
- var selectionIndex = matchedFilter.values.length > 1
885
- ? i
886
- : Math.min(i + 1, dimensions.length - 1);
887
- return { value: dimensions[selectionIndex] };
869
+ var selectionIndex = matchedFilter.values.length > 1 ? i : Math.min(i + 1, hierarchyDimensions.length - 1);
870
+ return { value: hierarchyDimensions[selectionIndex] };
888
871
  };
889
- for (var i = dimensions.length - 1; i >= 0; i--) {
872
+ for (var i = hierarchyDimensions.length - 1; i >= 0; i--) {
890
873
  var state_1 = _loop_1(i);
891
874
  if (typeof state_1 === "object")
892
875
  return state_1.value;
893
876
  }
894
- return dimensions[0];
877
+ return hierarchyDimensions[0];
878
+ }
879
+
880
+ var getDefaultSortOrder = function (dimensions, measures) {
881
+ /** Если есть условие отображения, то не делаем авто-сортировку */
882
+ if (dimensions.some(function (dimension) {
883
+ return dimension.displayCondition &&
884
+ dimension.displayCondition.mode !== EDisplayConditionMode.DISABLED;
885
+ })) {
886
+ return [];
887
+ }
888
+ /** Если есть временной разрез, то авто-сортировка по первому такому разрезу (по возрастанию) */
889
+ var timeDimension = dimensions.find(function (dimension) {
890
+ return dimension.format &&
891
+ [
892
+ EFormatTypes.DATE,
893
+ EFormatTypes.MONTH,
894
+ EFormatTypes.DATETIME,
895
+ EFormatTypes.DAY_OF_WEEK,
896
+ EFormatTypes.HOUR,
897
+ EFormatTypes.MONTH_YEAR,
898
+ EFormatTypes.YEAR,
899
+ EFormatTypes.QUARTER,
900
+ EFormatTypes.QUARTER_YEAR,
901
+ EFormatTypes.DAY_OF_MONTH,
902
+ EFormatTypes.WEEK,
903
+ ].includes(dimension.format);
904
+ });
905
+ if (timeDimension) {
906
+ return [{ formula: getDimensionFormula(timeDimension), direction: ESortDirection.ascend }];
907
+ }
908
+ if (measures.length > 0) {
909
+ var firstMeasure = measures[0];
910
+ if (firstMeasure) {
911
+ return [
912
+ {
913
+ direction: ESortDirection.descend,
914
+ formula: getMeasureFormula(firstMeasure),
915
+ },
916
+ ];
917
+ }
918
+ }
919
+ return [];
920
+ };
921
+ function mapSortingToInputs(_a) {
922
+ var _b;
923
+ var settings = _a.settings, variables = _a.variables, filters = _a.filters, getIndicatorType = _a.getIndicatorType, _c = _a.withDefaultSortOrder, withDefaultSortOrder = _c === void 0 ? true : _c, _d = _a.sortableIndicatorsKeys, sortableIndicatorsKeys = _d === void 0 ? [] : _d;
924
+ var sortOrder = compactMap((_b = settings["sorting"]) !== null && _b !== void 0 ? _b : [], function (_a) {
925
+ var _b;
926
+ var direction = _a.direction, value = _a.value;
927
+ if (value.mode === ESortingValueModes.FORMULA) {
928
+ return value.formula ? { formula: value.formula, direction: direction } : undefined;
929
+ }
930
+ var indicatorsGroup = settings[value.group];
931
+ var indicator = indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup[value.index];
932
+ if (!indicator) {
933
+ return;
934
+ }
935
+ if (getIndicatorType(value.group, indicator) === EWidgetIndicatorType.DIMENSION) {
936
+ var activeDimensions = isDimensionsHierarchy(indicator)
937
+ ? selectDimensionFromHierarchy(indicator, filters)
938
+ : indicator;
939
+ var formula = activeDimensions && getDimensionFormula(activeDimensions);
940
+ if (!formula || !checkDisplayCondition(indicator.displayCondition, variables)) {
941
+ return;
942
+ }
943
+ return {
944
+ formula: formula,
945
+ direction: direction,
946
+ displayCondition: ((_b = indicator.displayCondition) === null || _b === void 0 ? void 0 : _b.mode) === EDisplayConditionMode.FORMULA
947
+ ? indicator.displayCondition.formula
948
+ : undefined,
949
+ };
950
+ }
951
+ return {
952
+ formula: getMeasureFormula(indicator),
953
+ direction: direction,
954
+ };
955
+ });
956
+ if (sortOrder.length > 0) {
957
+ return sortOrder;
958
+ }
959
+ if (sortableIndicatorsKeys.length === 0 || withDefaultSortOrder === false) {
960
+ return [];
961
+ }
962
+ var dimensions = [];
963
+ var measures = [];
964
+ sortableIndicatorsKeys.forEach(function (key) {
965
+ var indicatorsGroup = settings[key];
966
+ indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup.forEach(function (indicator) {
967
+ if (getIndicatorType(key, indicator) === EWidgetIndicatorType.DIMENSION) {
968
+ var activeDimensions = isDimensionsHierarchy(indicator)
969
+ ? selectDimensionFromHierarchy(indicator, filters)
970
+ : indicator;
971
+ activeDimensions && dimensions.push(activeDimensions);
972
+ }
973
+ else {
974
+ measures.push(indicator);
975
+ }
976
+ });
977
+ });
978
+ return getDefaultSortOrder(dimensions, measures);
895
979
  }
896
980
 
897
981
  var replaceHierarchiesWithDimensions = function (dimensions, filters) {
898
982
  return compactMap(dimensions, function (indicator) {
899
- if (isHierarchy(indicator)) {
983
+ if (isDimensionsHierarchy(indicator)) {
900
984
  var selectedDimension = selectDimensionFromHierarchy(indicator, filters);
901
- return (selectedDimension &&
902
- replaceDisplayCondition(selectedDimension, indicator.displayCondition));
985
+ return (selectedDimension && replaceDisplayCondition(selectedDimension, indicator.displayCondition));
903
986
  }
904
987
  return indicator;
905
988
  });
@@ -916,11 +999,19 @@ function bindContentWithIndicator(outputs, indicator) {
916
999
  * Массив объектов, каждый из которых содержит показатель и его контент
917
1000
  */
918
1001
  function bindContentsWithIndicators(outputs, indicators) {
919
- return compactMap(indicators, function (indicator) {
920
- return bindContentWithIndicator(outputs, indicator);
921
- });
1002
+ return compactMap(indicators, function (indicator) { return bindContentWithIndicator(outputs, indicator); });
922
1003
  }
923
1004
 
1005
+ /** Удалить из строки символы экранирования */
1006
+ function unescapeSpecialCharacters(str) {
1007
+ return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
1008
+ }
1009
+
1010
+ var EUnitMode;
1011
+ (function (EUnitMode) {
1012
+ EUnitMode["PIXEL"] = "PIXEL";
1013
+ EUnitMode["PERCENT"] = "PERCENT";
1014
+ })(EUnitMode || (EUnitMode = {}));
924
1015
  var EControlType;
925
1016
  (function (EControlType) {
926
1017
  EControlType["inputNumber"] = "inputNumber";
@@ -934,22 +1025,28 @@ var EControlType;
934
1025
  EControlType["typedFormula"] = "typedFormula";
935
1026
  EControlType["inputRange"] = "inputRange";
936
1027
  EControlType["colorPicker"] = "colorPicker";
937
- /** @deprecated - удалится в ближайшее время */
938
- EControlType["filterMode"] = "filterMode";
939
1028
  EControlType["displayCondition"] = "displayCondition";
940
1029
  EControlType["eventsColor"] = "eventsColor";
941
1030
  EControlType["inputMarkdown"] = "inputMarkdown";
942
1031
  EControlType["filter"] = "filter";
943
1032
  EControlType["actionOnClick"] = "actionOnClick";
1033
+ EControlType["eventsPicker"] = "eventsPicker";
1034
+ EControlType["size"] = "size";
944
1035
  })(EControlType || (EControlType = {}));
945
1036
 
946
- var ESortDirection;
947
- (function (ESortDirection) {
948
- ESortDirection["descend"] = "DESC";
949
- ESortDirection["ascend"] = "ASC";
950
- ESortDirection["ASC"] = "ascend";
951
- ESortDirection["DESC"] = "descend";
952
- })(ESortDirection || (ESortDirection = {}));
1037
+ var ESelectOptionTypes;
1038
+ (function (ESelectOptionTypes) {
1039
+ ESelectOptionTypes["DIVIDER"] = "DIVIDER";
1040
+ ESelectOptionTypes["SYSTEM"] = "SYSTEM";
1041
+ ESelectOptionTypes["GROUP"] = "GROUP";
1042
+ ESelectOptionTypes["BRANCH"] = "BRANCH";
1043
+ ESelectOptionTypes["LEAF"] = "LEAF";
1044
+ })(ESelectOptionTypes || (ESelectOptionTypes = {}));
1045
+ var ECustomSelectTemplates;
1046
+ (function (ECustomSelectTemplates) {
1047
+ ECustomSelectTemplates["FORMULA"] = "FORMULA";
1048
+ ECustomSelectTemplates["DIMENSION_GROUPS"] = "DIMENSION_GROUPS";
1049
+ })(ECustomSelectTemplates || (ECustomSelectTemplates = {}));
953
1050
 
954
1051
  var findFilterByFormula = function (filters, formula) {
955
1052
  var _a;
@@ -1045,4 +1142,45 @@ var getLocalizedText = function (language, locObj, props) {
1045
1142
  return localization.getLocalized(locObj, props);
1046
1143
  };
1047
1144
 
1048
- export { ECalculatorFilterMethods, EColorMode, EControlType, EDbType, EDimensionTemplateNames, EDisplayConditionMode, EDurationUnit, EEventMeasureTemplateNames, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMeasureTemplateNames, EProcessFilterNames, ESimpleDataType, ESortDirection, ESortingValueModes, ETransitionMeasureTemplateNames, EWidgetActionInputMode, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, dimensionTemplateFormulas, escapeSpecialCharacters, eventMeasureTemplateFormulas, fillTemplateString, formulaFilterMethods, generateColumnFormula, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getTransitionMeasureFormula, isActionValid, isHierarchy, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, mapVariablesToInputs, measureTemplateFormulas, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, transitionMeasureTemplateFormulas, updateDefaultModeSelection, updateMultiModeSelection, updateSingleModeSelection };
1145
+ var EColorMode;
1146
+ (function (EColorMode) {
1147
+ /** Окрашивание отключено */
1148
+ EColorMode["DISABLED"] = "DISABLED";
1149
+ /** Цвет каждого значения вычисляется по формуле */
1150
+ EColorMode["FORMULA"] = "FORMULA";
1151
+ /** Один цвет для всех значений */
1152
+ EColorMode["BASE"] = "BASE";
1153
+ /** Окрашивание каждого значения по градиенту относительно минимального и максимального значений */
1154
+ EColorMode["GRADIENT"] = "GRADIENT";
1155
+ /** Использовать автоматический цвет: по умолчанию определяется порядковым номером показателя */
1156
+ EColorMode["AUTO"] = "AUTO";
1157
+ /** Использовать цвет из правила отображения (в правиле отображения рекурсивно определен цвет) */
1158
+ EColorMode["RULE"] = "RULE";
1159
+ /** Задать цвет конкретным значениям разреза */
1160
+ EColorMode["VALUES"] = "VALUES";
1161
+ /** Задать цвет конкретным значениям общего разреза. Режим используется только для настроек правила отображения */
1162
+ EColorMode["BY_DIMENSION"] = "BY_DIMENSION";
1163
+ })(EColorMode || (EColorMode = {}));
1164
+ var getRuleColor = function (ruleFormula, globalContext) {
1165
+ var _a, _b;
1166
+ var link = parseIndicatorLink(ruleFormula);
1167
+ if (!link) {
1168
+ return;
1169
+ }
1170
+ var _c = link.scopeName, scopeName = _c === void 0 ? null : _c, ruleName = link.indicatorName;
1171
+ var rulesByScope = isNil(scopeName)
1172
+ ? globalContext.reportDisplayRules
1173
+ : (_a = globalContext.workspaceDisplayRules) === null || _a === void 0 ? void 0 : _a.get(scopeName);
1174
+ return (_b = rulesByScope === null || rulesByScope === void 0 ? void 0 : rulesByScope.get(ruleName)) === null || _b === void 0 ? void 0 : _b.color;
1175
+ };
1176
+ var isValidColor = function (color, globalContext) {
1177
+ if (color.mode === EColorMode.RULE) {
1178
+ return !color.formula || Boolean(getRuleColor(color.formula, globalContext));
1179
+ }
1180
+ if (color.mode === EColorMode.VALUES) {
1181
+ return color.items.every(function (item) { return isValidColor(item.color, globalContext); });
1182
+ }
1183
+ return true;
1184
+ };
1185
+
1186
+ export { EActionTypes, ECalculatorFilterMethods, EColorMode, EControlType, ECustomSelectTemplates, EDbType, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationUnit, EEventMeasureTemplateNames, EFontWeight, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureTemplateNames, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESortDirection, ESortingValueModes, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, dashboardLinkRegExp, dimensionTemplateFormulas, escapeSpecialCharacters, eventMeasureTemplateFormulas, fillTemplateString, formulaFilterMethods, generateColumnFormula, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getRuleColor, getTransitionMeasureFormula, isDimensionsHierarchy, isExecuteScriptActionValid, isFormulaFilterValue, isValidColor, linkNameRegExp, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureTemplateFormulas, parseIndicatorLink, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateMultiModeSelection, updateSingleModeSelection, workspaceLinkRegExp };