@infomaximum/widget-sdk 6.0.0-wefi344-1 → 6.0.2

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
@@ -35,12 +35,6 @@ var EViewOpenIn;
35
35
  EViewOpenIn["PLACEHOLDER"] = "PLACEHOLDER";
36
36
  EViewOpenIn["MODAL_WINDOW"] = "MODAL_WINDOW";
37
37
  EViewOpenIn["DRAWER_WINDOW"] = "DRAWER_WINDOW";
38
- // TODO: удалить при выполении BI-14979
39
- /** @deprecated необходимо использовать EViewOpenIn.WINDOW с флагом newWindow - true */
40
- EViewOpenIn["NEW_WINDOW"] = "NEW_WINDOW";
41
- // TODO: удалить при выполении BI-14979
42
- /** @deprecated необходимо использовать EViewOpenIn.WINDOW с флагом newWindow - false */
43
- EViewOpenIn["CURRENT_WINDOW"] = "CURRENT_WINDOW";
44
38
  })(EViewOpenIn || (EViewOpenIn = {}));
45
39
  var EDrawerPlacement;
46
40
  (function (EDrawerPlacement) {
@@ -138,6 +132,39 @@ function __rest(s, e) {
138
132
  return t;
139
133
  }
140
134
 
135
+ function __values(o) {
136
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
137
+ if (m) return m.call(o);
138
+ if (o && typeof o.length === "number") return {
139
+ next: function () {
140
+ if (o && i >= o.length) o = void 0;
141
+ return { value: o && o[i++], done: !o };
142
+ }
143
+ };
144
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
145
+ }
146
+
147
+ function __read(o, n) {
148
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
149
+ if (!m) return o;
150
+ var i = m.call(o), r, ar = [], e;
151
+ try {
152
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
153
+ }
154
+ catch (error) { e = { error: error }; }
155
+ finally {
156
+ try {
157
+ if (r && !r.done && (m = i["return"])) m.call(i);
158
+ }
159
+ finally { if (e) throw e.error; }
160
+ }
161
+ return ar;
162
+ }
163
+
164
+ function __makeTemplateObject(cooked, raw) {
165
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
166
+ return cooked;
167
+ }
141
168
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
142
169
  var e = new Error(message);
143
170
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -185,9 +212,18 @@ var EFormulaFilterFieldKeys;
185
212
  EFormulaFilterFieldKeys["lastTimeUnit"] = "lastTimeUnit";
186
213
  EFormulaFilterFieldKeys["durationUnit"] = "durationUnit";
187
214
  })(EFormulaFilterFieldKeys || (EFormulaFilterFieldKeys = {}));
215
+ var EDimensionProcessFilterTimeUnit;
216
+ (function (EDimensionProcessFilterTimeUnit) {
217
+ EDimensionProcessFilterTimeUnit["YEARS"] = "YEARS";
218
+ EDimensionProcessFilterTimeUnit["MONTHS"] = "MONTHS";
219
+ EDimensionProcessFilterTimeUnit["HOURS"] = "HOURS";
220
+ EDimensionProcessFilterTimeUnit["DAYS"] = "DAYS";
221
+ EDimensionProcessFilterTimeUnit["MINUTES"] = "MINUTES";
222
+ })(EDimensionProcessFilterTimeUnit || (EDimensionProcessFilterTimeUnit = {}));
188
223
  var isFormulaFilterValue = function (value) {
189
224
  return "filteringMethod" in value;
190
225
  };
226
+ var isDimensionProcessFilter = function (filter) { return "value" in filter && "condition" in filter; };
191
227
 
192
228
  var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
193
229
  var compactMap = function (items, f) {
@@ -612,7 +648,7 @@ var formattingConfig = {
612
648
  },
613
649
  };
614
650
 
615
- var _a$4;
651
+ var _a$5;
616
652
  var EDimensionTemplateNames;
617
653
  (function (EDimensionTemplateNames) {
618
654
  EDimensionTemplateNames["dateTime"] = "dateTime";
@@ -628,19 +664,19 @@ var EDimensionTemplateNames;
628
664
  EDimensionTemplateNames["hour"] = "hour";
629
665
  })(EDimensionTemplateNames || (EDimensionTemplateNames = {}));
630
666
  /** Стандартные шаблоны разреза */
631
- var dimensionTemplateFormulas = (_a$4 = {},
632
- _a$4[EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
633
- _a$4[EDimensionTemplateNames.date] = "toDate({columnFormula})",
634
- _a$4[EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
635
- _a$4[EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
636
- _a$4[EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
637
- _a$4[EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
638
- _a$4[EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
639
- _a$4[EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
640
- _a$4[EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
641
- _a$4[EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
642
- _a$4[EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
643
- _a$4);
667
+ var dimensionTemplateFormulas = (_a$5 = {},
668
+ _a$5[EDimensionTemplateNames.dateTime] = "toDateTime({columnFormula})",
669
+ _a$5[EDimensionTemplateNames.date] = "toDate({columnFormula})",
670
+ _a$5[EDimensionTemplateNames.year] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}))",
671
+ _a$5[EDimensionTemplateNames.yearAndQuarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYear({columnFormula}) * 10 + toQuarter({columnFormula}))",
672
+ _a$5[EDimensionTemplateNames.quarter] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toQuarter({columnFormula}))",
673
+ _a$5[EDimensionTemplateNames.yearAndMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toYYYYMM({columnFormula}))",
674
+ _a$5[EDimensionTemplateNames.month] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toMonth({columnFormula}))",
675
+ _a$5[EDimensionTemplateNames.dayOfMonth] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfMonth({columnFormula}))",
676
+ _a$5[EDimensionTemplateNames.week] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toWeek({columnFormula}))",
677
+ _a$5[EDimensionTemplateNames.dayOfWeek] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toDayOfWeek({columnFormula}))",
678
+ _a$5[EDimensionTemplateNames.hour] = "if(defaultValueOfArgumentType({columnFormula}) = {columnFormula}, 0, toHour({columnFormula}))",
679
+ _a$5);
644
680
 
645
681
  var EWidgetIndicatorType;
646
682
  (function (EWidgetIndicatorType) {
@@ -682,6 +718,11 @@ var ESortingValueModes;
682
718
  /** Сортировка по показателю(разрезу или мере) виджета */
683
719
  ESortingValueModes["IN_WIDGET"] = "IN_WIDGET";
684
720
  })(ESortingValueModes || (ESortingValueModes = {}));
721
+ var EFormatOrFormattingMode;
722
+ (function (EFormatOrFormattingMode) {
723
+ EFormatOrFormattingMode["BASE"] = "BASE";
724
+ EFormatOrFormattingMode["TEMPLATE"] = "TEMPLATE";
725
+ })(EFormatOrFormattingMode || (EFormatOrFormattingMode = {}));
685
726
  /** Тип показателя */
686
727
  var EIndicatorType;
687
728
  (function (EIndicatorType) {
@@ -745,14 +786,14 @@ var EEventAppearances;
745
786
  })(EEventAppearances || (EEventAppearances = {}));
746
787
 
747
788
  function createAggregationTemplate$1(functionName, options) {
748
- return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})");
789
+ return "process(".concat(functionName, "(").concat((options === null || options === void 0 ? void 0 : options.distinct) ? "distinct " : "", "{columnFormula}, {eventNameFormula} ={eventName}{filters}), {caseCaseIdFormula})");
749
790
  }
750
791
 
751
- var countReworksTemplate = "process(if(countIf({eventNameFormula} = '{eventName}'{filters}) > 0, countIf({eventNameFormula} = '{eventName}'{filters}) - 1, 0), {caseCaseIdFormula})";
752
- var countExecutionsTemplate = "process(countIf({eventNameFormula} in '{eventName}'{filters}), {caseCaseIdFormula})";
753
- var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
754
- var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})";
755
- var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = '{eventName}'{filters})[1], {caseCaseIdFormula})";
792
+ var countReworksTemplate = "process(if(countIf({eventNameFormula} = {eventName}{filters}) > 0, countIf({eventNameFormula} = {eventName}{filters}) - 1, 0), {caseCaseIdFormula})";
793
+ var countExecutionsTemplate = "process(countIf({eventNameFormula} in {eventName}{filters}), {caseCaseIdFormula})";
794
+ var lastValueTemplate = "process(argMaxIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
795
+ var firstValueTemplate = "process(argMinIf({columnFormula}, {eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})";
796
+ var topTemplate = "process(topKIf(1)({columnFormula}, {eventNameFormula} = {eventName}{filters})[1], {caseCaseIdFormula})";
756
797
  var avgTemplate = createAggregationTemplate$1("avgIf");
757
798
  var medianTemplate = createAggregationTemplate$1("medianIf");
758
799
  var countTemplate = createAggregationTemplate$1("countIf");
@@ -761,24 +802,118 @@ var minTemplate = createAggregationTemplate$1("minIf");
761
802
  var maxTemplate = createAggregationTemplate$1("maxIf");
762
803
  var sumTemplate = createAggregationTemplate$1("sumIf");
763
804
 
805
+ function hasPossibleSingleLineComment(str) {
806
+ return str.indexOf("--") >= 0;
807
+ }
808
+ function sanitizeSingleLineComment(formula, wrapInBrackets) {
809
+ if (!hasPossibleSingleLineComment(formula)) {
810
+ return formula;
811
+ }
812
+ var lines = formula.split("\n");
813
+ var lastLine = lines[lines.length - 1];
814
+ // Кейс, когда хотим избежать повторного добавления переноса строки:
815
+ // уже есть переносы и после последнего переноса нет комментария
816
+ if (lines.length > 1 && lastLine && !hasPossibleSingleLineComment(lastLine)) {
817
+ return formula;
818
+ }
819
+ return wrapInBrackets ? "(".concat(formula, "\n)") : "".concat(formula, "\n");
820
+ }
821
+
822
+ /** @deprecated - следует использовать fillTemplateSql */
764
823
  function fillTemplateString(templateString, params) {
765
- return templateString.replace(/\{(.*?)\}/g, function (_, key) { var _a; return (_a = params[key]) !== null && _a !== void 0 ? _a : ""; });
824
+ return templateString.replace(/\{(.*?)\}/g, function (_, key) {
825
+ var _a;
826
+ return (_a = params[key]) !== null && _a !== void 0 ? _a : "";
827
+ });
766
828
  }
829
+ /** Функция для безопасного заполнения SQL шаблонов с защитой от однострочных SQL комментариев в подставляемых значениях. */
830
+ function fillTemplateSql(templateString, params) {
831
+ var e_1, _a;
832
+ var newParams = {};
833
+ if (templateString.indexOf("'{") >= 0) {
834
+ throw new Error("\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0448\u0430\u0431\u043B\u043E\u043D: \u043F\u043B\u0435\u0439\u0441\u0445\u043E\u043B\u0434\u0435\u0440\u044B \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u044B \u0437\u0430\u043A\u043B\u044E\u0447\u0430\u0442\u044C\u0441\u044F \u0432 \u043E\u0434\u0438\u043D\u0430\u0440\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438.\n \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 {placeholder} \u0432\u043C\u0435\u0441\u0442\u043E '{placeholder}'.\n \u041A\u0430\u0432\u044B\u0447\u043A\u0438 \u0434\u043E\u043B\u0436\u043D\u044B \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0445 \u043F\u043E\u043B\u0435\u0439 \u043F\u0440\u0438 \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432.");
835
+ }
836
+ try {
837
+ for (var _b = __values(Object.entries(params)), _c = _b.next(); !_c.done; _c = _b.next()) {
838
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
839
+ if (String(value).indexOf("--") >= 0) {
840
+ newParams[key] = "".concat(value, "\n");
841
+ continue;
842
+ }
843
+ newParams[key] = sanitizeSingleLineComment(String(value));
844
+ }
845
+ }
846
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
847
+ finally {
848
+ try {
849
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
850
+ }
851
+ finally { if (e_1) throw e_1.error; }
852
+ }
853
+ return fillTemplateString(templateString, newParams);
854
+ }
855
+
856
+ /** Создать функцию экранирования переданных `specialChars` внутри `str` */
857
+ var createEscaper = function (specialChars) { return function (str) {
858
+ return specialChars.reduce(function (escaped, char) { return escaped.replaceAll(char, "\\".concat(char)); }, str);
859
+ }; };
767
860
 
768
- /** Функция для экранирования специальных символов
769
- * при подстановке названий таблиц, колонок, переменных или показателей в SQL-формулы.
770
- * Пример: Если название переменной содержит кавычки или обратные слеши,
771
- * например: `te"s\t`, то перед подстановкой в SQL-формулу его следует экранировать.
772
- * Результат должен выглядеть так: `"inputs"."te\"s\\t"`
861
+ /** Удалить из строки символы экранирования */
862
+ function unescapeSpecialCharacters(str) {
863
+ return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
864
+ }
865
+
866
+ /**
867
+ * Создает RegExp-паттерн для подстроки с безопасными символами.
868
+ *
869
+ * Подстрока может содержать любой символ, кроме:
870
+ * 1. `restrictedChar` - запрещено появление без экранирования.
871
+ * 2. Обратного слэша (`\`) - запрещено появление без пары.
872
+ *
873
+ * Правило экранирования:
874
+ * - Любой символ, включая `restrictedChar` и `\`, можно использовать с префиксом `\`.
875
+ * - Последний символ в подстроке не может быть одинокий слэш.
876
+ *
877
+ * @param restrictedChar Символ, который нельзя использовать без экранирования.
878
+ * @returns Строка для вставки внутрь RegExp.
879
+ */
880
+ var createEscapableCharPattern = function (restrictedChar) {
881
+ return String.raw(templateObject_1 || (templateObject_1 = __makeTemplateObject(["(?:\\.|[^", "\\])*"], ["(?:\\\\.|[^", "\\\\])*"])), restrictedChar);
882
+ };
883
+ /**
884
+ * Паттерн подстроки, валидной для использования внутри фигурных скобок.
885
+ * Требование к подстроке - отсутствие закрывающих фигурных скобок (кроме экранированных).
773
886
  */
774
- var escapeSpecialCharacters = function (value) {
775
- return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
887
+ var curlyBracketsContentPattern = createEscapableCharPattern("}");
888
+ /**
889
+ * Паттерн подстроки, валидной для использования внутри двойных кавычек.
890
+ * Требование к подстроке - отсутствие двойных кавычек (кроме экранированных).
891
+ */
892
+ var doubleQuoteContentPattern = createEscapableCharPattern('"');
893
+ var dashboardLinkRegExp = new RegExp(String.raw(templateObject_2 || (templateObject_2 = __makeTemplateObject(["#{(", ")}(?!.{(", ")})"], ["#\\{(", ")\\}(?!\\.\\{(", ")\\})"])), curlyBracketsContentPattern, curlyBracketsContentPattern), "g");
894
+ var workspaceLinkRegExp = new RegExp(String.raw(templateObject_3 || (templateObject_3 = __makeTemplateObject(["#{(", ")}.{(", ")}"], ["#\\{(", ")\\}\\.\\{(", ")\\}"])), curlyBracketsContentPattern, curlyBracketsContentPattern), "g");
895
+ /** Экранирование спец.символов при подстановке названий таблиц и колонок */
896
+ var escapeDoubleQuoteLinkName = createEscaper(Array.from("\\\""));
897
+ /** Экранирование спец.символов при подстановке названий переменных и показателей */
898
+ var escapeCurlyBracketLinkName = createEscaper(Array.from("\\}.[]"));
899
+ var parseIndicatorLink = function (formula) {
900
+ var dashboardMatch = formula.match(dashboardLinkRegExp.source);
901
+ if (dashboardMatch) {
902
+ return { scopeName: null, indicatorName: dashboardMatch[1] };
903
+ }
904
+ var workspaceMatch = formula.match(workspaceLinkRegExp.source);
905
+ if (workspaceMatch) {
906
+ return {
907
+ scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
908
+ indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
909
+ };
910
+ }
911
+ return null;
776
912
  };
913
+ var templateObject_1, templateObject_2, templateObject_3;
777
914
 
778
915
  function generateColumnFormula(tableName, columnName) {
779
- var preparedTableName = escapeSpecialCharacters(tableName);
780
- var preparedColumnName = escapeSpecialCharacters(columnName);
781
- return "\"".concat(preparedTableName, "\".\"").concat(preparedColumnName, "\"");
916
+ return "\"".concat(escapeDoubleQuoteLinkName(tableName), "\".\"").concat(escapeDoubleQuoteLinkName(columnName), "\"");
782
917
  }
783
918
 
784
919
  var escapeSingularQuotes = function (formula) {
@@ -789,7 +924,7 @@ var escapeSingularQuotes = function (formula) {
789
924
  };
790
925
 
791
926
  var prepareFormulaForSql = function (formula, simpleType) {
792
- formula = clearSingleLineComments(clearMultiLineComments(formula)).trim();
927
+ formula = sanitizeSingleLineComment(formula, true);
793
928
  return simpleType === ESimpleDataType.OTHER ? "toString(".concat(formula, ")") : formula;
794
929
  };
795
930
  var clearSingleLineComments = function (formula) {
@@ -871,7 +1006,7 @@ var convertFiltersToFormula = function (filters) {
871
1006
  return filters.length > 0 ? " AND ".concat(convertToFormulasChain(filters)) : "";
872
1007
  };
873
1008
 
874
- var _a$3;
1009
+ var _a$4;
875
1010
  var EDimensionAggregationTemplateName;
876
1011
  (function (EDimensionAggregationTemplateName) {
877
1012
  EDimensionAggregationTemplateName["avg"] = "avg";
@@ -888,20 +1023,20 @@ var EDimensionAggregationTemplateName;
888
1023
  EDimensionAggregationTemplateName["countReworks"] = "countReworks";
889
1024
  })(EDimensionAggregationTemplateName || (EDimensionAggregationTemplateName = {}));
890
1025
  /** Шаблоны процессных метрик разреза с режимом AGGREGATION */
891
- var dimensionAggregationTemplates = (_a$3 = {},
892
- _a$3[EDimensionAggregationTemplateName.avg] = avgTemplate,
893
- _a$3[EDimensionAggregationTemplateName.median] = medianTemplate,
894
- _a$3[EDimensionAggregationTemplateName.count] = countTemplate,
895
- _a$3[EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
896
- _a$3[EDimensionAggregationTemplateName.min] = minTemplate,
897
- _a$3[EDimensionAggregationTemplateName.max] = maxTemplate,
898
- _a$3[EDimensionAggregationTemplateName.sum] = sumTemplate,
899
- _a$3[EDimensionAggregationTemplateName.top] = topTemplate,
900
- _a$3[EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
901
- _a$3[EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
902
- _a$3[EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
903
- _a$3[EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
904
- _a$3);
1026
+ var dimensionAggregationTemplates = (_a$4 = {},
1027
+ _a$4[EDimensionAggregationTemplateName.avg] = avgTemplate,
1028
+ _a$4[EDimensionAggregationTemplateName.median] = medianTemplate,
1029
+ _a$4[EDimensionAggregationTemplateName.count] = countTemplate,
1030
+ _a$4[EDimensionAggregationTemplateName.countDistinct] = countDistinctTemplate,
1031
+ _a$4[EDimensionAggregationTemplateName.min] = minTemplate,
1032
+ _a$4[EDimensionAggregationTemplateName.max] = maxTemplate,
1033
+ _a$4[EDimensionAggregationTemplateName.sum] = sumTemplate,
1034
+ _a$4[EDimensionAggregationTemplateName.top] = topTemplate,
1035
+ _a$4[EDimensionAggregationTemplateName.firstValue] = firstValueTemplate,
1036
+ _a$4[EDimensionAggregationTemplateName.lastValue] = lastValueTemplate,
1037
+ _a$4[EDimensionAggregationTemplateName.countExecutions] = countExecutionsTemplate,
1038
+ _a$4[EDimensionAggregationTemplateName.countReworks] = countReworksTemplate,
1039
+ _a$4);
905
1040
  /** На основе значения режима AGGREGATION подготовить параметры для подстановки в шаблонную формулу */
906
1041
  var prepareDimensionAggregationParams = function (value) {
907
1042
  if (!value.eventName ||
@@ -914,8 +1049,7 @@ var prepareDimensionAggregationParams = function (value) {
914
1049
  var commonParams = {
915
1050
  eventNameFormula: value.eventNameFormula,
916
1051
  caseCaseIdFormula: value.caseCaseIdFormula,
917
- eventName: value.eventName,
918
- objectFilters: "1",
1052
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
919
1053
  filters: convertFiltersToFormula(value.filters),
920
1054
  eventTimeFormula: "",
921
1055
  columnFormula: "",
@@ -944,13 +1078,13 @@ var timeTemplates = (function () {
944
1078
  var generateTemplates = function (innerTemplate) {
945
1079
  var templates = {};
946
1080
  for (var key in dimensionTemplateFormulas) {
947
- templates[key] = fillTemplateString(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
1081
+ templates[key] = fillTemplateSql(dimensionTemplateFormulas[key], { columnFormula: innerTemplate });
948
1082
  }
949
1083
  return templates;
950
1084
  };
951
1085
  return _a = {},
952
- _a[EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
953
- _a[EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula})"),
1086
+ _a[EWidgetIndicatorValueModes.START_TIME] = generateTemplates("process(minIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
1087
+ _a[EWidgetIndicatorValueModes.END_TIME] = generateTemplates("process(maxIf({eventTimeFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula})"),
954
1088
  _a;
955
1089
  })();
956
1090
  /** На основе значения режимов START_TIME/END_TIME подготовить параметры для подстановки в шаблонную формулу */
@@ -968,12 +1102,12 @@ var prepareTimeParams = function (value) {
968
1102
  eventNameFormula: value.eventNameFormula,
969
1103
  caseCaseIdFormula: value.caseCaseIdFormula,
970
1104
  filters: convertFiltersToFormula(value.filters),
971
- eventName: value.eventName,
1105
+ eventName: "'".concat(escapeSingularQuotes(value.eventName), "'"),
972
1106
  };
973
1107
  };
974
1108
 
975
1109
  function getDimensionFormula(_a) {
976
- var _b;
1110
+ var _b, _c;
977
1111
  var value = _a.value;
978
1112
  if (!value) {
979
1113
  return "";
@@ -987,10 +1121,13 @@ function getDimensionFormula(_a) {
987
1121
  if (!templateFormula || !tableName || !columnName) {
988
1122
  return "";
989
1123
  }
990
- return fillTemplateString(templateFormula, {
1124
+ return fillTemplateSql(templateFormula, {
991
1125
  columnFormula: generateColumnFormula(tableName, columnName),
992
1126
  });
993
1127
  }
1128
+ return (_c = getProcessDimensionValueFormula(value)) !== null && _c !== void 0 ? _c : "";
1129
+ }
1130
+ function getProcessDimensionValueFormula(value) {
994
1131
  if (value.mode === EWidgetIndicatorValueModes.AGGREGATION) {
995
1132
  var preparedParams = prepareDimensionAggregationParams(value);
996
1133
  if (!preparedParams) {
@@ -1000,10 +1137,10 @@ function getDimensionFormula(_a) {
1000
1137
  ? dimensionTemplateFormulas[value.innerTemplateName]
1001
1138
  : null;
1002
1139
  var columnFormula = innerTemplate
1003
- ? fillTemplateString(innerTemplate, { columnFormula: preparedParams.columnFormula })
1140
+ ? fillTemplateSql(innerTemplate, { columnFormula: preparedParams.columnFormula })
1004
1141
  : preparedParams.columnFormula;
1005
1142
  var dimensionAggregationTemplate = dimensionAggregationTemplates[value.templateName];
1006
- return fillTemplateString(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1143
+ return fillTemplateSql(dimensionAggregationTemplate, __assign(__assign({}, preparedParams), { columnFormula: columnFormula }));
1007
1144
  }
1008
1145
  if (value.mode === EWidgetIndicatorValueModes.START_TIME ||
1009
1146
  value.mode === EWidgetIndicatorValueModes.END_TIME) {
@@ -1012,9 +1149,8 @@ function getDimensionFormula(_a) {
1012
1149
  return "";
1013
1150
  }
1014
1151
  var templateFormula = timeTemplates[value.mode][value.templateName];
1015
- return fillTemplateString(templateFormula, preparedParams);
1152
+ return fillTemplateSql(templateFormula, preparedParams);
1016
1153
  }
1017
- return "";
1018
1154
  }
1019
1155
 
1020
1156
  var EMeasureAggregationTemplateName;
@@ -1046,8 +1182,7 @@ var prepareMeasureAggregationParams = function (value) {
1046
1182
  outerAggregation: value.outerAggregation,
1047
1183
  eventNameFormula: value.eventNameFormula,
1048
1184
  caseCaseIdFormula: value.caseCaseIdFormula,
1049
- eventName: value.eventName,
1050
- objectFilters: "1",
1185
+ eventName: value.eventName ? "'".concat(escapeSingularQuotes(value.eventName), "'") : "",
1051
1186
  filters: convertFiltersToFormula(value.filters),
1052
1187
  eventTimeFormula: "",
1053
1188
  columnFormula: "",
@@ -1068,7 +1203,7 @@ var prepareMeasureAggregationParams = function (value) {
1068
1203
  return columnParams;
1069
1204
  };
1070
1205
 
1071
- var _a$2;
1206
+ var _a$3, _b;
1072
1207
  var EMeasureTemplateNames;
1073
1208
  (function (EMeasureTemplateNames) {
1074
1209
  EMeasureTemplateNames["avg"] = "avg";
@@ -1079,19 +1214,28 @@ var EMeasureTemplateNames;
1079
1214
  EMeasureTemplateNames["max"] = "max";
1080
1215
  EMeasureTemplateNames["sum"] = "sum";
1081
1216
  })(EMeasureTemplateNames || (EMeasureTemplateNames = {}));
1217
+ var EMeasureInnerTemplateNames;
1218
+ (function (EMeasureInnerTemplateNames) {
1219
+ EMeasureInnerTemplateNames["begin"] = "begin";
1220
+ EMeasureInnerTemplateNames["end"] = "end";
1221
+ })(EMeasureInnerTemplateNames || (EMeasureInnerTemplateNames = {}));
1082
1222
  /** Стандартные шаблоны меры */
1083
- var measureTemplateFormulas = (_a$2 = {},
1084
- _a$2[EMeasureTemplateNames.avg] = "avg({columnFormula})",
1085
- _a$2[EMeasureTemplateNames.count] = "count({columnFormula})",
1086
- _a$2[EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1087
- _a$2[EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1088
- _a$2[EMeasureTemplateNames.min] = "min({columnFormula})",
1089
- _a$2[EMeasureTemplateNames.max] = "max({columnFormula})",
1090
- _a$2[EMeasureTemplateNames.sum] = "sum({columnFormula})",
1091
- _a$2);
1223
+ var measureTemplateFormulas = (_a$3 = {},
1224
+ _a$3[EMeasureTemplateNames.avg] = "avg({columnFormula})",
1225
+ _a$3[EMeasureTemplateNames.count] = "count({columnFormula})",
1226
+ _a$3[EMeasureTemplateNames.countDistinct] = "count(distinct {columnFormula})",
1227
+ _a$3[EMeasureTemplateNames.median] = "medianExact({columnFormula})",
1228
+ _a$3[EMeasureTemplateNames.min] = "min({columnFormula})",
1229
+ _a$3[EMeasureTemplateNames.max] = "max({columnFormula})",
1230
+ _a$3[EMeasureTemplateNames.sum] = "sum({columnFormula})",
1231
+ _a$3);
1232
+ var measureInnerTemplateFormulas = (_b = {},
1233
+ _b[EMeasureInnerTemplateNames.begin] = "begin({columnFormula})",
1234
+ _b[EMeasureInnerTemplateNames.end] = "end({columnFormula})",
1235
+ _b);
1092
1236
 
1093
1237
  /** Шаблон процессной метрики меры с режимом CONVERSION */
1094
- var conversionTemplate = "countIf(\n process(\n minIf(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n maxIf(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n) / countIf(\n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n)";
1238
+ var conversionTemplate = "countIf(\n process(\n minIf(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n maxIf(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n) / countIf(\n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n)";
1095
1239
  /** На основе значения режима CONVERSION подготовить параметры для подстановки в шаблонную формулу */
1096
1240
  var prepareConversionParams = function (value) {
1097
1241
  if (!value.startEventName ||
@@ -1106,15 +1250,14 @@ var prepareConversionParams = function (value) {
1106
1250
  return null;
1107
1251
  }
1108
1252
  return {
1109
- objectFilters: "1",
1110
1253
  startEventTimeFormula: value.startEventTimeFormula,
1111
1254
  startEventNameFormula: value.startEventNameFormula,
1112
1255
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1113
- startEventName: value.startEventName,
1256
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1114
1257
  endEventTimeFormula: value.endEventTimeFormula,
1115
1258
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1116
1259
  endEventNameFormula: value.endEventNameFormula,
1117
- endEventName: value.endEventName,
1260
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1118
1261
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1119
1262
  };
1120
1263
  };
@@ -1122,7 +1265,7 @@ var prepareConversionParams = function (value) {
1122
1265
  /** Шаблоны процессных метрик меры с режимом DURATION */
1123
1266
  var durationTemplates = (function () {
1124
1267
  var _a;
1125
- var innerTemplate = "\n timeDiff(\n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ), \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n )\n ), \n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = '{endEventName}'{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = '{startEventName}'{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n ";
1268
+ var innerTemplate = "\n timeDiff(\n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ), \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n )\n ), \n process(\n {startEventAggregationName}(\n {startEventTimeFormula}, \n {startEventNameFormula} = {startEventName}{startEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) < \n process(\n {endEventAggregationName}(\n {endEventTimeFormula}, \n {endEventNameFormula} = {endEventName}{endEventFilters}\n ), \n {endCaseCaseIdFormula}\n ) \n and \n process(\n countIf(\n {startEventNameFormula} = {startEventName}{startEventFilters}\n ) != 0, \n {endCaseCaseIdFormula}\n ) != 0\n ";
1126
1269
  return _a = {},
1127
1270
  _a[EDurationTemplateName.avg] = "avgIf(".concat(innerTemplate, ")"),
1128
1271
  _a[EDurationTemplateName.median] = "medianIf(".concat(innerTemplate, ")"),
@@ -1145,32 +1288,31 @@ var prepareDurationParams = function (value) {
1145
1288
  return appearance === EEventAppearances.FIRST ? "minIf" : "maxIf";
1146
1289
  };
1147
1290
  return {
1148
- objectFilters: "1",
1149
1291
  startEventTimeFormula: value.startEventTimeFormula,
1150
1292
  startEventNameFormula: value.startEventNameFormula,
1151
1293
  startEventFilters: convertFiltersToFormula(value.startEventFilters),
1152
- startEventName: value.startEventName,
1294
+ startEventName: "'".concat(escapeSingularQuotes(value.startEventName), "'"),
1153
1295
  startEventAggregationName: getAggregationNameByAppearances(value.startEventAppearances),
1154
1296
  endEventTimeFormula: value.endEventTimeFormula,
1155
1297
  endCaseCaseIdFormula: value.endCaseCaseIdFormula,
1156
1298
  endEventNameFormula: value.endEventNameFormula,
1157
- endEventName: value.endEventName,
1299
+ endEventName: "'".concat(escapeSingularQuotes(value.endEventName), "'"),
1158
1300
  endEventFilters: convertFiltersToFormula(value.endEventFilters),
1159
1301
  endEventAggregationName: getAggregationNameByAppearances(value.endEventAppearances),
1160
1302
  };
1161
1303
  };
1162
1304
 
1163
1305
  function createAnyEventTemplate(aggregatePart) {
1164
- return "{outerAggregation}If(process(".concat(aggregatePart, ", {caseCaseIdFormula}), {objectFilters})");
1306
+ return "{outerAggregation}(process(".concat(aggregatePart, ", {caseCaseIdFormula}))");
1165
1307
  }
1166
1308
  function createSpecificEventTemplate(fn, additionalFn) {
1167
- return "{outerAggregation}If(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = '{eventName}'{filters}), {caseCaseIdFormula}), {objectFilters})");
1309
+ return "{outerAggregation}(process(".concat(fn, "(").concat(additionalFn ? "".concat(additionalFn, " ") : "", "{columnFormula}, {eventNameFormula} = {eventName}{filters}), {caseCaseIdFormula}))");
1168
1310
  }
1169
1311
  function createTopLikeTemplate(template) {
1170
1312
  return function (outerAggregation) {
1171
1313
  return outerAggregation === EOuterAggregation.top
1172
- ? "{outerAggregation}KIf(1)(".concat(template, ", {objectFilters})[1]")
1173
- : "{outerAggregation}If(".concat(template, ", {objectFilters})");
1314
+ ? "{outerAggregation}K(1)(".concat(template, ")[1]")
1315
+ : "{outerAggregation}(".concat(template, ")");
1174
1316
  };
1175
1317
  }
1176
1318
  function createAggregationTemplate(templateName, _a) {
@@ -1217,9 +1359,9 @@ function createAggregationTemplate(templateName, _a) {
1217
1359
  ? createAnyEventTemplate("argMax({columnFormula}, {eventTimeFormula})")
1218
1360
  : createTopLikeTemplate(lastValueTemplate)(outerAggregation);
1219
1361
  case EMeasureAggregationTemplateName.countExecutions:
1220
- return "{outerAggregation}If(".concat(countExecutionsTemplate, ", {objectFilters})");
1362
+ return "{outerAggregation}(".concat(countExecutionsTemplate, ")");
1221
1363
  case EMeasureAggregationTemplateName.countReworks:
1222
- return "{outerAggregation}If(".concat(countReworksTemplate, ", {objectFilters})");
1364
+ return "{outerAggregation}(".concat(countReworksTemplate, ")");
1223
1365
  }
1224
1366
  }
1225
1367
 
@@ -1233,19 +1375,24 @@ function getMeasureFormula(_a) {
1233
1375
  return (_b = value.formula) !== null && _b !== void 0 ? _b : "";
1234
1376
  }
1235
1377
  if (value.mode === EWidgetIndicatorValueModes.TEMPLATE) {
1236
- var templateName = value.templateName, tableName = value.tableName, columnName = value.columnName;
1378
+ var templateName = value.templateName, tableName = value.tableName, columnName = value.columnName, innerTemplateName = value.innerTemplateName;
1237
1379
  var templateFormula = measureTemplateFormulas[templateName];
1238
1380
  if (!templateFormula || !tableName || !columnName) {
1239
1381
  return "";
1240
1382
  }
1241
- return fillTemplateString(templateFormula, {
1242
- columnFormula: generateColumnFormula(tableName, columnName),
1383
+ var columnFormula = innerTemplateName
1384
+ ? fillTemplateSql(measureInnerTemplateFormulas[innerTemplateName], {
1385
+ columnFormula: generateColumnFormula(tableName, columnName),
1386
+ })
1387
+ : generateColumnFormula(tableName, columnName);
1388
+ return fillTemplateSql(templateFormula, {
1389
+ columnFormula: columnFormula,
1243
1390
  });
1244
1391
  }
1245
1392
  if (value.mode === EWidgetIndicatorValueModes.AGGREGATION) {
1246
1393
  var preparedParams = prepareMeasureAggregationParams(value);
1247
1394
  return preparedParams
1248
- ? fillTemplateString(createAggregationTemplate(value.templateName, {
1395
+ ? fillTemplateSql(createAggregationTemplate(value.templateName, {
1249
1396
  outerAggregation: preparedParams.outerAggregation,
1250
1397
  anyEvent: value.anyEvent,
1251
1398
  }), preparedParams)
@@ -1256,28 +1403,28 @@ function getMeasureFormula(_a) {
1256
1403
  if (!preparedParams) {
1257
1404
  return "";
1258
1405
  }
1259
- return fillTemplateString(conversionTemplate, preparedParams);
1406
+ return fillTemplateSql(conversionTemplate, preparedParams);
1260
1407
  }
1261
1408
  if (value.mode === EWidgetIndicatorValueModes.DURATION) {
1262
1409
  var preparedParams = prepareDurationParams(value);
1263
1410
  if (!preparedParams) {
1264
1411
  return "";
1265
1412
  }
1266
- return fillTemplateString(durationTemplates[value.templateName], preparedParams);
1413
+ return fillTemplateSql(durationTemplates[value.templateName], preparedParams);
1267
1414
  }
1268
1415
  return "";
1269
1416
  }
1270
1417
 
1271
- var _a$1;
1418
+ var _a$2;
1272
1419
  var EEventMeasureTemplateNames;
1273
1420
  (function (EEventMeasureTemplateNames) {
1274
1421
  EEventMeasureTemplateNames["eventsCount"] = "eventsCount";
1275
1422
  EEventMeasureTemplateNames["reworksCount"] = "reworksCount";
1276
1423
  })(EEventMeasureTemplateNames || (EEventMeasureTemplateNames = {}));
1277
- var eventMeasureTemplateFormulas = (_a$1 = {},
1278
- _a$1[EEventMeasureTemplateNames.eventsCount] = "count()",
1279
- _a$1[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1280
- _a$1);
1424
+ var eventMeasureTemplateFormulas = (_a$2 = {},
1425
+ _a$2[EEventMeasureTemplateNames.eventsCount] = "count()",
1426
+ _a$2[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
1427
+ _a$2);
1281
1428
 
1282
1429
  function getEventMeasureFormula(_a, process) {
1283
1430
  var value = _a.value;
@@ -1289,21 +1436,21 @@ function getEventMeasureFormula(_a, process) {
1289
1436
  }
1290
1437
  if (value.mode === EWidgetIndicatorValueModes.TEMPLATE) {
1291
1438
  var templateFormula = eventMeasureTemplateFormulas[value.templateName];
1292
- return templateFormula && fillTemplateString(templateFormula, process);
1439
+ return templateFormula && fillTemplateSql(templateFormula, process);
1293
1440
  }
1294
1441
  return "";
1295
1442
  }
1296
1443
 
1297
- var _a;
1444
+ var _a$1;
1298
1445
  var ETransitionMeasureTemplateNames;
1299
1446
  (function (ETransitionMeasureTemplateNames) {
1300
1447
  ETransitionMeasureTemplateNames["transitionsCount"] = "transitionsCount";
1301
1448
  ETransitionMeasureTemplateNames["medianTime"] = "medianTime";
1302
1449
  })(ETransitionMeasureTemplateNames || (ETransitionMeasureTemplateNames = {}));
1303
- var transitionMeasureTemplateFormulas = (_a = {},
1304
- _a[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1305
- _a[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1306
- _a);
1450
+ var transitionMeasureTemplateFormulas = (_a$1 = {},
1451
+ _a$1[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
1452
+ _a$1[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
1453
+ _a$1);
1307
1454
 
1308
1455
  function getTransitionMeasureFormula(_a, process) {
1309
1456
  var value = _a.value;
@@ -1315,52 +1462,16 @@ function getTransitionMeasureFormula(_a, process) {
1315
1462
  }
1316
1463
  if (value.mode === EWidgetIndicatorValueModes.TEMPLATE) {
1317
1464
  var templateFormula = transitionMeasureTemplateFormulas[value.templateName];
1318
- return templateFormula && fillTemplateString(templateFormula, process);
1465
+ return templateFormula && fillTemplateSql(templateFormula, process);
1319
1466
  }
1320
1467
  return "";
1321
1468
  }
1322
1469
 
1323
- /** Удалить из строки символы экранирования */
1324
- function unescapeSpecialCharacters(str) {
1325
- return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
1326
- }
1327
-
1328
- /**
1329
- * Регулярное выражение для поиска имени ссылки внутри формулы.
1330
- * Учитывает, что имя внутри формулы содержит экраны.
1331
- *
1332
- * Принцип работы:
1333
- * Пробовать следующие вхождения:
1334
- * - \\\\ - экранированный символ обратного слэша.
1335
- * - Иначе \\" - экранированный символ кавычки.
1336
- * - Иначе [^"] - любой символ кроме кавычки.
1337
- * Если встречается любой другой символ, то это закрывающая кавычка имени переменной.
1338
- */
1339
- var linkNameRegExp = "(?:\\\\\\\\|\\\\\"|[^\"])+";
1340
- var dashboardLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"(?!\\.\"").concat(linkNameRegExp, "\")"), "g");
1341
- var workspaceLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"\\.\"(").concat(linkNameRegExp, ")\""), "g");
1342
- var parseIndicatorLink = function (formula) {
1343
- var dashboardMatch = formula.match(dashboardLinkRegExp.source);
1344
- if (dashboardMatch) {
1345
- return { scopeName: null, indicatorName: dashboardMatch[1] };
1346
- }
1347
- var workspaceMatch = formula.match(workspaceLinkRegExp.source);
1348
- if (workspaceMatch) {
1349
- return {
1350
- scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
1351
- indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
1352
- };
1353
- }
1354
- return null;
1355
- };
1356
-
1357
1470
  // Типы, используемые в значениях элементов управления.
1358
1471
  var EWidgetFilterMode;
1359
1472
  (function (EWidgetFilterMode) {
1360
1473
  EWidgetFilterMode["DEFAULT"] = "DEFAULT";
1361
1474
  EWidgetFilterMode["SINGLE"] = "SINGLE";
1362
- /** @deprecated Отказ от режима фильтрации "Множественный выбор"*/
1363
- EWidgetFilterMode["MULTI"] = "MULTI";
1364
1475
  EWidgetFilterMode["DISABLED"] = "DISABLED";
1365
1476
  })(EWidgetFilterMode || (EWidgetFilterMode = {}));
1366
1477
  var EMarkdownDisplayMode;
@@ -1535,7 +1646,9 @@ var getFormulaFilterValues = function (filterValue) {
1535
1646
  }
1536
1647
  return [];
1537
1648
  };
1538
- var applyIndexToArrayFormula = function (formula, index) { return "".concat(formula, "[").concat(index, "]"); };
1649
+ var applyIndexToArrayFormula = function (formula, index) {
1650
+ return "(".concat(formula, ")[").concat(index, "]");
1651
+ };
1539
1652
  var mapFormulaFilterToCalculatorInput = function (filterValue) {
1540
1653
  if (!filterValue) {
1541
1654
  return null;
@@ -1543,7 +1656,7 @@ var mapFormulaFilterToCalculatorInput = function (filterValue) {
1543
1656
  if (!isFormulaFilterValue(filterValue)) {
1544
1657
  return {
1545
1658
  dbDataType: EClickHouseBaseTypes.Bool,
1546
- formula: fillTemplateString(displayConditionTemplate, {
1659
+ formula: fillTemplateSql(displayConditionTemplate, {
1547
1660
  formula: prepareFormulaForSql(filterValue.formula),
1548
1661
  }),
1549
1662
  values: ["true"],
@@ -1578,6 +1691,46 @@ var mapFormulaFiltersToInputs = function (filters) {
1578
1691
  return compactMap(filters, mapFormulaFilterToCalculatorInput);
1579
1692
  };
1580
1693
 
1694
+ var _a;
1695
+ var intervalByUnit = (_a = {},
1696
+ _a[EDimensionProcessFilterTimeUnit.YEARS] = "year",
1697
+ _a[EDimensionProcessFilterTimeUnit.MONTHS] = "month",
1698
+ _a[EDimensionProcessFilterTimeUnit.DAYS] = "day",
1699
+ _a[EDimensionProcessFilterTimeUnit.HOURS] = "hour",
1700
+ _a[EDimensionProcessFilterTimeUnit.MINUTES] = "minute",
1701
+ _a);
1702
+ function mapDimensionProcessFilterToCalculatorInput(filter) {
1703
+ var formula = filter.value.mode === EWidgetIndicatorValueModes.FORMULA
1704
+ ? filter.value.formula
1705
+ : getProcessDimensionValueFormula(filter.value);
1706
+ if (formula === undefined) {
1707
+ throw new Error("Formula generation error");
1708
+ }
1709
+ var _a = filter.condition, timeUnit = _a.timeUnit, filteringMethod = _a.filteringMethod, values = _a.values;
1710
+ if (filteringMethod === "LAST_TIME") {
1711
+ if (!timeUnit) {
1712
+ throw new Error("Missing time unit");
1713
+ }
1714
+ return {
1715
+ dbDataType: EClickHouseBaseTypes.Bool,
1716
+ formula: "date_diff('".concat(intervalByUnit[timeUnit], "', ").concat(formula, ", now())"),
1717
+ values: values,
1718
+ filteringMethod: formulaFilterMethods.LESS_THAN_OR_EQUAL_TO,
1719
+ };
1720
+ }
1721
+ return { formula: formula, filteringMethod: filteringMethod, values: values, dbDataType: filter.dbDataType };
1722
+ }
1723
+
1724
+ var mapSettingsFilterToCalculatorInput = function (filter) {
1725
+ if (isDimensionProcessFilter(filter)) {
1726
+ return mapDimensionProcessFilterToCalculatorInput(filter);
1727
+ }
1728
+ return mapFormulaFilterToCalculatorInput(filter);
1729
+ };
1730
+ var mapSettingsFiltersToInputs = function (filters) {
1731
+ return compactMap(filters, mapSettingsFilterToCalculatorInput);
1732
+ };
1733
+
1581
1734
  function mapMeasureToInput(measure, variables, addFormulas) {
1582
1735
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
1583
1736
  var mainFormula = getMeasureFormula(measure);
@@ -1719,7 +1872,8 @@ var getDefaultSortOrders = function (_a) {
1719
1872
  }
1720
1873
  /** Если есть временной разрез, то авто-сортировка по первому такому разрезу (по возрастанию) */
1721
1874
  var timeDimension = dimensions.find(function (dimension) {
1722
- return dimension.format &&
1875
+ var _a;
1876
+ return ((_a = dimension.format) === null || _a === void 0 ? void 0 : _a.value) &&
1723
1877
  [
1724
1878
  EFormatTypes.DATE,
1725
1879
  EFormatTypes.MONTH,
@@ -1732,7 +1886,7 @@ var getDefaultSortOrders = function (_a) {
1732
1886
  EFormatTypes.QUARTER_YEAR,
1733
1887
  EFormatTypes.DAY_OF_MONTH,
1734
1888
  EFormatTypes.WEEK,
1735
- ].includes(dimension.format);
1889
+ ].includes(dimension.format.value);
1736
1890
  });
1737
1891
  if (timeDimension) {
1738
1892
  return [
@@ -1836,6 +1990,8 @@ var EControlType;
1836
1990
  (function (EControlType) {
1837
1991
  /** Ввод текста */
1838
1992
  EControlType["input"] = "input";
1993
+ /** Ввод текста с поддержкой шаблонной вставки сущностей */
1994
+ EControlType["inputTemplate"] = "inputTemplate";
1839
1995
  /** Ввод текста в формате markdown */
1840
1996
  EControlType["inputMarkdown"] = "inputMarkdown";
1841
1997
  /** Ввод числа */
@@ -1949,19 +2105,6 @@ var updateSingleModeSelection = function (selection, formula, value) {
1949
2105
  replacedFilter: null,
1950
2106
  });
1951
2107
  };
1952
- /** @deprecated Отказ от режима фильтрации "Множественный выбор"*/
1953
- var updateMultiModeSelection = function (selection, formula, value) {
1954
- var _a;
1955
- var selectionItemValues = getSelectionItemValues(value, EWidgetFilterMode.MULTI, (_a = selection.get(formula)) === null || _a === void 0 ? void 0 : _a.values);
1956
- if (!selectionItemValues.size) {
1957
- selection.delete(formula);
1958
- return;
1959
- }
1960
- selection.set(formula, {
1961
- values: selectionItemValues,
1962
- replacedFilter: null,
1963
- });
1964
- };
1965
2108
  var replaceFiltersBySelection = function (filters, selection) {
1966
2109
  return filters.reduce(function (acc, filter) {
1967
2110
  var _a;
@@ -2082,4 +2225,4 @@ var getColorByIndex = function (index) {
2082
2225
  return color;
2083
2226
  };
2084
2227
 
2085
- export { EActionButtonsTypes, EActionTypes, EActivateConditionMode, EAutoUpdateMode, ECalculatorFilterMethods, EClickHouseBaseTypes, EColorMode, EControlType, ECustomSelectTemplates, EDataModelOption, EDimensionAggregationTemplateName, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationTemplateName, EDurationUnit, EEventAppearances, EEventMeasureTemplateNames, EFontWeight, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureAggregationTemplateName, EMeasureTemplateNames, EOuterAggregation, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESimpleInputType, ESortDirection, ESortingValueModes, ESystemRecordKey, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, OuterAggregation, applyIndexToArrayFormula, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, clearMultiLineComments, clearSingleLineComments, colors, conversionTemplate, convertFiltersToFormula, convertToFormulasChain, countExecutionsTemplate, createAggregationTemplate as createMeasureAggregationTemplate, dashboardLinkRegExp, dimensionAggregationTemplates, dimensionTemplateFormulas, displayConditionTemplate, durationTemplates, escapeSpecialCharacters, eventMeasureTemplateFormulas, fillTemplateString, formattingConfig, formulaFilterMethods, generateColumnFormula, getColorByIndex, getDefaultSortOrders, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getRuleColor, getTransitionMeasureFormula, isDimensionsHierarchy, isFormulaFilterValue, isValidColor, linkNameRegExp, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureTemplateFormulas, parseClickHouseType, parseIndicatorLink, prepareConversionParams, prepareDimensionAggregationParams, prepareDurationParams, prepareFormulaForSql, prepareMeasureAggregationParams, prepareSortOrders, prepareTimeParams, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, timeTemplates, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateMultiModeSelection, updateSingleModeSelection, workspaceLinkRegExp };
2228
+ export { EActionButtonsTypes, EActionTypes, EActivateConditionMode, EAutoUpdateMode, ECalculatorFilterMethods, EClickHouseBaseTypes, EColorMode, EControlType, ECustomSelectTemplates, EDataModelOption, EDimensionAggregationTemplateName, EDimensionProcessFilterTimeUnit, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationTemplateName, EDurationUnit, EEventAppearances, EEventMeasureTemplateNames, EFontWeight, EFormatOrFormattingMode, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureAggregationTemplateName, EMeasureInnerTemplateNames, EMeasureTemplateNames, EOuterAggregation, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESimpleInputType, ESortDirection, ESortingValueModes, ESystemRecordKey, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, OuterAggregation, applyIndexToArrayFormula, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, clearMultiLineComments, clearSingleLineComments, colors, conversionTemplate, convertFiltersToFormula, convertToFormulasChain, countExecutionsTemplate, createEscaper, createAggregationTemplate as createMeasureAggregationTemplate, curlyBracketsContentPattern, dashboardLinkRegExp, dimensionAggregationTemplates, dimensionTemplateFormulas, displayConditionTemplate, doubleQuoteContentPattern, durationTemplates, escapeCurlyBracketLinkName, escapeDoubleQuoteLinkName, eventMeasureTemplateFormulas, fillTemplateSql, fillTemplateString, formattingConfig, formulaFilterMethods, generateColumnFormula, getColorByIndex, getDefaultSortOrders, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getProcessDimensionValueFormula, getRuleColor, getTransitionMeasureFormula, isDimensionProcessFilter, isDimensionsHierarchy, isFormulaFilterValue, isValidColor, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSettingsFiltersToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureInnerTemplateFormulas, measureTemplateFormulas, parseClickHouseType, parseIndicatorLink, prepareConversionParams, prepareDimensionAggregationParams, prepareDurationParams, prepareFormulaForSql, prepareMeasureAggregationParams, prepareSortOrders, prepareTimeParams, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, timeTemplates, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateSingleModeSelection, workspaceLinkRegExp };