@24i/bigscreen-sdk 1.0.54-alpha.2835 → 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.
- package/.vscode/settings.json +6 -0
- package/README.md +3 -2
- package/package.json +10 -10
- package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +14 -10
- package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +2 -10
- package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +1 -6
- package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -1
- package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +24 -36
- package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +1 -5
- package/packages/analytics/src/clients/TealiumAnalytics/findIdForLanguage.ts +9 -0
- package/packages/analytics/src/clients/TealiumAnalytics/index.ts +1 -1
- package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +1 -3
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +14 -16
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +1 -1
- package/packages/analytics/src/clients/TealiumAnalytics/types.ts +14 -19
- package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +22 -13
- package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +3 -15
- package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +4 -7
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +13 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +16 -0
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +3 -6
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +2 -2
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +3 -4
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +3 -2
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +2 -2
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +2 -2
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +3 -4
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +3 -4
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +3 -4
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +2 -2
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +2 -2
- package/packages/analytics/src/clients/TwentyFourIQ/types.ts +28 -45
- package/packages/create-package/dist/createPackage.js +66 -0
- package/packages/create-package/dist/createPackage.js.map +1 -0
- package/packages/create-package/dist/index.js +5 -0
- package/packages/create-package/dist/index.js.map +1 -0
- package/packages/create-package/dist/questionnaire/questions.js +35 -0
- package/packages/create-package/dist/questionnaire/questions.js.map +1 -0
- package/packages/create-package/dist/settings/Settings.js +10 -0
- package/packages/create-package/dist/settings/Settings.js.map +1 -0
- package/packages/create-package/dist/types.js +3 -0
- package/packages/create-package/dist/types.js.map +1 -0
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +2 -23
- package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -8
- package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -4
- package/packages/driver-androidtv/src/DeviceAndroidTV.ts +0 -38
- package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +0 -9
- package/packages/driver-androidtv/src/index.ts +0 -1
- package/packages/driver-androidtv/src/types.ts +0 -42
- package/packages/driver-base/src/DeviceBase.ts +0 -19
- package/packages/driver-base/src/__mocks__/DeviceBase.ts +0 -24
- package/packages/driver-base/src/index.ts +0 -3
- package/packages/driver-browser/src/DeviceBrowser.ts +0 -26
- package/packages/driver-entone/src/DeviceEntone.ts +1 -31
- package/packages/driver-firetv/src/DeviceFireTV.ts +1 -74
- package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -9
- package/packages/driver-hbbtv/src/DeviceHbbTV.ts +0 -26
- package/packages/driver-kreatv/src/DeviceKreaTV.ts +0 -26
- package/packages/driver-saphi/src/DeviceSaphi.ts +0 -26
- package/packages/driver-smartcast/src/DeviceSmartCast.ts +1 -78
- package/packages/driver-smartcast/src/__mocks__/api.ts +2 -32
- package/packages/driver-smartcast/src/types.ts +2 -48
- package/packages/driver-tizen/src/DeviceTizen.ts +7 -126
- package/packages/driver-tizen/src/ITizen.ts +202 -15116
- package/packages/driver-tizen/src/IWebapis.ts +87 -8643
- package/packages/driver-tizen/src/TizenKeys.ts +2 -2
- package/packages/driver-tizen/src/__mocks__/tizen.ts +8 -7
- package/packages/driver-tizen/src/constants.ts +195 -1
- package/packages/driver-tizen/src/types.ts +14 -0
- package/packages/driver-vidaa/src/DeviceVidaa.ts +0 -26
- package/packages/driver-webos/src/DeviceWebos.ts +0 -47
- package/packages/driver-webos/src/__mocks__/webos.ts +0 -33
- package/packages/driver-webos/src/constants.ts +0 -1
- package/packages/driver-webos/src/types.ts +0 -30
- package/packages/driver-xbox/src/DeviceXbox.ts +1 -30
- package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +6 -6
- package/packages/input/README.md +3 -0
- package/packages/input/src/Input.tsx +62 -26
- package/packages/input/src/utils.ts +71 -0
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -1
- package/packages/keyboard/src/utils/caret.ts +8 -5
- package/packages/keyboard/src/utils/input.ts +6 -5
- package/packages/list/src/BasicList/BasicList.tsx +7 -7
- package/packages/list/src/CenteredList/CenteredList.tsx +2 -2
- package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +7 -7
- package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +2 -2
- package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +2 -2
- package/packages/list/src/FixedToEndList/FixedToEndList.tsx +2 -2
- package/packages/list/src/interface.ts +2 -2
- package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +1 -7
- package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +1 -3
- package/packages/router/README.md +0 -1
- package/packages/router/src/Router.tsx +1 -4
- package/packages/router/src/utils.ts +1 -1
- package/utils/release/release.ts +5 -7
- package/ci/is_ci_job_skippable.sh +0 -153
- package/packages/analytics/src/clients/TealiumAnalytics/findForLanguage.ts +0 -9
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppOpen.ts +0 -13
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdEvent.ts +0 -20
- package/packages/driver-base/src/types/AdInfo.ts +0 -5
- package/packages/driver-base/src/types/InAppPurchase.ts +0 -25
- package/packages/driver-firetv/src/types.ts +0 -1
- package/packages/input/src/handleOverflow.ts +0 -29
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/spanish.ts +0 -26
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
135
|
+
this.scrollToForward(safeIndex);
|
|
136
136
|
} else {
|
|
137
|
-
this.scrollToBackward(safeIndex
|
|
137
|
+
this.scrollToBackward(safeIndex);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
private scrollToForward(index: number
|
|
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
|
|
147
|
+
this.controller.scroll(scrollTarget);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
private scrollToBackward(index: number
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
128
|
+
this.scrollToForward(safeIndex);
|
|
129
129
|
} else {
|
|
130
|
-
this.scrollToBackward(safeIndex
|
|
130
|
+
this.scrollToBackward(safeIndex);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
private scrollToForward(index: number
|
|
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
|
|
143
|
+
this.controller.scroll(scrollTarget);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
private scrollToBackward(index: number
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) => {
|
package/utils/release/release.ts
CHANGED
|
@@ -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 ?
|
|
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 ?
|
|
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
|
|
47
|
-
const
|
|
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
|
|
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
|
-
});
|