@qrvey/utils 1.10.0-0 → 1.10.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.
Files changed (147) hide show
  1. package/dist/charts/adapters/endpointData.js +0 -3
  2. package/dist/cjs/charts/adapters/endpointData.js +0 -3
  3. package/dist/cjs/dates/adapters/ISOToNumericOffset.d.ts +6 -0
  4. package/dist/cjs/dates/adapters/ISOToNumericOffset.js +21 -0
  5. package/dist/cjs/dates/adapters/index.d.ts +2 -0
  6. package/dist/cjs/dates/adapters/index.js +2 -0
  7. package/dist/cjs/dates/adapters/numericOffsetToISO.d.ts +6 -0
  8. package/dist/cjs/dates/adapters/numericOffsetToISO.js +29 -0
  9. package/dist/cjs/dates/constants/ISO_8601_REGEX.d.ts +1 -0
  10. package/dist/cjs/dates/constants/ISO_8601_REGEX.js +4 -0
  11. package/dist/cjs/dates/constants/TIMEZONE_TYPE.d.ts +5 -0
  12. package/dist/cjs/dates/constants/TIMEZONE_TYPE.js +9 -0
  13. package/dist/cjs/dates/constants/index.d.ts +1 -0
  14. package/dist/cjs/dates/constants/index.js +1 -0
  15. package/dist/cjs/dates/helpers/getDateByTimezone.d.ts +8 -0
  16. package/dist/cjs/dates/helpers/getDateByTimezone.js +41 -0
  17. package/dist/cjs/dates/helpers/getDateByTimezoneOffset.d.ts +7 -0
  18. package/dist/cjs/dates/helpers/getDateByTimezoneOffset.js +22 -0
  19. package/dist/cjs/dates/helpers/getTimezoneObject.d.ts +10 -0
  20. package/dist/cjs/dates/helpers/getTimezoneObject.js +21 -0
  21. package/dist/cjs/dates/helpers/getTimezoneOffsetByType.d.ts +13 -0
  22. package/dist/cjs/dates/helpers/getTimezoneOffsetByType.js +27 -0
  23. package/dist/cjs/dates/helpers/index.d.ts +4 -1
  24. package/dist/cjs/dates/helpers/index.js +4 -1
  25. package/dist/cjs/dates/helpers/isValidISOOffset.d.ts +7 -0
  26. package/dist/cjs/dates/helpers/isValidISOOffset.js +17 -0
  27. package/dist/cjs/dates/interfaces/IBTimezone.d.ts +7 -0
  28. package/dist/cjs/dates/interfaces/IBTimezone.js +2 -0
  29. package/dist/cjs/dates/interfaces/IBTimezoneType.d.ts +2 -0
  30. package/dist/cjs/dates/interfaces/IBTimezoneType.js +2 -0
  31. package/dist/cjs/dates/interfaces/IDTimezone.d.ts +6 -0
  32. package/dist/cjs/dates/interfaces/IDTimezone.js +2 -0
  33. package/dist/cjs/dates/interfaces/IDTimezoneOffset.d.ts +1 -0
  34. package/dist/cjs/dates/interfaces/IDTimezoneOffset.js +2 -0
  35. package/dist/cjs/dates/interfaces/IDTimezoneType.d.ts +2 -0
  36. package/dist/cjs/dates/interfaces/IDTimezoneType.js +2 -0
  37. package/dist/cjs/dates/interfaces/IGetDateByTimezoneSettings.d.ts +6 -0
  38. package/dist/cjs/dates/interfaces/IGetDateByTimezoneSettings.js +2 -0
  39. package/dist/cjs/dates/interfaces/index.d.ts +6 -0
  40. package/dist/cjs/dates/interfaces/index.js +6 -0
  41. package/dist/cjs/filters/helpers/builder/getFilterBuilderGeneralConfig.js +1 -1
  42. package/dist/cjs/filters/helpers/common/getFiltersByTimezone.d.ts +10 -0
  43. package/dist/cjs/filters/helpers/common/getFiltersByTimezone.js +26 -0
  44. package/dist/cjs/filters/helpers/common/index.d.ts +1 -0
  45. package/dist/cjs/filters/helpers/common/index.js +1 -0
  46. package/dist/cjs/filters/interfaces/ui/IFUTransformFilterValuesSettings.d.ts +6 -0
  47. package/dist/cjs/format/format.d.ts +1 -1
  48. package/dist/cjs/format/format.js +10 -4
  49. package/dist/cjs/general/index.d.ts +1 -0
  50. package/dist/cjs/general/index.js +1 -0
  51. package/dist/cjs/general/numeric/getSign.d.ts +6 -0
  52. package/dist/cjs/general/numeric/getSign.js +12 -0
  53. package/dist/cjs/general/numeric/index.d.ts +1 -0
  54. package/dist/cjs/general/numeric/index.js +17 -0
  55. package/dist/cjs/general/object/applyTimezoneDeep.d.ts +8 -0
  56. package/dist/cjs/general/object/applyTimezoneDeep.js +48 -0
  57. package/dist/cjs/general/object/index.d.ts +1 -0
  58. package/dist/cjs/general/object/index.js +1 -0
  59. package/dist/cjs/interfaces/format/IFormatConfig.Interface.d.ts +1 -0
  60. package/dist/cjs/interfaces/general/IWidgetConfig.d.ts +2 -1
  61. package/dist/cjs/qrvey/helpers/transformValue.js +34 -6
  62. package/dist/cjs/qrvey/interfaces/IBDataset.d.ts +2 -0
  63. package/dist/cjs/qrvey/interfaces/IBModel.d.ts +5 -0
  64. package/dist/cjs/qrvey/interfaces/IDataset.d.ts +3 -1
  65. package/dist/cjs/qrvey/interfaces/IModel.d.ts +3 -1
  66. package/dist/cjs/qrvey/interfaces/ITransformValueSettings.d.ts +6 -0
  67. package/dist/cjs/services/adapters/BDatasetsToUIDatasets.adapter.js +2 -0
  68. package/dist/cjs/services/adapters/BModelToUIModel.adapter.js +2 -0
  69. package/dist/cjs/services/adapters/BTimezoneToUITimezone.d.ts +8 -0
  70. package/dist/cjs/services/adapters/BTimezoneToUITimezone.js +18 -0
  71. package/dist/cjs/services/helpers/Request.d.ts +1 -1
  72. package/dist/cjs/services/helpers/Request.js +11 -5
  73. package/dist/dates/adapters/ISOToNumericOffset.d.ts +6 -0
  74. package/dist/dates/adapters/ISOToNumericOffset.js +17 -0
  75. package/dist/dates/adapters/index.d.ts +2 -0
  76. package/dist/dates/adapters/index.js +2 -0
  77. package/dist/dates/adapters/numericOffsetToISO.d.ts +6 -0
  78. package/dist/dates/adapters/numericOffsetToISO.js +25 -0
  79. package/dist/dates/constants/ISO_8601_REGEX.d.ts +1 -0
  80. package/dist/dates/constants/ISO_8601_REGEX.js +1 -0
  81. package/dist/dates/constants/TIMEZONE_TYPE.d.ts +5 -0
  82. package/dist/dates/constants/TIMEZONE_TYPE.js +6 -0
  83. package/dist/dates/constants/index.d.ts +1 -0
  84. package/dist/dates/constants/index.js +1 -0
  85. package/dist/dates/helpers/getDateByTimezone.d.ts +8 -0
  86. package/dist/dates/helpers/getDateByTimezone.js +37 -0
  87. package/dist/dates/helpers/getDateByTimezoneOffset.d.ts +7 -0
  88. package/dist/dates/helpers/getDateByTimezoneOffset.js +18 -0
  89. package/dist/dates/helpers/getTimezoneObject.d.ts +10 -0
  90. package/dist/dates/helpers/getTimezoneObject.js +17 -0
  91. package/dist/dates/helpers/getTimezoneOffsetByType.d.ts +13 -0
  92. package/dist/dates/helpers/getTimezoneOffsetByType.js +23 -0
  93. package/dist/dates/helpers/index.d.ts +4 -1
  94. package/dist/dates/helpers/index.js +4 -1
  95. package/dist/dates/helpers/isValidISOOffset.d.ts +7 -0
  96. package/dist/dates/helpers/isValidISOOffset.js +13 -0
  97. package/dist/dates/interfaces/IBTimezone.d.ts +7 -0
  98. package/dist/dates/interfaces/IBTimezone.js +1 -0
  99. package/dist/dates/interfaces/IBTimezoneType.d.ts +2 -0
  100. package/dist/dates/interfaces/IBTimezoneType.js +1 -0
  101. package/dist/dates/interfaces/IDTimezone.d.ts +6 -0
  102. package/dist/dates/interfaces/IDTimezone.js +1 -0
  103. package/dist/dates/interfaces/IDTimezoneOffset.d.ts +1 -0
  104. package/dist/dates/interfaces/IDTimezoneOffset.js +1 -0
  105. package/dist/dates/interfaces/IDTimezoneType.d.ts +2 -0
  106. package/dist/dates/interfaces/IDTimezoneType.js +1 -0
  107. package/dist/dates/interfaces/IGetDateByTimezoneSettings.d.ts +6 -0
  108. package/dist/dates/interfaces/IGetDateByTimezoneSettings.js +1 -0
  109. package/dist/dates/interfaces/index.d.ts +6 -0
  110. package/dist/dates/interfaces/index.js +6 -0
  111. package/dist/filters/helpers/builder/getFilterBuilderGeneralConfig.js +1 -1
  112. package/dist/filters/helpers/common/getFiltersByTimezone.d.ts +10 -0
  113. package/dist/filters/helpers/common/getFiltersByTimezone.js +22 -0
  114. package/dist/filters/helpers/common/index.d.ts +1 -0
  115. package/dist/filters/helpers/common/index.js +1 -0
  116. package/dist/filters/interfaces/ui/IFUTransformFilterValuesSettings.d.ts +6 -0
  117. package/dist/format/format.d.ts +1 -1
  118. package/dist/format/format.js +10 -4
  119. package/dist/general/index.d.ts +1 -0
  120. package/dist/general/index.js +1 -0
  121. package/dist/general/numeric/getSign.d.ts +6 -0
  122. package/dist/general/numeric/getSign.js +8 -0
  123. package/dist/general/numeric/index.d.ts +1 -0
  124. package/dist/general/numeric/index.js +1 -0
  125. package/dist/general/object/applyTimezoneDeep.d.ts +8 -0
  126. package/dist/general/object/applyTimezoneDeep.js +44 -0
  127. package/dist/general/object/index.d.ts +1 -0
  128. package/dist/general/object/index.js +1 -0
  129. package/dist/interfaces/format/IFormatConfig.Interface.d.ts +1 -0
  130. package/dist/interfaces/general/IWidgetConfig.d.ts +2 -1
  131. package/dist/qrvey/helpers/transformValue.js +34 -6
  132. package/dist/qrvey/interfaces/IBDataset.d.ts +2 -0
  133. package/dist/qrvey/interfaces/IBModel.d.ts +5 -0
  134. package/dist/qrvey/interfaces/IDataset.d.ts +3 -1
  135. package/dist/qrvey/interfaces/IModel.d.ts +3 -1
  136. package/dist/qrvey/interfaces/ITransformValueSettings.d.ts +6 -0
  137. package/dist/services/adapters/BDatasetsToUIDatasets.adapter.js +2 -0
  138. package/dist/services/adapters/BModelToUIModel.adapter.js +2 -0
  139. package/dist/services/adapters/BTimezoneToUITimezone.d.ts +8 -0
  140. package/dist/services/adapters/BTimezoneToUITimezone.js +14 -0
  141. package/dist/services/helpers/Request.d.ts +1 -1
  142. package/dist/services/helpers/Request.js +11 -5
  143. package/package.json +5 -5
  144. package/dist/cjs/dates/helpers/adjustTimezone.d.ts +0 -6
  145. package/dist/cjs/dates/helpers/adjustTimezone.js +0 -19
  146. package/dist/dates/helpers/adjustTimezone.d.ts +0 -6
  147. package/dist/dates/helpers/adjustTimezone.js +0 -15
@@ -9,6 +9,7 @@ const dayjs_1 = __importDefault(require("dayjs"));
9
9
  const definition_1 = require("./definition");
10
10
  const isoWeek_1 = __importDefault(require("dayjs/plugin/isoWeek"));
11
11
  const advancedFormat_1 = __importDefault(require("dayjs/plugin/advancedFormat"));
12
+ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
12
13
  const isEmpty_1 = require("../general/mix/isEmpty");
13
14
  const get_1 = require("../general/object/get");
14
15
  const COLUMN_1 = require("../columns/constants/COLUMN");
@@ -19,6 +20,7 @@ const DURATION_PARTS_LIST_1 = require("../column_format/constants/DURATION_PARTS
19
20
  const cloneDeep_1 = require("../general/object/cloneDeep");
20
21
  dayjs_1.default.extend(isoWeek_1.default); // Add support for iso week format https://github.com/iamkun/dayjs/issues/1328
21
22
  dayjs_1.default.extend(advancedFormat_1.default); // Add support to advanced formats https://day.js.org/docs/en/plugin/advanced-format
23
+ dayjs_1.default.extend(utc_1.default);
22
24
  /**
23
25
  * Apply to the given date format to a date value
24
26
  * @param bytes type number
@@ -27,7 +29,7 @@ function isValidDateString(dateString = "") {
27
29
  return (/^\d{2}\/\d{2}\/\d{4}/.test(dateString) || // MM/DD/YYY OR DD/MM/YYYY
28
30
  /^\d{4}-\d{2}-\d{2}/.test(dateString)); // YYYY-MM-DD
29
31
  }
30
- function formatDate(dateString, format) {
32
+ function formatDate(dateString, format, offset) {
31
33
  let _format = (0, cloneDeep_1.cloneDeep)(format);
32
34
  if ((0, isObject_1.isObject)(format))
33
35
  _format = _format.format || "";
@@ -35,8 +37,12 @@ function formatDate(dateString, format) {
35
37
  return dateString;
36
38
  if (!isValidDateString(dateString))
37
39
  return dateString;
38
- const dateValue = dateString === null || dateString === void 0 ? void 0 : dateString.replace(/Z$/i, "");
39
- return (0, dayjs_1.default)(dateValue.split(".")[0]).format(_format
40
+ const dateStringCleaned = dateString === null || dateString === void 0 ? void 0 : dateString.replace(/Z$/i, "");
41
+ const firstPartOfDateString = (0, dayjs_1.default)(dateStringCleaned.split(".")[0]);
42
+ const newDateValue = !(0, isEmpty_1.isEmpty)(offset)
43
+ ? firstPartOfDateString.utcOffset(offset)
44
+ : firstPartOfDateString;
45
+ return newDateValue.format(_format
40
46
  .replace("HH24:", "HH:")
41
47
  .replace("MI:SS", "mm:ss")
42
48
  .replace("MM:SS", "mm:ss"));
@@ -146,7 +152,7 @@ const addFormat = (value, outputFormat = "None", config) => {
146
152
  : formatDate(value, (outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.format) === "Default" &&
147
153
  ((_c = outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.originalFormat) === null || _c === void 0 ? void 0 : _c.format)
148
154
  ? (_d = outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.originalFormat) === null || _d === void 0 ? void 0 : _d.format
149
- : outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.format);
155
+ : outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.format, config === null || config === void 0 ? void 0 : config.offset);
150
156
  case "NUMERIC": {
151
157
  const parse = parseFloat(value);
152
158
  const withLocale = (outputFormat !== "None" && (config === null || config === void 0 ? void 0 : config.lang)) ||
@@ -1,5 +1,6 @@
1
1
  export * from "./array/index";
2
2
  export * from "./function/index";
3
3
  export * from "./mix/index";
4
+ export * from "./numeric/index";
4
5
  export * from "./object/index";
5
6
  export * from "./string/index";
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./array/index"), exports);
18
18
  __exportStar(require("./function/index"), exports);
19
19
  __exportStar(require("./mix/index"), exports);
20
+ __exportStar(require("./numeric/index"), exports);
20
21
  __exportStar(require("./object/index"), exports);
21
22
  __exportStar(require("./string/index"), exports);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gets the numeric sign of a given number
3
+ * @param {number} num the number
4
+ * @returns {string} an string with the sign
5
+ */
6
+ export declare function getSign(num: number): string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSign = void 0;
4
+ /**
5
+ * Gets the numeric sign of a given number
6
+ * @param {number} num the number
7
+ * @returns {string} an string with the sign
8
+ */
9
+ function getSign(num) {
10
+ return Math.sign(num) > -1 ? "+" : "-";
11
+ }
12
+ exports.getSign = getSign;
@@ -0,0 +1 @@
1
+ export * from "./getSign";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./getSign"), exports);
@@ -0,0 +1,8 @@
1
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
2
+ /**
3
+ * Transforms the date+times propertiesof the given object by the Timezone object
4
+ * @param {any} obj the object
5
+ * @param {IDTimezone} timezone the timezone object
6
+ * @returns {IFSData | IFUData} the new filter data with the transformed datetime values
7
+ */
8
+ export declare function applyTimezoneDeep(obj: any, timezone: IDTimezone): any;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyTimezoneDeep = void 0;
4
+ const DATE_FORMAT_1 = require("../../dates/constants/DATE_FORMAT");
5
+ const DATE_GROUPING_TIME_PROPERTY_1 = require("../../dates/constants/DATE_GROUPING_TIME_PROPERTY");
6
+ const getDateByTimezone_1 = require("../../dates/helpers/getDateByTimezone");
7
+ const validateDate_1 = require("../../dates/helpers/validateDate");
8
+ const isEmpty_1 = require("../mix/isEmpty");
9
+ const isObject_1 = require("./isObject");
10
+ /**
11
+ * Transforms the date+times propertiesof the given object by the Timezone object
12
+ * @param {any} obj the object
13
+ * @param {IDTimezone} timezone the timezone object
14
+ * @returns {IFSData | IFUData} the new filter data with the transformed datetime values
15
+ */
16
+ function applyTimezoneDeep(obj, timezone) {
17
+ if ((0, isEmpty_1.isEmpty)(obj))
18
+ return obj;
19
+ let result;
20
+ if ((0, isObject_1.isObject)(obj)) {
21
+ result = {};
22
+ }
23
+ else if (Array.isArray(obj)) {
24
+ result = [];
25
+ }
26
+ try {
27
+ for (const i in obj) {
28
+ if ((0, isObject_1.isObject)(obj[i]) || Array.isArray(obj[i])) {
29
+ result[i] = applyTimezoneDeep(obj[i], timezone);
30
+ }
31
+ else if (obj[i] instanceof Date ||
32
+ (0, validateDate_1.validateDate)(obj[i], DATE_FORMAT_1.DATE_FORMAT.HOUR)) {
33
+ result[i] = (0, getDateByTimezone_1.getDateByTimezone)(obj[i], {
34
+ property: DATE_GROUPING_TIME_PROPERTY_1.DATE_GROUPING_TIME_PROPERTY.HOUR,
35
+ timezone,
36
+ });
37
+ }
38
+ else {
39
+ result[i] = obj[i];
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ catch (_a) {
45
+ return obj;
46
+ }
47
+ }
48
+ exports.applyTimezoneDeep = applyTimezoneDeep;
@@ -1,3 +1,4 @@
1
+ export * from "./applyTimezoneDeep";
1
2
  export * from "./cloneDeep";
2
3
  export * from "./get";
3
4
  export * from "./getAttribute";
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./applyTimezoneDeep"), exports);
17
18
  __exportStar(require("./cloneDeep"), exports);
18
19
  __exportStar(require("./get"), exports);
19
20
  __exportStar(require("./getAttribute"), exports);
@@ -1,5 +1,6 @@
1
1
  export interface IFormatConfig {
2
2
  lang?: string;
3
+ offset?: number;
3
4
  options?: object;
4
5
  isMultiplied?: boolean;
5
6
  }
@@ -1,3 +1,4 @@
1
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
1
2
  import { II18nConfig } from "../../globalization/interfaces/II18nConfig";
2
3
  export interface IWidgetConfig {
3
4
  appid?: string;
@@ -5,6 +6,6 @@ export interface IWidgetConfig {
5
6
  domain: string;
6
7
  i18n?: II18nConfig;
7
8
  qv_token?: string;
8
- timezoneControl?: string;
9
+ timezone?: IDTimezone;
9
10
  userid?: string;
10
11
  }
@@ -10,6 +10,7 @@ const format_1 = require("../../format/format");
10
10
  const isEmpty_1 = require("../../general/mix/isEmpty");
11
11
  const getI18nDateGroupLabel_1 = require("../../globalization/helpers/getI18nDateGroupLabel");
12
12
  const getValueWithSuffixes_1 = require("./getValueWithSuffixes");
13
+ const getDateByTimezone_1 = require("../../dates/helpers/getDateByTimezone");
13
14
  /**
14
15
  * Transforms a value depending of localization/globalization and extras settings.
15
16
  * @param value A value to transform
@@ -19,14 +20,41 @@ const getValueWithSuffixes_1 = require("./getValueWithSuffixes");
19
20
  function transformValue(value, settings) {
20
21
  if ((0, isEmpty_1.isEmpty)(value))
21
22
  return value;
22
- const valueWithI18n = (0, getI18nDateGroupLabel_1.getI18nDateGroupLabel)(value, settings.property, settings.translate);
23
- const valueWithLocalization = (0, format_1.addFormat)(valueWithI18n, getOutputFormat(settings), getFormatConfig(settings));
24
- return (0, getValueWithSuffixes_1.getValueWithSuffixes)(valueWithLocalization, {
25
- suffixTranslateLabel: settings.suffixTranslateLabel,
26
- translate: settings.translate,
27
- });
23
+ const defaultSettings = getDefaultSettings(settings);
24
+ let timezonedValue = value;
25
+ if (!defaultSettings.noTimezone) {
26
+ timezonedValue = (0, getDateByTimezone_1.getDateByTimezone)(value, {
27
+ property: defaultSettings.property,
28
+ timezone: defaultSettings.timezone,
29
+ });
30
+ }
31
+ let valueWithI18n = timezonedValue;
32
+ if (!defaultSettings.noTranslate) {
33
+ valueWithI18n = (0, getI18nDateGroupLabel_1.getI18nDateGroupLabel)(timezonedValue, defaultSettings.property, defaultSettings.translate);
34
+ }
35
+ let valueWithLocalization = valueWithI18n;
36
+ if (!defaultSettings.noLocale) {
37
+ valueWithLocalization = (0, format_1.addFormat)(valueWithI18n, getOutputFormat(settings), getFormatConfig(settings));
38
+ }
39
+ let valueWithSuffix = valueWithI18n;
40
+ if (!defaultSettings.noSuffix) {
41
+ valueWithSuffix = (0, getValueWithSuffixes_1.getValueWithSuffixes)(valueWithLocalization, {
42
+ suffixTranslateLabel: defaultSettings.suffixTranslateLabel,
43
+ translate: defaultSettings.translate,
44
+ });
45
+ }
46
+ return valueWithSuffix;
28
47
  }
29
48
  exports.transformValue = transformValue;
49
+ /**
50
+ * Gets the default settings properties
51
+ * @param {ITransformValueSettings} settings the given settings
52
+ * @returns {ITransformValueSettings} the settings with default properties
53
+ */
54
+ function getDefaultSettings(settings) {
55
+ var _a, _b, _c, _d;
56
+ return Object.assign(Object.assign({}, settings), { noLocale: (_a = settings === null || settings === void 0 ? void 0 : settings.noLocale) !== null && _a !== void 0 ? _a : false, noSuffix: (_b = settings === null || settings === void 0 ? void 0 : settings.noSuffix) !== null && _b !== void 0 ? _b : false, noTimezone: (_c = settings === null || settings === void 0 ? void 0 : settings.noTimezone) !== null && _c !== void 0 ? _c : false, noTranslate: (_d = settings === null || settings === void 0 ? void 0 : settings.noTranslate) !== null && _d !== void 0 ? _d : false });
57
+ }
30
58
  /**
31
59
  * Gets the outputformat settings
32
60
  * @param settings The settings of the transformValue function
@@ -1,4 +1,5 @@
1
1
  import { IBColumn } from "../../columns/interfaces/IBColumn";
2
+ import { IBTimezone } from "../../dates/interfaces/IBTimezone";
2
3
  /**
3
4
  * Structure for Dataset in the frontend side of Qrvey App
4
5
  */
@@ -7,4 +8,5 @@ export interface IBDataset {
7
8
  name?: string;
8
9
  options?: IBColumn[];
9
10
  qrveyid: string;
11
+ timezone?: IBTimezone;
10
12
  }
@@ -2,11 +2,15 @@ import { IAppStatus } from "./IAppStatus";
2
2
  import { IBModelBranchesMap } from "./IBModelBranchesMap";
3
3
  import { IBModelData } from "./IBModelData";
4
4
  import { IAppType } from "./IAppType";
5
+ import { IBTimezone } from "../../dates/interfaces/IBTimezone";
5
6
  export interface IBModel {
6
7
  appType: IAppType;
7
8
  appid: string;
8
9
  branchesMap?: IBModelBranchesMap[];
9
10
  createDate: string;
11
+ /**
12
+ * @deprecated Data Link feature is not longer supported
13
+ */
10
14
  datalinkInfo?: any[];
11
15
  geoGroups?: any[];
12
16
  modifyDate: string;
@@ -16,5 +20,6 @@ export interface IBModel {
16
20
  questionOrder: string[];
17
21
  questions: IBModelData;
18
22
  status: IAppStatus;
23
+ timezone: IBTimezone;
19
24
  userid: string;
20
25
  }
@@ -1,9 +1,11 @@
1
1
  import { IColumn } from "../../columns/interfaces/IColumn";
2
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
2
3
  import { IBDataset } from "./IBDataset";
3
4
  /**
4
5
  * Structure for Dataset in the frontend side of Qrvey App
5
6
  */
6
- export interface IDataset extends Omit<IBDataset, "name" | "options"> {
7
+ export interface IDataset extends Omit<IBDataset, "name" | "options" | "timezone"> {
7
8
  label?: string;
8
9
  options?: IColumn[];
10
+ timezone?: IDTimezone;
9
11
  }
@@ -1,10 +1,12 @@
1
1
  import { IColumn } from "../../columns/interfaces/IColumn";
2
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
2
3
  import { IBModel } from "./IBModel";
3
4
  import { IModelBranchesMap } from "./IModelBranchesMap";
4
- export interface IModel extends Omit<IBModel, "questions" | "branchesMap" | "name" | "numResponses" | "questionOrder"> {
5
+ export interface IModel extends Omit<IBModel, "questions" | "branchesMap" | "name" | "numResponses" | "questionOrder" | "timezone"> {
5
6
  columns: IColumn[];
6
7
  columnOrder: string[];
7
8
  branchesMap: IModelBranchesMap[];
8
9
  label: string;
10
+ timezone: IDTimezone;
9
11
  totalRecords: number;
10
12
  }
@@ -1,11 +1,17 @@
1
1
  import { IColumn } from "../../columns/interfaces/IColumn";
2
2
  import { IColumnPropertyType } from "../../columns/interfaces/IColumnPropertyType";
3
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
3
4
  import { II18nConfig } from "../../globalization/interfaces/II18nConfig";
4
5
  import { II18nServiceTranslate } from "../../globalization/interfaces/II18nServiceTranslate";
5
6
  export interface ITransformValueSettings {
6
7
  column: IColumn;
7
8
  property: IColumnPropertyType;
9
+ timezone?: IDTimezone;
8
10
  translate: II18nServiceTranslate;
9
11
  i18n: II18nConfig;
10
12
  suffixTranslateLabel?: string;
13
+ noLocale?: boolean;
14
+ noTranslate?: boolean;
15
+ noSuffix?: boolean;
16
+ noTimezone?: boolean;
11
17
  }
@@ -3,11 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BDatasetsToUIDatasets = void 0;
4
4
  const getAttribute_1 = require("../../general/object/getAttribute");
5
5
  const BColumnsToUIColumns_adapter_1 = require("./BColumnsToUIColumns.adapter");
6
+ const BTimezoneToUITimezone_1 = require("./BTimezoneToUITimezone");
6
7
  function BDatasetsToUIDatasets(datasets = []) {
7
8
  return datasets.map((dataset) => ({
8
9
  qrveyid: (0, getAttribute_1.getAttribute)(dataset, "qrvey_id"),
9
10
  label: dataset.name,
10
11
  options: (0, BColumnsToUIColumns_adapter_1.BColumnsToUIColumns)(dataset.options, dataset),
12
+ timezone: (0, BTimezoneToUITimezone_1.BTimezoneToUITimezone)(dataset.timezone),
11
13
  }));
12
14
  }
13
15
  exports.BDatasetsToUIDatasets = BDatasetsToUIDatasets;
@@ -4,6 +4,7 @@ exports.BModelToUIModel = void 0;
4
4
  const isEmpty_1 = require("../../general/mix/isEmpty");
5
5
  const BBranchesMapToUIBranchesMap_adapter_1 = require("./BBranchesMapToUIBranchesMap.adapter");
6
6
  const BColumnsToUIColumns_adapter_1 = require("./BColumnsToUIColumns.adapter");
7
+ const BTimezoneToUITimezone_1 = require("./BTimezoneToUITimezone");
7
8
  function BModelToUIModel(model) {
8
9
  if ((0, isEmpty_1.isEmpty)(model))
9
10
  return;
@@ -23,6 +24,7 @@ function BModelToUIModel(model) {
23
24
  totalRecords: model.numResponses,
24
25
  qrveyid: model.qrveyid,
25
26
  status: model.status,
27
+ timezone: (0, BTimezoneToUITimezone_1.BTimezoneToUITimezone)(model.timezone),
26
28
  userid: model.userid,
27
29
  };
28
30
  }
@@ -0,0 +1,8 @@
1
+ import { IDTimezone } from "../../dates/interfaces/IDTimezone";
2
+ import { IBTimezone } from "../../dates/interfaces/IBTimezone";
3
+ /**
4
+ * Transforms the backenc timezone structure to UI timezone structure
5
+ * @param {IBTimezone} timezone the backend timezone object
6
+ * @returns {IDTimezone} the UI timezone object
7
+ */
8
+ export declare function BTimezoneToUITimezone(timezone: IBTimezone): IDTimezone;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BTimezoneToUITimezone = void 0;
4
+ const TIMEZONE_TYPE_1 = require("../../dates/constants/TIMEZONE_TYPE");
5
+ const getTimezoneOffsetByType_1 = require("../../dates/helpers/getTimezoneOffsetByType");
6
+ /**
7
+ * Transforms the backenc timezone structure to UI timezone structure
8
+ * @param {IBTimezone} timezone the backend timezone object
9
+ * @returns {IDTimezone} the UI timezone object
10
+ */
11
+ function BTimezoneToUITimezone(timezone) {
12
+ const type = (timezone === null || timezone === void 0 ? void 0 : timezone.type) || TIMEZONE_TYPE_1.TIMEZONE_TYPE.DEFAULT;
13
+ return {
14
+ type,
15
+ offset: (0, getTimezoneOffsetByType_1.getTimezoneOffsetByType)(Object.assign(Object.assign({}, timezone), { type })),
16
+ };
17
+ }
18
+ exports.BTimezoneToUITimezone = BTimezoneToUITimezone;
@@ -2,7 +2,7 @@ export default class Request {
2
2
  static checkStatus(response: any): Promise<any>;
3
3
  static hasQvToken(config: any): boolean;
4
4
  static getQvToken(config: any): any;
5
- static getTimezoneControl(config: any): any;
5
+ static getTimezoneOffset(config: any): string;
6
6
  static hasApiKey(config: any): boolean;
7
7
  static getApiKey(config: any): any;
8
8
  static makeUrl(config: any, url: any, params?: any): string;
@@ -9,6 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const numericOffsetToISO_1 = require("../../dates/adapters/numericOffsetToISO");
13
+ const isEmpty_1 = require("../../general/mix/isEmpty");
12
14
  const getAttribute_1 = require("../../general/object/getAttribute");
13
15
  const serialize_1 = require("../../general/object/serialize");
14
16
  const parseUrl_1 = require("../../general/string/parseUrl");
@@ -26,8 +28,12 @@ class Request {
26
28
  static getQvToken(config) {
27
29
  return (0, getAttribute_1.getAttribute)(config, "qv_token");
28
30
  }
29
- static getTimezoneControl(config) {
30
- return (0, getAttribute_1.getAttribute)(config, "timezone_control");
31
+ static getTimezoneOffset(config) {
32
+ var _a;
33
+ const timezoneOffset = (_a = config.timezone) === null || _a === void 0 ? void 0 : _a.offset;
34
+ if (!(0, isEmpty_1.isEmpty)(timezoneOffset)) {
35
+ return (0, numericOffsetToISO_1.numericOffsetToISO)(timezoneOffset);
36
+ }
31
37
  }
32
38
  static hasApiKey(config) {
33
39
  return !!this.getApiKey(config);
@@ -70,9 +76,9 @@ class Request {
70
76
  cfg.credentials = "include";
71
77
  }
72
78
  }
73
- const timezoneControl = this.getTimezoneControl(reqData.config);
74
- if (timezoneControl) {
75
- cfg.headers["q-timezone-control"] = `offset=${timezoneControl};use-client-offset-only`;
79
+ const timezoneOffset = this.getTimezoneOffset(reqData.config);
80
+ if (timezoneOffset) {
81
+ cfg.headers["q-timezone-control"] = `offset=${timezoneOffset}`;
76
82
  }
77
83
  // AbortSignal (https://developers.google.com/web/updates/2017/09/abortable-fetch)
78
84
  if (reqData.config && reqData.config.signal) {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gets the numeric offset (minutes) from the ISO offset (string)
3
+ * @param {string} offset the timezone offset
4
+ * @returns {number} the offset in minutes
5
+ */
6
+ export declare function ISOToNumericOffset(offset: number | string): number;
@@ -0,0 +1,17 @@
1
+ import { isNaNV2 } from "../../general/mix/isNaNV2";
2
+ import { isValidISOOffset } from "../helpers/isValidISOOffset";
3
+ /**
4
+ * Gets the numeric offset (minutes) from the ISO offset (string)
5
+ * @param {string} offset the timezone offset
6
+ * @returns {number} the offset in minutes
7
+ */
8
+ export function ISOToNumericOffset(offset) {
9
+ if (typeof offset === "string" && offset === "browser")
10
+ return -1 * new Date().getTimezoneOffset();
11
+ if (typeof offset === "number" || !isNaNV2(offset))
12
+ return +offset;
13
+ if (!isValidISOOffset(offset))
14
+ return 0;
15
+ const [hours, minutes] = offset.split(":").map(Number);
16
+ return hours * 60 + minutes;
17
+ }
@@ -5,8 +5,10 @@ export * from "./dateToQuarterYear";
5
5
  export * from "./dateToWeekYear";
6
6
  export * from "./dateToYear";
7
7
  export * from "./hmsToDate";
8
+ export * from "./ISOToNumericOffset";
8
9
  export * from "./mdyDateToDate";
9
10
  export * from "./monthYearToDate";
11
+ export * from "./numericOffsetToISO";
10
12
  export * from "./quarterYearToDate";
11
13
  export * from "./weekYearToDate";
12
14
  export * from "./yearToDate";
@@ -5,8 +5,10 @@ export * from "./dateToQuarterYear";
5
5
  export * from "./dateToWeekYear";
6
6
  export * from "./dateToYear";
7
7
  export * from "./hmsToDate";
8
+ export * from "./ISOToNumericOffset";
8
9
  export * from "./mdyDateToDate";
9
10
  export * from "./monthYearToDate";
11
+ export * from "./numericOffsetToISO";
10
12
  export * from "./quarterYearToDate";
11
13
  export * from "./weekYearToDate";
12
14
  export * from "./yearToDate";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Gets the ISO offset From the numeric offset (minutes)
3
+ * @param {number} offset the timezone offset
4
+ * @returns {string} the offset in minutes
5
+ */
6
+ export declare function numericOffsetToISO(offset: number | string): string;
@@ -0,0 +1,25 @@
1
+ import { isNaNV2 } from "../../general/mix/isNaNV2";
2
+ import { getSign } from "../../general/numeric/getSign";
3
+ import { padLeadingZeros } from "../../general/string/padLeadingZeros";
4
+ import { isValidISOOffset } from "../helpers/isValidISOOffset";
5
+ /**
6
+ * Gets the ISO offset From the numeric offset (minutes)
7
+ * @param {number} offset the timezone offset
8
+ * @returns {string} the offset in minutes
9
+ */
10
+ export function numericOffsetToISO(offset) {
11
+ let newOffset = offset;
12
+ if (typeof offset === "string" && offset === "browser")
13
+ newOffset = -1 * new Date().getTimezoneOffset();
14
+ if (typeof newOffset === "string" && isValidISOOffset(newOffset))
15
+ return String(newOffset);
16
+ if (typeof newOffset !== "number" && isNaNV2(newOffset))
17
+ return "+00:00";
18
+ if (typeof newOffset === "string" && !isNaNV2(newOffset))
19
+ newOffset = +newOffset;
20
+ const sign = getSign(newOffset);
21
+ newOffset = Math.abs(newOffset);
22
+ const hours = padLeadingZeros(Math.floor(newOffset / 60), 2);
23
+ const minutes = padLeadingZeros(newOffset % 60, 2);
24
+ return `${sign}${hours}:${minutes}`;
25
+ }
@@ -0,0 +1 @@
1
+ export declare const ISO_8601_REGEX: RegExp;
@@ -0,0 +1 @@
1
+ export const ISO_8601_REGEX = /^[+-]?\d{2}:\d{2}$/;
@@ -0,0 +1,5 @@
1
+ export declare enum TIMEZONE_TYPE {
2
+ BROWSER = "BROWSER",
3
+ DEFAULT = "DEFAULT",
4
+ FIXED = "FIXED"
5
+ }
@@ -0,0 +1,6 @@
1
+ export var TIMEZONE_TYPE;
2
+ (function (TIMEZONE_TYPE) {
3
+ TIMEZONE_TYPE["BROWSER"] = "BROWSER";
4
+ TIMEZONE_TYPE["DEFAULT"] = "DEFAULT";
5
+ TIMEZONE_TYPE["FIXED"] = "FIXED";
6
+ })(TIMEZONE_TYPE || (TIMEZONE_TYPE = {}));
@@ -38,6 +38,7 @@ export * from "./DATE_YEAR_MONTHS_MMMM";
38
38
  export * from "./DATE_YEAR_QUARTERS";
39
39
  export * from "./DATE_YEAR_QUARTERS_RANGE";
40
40
  export * from "./DATETIME_COLUMN_FORMAT";
41
+ export * from "./ISO_8601_REGEX";
41
42
  export * from "./TIME_GROUPING_PROPERTY_INFO_LIST";
42
43
  export * from "./TIME_GROUPING_PROPERTY_INFO";
43
44
  export * from "./TIME_GROUPING_PROPERTY_LABEL";
@@ -38,6 +38,7 @@ export * from "./DATE_YEAR_MONTHS_MMMM";
38
38
  export * from "./DATE_YEAR_QUARTERS";
39
39
  export * from "./DATE_YEAR_QUARTERS_RANGE";
40
40
  export * from "./DATETIME_COLUMN_FORMAT";
41
+ export * from "./ISO_8601_REGEX";
41
42
  export * from "./TIME_GROUPING_PROPERTY_INFO_LIST";
42
43
  export * from "./TIME_GROUPING_PROPERTY_INFO";
43
44
  export * from "./TIME_GROUPING_PROPERTY_LABEL";
@@ -0,0 +1,8 @@
1
+ import { IGetDateByTimezoneSettings } from "../interfaces/IGetDateByTimezoneSettings";
2
+ /**
3
+ * Gets a date value in the given timezone
4
+ * @param {string} date the date
5
+ * @param {IGetDateByTimezoneSettings} settings The settings of the getDateByTimezone function
6
+ * @returns {string} A transformed value
7
+ */
8
+ export declare function getDateByTimezone(date: string, settings: IGetDateByTimezoneSettings): string;
@@ -0,0 +1,37 @@
1
+ import { isEmpty } from "../../general/mix/isEmpty";
2
+ import { DATE_GROUPING_TIME_PROPERTY } from "../constants/DATE_GROUPING_TIME_PROPERTY";
3
+ import { TIMEZONE_TYPE } from "../constants/TIMEZONE_TYPE";
4
+ import { getDateByDateFormat } from "./getDateByDateFormat";
5
+ import { getDateByTimezoneOffset } from "./getDateByTimezoneOffset";
6
+ import { getDateFormatByProperty } from "./getDateFormatByProperty";
7
+ import { getFormattedDateByFormat } from "./getFormattedDateByFormat";
8
+ /**
9
+ * Gets a date value in the given timezone
10
+ * @param {string} date the date
11
+ * @param {IGetDateByTimezoneSettings} settings The settings of the getDateByTimezone function
12
+ * @returns {string} A transformed value
13
+ */
14
+ export function getDateByTimezone(date, settings) {
15
+ const defaultSettings = getDefaultSettings(settings);
16
+ const isDateTime = [
17
+ DATE_GROUPING_TIME_PROPERTY.HOUR,
18
+ DATE_GROUPING_TIME_PROPERTY.MINUTE,
19
+ DATE_GROUPING_TIME_PROPERTY.SECOND,
20
+ ].includes(defaultSettings.property);
21
+ if (!isEmpty(defaultSettings.timezone.offset) && isDateTime) {
22
+ const dateFormat = getDateFormatByProperty(defaultSettings.property);
23
+ const formattedDate = getDateByDateFormat(date, dateFormat);
24
+ const timezonedDate = getDateByTimezoneOffset(formattedDate, defaultSettings.timezone.offset);
25
+ return getFormattedDateByFormat(timezonedDate, dateFormat);
26
+ }
27
+ return date;
28
+ }
29
+ function getDefaultSettings(settings) {
30
+ return {
31
+ property: settings.property,
32
+ timezone: (settings === null || settings === void 0 ? void 0 : settings.timezone) || {
33
+ offset: undefined,
34
+ type: TIMEZONE_TYPE.DEFAULT,
35
+ },
36
+ };
37
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Gets a Date with the given offset of the Timezone.
3
+ * No given an offset the default is going to be set by the browser
4
+ * @param date String, object or millisencond number of the date
5
+ * @returns updated Date object
6
+ */
7
+ export declare function getDateByTimezoneOffset(date: string | Date | number, offset?: number | string): Date;