@24i/bigscreen-sdk 1.0.54-alpha.2836 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.vscode/settings.json +6 -0
  2. package/README.md +3 -2
  3. package/package.json +10 -10
  4. package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +14 -10
  5. package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +2 -10
  6. package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +1 -6
  7. package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -1
  8. package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +24 -36
  9. package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +1 -5
  10. package/packages/analytics/src/clients/TealiumAnalytics/findIdForLanguage.ts +9 -0
  11. package/packages/analytics/src/clients/TealiumAnalytics/index.ts +1 -1
  12. package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +1 -3
  13. package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +14 -16
  14. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +1 -1
  15. package/packages/analytics/src/clients/TealiumAnalytics/types.ts +14 -19
  16. package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +22 -13
  17. package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +3 -15
  18. package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +4 -7
  19. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +13 -0
  20. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +16 -0
  21. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +3 -6
  22. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +2 -2
  23. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +3 -4
  24. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +3 -2
  25. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +2 -2
  26. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +2 -2
  27. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +3 -4
  28. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +3 -4
  29. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +3 -4
  30. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +2 -2
  31. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +2 -2
  32. package/packages/analytics/src/clients/TwentyFourIQ/types.ts +28 -45
  33. package/packages/create-package/dist/createPackage.js +66 -0
  34. package/packages/create-package/dist/createPackage.js.map +1 -0
  35. package/packages/create-package/dist/index.js +5 -0
  36. package/packages/create-package/dist/index.js.map +1 -0
  37. package/packages/create-package/dist/questionnaire/questions.js +35 -0
  38. package/packages/create-package/dist/questionnaire/questions.js.map +1 -0
  39. package/packages/create-package/dist/settings/Settings.js +10 -0
  40. package/packages/create-package/dist/settings/Settings.js.map +1 -0
  41. package/packages/create-package/dist/types.js +3 -0
  42. package/packages/create-package/dist/types.js.map +1 -0
  43. package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +2 -23
  44. package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -8
  45. package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -4
  46. package/packages/driver-androidtv/src/DeviceAndroidTV.ts +0 -38
  47. package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +0 -9
  48. package/packages/driver-androidtv/src/index.ts +0 -1
  49. package/packages/driver-androidtv/src/types.ts +0 -42
  50. package/packages/driver-base/src/DeviceBase.ts +0 -19
  51. package/packages/driver-base/src/__mocks__/DeviceBase.ts +0 -24
  52. package/packages/driver-base/src/index.ts +0 -3
  53. package/packages/driver-browser/src/DeviceBrowser.ts +0 -26
  54. package/packages/driver-entone/src/DeviceEntone.ts +1 -31
  55. package/packages/driver-firetv/src/DeviceFireTV.ts +1 -74
  56. package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -9
  57. package/packages/driver-hbbtv/src/DeviceHbbTV.ts +0 -26
  58. package/packages/driver-kreatv/src/DeviceKreaTV.ts +0 -26
  59. package/packages/driver-saphi/src/DeviceSaphi.ts +0 -26
  60. package/packages/driver-smartcast/src/DeviceSmartCast.ts +1 -78
  61. package/packages/driver-smartcast/src/__mocks__/api.ts +2 -32
  62. package/packages/driver-smartcast/src/types.ts +2 -48
  63. package/packages/driver-tizen/src/DeviceTizen.ts +7 -126
  64. package/packages/driver-tizen/src/ITizen.ts +202 -15116
  65. package/packages/driver-tizen/src/IWebapis.ts +87 -8643
  66. package/packages/driver-tizen/src/TizenKeys.ts +2 -2
  67. package/packages/driver-tizen/src/__mocks__/tizen.ts +8 -7
  68. package/packages/driver-tizen/src/constants.ts +195 -1
  69. package/packages/driver-tizen/src/types.ts +14 -0
  70. package/packages/driver-vidaa/src/DeviceVidaa.ts +0 -26
  71. package/packages/driver-webos/src/DeviceWebos.ts +0 -47
  72. package/packages/driver-webos/src/__mocks__/webos.ts +0 -33
  73. package/packages/driver-webos/src/constants.ts +0 -1
  74. package/packages/driver-webos/src/types.ts +0 -30
  75. package/packages/driver-xbox/src/DeviceXbox.ts +1 -30
  76. package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +6 -6
  77. package/packages/input/README.md +3 -0
  78. package/packages/input/src/Input.tsx +62 -32
  79. package/packages/input/src/utils.ts +71 -0
  80. package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -1
  81. package/packages/keyboard/src/utils/caret.ts +8 -5
  82. package/packages/keyboard/src/utils/input.ts +6 -5
  83. package/packages/list/src/BasicList/BasicList.tsx +7 -7
  84. package/packages/list/src/CenteredList/CenteredList.tsx +2 -2
  85. package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +7 -7
  86. package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +2 -2
  87. package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +2 -2
  88. package/packages/list/src/FixedToEndList/FixedToEndList.tsx +2 -2
  89. package/packages/list/src/interface.ts +2 -2
  90. package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +1 -7
  91. package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +1 -3
  92. package/packages/router/README.md +0 -1
  93. package/packages/router/src/Router.tsx +1 -4
  94. package/packages/router/src/utils.ts +1 -1
  95. package/utils/release/release.ts +5 -7
  96. package/ci/is_ci_job_skippable.sh +0 -153
  97. package/packages/analytics/src/clients/TealiumAnalytics/findForLanguage.ts +0 -9
  98. package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppOpen.ts +0 -13
  99. package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdEvent.ts +0 -20
  100. package/packages/driver-base/src/types/AdInfo.ts +0 -5
  101. package/packages/driver-base/src/types/InAppPurchase.ts +0 -25
  102. package/packages/driver-firetv/src/types.ts +0 -1
  103. package/packages/input/src/handleOverflow.ts +0 -29
  104. package/packages/keyboard/src/WhitelabelKeyboard/layouts/spanish.ts +0 -26
  105. package/packages/keyboard/src/utils/setInputSelectionRange.ts +0 -10
@@ -0,0 +1,71 @@
1
+ import { isRtl } from '@24i/bigscreen-sdk/i18n';
2
+
3
+ /**
4
+ * Handles overflowing text in the input by moving with the inner
5
+ * text element.
6
+ * @param wrap input wrapper
7
+ * @param caret caret element
8
+ * @param text input inner text element
9
+ * @returns value how much is text element moved
10
+ */
11
+ export const handleOverflow = (
12
+ wrap: HTMLDivElement | null,
13
+ caret: HTMLDivElement | null,
14
+ text: HTMLDivElement | null,
15
+ ) => {
16
+ if (!wrap || !caret || !text) return 0;
17
+ const { width: wrapWidth, left: wrapLeft } = wrap.getBoundingClientRect();
18
+ const { width: caretWidth, left: caretLeft } = caret.getBoundingClientRect();
19
+ const caretOffset = isRtl() ? caretLeft - caretWidth : caretLeft + caretWidth;
20
+ if (!isRtl() && wrapWidth + wrapLeft < caretOffset) {
21
+ const margin = -(caretOffset - wrapWidth - wrapLeft);
22
+ text.style.marginLeft = `${margin}px`;
23
+ text.style.marginRight = '0px';
24
+ return margin;
25
+ }
26
+ if (isRtl() && caretOffset < wrapLeft) {
27
+ const margin = -(wrapLeft - caretOffset);
28
+ text.style.marginLeft = '0px';
29
+ text.style.marginRight = `${margin}px`;
30
+ return margin;
31
+ }
32
+ text.style.marginLeft = '0px';
33
+ text.style.marginRight = '0px';
34
+ return 0;
35
+ };
36
+
37
+ /**
38
+ * Check for char element position mishmash in the input's text element. This is
39
+ * necessary to recognize if the char is in the wrong direction than it's position
40
+ * in children collection, this means that the char is LTR char in RTL scheme or RTL
41
+ * char in LTR scheme.
42
+ * @param text input inner text element
43
+ * @param position position of the char in children collection
44
+ * @returns true if char has position mishmash
45
+ */
46
+ export const checkCharOrderMishmash = (text: HTMLDivElement, position: number) => {
47
+ const { children } = text!;
48
+ if (!children.length) return false;
49
+ const charOffsets: {
50
+ index: number,
51
+ offset: number,
52
+ }[] = [];
53
+ for (let i = 0; i < children.length; i++) {
54
+ charOffsets.push({
55
+ index: i,
56
+ offset: (children[i] as HTMLElement).getBoundingClientRect().left,
57
+ });
58
+ }
59
+ charOffsets.sort((a, b) => {
60
+ if (a.offset < b.offset) return isRtl() ? 1 : -1;
61
+ if (a.offset > b.offset) return isRtl() ? -1 : 1;
62
+ return 0;
63
+ });
64
+ const lastPos = children.length - 1;
65
+ const posBefore = position - 1;
66
+ const mishmashBefore = posBefore < 0
67
+ ? false : charOffsets[posBefore].index !== posBefore;
68
+ const mishmashCurrent = charOffsets[position].index !== position;
69
+ if (mishmashCurrent) return true;
70
+ return !mishmashCurrent && mishmashBefore && position !== lastPos;
71
+ };
@@ -7,7 +7,6 @@ export { latin } from './latin';
7
7
  export { pashto } from './pashto';
8
8
  export { persian } from './persian';
9
9
  export { russian } from './russian';
10
- export { spanish } from './spanish';
11
10
  export { special } from './special';
12
11
  export { tibetan } from './tibetan';
13
12
  export { turkish } from './turkish';
@@ -1,11 +1,14 @@
1
- import { setInputSelectionRange } from './setInputSelectionRange';
1
+ const updateCaretPosition = (input: HTMLInputElement, position: number) => {
2
+ input.selectionStart = position;
3
+ input.selectionEnd = position;
4
+ };
2
5
 
3
6
  export const caretLeft = (input: HTMLInputElement | null): false | number => {
4
7
  if (!input) return false;
5
8
  const selectionStart = input.selectionStart!;
6
9
  if (selectionStart > 0) {
7
10
  const newPosition = selectionStart - 1;
8
- setInputSelectionRange(input, newPosition);
11
+ updateCaretPosition(input, newPosition);
9
12
  return newPosition;
10
13
  }
11
14
  return false;
@@ -17,7 +20,7 @@ export const caretRight = (input: HTMLInputElement | null): false | number => {
17
20
  const selectionStart = input.selectionStart!;
18
21
  if (selectionStart < value.length) {
19
22
  const newPosition = selectionStart + 1;
20
- setInputSelectionRange(input, newPosition);
23
+ updateCaretPosition(input, newPosition);
21
24
  return newPosition;
22
25
  }
23
26
  return false;
@@ -27,7 +30,7 @@ export const caretHome = (input: HTMLInputElement | null): false | number => {
27
30
  if (!input) return false;
28
31
  const selectionStart = input.selectionStart!;
29
32
  if (selectionStart > 0) {
30
- setInputSelectionRange(input, 0);
33
+ updateCaretPosition(input, 0);
31
34
  return 0;
32
35
  }
33
36
  return false;
@@ -38,7 +41,7 @@ export const caretEnd = (input: HTMLInputElement | null): false | number => {
38
41
  const { value: { length } } = input;
39
42
  const selectionStart = input.selectionStart!;
40
43
  if (selectionStart < length) {
41
- setInputSelectionRange(input, length);
44
+ updateCaretPosition(input, length);
42
45
  return length;
43
46
  }
44
47
  return false;
@@ -1,5 +1,3 @@
1
- import { setInputSelectionRange } from './setInputSelectionRange';
2
-
3
1
  export const insertCharAtCaret = (input: HTMLInputElement | null, char: string): false | string => {
4
2
  if (!input) return false;
5
3
  const { value } = input;
@@ -8,7 +6,8 @@ export const insertCharAtCaret = (input: HTMLInputElement | null, char: string):
8
6
  const postCaret = value.substring(selectionStart);
9
7
  input.value = `${preCaret}${char}${postCaret}`;
10
8
  const newCaretPosition = selectionStart + char.length;
11
- setInputSelectionRange(input, newCaretPosition);
9
+ input.selectionStart = newCaretPosition;
10
+ input.selectionEnd = newCaretPosition;
12
11
  return input.value;
13
12
  };
14
13
 
@@ -21,7 +20,8 @@ export const backspace = (input: HTMLInputElement): false | string => {
21
20
  const postCaret = value.substring(selectionStart);
22
21
  input.value = `${preCaret}${postCaret}`;
23
22
  const newCaretPosition = selectionStart - 1;
24
- setInputSelectionRange(input, newCaretPosition);
23
+ input.selectionStart = newCaretPosition;
24
+ input.selectionEnd = newCaretPosition;
25
25
  return input.value;
26
26
  };
27
27
 
@@ -34,6 +34,7 @@ export const del = (input: HTMLInputElement): false | string => {
34
34
  const postCaret = value.substring(selectionStart + 1);
35
35
  input.value = `${preCaret}${postCaret}`;
36
36
  const newCaretPosition = selectionStart;
37
- setInputSelectionRange(input, newCaretPosition);
37
+ input.selectionStart = newCaretPosition;
38
+ input.selectionEnd = newCaretPosition;
38
39
  return input.value;
39
40
  };
@@ -127,34 +127,34 @@ export class BasicList<T extends Item<U>, U>
127
127
  this.controller.focusCurrentItem(options);
128
128
  }
129
129
 
130
- scrollTo(index: number, animate?: boolean) {
130
+ scrollTo(index: number) {
131
131
  const list = this.base.current!;
132
132
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
133
133
  if (list.index === safeIndex) return;
134
134
  if (list.index < safeIndex) {
135
- this.scrollToForward(safeIndex, animate);
135
+ this.scrollToForward(safeIndex);
136
136
  } else {
137
- this.scrollToBackward(safeIndex, animate);
137
+ this.scrollToBackward(safeIndex);
138
138
  }
139
139
  }
140
140
 
141
- private scrollToForward(index: number, animate?: boolean) {
141
+ private scrollToForward(index: number) {
142
142
  const { visibleItems } = this.props;
143
143
  const list = this.base.current!;
144
144
  list.index = index;
145
145
  const scrollTarget = list.index - visibleItems + VISIBLE_ITEMS_OFFSET;
146
146
  if (scrollTarget > this.controller.scrollIndex) {
147
- this.controller.scroll(scrollTarget, animate);
147
+ this.controller.scroll(scrollTarget);
148
148
  }
149
149
  }
150
150
 
151
- private scrollToBackward(index: number, animate?: boolean) {
151
+ private scrollToBackward(index: number) {
152
152
  const { firstScrollStep, scrollStep } = this.props;
153
153
  const list = this.base.current!;
154
154
  list.index = index;
155
155
  const offset = firstScrollStep < scrollStep ? 1 : 0;
156
156
  if (list.index - offset < this.controller.scrollIndex) {
157
- this.controller.scroll(list.index, animate);
157
+ this.controller.scroll(list.index);
158
158
  }
159
159
  }
160
160
 
@@ -90,12 +90,12 @@ export class CenteredList<T extends Item<U>, U>
90
90
  this.controller.focusCurrentItem(options);
91
91
  }
92
92
 
93
- scrollTo(index: number, animate?: boolean) {
93
+ scrollTo(index: number) {
94
94
  const list = this.base.current!;
95
95
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
96
96
  if (list.index === safeIndex) return;
97
97
  list.index = safeIndex;
98
- this.controller.scroll(list.index, animate);
98
+ this.controller.scroll(list.index);
99
99
  }
100
100
 
101
101
  render() {
@@ -120,18 +120,18 @@ export class EdgeOffsetList<T extends Item<U>, U>
120
120
  this.controller.focusCurrentItem(options);
121
121
  }
122
122
 
123
- scrollTo(index: number, animate?: boolean) {
123
+ scrollTo(index: number) {
124
124
  const list = this.base.current!;
125
125
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
126
126
  if (list.index === safeIndex) return;
127
127
  if (list.index < safeIndex) {
128
- this.scrollToForward(safeIndex, animate);
128
+ this.scrollToForward(safeIndex);
129
129
  } else {
130
- this.scrollToBackward(safeIndex, animate);
130
+ this.scrollToBackward(safeIndex);
131
131
  }
132
132
  }
133
133
 
134
- private scrollToForward(index: number, animate?: boolean) {
134
+ private scrollToForward(index: number) {
135
135
  const { visibleItems, edgeOffset } = this.props;
136
136
  const list = this.base.current!;
137
137
  list.index = index;
@@ -140,16 +140,16 @@ export class EdgeOffsetList<T extends Item<U>, U>
140
140
  : edgeOffset + list.index - list.data.length - 1;
141
141
  const scrollTarget = list.index - visibleItems + offset + VISIBLE_ITEMS_OFFSET;
142
142
  if (scrollTarget > this.controller.scrollIndex) {
143
- this.controller.scroll(scrollTarget, animate);
143
+ this.controller.scroll(scrollTarget);
144
144
  }
145
145
  }
146
146
 
147
- private scrollToBackward(index: number, animate?: boolean) {
147
+ private scrollToBackward(index: number) {
148
148
  const { edgeOffset } = this.props;
149
149
  const list = this.base.current!;
150
150
  list.index = index;
151
151
  if (list.index <= this.controller.scrollIndex) {
152
- this.controller.scroll(list.index < edgeOffset ? 0 : list.index - edgeOffset, animate);
152
+ this.controller.scroll(list.index < edgeOffset ? 0 : list.index - edgeOffset);
153
153
  }
154
154
  }
155
155
 
@@ -96,12 +96,12 @@ export class FirstOnlyList<T extends Item<U>, U>
96
96
  this.controller.focusCurrentItem(options);
97
97
  }
98
98
 
99
- scrollTo(index: number, animate?: boolean) {
99
+ scrollTo(index: number) {
100
100
  const list = this.base.current!;
101
101
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
102
102
  if (list.index === safeIndex) return;
103
103
  list.index = safeIndex;
104
- this.controller.scroll(list.index, animate);
104
+ this.controller.scroll(list.index);
105
105
  }
106
106
 
107
107
  render() {
@@ -106,12 +106,12 @@ export class FirstOnlyVariedList<T extends Item<U>, U> extends Component<Props<T
106
106
  this.controller.focusCurrentItem(options);
107
107
  }
108
108
 
109
- scrollTo(index: number, animate?: boolean) {
109
+ scrollTo(index: number) {
110
110
  const list = this.base.current!;
111
111
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
112
112
  if (list.index === safeIndex) return;
113
113
  list.index = safeIndex;
114
- this.controller.scroll(0, animate);
114
+ this.controller.scroll(0);
115
115
  }
116
116
 
117
117
  render() {
@@ -99,12 +99,12 @@ export class FixedToEndList<T extends Item<U>, U>
99
99
  this.controller.focusCurrentItem(options);
100
100
  }
101
101
 
102
- scrollTo(index: number, animate?: boolean) {
102
+ scrollTo(index: number) {
103
103
  const list = this.base.current!;
104
104
  const safeIndex = Math.max(0, Math.min(index, list.data.length - 1));
105
105
  if (list.index === safeIndex) return;
106
106
  list.index = safeIndex;
107
- this.controller.scroll(list.index, animate);
107
+ this.controller.scroll(list.index);
108
108
  }
109
109
 
110
110
  render() {
@@ -12,7 +12,7 @@ export interface List<
12
12
  controller: UnifiedListController<U>,
13
13
  appendData(data: U[]): void,
14
14
  prependData(data: U[]): void,
15
- scrollTo(index: number, animate?: boolean): void,
15
+ scrollTo(index: number): void,
16
16
  }
17
17
 
18
18
  export interface VariedList<
@@ -22,7 +22,7 @@ export interface VariedList<
22
22
  controller: UnifiedVariedListController<U>,
23
23
  appendData(data: U[]): void,
24
24
  prependData(data: U[]): void,
25
- scrollTo(index: number, animate?: boolean): void,
25
+ scrollTo(index: number): void,
26
26
  }
27
27
 
28
28
  export interface ListComponent<
@@ -43,13 +43,7 @@ export class ConsoleLogger extends LoggerBase {
43
43
  let errorMessage = category ? `[${category.toUpperCase()}] ${message}` : message;
44
44
  if (additionalData) {
45
45
  if (additionalData.message) errorMessage += ` - ${additionalData.message}`;
46
- let stringifiedAdditionalData;
47
- try {
48
- stringifiedAdditionalData = JSON.stringify(
49
- additionalData, null, LOG_MESSAGE_SPACE_SIZE,
50
- );
51
- } catch {}
52
- logFunction(errorMessage, stringifiedAdditionalData);
46
+ logFunction(errorMessage, JSON.stringify(additionalData, null, LOG_MESSAGE_SPACE_SIZE));
53
47
  } else {
54
48
  logFunction(errorMessage);
55
49
  }
@@ -170,9 +170,7 @@ export class SentryLogger extends LoggerBase {
170
170
  }
171
171
  if (additionalData) {
172
172
  if (additionalData.message) logMessage += ` - ${additionalData.message}`;
173
- try {
174
- scope.setExtra(contextKeys.ADDITIONAL_DATA, JSON.stringify(additionalData));
175
- } catch {}
173
+ scope.setExtra(contextKeys.ADDITIONAL_DATA, JSON.stringify(additionalData));
176
174
  }
177
175
  Sentry.captureMessage(logMessage, level);
178
176
  });
@@ -16,7 +16,6 @@ It will take care of route switching based on hash changes. It also supports par
16
16
  - `children` - Routes
17
17
  - `defaultPath` - optional path to which go after Router is mounted (default: `/`)
18
18
  - `detachInactiveRoutes` - optional flag if routes should detach from DOM entirely during route switching (default: `true`)
19
- - `canBack` - optional function whether the router can route back
20
19
 
21
20
  ### Interface
22
21
  - `getActiveRoute()`*: Route | null* - Returns active route component
@@ -10,7 +10,6 @@ type Props = {
10
10
  children: JSX.Element[],
11
11
  defaultPath?: string,
12
12
  detachInactiveRoutes?: boolean,
13
- canBack?: (event: KeyboardEvent) => boolean,
14
13
  };
15
14
 
16
15
  type RoutePath = {
@@ -34,7 +33,6 @@ export class Router extends Component<Props> {
34
33
  static defaultProps = {
35
34
  defaultPath: '/',
36
35
  detachInactiveRoutes: true,
37
- canBack: () => true,
38
36
  };
39
37
 
40
38
  declare props: DeclareProps<Props, typeof Router.defaultProps>;
@@ -63,8 +61,7 @@ export class Router extends Component<Props> {
63
61
  };
64
62
 
65
63
  onKeyDown = (event: KeyboardEvent) => {
66
- const { canBack } = this.props;
67
- if (history.length > 1 && device.isBackOrEscape(event) && canBack(event)) {
64
+ if (history.length > 1 && device.isBackOrEscape(event)) {
68
65
  back();
69
66
  stopEventImmediately(event);
70
67
  }
@@ -7,7 +7,7 @@ export const isPathVisible = (hash: string, regexpPath?: RegExp) => (
7
7
  export const getCurrentHash = () => window.location.href.split('#')[1] || '';
8
8
 
9
9
  // eslint-disable-next-line no-useless-escape
10
- const PARAM_REGEX = /([^/]+)/;
10
+ const PARAM_REGEX = /([a-zA-Z0-9+\-=.:%_()\[\]{}]+)/;
11
11
  export const PARAM_REGEX_STR = PARAM_REGEX.source;
12
12
 
13
13
  export const pathToRegExp = (path: string) => {
@@ -1,7 +1,6 @@
1
1
  import { ok } from 'assert';
2
2
  import { execSync, ExecSyncOptions } from 'child_process';
3
3
 
4
- const NO_VERIFY_PARAM = '--no-verify';
5
4
  const branchNames = {
6
5
  dev: 'development',
7
6
  main: 'master',
@@ -33,19 +32,18 @@ const checkout = (branchName: string) => cmdSyncPipeOut(`git checkout ${branchNa
33
32
  const addAll = () => cmdSyncPipeOut('git add --all');
34
33
 
35
34
  const commit = (commitMessage: string, noVerify = false) => {
36
- const maybeNoVerifyParam = noVerify ? NO_VERIFY_PARAM : '';
35
+ const maybeNoVerifyParam = noVerify ? '--no-verify' : '';
37
36
  return cmdSyncPipeOut(`git commit -m "${commitMessage}" ${maybeNoVerifyParam}`.trimEnd());
38
37
  };
39
38
 
40
39
  const push = (branchName: string, noVerify = false) => {
41
- const maybeNoVerifyParam = noVerify ? NO_VERIFY_PARAM : '';
40
+ const maybeNoVerifyParam = noVerify ? '--no-verify' : '';
42
41
  const cmd = `git push --set-upstream origin ${branchName} ${maybeNoVerifyParam}`.trimEnd();
43
42
  return cmdSyncPipeOut(cmd);
44
43
  };
45
44
 
46
- const pushTag = (version: string, noVerify = false) => {
47
- const maybeNoVerifyParam = noVerify ? NO_VERIFY_PARAM : '';
48
- const cmd = `git push origin v${version} ${maybeNoVerifyParam}`.trimEnd();
45
+ const pushTag = (version: string) => {
46
+ const cmd = `git push origin v${version}`;
49
47
  return cmdSyncPipeOut(cmd);
50
48
  };
51
49
 
@@ -141,7 +139,7 @@ const release = (versionType: string | 'major' | 'minor' | 'patch') => {
141
139
  push(newReleaseBranchName, true);
142
140
 
143
141
  console.log(`Pushing ${version} tag ...`);
144
- pushTag(version, true);
142
+ pushTag(version);
145
143
 
146
144
  const prTitle = `Release: ${newReleaseBranchName.split('/')[1]}`;
147
145
  // eslint-disable-next-line max-len
@@ -1,153 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- : '
4
- Resolves whether CI job can be skipped or not.
5
-
6
- It requires to be executed with "source", as the script exports result as a variable
7
- which needs to be processed outside the script.
8
-
9
- - EXPORTS:
10
- Exports numeric variable IS_CI_JOB_SKIPPABLE,
11
- where 0 represents not skippable build and 1 represent skippable build.
12
-
13
- - PARAMETERS:
14
- File paths or glob patterns with paths to files which are not relevant for the CI job.
15
- Each glob pattern has to be wrapped into double quotes.
16
-
17
- - USAGE:
18
- source <path/to/script.sh> "filePathOrGlob1" "filePathOrGlob2" ... "filePathOrGlobN"
19
-
20
- - EXAMPLE:
21
- source path/to/script.sh "docs/**/*" ".eslintrc.json"
22
- if [[ "$IS_CI_JOB_SKIPPABLE" -eq 1 ]]; then
23
- # job is skippable, do something here
24
- fi
25
- '
26
-
27
- # Includes filenames beginning with a ‘.’ in the results of filename expansion.
28
- # The filenames ‘.’ and ‘..’ must always be matched explicitly, even if dotglob is set.
29
- shopt -s dotglob
30
-
31
- # Patterns which fail to match filenames during filename expansion will not result in an expansion error.
32
- shopt -u failglob
33
-
34
- # The pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and subdirectories.
35
- shopt -s globstar
36
-
37
- # Bash allows filename patterns which match no files to expand to a null string, rather than themselves.
38
- shopt -s nullglob
39
-
40
- function printFormattedArrayItems () {
41
- FUNCTION_INPUT_ARRAY=("$@")
42
- for i in "${FUNCTION_INPUT_ARRAY[@]}"; do
43
- echo " - $i"
44
- done
45
- }
46
-
47
- # Exported numeric variable with the result.
48
- # 0 represents not skippable build, 1 represent skippable build.
49
- IS_CI_JOB_SKIPPABLE=0
50
-
51
- # Printed when build is skippable.
52
- RESULT_TRUE_STRING="It's possible to skip the CI job!"
53
-
54
- # Printed when build is not skippable.
55
- RESULT_FALSE_STRING="It's NOT possible to skip the CI job!"
56
-
57
- # Variable for providing details about the result.
58
- RESULT_REASON_STRING="N/A"
59
-
60
- # The range of commits that were included in the push or pull request.
61
- # Example "SHA1...SHA2".
62
- COMMIT_RANGE=""
63
-
64
- echo ""
65
- echo "==========================================================================================="
66
- echo "RESOLVING THE POSSIBILITY TO SKIP THE CI JOB..."
67
-
68
- # GitHub Actions CI
69
- if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
70
- # This is a Pull Request event
71
- if [[ -z "$GITHUB_BASE_REF" ]]; then
72
- RESULT_REASON_STRING="GITHUB_BASE_REF is empty for this CI build."
73
- elif [[ -z "$GITHUB_HEAD_REF" ]]; then
74
- RESULT_REASON_STRING="GITHUB_HEAD_REF is empty for this CI build."
75
- else
76
- COMMIT_RANGE="origin/${GITHUB_BASE_REF}...origin/${GITHUB_HEAD_REF}"
77
- echo "set COMMIT_RANGE for PR (GA) to \"${COMMIT_RANGE}\""
78
- fi
79
- else
80
- # This is not Pull Request event (it is for example push)
81
- if [[ "$GA_EVENT_BEFORE" == "0000000000000000000000000000000000000000" ]]; then
82
- # variable it is set to zeros for the initial commit of a new branch
83
- RESULT_REASON_STRING="GA_EVENT_BEFORE is zeros for this CI build."
84
- elif [[ -z "$GA_EVENT_BEFORE" ]]; then
85
- RESULT_REASON_STRING="GA_EVENT_BEFORE is empty for this CI build."
86
- elif [[ -z "$GA_EVENT_AFTER" ]]; then
87
- RESULT_REASON_STRING="GA_EVENT_AFTER is empty for this CI build."
88
- else
89
- COMMIT_RANGE="${GA_EVENT_BEFORE}...${GA_EVENT_AFTER}"
90
- echo "set COMMIT_RANGE for \"${GITHUB_EVENT_NAME}\" (GA) to \"${COMMIT_RANGE}\""
91
- fi
92
- fi
93
-
94
- if [[ ! -z "$COMMIT_RANGE" ]]; then
95
- CHANGED_FILES_ARRAY=()
96
- while IFS= read -r line; do
97
- CHANGED_FILES_ARRAY+=("${line}")
98
- done < <(git diff --name-only "$COMMIT_RANGE")
99
-
100
- IRRELEVANT_FILES_INPUT_ARRAY=($@) # array with all params
101
-
102
- RESOLVED_RELEVANT_FILES=()
103
- RESOLVED_IRRELEVANT_FILES=()
104
- for i in "${CHANGED_FILES_ARRAY[@]}"; do
105
- if [[ "${IRRELEVANT_FILES_INPUT_ARRAY[*]}" =~ $i ]]; then
106
- RESOLVED_IRRELEVANT_FILES+=("$i")
107
- else
108
- RESOLVED_RELEVANT_FILES+=("$i")
109
- fi
110
- done
111
-
112
- echo ""
113
- echo "Provided filter for irrelevant files ($#):"
114
- printFormattedArrayItems "$@"
115
-
116
- echo ""
117
- echo "Resolved provided filter for irrelevant files (${#IRRELEVANT_FILES_INPUT_ARRAY[@]}):"
118
- printFormattedArrayItems "${IRRELEVANT_FILES_INPUT_ARRAY[@]}"
119
-
120
- echo ""
121
- echo "Detected changed files from GIT (${#CHANGED_FILES_ARRAY[@]}):"
122
- printFormattedArrayItems "${CHANGED_FILES_ARRAY[@]}"
123
-
124
- echo ""
125
- echo "Changed files resolved as relevant for the CI job (${#RESOLVED_RELEVANT_FILES[@]}):"
126
- printFormattedArrayItems "${RESOLVED_RELEVANT_FILES[@]}"
127
-
128
- echo ""
129
- echo "Changed files resolved as irrelevant for the CI job: (${#RESOLVED_IRRELEVANT_FILES[@]}):"
130
- printFormattedArrayItems "${RESOLVED_IRRELEVANT_FILES[@]}"
131
-
132
- if [[ ${#RESOLVED_RELEVANT_FILES[@]} -eq 0 ]]; then
133
- IS_CI_JOB_SKIPPABLE=1
134
- RESULT_REASON_STRING="With given filter, all changed files are irrelevant for this CI job."
135
- else
136
- RESULT_REASON_STRING="With given filter, there are changes which have to be processed in this CI job."
137
- fi
138
- fi
139
-
140
- echo ""
141
- echo "The result:"
142
- if [[ "$IS_CI_JOB_SKIPPABLE" -eq 1 ]]; then
143
- echo " $RESULT_TRUE_STRING"
144
- else
145
- echo " $RESULT_FALSE_STRING"
146
- fi
147
- echo ""
148
- echo "The reason of the result:"
149
- echo " $RESULT_REASON_STRING"
150
- echo "==========================================================================================="
151
- echo ""
152
-
153
- export IS_CI_JOB_SKIPPABLE
@@ -1,9 +0,0 @@
1
- import { LanguageMapper } from '@24i/bigscreen-sdk/analytics/TealiumAnalytics';
2
-
3
- export const findForLanguage = (
4
- languageMapper: LanguageMapper = {},
5
- language: string = '',
6
- ) => {
7
- const languageKey = Object.keys(languageMapper).find((key) => key === language);
8
- return languageKey ? languageMapper[languageKey] : null;
9
- };
@@ -1,13 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { TeaSceneViewResult } from '../types';
3
- import { TrackEventType } from '../constants';
4
-
5
- export const mapAppOpen = (): Omit<TeaSceneViewResult, 'categories'> => ({
6
- event_trigger: AnalyticsTriggers.SCENE_VIEW,
7
- track_event_type: TrackEventType.VIEW,
8
- page_title: 'app open',
9
- page_name: 'app open',
10
- content_type: 'onboarding',
11
- section: 'onboarding',
12
- subcontent_type: 'welcomeScreen',
13
- });
@@ -1,20 +0,0 @@
1
- import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
2
- import { Payload, AdEventResult } from '../types';
3
- import { mapBase } from './mapBase';
4
-
5
- export const mapAdEvent = (
6
- triggerName: AnalyticsTriggers,
7
- payload: Payload,
8
- ): AdEventResult => ({
9
- ...mapBase(payload),
10
- action: triggerName,
11
- event_trigger: triggerName,
12
- ad_id: payload.adId || '',
13
- ad_name: payload.adName || '',
14
- ad_position: payload.adType || '',
15
- ad_playback_position: payload.adPosition || '',
16
- ad_playback_duration: payload.adDuration || '',
17
- thing_id: payload.assetId || '',
18
- attribution_id: payload.attributionId || '',
19
- custom_campaign_url: '',
20
- });
@@ -1,5 +0,0 @@
1
- export type AdInfo = {
2
- adId: string | null;
3
- type: string;
4
- latEnabled: boolean | null;
5
- };