@infomaximum/widget-sdk 4.0.0-beta7 → 4.0.0-next1

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,40 @@ function getTransitionMeasureFormula(_a, process) {
736
722
  return "";
737
723
  }
738
724
 
725
+ /** Удалить из строки символы экранирования */
726
+ function unescapeSpecialCharacters(str) {
727
+ return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
728
+ }
729
+
730
+ /**
731
+ * Регулярное выражение для поиска имени ссылки внутри формулы.
732
+ * Учитывает, что имя внутри формулы содержит экраны.
733
+ *
734
+ * Принцип работы:
735
+ * Пробовать следующие вхождения:
736
+ * - \\\\ - экранированный символ обратного слэша.
737
+ * - Иначе \\" - экранированный символ кавычки.
738
+ * - Иначе [^"] - любой символ кроме кавычки.
739
+ * Если встречается любой другой символ, то это закрывающая кавычка имени переменной.
740
+ */
741
+ var linkNameRegExp = "(?:\\\\\\\\|\\\\\"|[^\"])+";
742
+ var dashboardLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"(?!\\.\"").concat(linkNameRegExp, "\")"), "g");
743
+ var workspaceLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"\\.\"(").concat(linkNameRegExp, ")\""), "g");
744
+ var parseIndicatorLink = function (formula) {
745
+ var dashboardMatch = formula.match(dashboardLinkRegExp.source);
746
+ if (dashboardMatch) {
747
+ return { scopeName: null, indicatorName: dashboardMatch[1] };
748
+ }
749
+ var workspaceMatch = formula.match(workspaceLinkRegExp.source);
750
+ if (workspaceMatch) {
751
+ return {
752
+ scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
753
+ indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
754
+ };
755
+ }
756
+ return null;
757
+ };
758
+
739
759
  function mapMeasureToInput(measure, variables, addFormulas) {
740
760
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
741
761
  var mainFormula = getMeasureFormula(measure);
@@ -755,9 +775,7 @@ function mapMeasureToInput(measure, variables, addFormulas) {
755
775
  }
756
776
  /** Конвертировать меры виджета во входы для вычислителя */
757
777
  function mapMeasuresToInputs(measures, variables, addFormulas) {
758
- return compactMap(measures, function (measure) {
759
- return mapMeasureToInput(measure, variables, addFormulas);
760
- });
778
+ return compactMap(measures, function (measure) { return mapMeasureToInput(measure, variables, addFormulas); });
761
779
  }
762
780
 
763
781
  function mapDimensionToInput(dimension, variables) {
@@ -778,9 +796,7 @@ function mapDimensionToInput(dimension, variables) {
778
796
  }
779
797
  /** Конвертировать разрезы виджета во входы для вычислителя */
780
798
  function mapDimensionsToInputs(dimensions, variables) {
781
- return compactMap(dimensions, function (dimension) {
782
- return mapDimensionToInput(dimension, variables);
783
- });
799
+ return compactMap(dimensions, function (dimension) { return mapDimensionToInput(dimension, variables); });
784
800
  }
785
801
 
786
802
  function mapTransitionMeasureToInput(indicator, process, variables, addFormulas) {
@@ -831,36 +847,13 @@ function mapEventMeasuresToInputs(indicators, process, variables, addFormulas) {
831
847
  });
832
848
  }
833
849
 
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
- }
850
+ var ESortDirection;
851
+ (function (ESortDirection) {
852
+ ESortDirection["descend"] = "DESC";
853
+ ESortDirection["ascend"] = "ASC";
854
+ ESortDirection["ASC"] = "ascend";
855
+ ESortDirection["DESC"] = "descend";
856
+ })(ESortDirection || (ESortDirection = {}));
864
857
 
865
858
  /**
866
859
  * Выбрать активный разрез иерархии на основе активных фильтров.
@@ -869,9 +862,9 @@ function mapSortingToInputs(sortingIndicators, dimensionsInOriginalOrder, measur
869
862
  * Если к разрезу иерархии применяется INCLUDE-фильтр с несколькими значениями - выбираем данный разрез
870
863
  */
871
864
  function selectDimensionFromHierarchy(_a, filters) {
872
- var dimensions = _a.dimensions;
865
+ var hierarchyDimensions = _a.hierarchyDimensions;
873
866
  var _loop_1 = function (i) {
874
- var dimension = dimensions[i];
867
+ var dimension = hierarchyDimensions[i];
875
868
  // todo: widgets - возможно, стоит использовать Map фильтров для быстрого поиска
876
869
  var matchedFilter = filters.find(function (_a) {
877
870
  var formula = _a.formula, filteringMethod = _a.filteringMethod;
@@ -881,25 +874,123 @@ function selectDimensionFromHierarchy(_a, filters) {
881
874
  if (!matchedFilter) {
882
875
  return "continue";
883
876
  }
884
- var selectionIndex = matchedFilter.values.length > 1
885
- ? i
886
- : Math.min(i + 1, dimensions.length - 1);
887
- return { value: dimensions[selectionIndex] };
877
+ var selectionIndex = matchedFilter.values.length > 1 ? i : Math.min(i + 1, hierarchyDimensions.length - 1);
878
+ return { value: hierarchyDimensions[selectionIndex] };
888
879
  };
889
- for (var i = dimensions.length - 1; i >= 0; i--) {
880
+ for (var i = hierarchyDimensions.length - 1; i >= 0; i--) {
890
881
  var state_1 = _loop_1(i);
891
882
  if (typeof state_1 === "object")
892
883
  return state_1.value;
893
884
  }
894
- return dimensions[0];
885
+ return hierarchyDimensions[0];
886
+ }
887
+
888
+ var getDefaultSortOrder = function (dimensions, measures) {
889
+ /** Если есть условие отображения, то не делаем авто-сортировку */
890
+ if (dimensions.some(function (dimension) {
891
+ return dimension.displayCondition &&
892
+ dimension.displayCondition.mode !== EDisplayConditionMode.DISABLED;
893
+ })) {
894
+ return [];
895
+ }
896
+ /** Если есть временной разрез, то авто-сортировка по первому такому разрезу (по возрастанию) */
897
+ var timeDimension = dimensions.find(function (dimension) {
898
+ return dimension.format &&
899
+ [
900
+ EFormatTypes.DATE,
901
+ EFormatTypes.MONTH,
902
+ EFormatTypes.DATETIME,
903
+ EFormatTypes.DAY_OF_WEEK,
904
+ EFormatTypes.HOUR,
905
+ EFormatTypes.MONTH_YEAR,
906
+ EFormatTypes.YEAR,
907
+ EFormatTypes.QUARTER,
908
+ EFormatTypes.QUARTER_YEAR,
909
+ EFormatTypes.DAY_OF_MONTH,
910
+ EFormatTypes.WEEK,
911
+ ].includes(dimension.format);
912
+ });
913
+ if (timeDimension) {
914
+ return [{ formula: getDimensionFormula(timeDimension), direction: ESortDirection.ascend }];
915
+ }
916
+ if (measures.length > 0) {
917
+ var firstMeasure = measures[0];
918
+ if (firstMeasure) {
919
+ return [
920
+ {
921
+ direction: ESortDirection.descend,
922
+ formula: getMeasureFormula(firstMeasure),
923
+ },
924
+ ];
925
+ }
926
+ }
927
+ return [];
928
+ };
929
+ function mapSortingToInputs(_a) {
930
+ var _b;
931
+ 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;
932
+ var sortOrder = compactMap((_b = settings["sorting"]) !== null && _b !== void 0 ? _b : [], function (_a) {
933
+ var _b;
934
+ var direction = _a.direction, value = _a.value;
935
+ if (value.mode === ESortingValueModes.FORMULA) {
936
+ return value.formula ? { formula: value.formula, direction: direction } : undefined;
937
+ }
938
+ var indicatorsGroup = settings[value.group];
939
+ var indicator = indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup[value.index];
940
+ if (!indicator) {
941
+ return;
942
+ }
943
+ if (getIndicatorType(value.group, indicator) === EWidgetIndicatorType.DIMENSION) {
944
+ var activeDimensions = isDimensionsHierarchy(indicator)
945
+ ? selectDimensionFromHierarchy(indicator, filters)
946
+ : indicator;
947
+ var formula = activeDimensions && getDimensionFormula(activeDimensions);
948
+ if (!formula || !checkDisplayCondition(indicator.displayCondition, variables)) {
949
+ return;
950
+ }
951
+ return {
952
+ formula: formula,
953
+ direction: direction,
954
+ displayCondition: ((_b = indicator.displayCondition) === null || _b === void 0 ? void 0 : _b.mode) === EDisplayConditionMode.FORMULA
955
+ ? indicator.displayCondition.formula
956
+ : undefined,
957
+ };
958
+ }
959
+ return {
960
+ formula: getMeasureFormula(indicator),
961
+ direction: direction,
962
+ };
963
+ });
964
+ if (sortOrder.length > 0) {
965
+ return sortOrder;
966
+ }
967
+ if (sortableIndicatorsKeys.length === 0 || withDefaultSortOrder === false) {
968
+ return [];
969
+ }
970
+ var dimensions = [];
971
+ var measures = [];
972
+ sortableIndicatorsKeys.forEach(function (key) {
973
+ var indicatorsGroup = settings[key];
974
+ indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup.forEach(function (indicator) {
975
+ if (getIndicatorType(key, indicator) === EWidgetIndicatorType.DIMENSION) {
976
+ var activeDimensions = isDimensionsHierarchy(indicator)
977
+ ? selectDimensionFromHierarchy(indicator, filters)
978
+ : indicator;
979
+ activeDimensions && dimensions.push(activeDimensions);
980
+ }
981
+ else {
982
+ measures.push(indicator);
983
+ }
984
+ });
985
+ });
986
+ return getDefaultSortOrder(dimensions, measures);
895
987
  }
896
988
 
897
989
  var replaceHierarchiesWithDimensions = function (dimensions, filters) {
898
990
  return compactMap(dimensions, function (indicator) {
899
- if (isHierarchy(indicator)) {
991
+ if (isDimensionsHierarchy(indicator)) {
900
992
  var selectedDimension = selectDimensionFromHierarchy(indicator, filters);
901
- return (selectedDimension &&
902
- replaceDisplayCondition(selectedDimension, indicator.displayCondition));
993
+ return (selectedDimension && replaceDisplayCondition(selectedDimension, indicator.displayCondition));
903
994
  }
904
995
  return indicator;
905
996
  });
@@ -916,11 +1007,14 @@ function bindContentWithIndicator(outputs, indicator) {
916
1007
  * Массив объектов, каждый из которых содержит показатель и его контент
917
1008
  */
918
1009
  function bindContentsWithIndicators(outputs, indicators) {
919
- return compactMap(indicators, function (indicator) {
920
- return bindContentWithIndicator(outputs, indicator);
921
- });
1010
+ return compactMap(indicators, function (indicator) { return bindContentWithIndicator(outputs, indicator); });
922
1011
  }
923
1012
 
1013
+ var EUnitMode;
1014
+ (function (EUnitMode) {
1015
+ EUnitMode["PIXEL"] = "PIXEL";
1016
+ EUnitMode["PERCENT"] = "PERCENT";
1017
+ })(EUnitMode || (EUnitMode = {}));
924
1018
  var EControlType;
925
1019
  (function (EControlType) {
926
1020
  EControlType["inputNumber"] = "inputNumber";
@@ -934,23 +1028,28 @@ var EControlType;
934
1028
  EControlType["typedFormula"] = "typedFormula";
935
1029
  EControlType["inputRange"] = "inputRange";
936
1030
  EControlType["colorPicker"] = "colorPicker";
937
- /** @deprecated - удалится в ближайшее время */
938
- EControlType["filterMode"] = "filterMode";
939
1031
  EControlType["displayCondition"] = "displayCondition";
940
1032
  EControlType["eventsColor"] = "eventsColor";
941
1033
  EControlType["inputMarkdown"] = "inputMarkdown";
942
1034
  EControlType["filter"] = "filter";
943
1035
  EControlType["actionOnClick"] = "actionOnClick";
944
1036
  EControlType["eventsPicker"] = "eventsPicker";
1037
+ EControlType["size"] = "size";
945
1038
  })(EControlType || (EControlType = {}));
946
1039
 
947
- var ESortDirection;
948
- (function (ESortDirection) {
949
- ESortDirection["descend"] = "DESC";
950
- ESortDirection["ascend"] = "ASC";
951
- ESortDirection["ASC"] = "ascend";
952
- ESortDirection["DESC"] = "descend";
953
- })(ESortDirection || (ESortDirection = {}));
1040
+ var ESelectOptionTypes;
1041
+ (function (ESelectOptionTypes) {
1042
+ ESelectOptionTypes["DIVIDER"] = "DIVIDER";
1043
+ ESelectOptionTypes["SYSTEM"] = "SYSTEM";
1044
+ ESelectOptionTypes["GROUP"] = "GROUP";
1045
+ ESelectOptionTypes["BRANCH"] = "BRANCH";
1046
+ ESelectOptionTypes["LEAF"] = "LEAF";
1047
+ })(ESelectOptionTypes || (ESelectOptionTypes = {}));
1048
+ var ECustomSelectTemplates;
1049
+ (function (ECustomSelectTemplates) {
1050
+ ECustomSelectTemplates["FORMULA"] = "FORMULA";
1051
+ ECustomSelectTemplates["DIMENSION_GROUPS"] = "DIMENSION_GROUPS";
1052
+ })(ECustomSelectTemplates || (ECustomSelectTemplates = {}));
954
1053
 
955
1054
  var findFilterByFormula = function (filters, formula) {
956
1055
  var _a;
@@ -1046,4 +1145,45 @@ var getLocalizedText = function (language, locObj, props) {
1046
1145
  return localization.getLocalized(locObj, props);
1047
1146
  };
1048
1147
 
1049
- 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 };
1148
+ var EColorMode;
1149
+ (function (EColorMode) {
1150
+ /** Окрашивание отключено */
1151
+ EColorMode["DISABLED"] = "DISABLED";
1152
+ /** Цвет каждого значения вычисляется по формуле */
1153
+ EColorMode["FORMULA"] = "FORMULA";
1154
+ /** Один цвет для всех значений */
1155
+ EColorMode["BASE"] = "BASE";
1156
+ /** Окрашивание каждого значения по градиенту относительно минимального и максимального значений */
1157
+ EColorMode["GRADIENT"] = "GRADIENT";
1158
+ /** Использовать автоматический цвет: по умолчанию определяется порядковым номером показателя */
1159
+ EColorMode["AUTO"] = "AUTO";
1160
+ /** Использовать цвет из правила отображения (в правиле отображения рекурсивно определен цвет) */
1161
+ EColorMode["RULE"] = "RULE";
1162
+ /** Задать цвет конкретным значениям разреза */
1163
+ EColorMode["VALUES"] = "VALUES";
1164
+ /** Задать цвет конкретным значениям общего разреза. Режим используется только для настроек правила отображения */
1165
+ EColorMode["BY_DIMENSION"] = "BY_DIMENSION";
1166
+ })(EColorMode || (EColorMode = {}));
1167
+ var getRuleColor = function (ruleFormula, globalContext) {
1168
+ var _a, _b;
1169
+ var link = parseIndicatorLink(ruleFormula);
1170
+ if (!link) {
1171
+ return;
1172
+ }
1173
+ var _c = link.scopeName, scopeName = _c === void 0 ? null : _c, ruleName = link.indicatorName;
1174
+ var rulesByScope = isNil(scopeName)
1175
+ ? globalContext.reportDisplayRules
1176
+ : (_a = globalContext.workspaceDisplayRules) === null || _a === void 0 ? void 0 : _a.get(scopeName);
1177
+ return (_b = rulesByScope === null || rulesByScope === void 0 ? void 0 : rulesByScope.get(ruleName)) === null || _b === void 0 ? void 0 : _b.color;
1178
+ };
1179
+ var isValidColor = function (color, globalContext) {
1180
+ if (color.mode === EColorMode.RULE) {
1181
+ return !color.formula || Boolean(getRuleColor(color.formula, globalContext));
1182
+ }
1183
+ if (color.mode === EColorMode.VALUES) {
1184
+ return color.items.every(function (item) { return isValidColor(item.color, globalContext); });
1185
+ }
1186
+ return true;
1187
+ };
1188
+
1189
+ 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 };