@24i/bigscreen-sdk 1.1.0 → 2.1.1-alpha.2133
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/README.md +1 -1
- package/package.json +34 -53
- package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
- package/packages/async-image/src/AsyncImage.tsx +10 -15
- package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
- package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +0 -11
- package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
- package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +0 -15
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +1 -2
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +3 -34
- package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -4
- package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -4
- package/packages/device/src/getKeyDigit.ts +2 -2
- package/packages/device/src/resolver/resolver.ts +5 -18
- package/packages/digital-clock/src/DigitalClock.tsx +4 -15
- package/packages/driver-androidtv/src/DeviceAndroidTV.ts +9 -54
- package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +5 -29
- package/packages/driver-androidtv/src/keymap.ts +0 -18
- package/packages/driver-androidtv/src/types.ts +16 -102
- package/packages/driver-base/src/DeviceBase.ts +2 -61
- package/packages/driver-base/src/KeyMap/Key.ts +1 -8
- package/packages/driver-base/src/KeyMap/KeyMap.ts +0 -4
- package/packages/driver-base/src/KeyMap/interface.ts +0 -1
- package/packages/driver-base/src/KeyMap/overrideValues.ts +1 -2
- package/packages/driver-base/src/__mocks__/keyMap.ts +0 -1
- package/packages/driver-base/src/types/DeviceEvent.ts +0 -2
- package/packages/driver-base/src/types/KeycodeKeyMap.ts +0 -1
- package/packages/driver-browser/src/keymap.ts +0 -8
- package/packages/driver-entone/src/keymap.ts +0 -1
- package/packages/driver-tizen/src/TizenKeys.ts +0 -2
- package/packages/driver-vidaa/src/DeviceVidaa.ts +2 -3
- package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
- package/packages/driver-vidaa/src/keymap.ts +0 -2
- package/packages/driver-webos/src/DeviceWebos.ts +0 -8
- package/packages/driver-webos/src/keymap.ts +1 -2
- package/packages/driver-xbox/src/keymap.ts +1 -1
- package/packages/epg/README.md +1 -3
- package/packages/epg/src/v2/Cell.tsx +2 -16
- package/packages/epg/src/v2/DataManager.ts +41 -112
- package/packages/epg/src/v2/DatePicker.tsx +3 -9
- package/packages/epg/src/v2/DateToast/DateToast.tsx +9 -12
- package/packages/epg/src/v2/Day.tsx +3 -6
- package/packages/epg/src/v2/Epg.tsx +5 -5
- package/packages/epg/src/v2/MockGenerator/generator.ts +2 -3
- package/packages/epg/src/v2/ProgramInfo/utils.ts +3 -4
- package/packages/epg/src/v2/Row.tsx +1 -3
- package/packages/epg/src/v2/TimelineSection.tsx +1 -4
- package/packages/epg/src/v2/basic/CellsManager.tsx +2 -7
- package/packages/epg/src/v2/basic/RowsManager.tsx +1 -3
- package/packages/epg/src/v2/interface.ts +0 -13
- package/packages/events-manager/src/EventsManager.ts +56 -1
- package/packages/focus/README.md +0 -33
- package/packages/focus/src/IFocusable.ts +0 -1
- package/packages/focus/src/Layout/Base.tsx +6 -41
- package/packages/focus/src/Layout/Matrix.tsx +19 -51
- package/packages/focus/src/Layout/__test__/Base.spec.ts +180 -0
- package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +94 -0
- package/packages/focus/src/Layout/__test__/Matrix.spec.ts +261 -0
- package/packages/focus/src/Layout/__test__/Vertical.spec.ts +46 -0
- package/packages/focus/src/Layout/__test__/isRtl.spec.ts +23 -0
- package/packages/focus/src/Layout/__test__/shared.ts +19 -0
- package/packages/focus/src/focusFirstExisting.ts +1 -7
- package/packages/focus/src/index.ts +1 -2
- package/packages/gallup/src/Gallup.ts +3 -3
- package/packages/grid/src/Base/Base.tsx +10 -15
- package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +2 -4
- package/packages/icon/src/Icon.tsx +5 -27
- package/packages/input/README.md +1 -4
- package/packages/input/src/Input.tsx +29 -65
- package/packages/input/src/handleOverflow.ts +29 -0
- package/packages/interactable/README.md +1 -2
- package/packages/interactable/src/Interactable.tsx +3 -9
- package/packages/interactable/src/interface.ts +0 -1
- package/packages/jsx/src/index.ts +1 -1
- package/packages/jsx/src/test-utils/index.ts +0 -1
- package/packages/keyboard/src/Backdrop/Backdrop.scss +0 -2
- package/packages/keyboard/src/KeyboardBase.tsx +4 -16
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +0 -4
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +20 -28
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +0 -1
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +0 -1
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -11
- package/packages/keyboard/src/WhitelabelKeyboard/types.ts +0 -1
- package/packages/l10n/README.md +0 -18
- package/packages/l10n/src/date/common.ts +6 -18
- package/packages/l10n/src/date/cs.ts +8 -2
- package/packages/l10n/src/date/en-001.ts +3 -3
- package/packages/l10n/src/date/en-common.ts +4 -5
- package/packages/l10n/src/date/en-us.ts +3 -3
- package/packages/l10n/src/date/iso.ts +13 -12
- package/packages/l10n/src/date/types.ts +0 -9
- package/packages/l10n/src/l10n.ts +3 -61
- package/packages/list/src/Base/Base.tsx +9 -19
- package/packages/list/src/Base/interface.ts +2 -2
- package/packages/list/src/CenteredList/controller.ts +1 -0
- package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +3 -3
- package/packages/list/src/UnifiedListController/UnifiedListController.ts +2 -6
- package/packages/logger/src/loggers/SentryLogger/Sentry.ts +0 -1
- package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +2 -2
- package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +3 -31
- package/packages/menu/src/MenuAndContentContainer/interface.ts +0 -8
- package/packages/modal-service/README.md +1 -4
- package/packages/modal-service/src/ModalService.tsx +5 -29
- package/packages/perf-utils/README.md +120 -1
- package/packages/perf-utils/src/array/filter.ts +54 -1
- package/packages/perf-utils/src/array/find.ts +43 -1
- package/packages/perf-utils/src/array/findIndex.ts +43 -1
- package/packages/perf-utils/src/array/forEach.ts +48 -1
- package/packages/perf-utils/src/array/includes.ts +41 -1
- package/packages/perf-utils/src/array/includesNaN.ts +32 -1
- package/packages/perf-utils/src/array/index.ts +7 -1
- package/packages/perf-utils/src/array/map.ts +52 -1
- package/packages/player-ui/README.md +1 -1
- package/packages/player-ui/src/CurrentTime.tsx +2 -2
- package/packages/player-ui/src/Duration.tsx +2 -2
- package/packages/player-ui/src/PauseButton.tsx +0 -8
- package/packages/player-ui/src/PlayerInteractable.tsx +0 -1
- package/packages/player-ui/src/PlayerTime.tsx +1 -3
- package/packages/player-ui/src/PlayerUI.tsx +35 -68
- package/packages/player-ui/src/RemainingTime.tsx +2 -2
- package/packages/player-ui/src/Seekbar.tsx +18 -110
- package/packages/player-ui/src/Seeking.ts +16 -57
- package/packages/player-ui/src/Subtitles.tsx +2 -2
- package/packages/player-ui/src/index.ts +0 -1
- package/packages/player-ui/src/mocks.ts +8 -32
- package/packages/player-ui/src/timeUtils.ts +3 -3
- package/packages/player-ui/src/types.ts +3 -9
- package/packages/router/src/Route.tsx +27 -61
- package/packages/router/src/Router.tsx +13 -59
- package/packages/router/src/history.ts +1 -8
- package/packages/router/src/index.ts +1 -1
- package/packages/router/src/utils.ts +4 -9
- package/packages/sass-utils/src/linear-gradient.scss +4 -9
- package/packages/sass-utils/src/scale.1080.scss +1 -3
- package/packages/sass-utils/src/scale.720.scss +1 -1
- package/packages/time/README.md +1 -4
- package/packages/time/src/Time.ts +13 -35
- package/packages/time/src/constants.ts +0 -1
- package/packages/toast/src/ToastService.tsx +5 -16
- package/packages/types-bigscreen-jsx/README.md +4 -5
- package/packages/types-bigscreen-jsx/index.d.ts +67 -72
- package/packages/utils/README.md +0 -27
- package/packages/utils/src/elementUtils.ts +0 -25
- package/packages/utils/src/index.ts +0 -8
- package/packages/utils/src/scaledImage.ts +3 -6
- package/packages/utils/src/textUtils.ts +14 -46
- package/packages/utils/src/wait.ts +1 -3
- package/packages/utils/src/xhr/xhrSend.ts +1 -3
- package/packages/utils/src/xhr/xhrSendRetry.ts +1 -3
- package/packages/zapping/src/ChannelZapping.ts +0 -9
- package/packages/zapping/src/Zapping.tsx +0 -10
- package/.vscode/settings.json +0 -6
- package/packages/analytics/README.md +0 -8
- package/packages/analytics/src/A.ts +0 -1
- package/packages/analytics/src/Analytics.ts +0 -1
- package/packages/analytics/src/analyticsOnScroll.ts +0 -1
- package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +0 -1
- package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +0 -1
- package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +0 -200
- package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +0 -118
- package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +0 -17
- package/packages/analytics/src/clients/GoogleAnalytics/index.ts +0 -2
- package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +0 -77
- package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -50
- package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +0 -14
- package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +0 -169
- package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +0 -102
- package/packages/analytics/src/clients/TealiumAnalytics/findIdForLanguage.ts +0 -9
- package/packages/analytics/src/clients/TealiumAnalytics/index.ts +0 -4
- package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +0 -33
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +0 -70
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +0 -36
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +0 -13
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +0 -11
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +0 -11
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +0 -8
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +0 -8
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/types.ts +0 -156
- package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +0 -116
- package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +0 -99
- package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +0 -34
- package/packages/analytics/src/clients/TwentyFourIQ/index.ts +0 -2
- package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +0 -31
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdLoaded.ts +0 -13
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdSkipped.ts +0 -16
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +0 -21
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +0 -15
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +0 -24
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +0 -18
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +0 -15
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +0 -17
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +0 -21
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +0 -24
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +0 -24
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +0 -34
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +0 -32
- package/packages/analytics/src/clients/TwentyFourIQ/types.ts +0 -115
- package/packages/analytics/src/constants.ts +0 -1
- package/packages/analytics/src/index.ts +0 -3
- package/packages/analytics/src/interface.ts +0 -1
- package/packages/analytics/src/utils/generateSessionId.ts +0 -8
- package/packages/create-package/dist/createPackage.js +0 -66
- package/packages/create-package/dist/createPackage.js.map +0 -1
- package/packages/create-package/dist/index.js +0 -5
- package/packages/create-package/dist/index.js.map +0 -1
- package/packages/create-package/dist/questionnaire/questions.js +0 -35
- package/packages/create-package/dist/questionnaire/questions.js.map +0 -1
- package/packages/create-package/dist/settings/Settings.js +0 -10
- package/packages/create-package/dist/settings/Settings.js.map +0 -1
- package/packages/create-package/dist/types.js +0 -3
- package/packages/create-package/dist/types.js.map +0 -1
- package/packages/device/src/driver/index.firetv.ts +0 -1
- package/packages/device/src/driver/index.smartcast.tv.ts +0 -1
- package/packages/driver-firetv/src/DeviceFireTV.ts +0 -18
- package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -36
- package/packages/driver-firetv/src/index.ts +0 -1
- package/packages/driver-smartcast/src/DeviceSmartCast.ts +0 -317
- package/packages/driver-smartcast/src/__mocks__/api.ts +0 -49
- package/packages/driver-smartcast/src/index.ts +0 -1
- package/packages/driver-smartcast/src/keymap.ts +0 -9
- package/packages/driver-smartcast/src/types.ts +0 -65
- package/packages/focus/src/hasFocus.ts +0 -36
- package/packages/input/src/utils.ts +0 -71
- package/packages/jsx/src/test-utils/keyup.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +0 -28
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +0 -26
- package/packages/l10n/src/date/de.ts +0 -97
- package/packages/l10n/src/date/es.ts +0 -71
- package/packages/l10n/src/date/fr.ts +0 -94
- package/packages/l10n/src/date/he.ts +0 -101
- package/packages/time/src/adapters/24iMediaTimeApi.ts +0 -47
- package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +0 -43
- package/packages/time/src/services/24iMediaTimeApi/index.ts +0 -6
- package/packages/utils/src/forceReflow.ts +0 -14
- package/packages/utils/src/keyPress/index.ts +0 -6
- package/packages/utils/src/keyPress/keyPressSimulator.ts +0 -74
- package/packages/utils/src/keyPress/simulateKeyPress.ts +0 -25
- package/utils/release/release.ts +0 -154
|
@@ -4,12 +4,6 @@ import { SCREEN_WIDTH } from './sizes';
|
|
|
4
4
|
|
|
5
5
|
const SAFE_TIMEOUT = 100;
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Test if the element (or element in the reference) is wrapped visible. This means that the
|
|
9
|
-
* element does not have `display: none` or `visibility: hidden`.
|
|
10
|
-
* @param elementOrReference DOM element or reference to element on which we test wrapping
|
|
11
|
-
* @returns true if element is visible
|
|
12
|
-
*/
|
|
13
7
|
export const isElementVisible = (
|
|
14
8
|
elementOrReference: HTMLElement | Reference<HTMLElement>,
|
|
15
9
|
) => {
|
|
@@ -19,18 +13,10 @@ export const isElementVisible = (
|
|
|
19
13
|
return style.display !== 'none' && style.visibility !== 'hidden';
|
|
20
14
|
};
|
|
21
15
|
|
|
22
|
-
/**
|
|
23
|
-
* Test if the element (or element in the reference) is wrapped fully visible. This means that the
|
|
24
|
-
* element does not have `display: none` or `visibility: hidden` and exists
|
|
25
|
-
* inside visible DOM tree, which exists in the document.body.
|
|
26
|
-
* @param elementOrReference DOM element or reference to element on which we test wrapping
|
|
27
|
-
* @returns true if element is visible
|
|
28
|
-
*/
|
|
29
16
|
export const isElementFullyVisible = (
|
|
30
17
|
elementOrReference: HTMLElement | Reference<HTMLElement>,
|
|
31
18
|
) => {
|
|
32
19
|
const element = unwrapReference(elementOrReference);
|
|
33
|
-
if (!element) return false;
|
|
34
20
|
if (isElementVisible(element)) {
|
|
35
21
|
let parent = element.parentElement;
|
|
36
22
|
while (parent) {
|
|
@@ -47,16 +33,6 @@ export const isElementFullyVisible = (
|
|
|
47
33
|
return false;
|
|
48
34
|
};
|
|
49
35
|
|
|
50
|
-
/**
|
|
51
|
-
* Test if the element (or element in the reference) is wrapped by another element.
|
|
52
|
-
* @param elementOrReference DOM element or reference to element on which we test wrapping
|
|
53
|
-
* @param wrapperElementOrReferenceOrCondition wrapper element or certain condition (utils is
|
|
54
|
-
* running upwards in the DOM tree from first element till some element has some specific condition)
|
|
55
|
-
* @param includesElementItself if true, test will check also provided element itself.
|
|
56
|
-
* This is useful in some cases when we need to include also provided element as wrapper
|
|
57
|
-
* in one run of the util.
|
|
58
|
-
* @returns true if the element is wrapped by provided wrapper
|
|
59
|
-
*/
|
|
60
36
|
export const isElementWrappedBy = (
|
|
61
37
|
elementOrReference: HTMLElement | Reference<HTMLElement>,
|
|
62
38
|
wrapperElementOrReferenceOrCondition:
|
|
@@ -64,7 +40,6 @@ export const isElementWrappedBy = (
|
|
|
64
40
|
includesElementItself = false,
|
|
65
41
|
) => {
|
|
66
42
|
const element = unwrapReference(elementOrReference);
|
|
67
|
-
if (!element) return false;
|
|
68
43
|
let currentParent = includesElementItself ? element : element.parentElement;
|
|
69
44
|
let wrapperElement: HTMLElement | null = null;
|
|
70
45
|
let condition: ((currentWrapper: HTMLElement) => boolean) | null = null;
|
|
@@ -6,7 +6,6 @@ export { addClass } from './addClass';
|
|
|
6
6
|
export { removeClass } from './removeClass';
|
|
7
7
|
export { debounce } from './debounce';
|
|
8
8
|
export { wait } from './wait';
|
|
9
|
-
export { forceReflow } from './forceReflow';
|
|
10
9
|
export { scaledImage } from './scaledImage';
|
|
11
10
|
export { nTimes } from './nTimes';
|
|
12
11
|
export { getDisplayToggler, DISPLAY_NONE } from './displayToggler';
|
|
@@ -16,7 +15,6 @@ export {
|
|
|
16
15
|
isElementVisible,
|
|
17
16
|
isElementFullyVisible,
|
|
18
17
|
isElementWrappedBy,
|
|
19
|
-
preventDefaultScroll,
|
|
20
18
|
} from './elementUtils';
|
|
21
19
|
export { createInterval, createTimeout, runAsync } from './timers';
|
|
22
20
|
export type { TimedFunction } from './timers';
|
|
@@ -35,9 +33,3 @@ export {
|
|
|
35
33
|
} from './timeConstants';
|
|
36
34
|
export { xhrSend, xhrSendRetry, defaultRetryConfig, mockXhr } from './xhr';
|
|
37
35
|
export type { XhrOptions, XhrResponse, RetryConfig, RSOptions, ShouldRetryParam } from './xhr';
|
|
38
|
-
export {
|
|
39
|
-
registerKeyPressSimulator,
|
|
40
|
-
unregisterKeyPressSimulator,
|
|
41
|
-
dispatchKeyboardEvent,
|
|
42
|
-
simulateKeyPress,
|
|
43
|
-
} from './keyPress';
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
+
export const DEFAULT_SCALING_ENDPOINT = 'http://imageresize.24i.com';
|
|
2
|
+
|
|
1
3
|
type Dimensions = {
|
|
2
4
|
height: number,
|
|
3
5
|
width: number,
|
|
4
6
|
fit?: 'cover' | 'contain' | 'inside',
|
|
5
7
|
};
|
|
6
8
|
|
|
7
|
-
const getEndpointProtocol = (protocol: string) => (protocol === 'https:' ? 'https:' : 'http:');
|
|
8
|
-
|
|
9
9
|
const attention = (fit: Dimensions['fit']) => (
|
|
10
10
|
fit === 'cover' ? '&a=attention' : ''
|
|
11
11
|
);
|
|
12
12
|
|
|
13
|
-
// eslint-disable-next-line max-len
|
|
14
|
-
export const DEFAULT_SCALING_ENDPOINT = `${getEndpointProtocol(window.location.protocol)}//imageresize.24i.com`;
|
|
15
|
-
|
|
16
13
|
const scaledImage = (
|
|
17
14
|
url: string,
|
|
18
15
|
{ height, width, fit = 'cover' }: Dimensions,
|
|
@@ -21,4 +18,4 @@ const scaledImage = (
|
|
|
21
18
|
`${scalingEndpoint}?url=${url}&h=${height}&w=${width}&fit=${fit}${attention(fit)}`
|
|
22
19
|
);
|
|
23
20
|
|
|
24
|
-
export { scaledImage, Dimensions
|
|
21
|
+
export { scaledImage, Dimensions };
|
|
@@ -1,57 +1,25 @@
|
|
|
1
1
|
const ELLIPSIS = '...';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
row
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
row.style.visibility = 'hidden';
|
|
14
|
-
const lineHeightString = window.getComputedStyle(row, null).getPropertyValue('line-height');
|
|
15
|
-
const lineHeight = parseInt(lineHeightString, 10);
|
|
16
|
-
let numberOfLines = row.offsetHeight / lineHeight;
|
|
17
|
-
if (numberOfLines > requestedNumberOfLines) {
|
|
18
|
-
const originalTextContent = row.textContent!;
|
|
19
|
-
row.textContent = ellipsis;
|
|
20
|
-
let stringBuffer = '';
|
|
21
|
-
if (ending) {
|
|
22
|
-
let currentPosition = 0;
|
|
23
|
-
do {
|
|
24
|
-
stringBuffer += originalTextContent.charAt(currentPosition);
|
|
25
|
-
row.textContent = stringBuffer + ellipsis;
|
|
26
|
-
currentPosition += 1;
|
|
27
|
-
numberOfLines = row.offsetHeight / lineHeight;
|
|
28
|
-
} while (numberOfLines <= requestedNumberOfLines
|
|
29
|
-
&& currentPosition < originalTextContent.length);
|
|
30
|
-
row.textContent = stringBuffer.substring(0, stringBuffer.length - 1) + ellipsis;
|
|
31
|
-
|
|
32
|
-
} else {
|
|
3
|
+
export const trimWithLeadingEllipsis = (row: HTMLSpanElement, requestedNumberOfLines: number) => {
|
|
4
|
+
if (row && row.textContent != null) {
|
|
5
|
+
row.style.visibility = 'hidden';
|
|
6
|
+
const lineHeightString = window.getComputedStyle(row, null).getPropertyValue('line-height');
|
|
7
|
+
const lineHeight = parseInt(lineHeightString, 10);
|
|
8
|
+
let numberOfLines = row.offsetHeight / lineHeight;
|
|
9
|
+
if (numberOfLines > requestedNumberOfLines) {
|
|
10
|
+
const originalTextContent = row.textContent;
|
|
11
|
+
row.textContent = ELLIPSIS;
|
|
12
|
+
let stringBuffer = '';
|
|
33
13
|
let currentPosition = originalTextContent.length - 1;
|
|
34
14
|
do {
|
|
35
|
-
const charToAdd = originalTextContent.
|
|
15
|
+
const charToAdd = originalTextContent.at(currentPosition);
|
|
36
16
|
stringBuffer = `${charToAdd}${stringBuffer}`;
|
|
37
|
-
row.textContent = `${
|
|
17
|
+
row.textContent = `${ELLIPSIS}${stringBuffer}`;
|
|
38
18
|
currentPosition -= 1;
|
|
39
19
|
numberOfLines = Math.floor(row.offsetHeight / lineHeight);
|
|
40
20
|
} while (numberOfLines <= requestedNumberOfLines && currentPosition >= 0);
|
|
41
|
-
row.textContent = `${
|
|
21
|
+
row.textContent = `${ELLIPSIS}${stringBuffer.substring(1)}`;
|
|
42
22
|
}
|
|
23
|
+
row.style.visibility = '';
|
|
43
24
|
}
|
|
44
|
-
row.style.visibility = visibility;
|
|
45
25
|
};
|
|
46
|
-
|
|
47
|
-
export const trimWithLeadingEllipsis = (
|
|
48
|
-
row: HTMLSpanElement | HTMLDivElement,
|
|
49
|
-
requestedNumberOfLines: number,
|
|
50
|
-
ellipsis = ELLIPSIS,
|
|
51
|
-
) => trimWithEllipsis(row, requestedNumberOfLines, ellipsis, false);
|
|
52
|
-
|
|
53
|
-
export const trimWithEndingEllipsis = (
|
|
54
|
-
row: HTMLSpanElement | HTMLDivElement,
|
|
55
|
-
requestedNumberOfLines: number,
|
|
56
|
-
ellipsis = ELLIPSIS,
|
|
57
|
-
) => trimWithEllipsis(row, requestedNumberOfLines, ellipsis, true);
|
|
@@ -84,9 +84,7 @@ function xhrSend(url: string, options: Partial<XhrOptions> = {}): Promise<XhrRes
|
|
|
84
84
|
const xhr = new XMLHttpRequest();
|
|
85
85
|
|
|
86
86
|
function onLoad() {
|
|
87
|
-
const dataText = 'response' in
|
|
88
|
-
? xhr.response
|
|
89
|
-
: xhr.responseText;
|
|
87
|
+
const dataText = 'response' in xhr ? xhr.response : xhr.responseText;
|
|
90
88
|
const dataJson = parseJson(dataText);
|
|
91
89
|
const status = xhr.status === undefined ? HttpStatusCode.OK : xhr.status;
|
|
92
90
|
const statusText = xhr.statusText === undefined ? 'OK' : xhr.statusText;
|
|
@@ -68,9 +68,7 @@ Promise<XhrResponse | TypeError> {
|
|
|
68
68
|
const shouldRetryFn = config.shouldRetry || defaultRetryConfig.shouldRetry;
|
|
69
69
|
const shouldRetry = shouldRetryFn({ options, response, error });
|
|
70
70
|
if (shouldRetry) {
|
|
71
|
-
await new Promise((res) =>
|
|
72
|
-
window.setTimeout(res, config.retryDelay);
|
|
73
|
-
});
|
|
71
|
+
await new Promise((res) => window.setTimeout(res, config.retryDelay));
|
|
74
72
|
config.currentRetryAttempt += 1;
|
|
75
73
|
return xhrSendRetry(url, options);
|
|
76
74
|
}
|
|
@@ -99,15 +99,6 @@ export class ChannelZapping<T extends Asset = Asset> {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
/**
|
|
103
|
-
* Updates the current index of channel zapping.
|
|
104
|
-
* @param channels the array of all channels
|
|
105
|
-
* @param currentChannel currently active channel
|
|
106
|
-
*/
|
|
107
|
-
onUpdate(channels: T[], currentChannel: T) {
|
|
108
|
-
this.currentIndex = getCurrentChannelIndex(channels, currentChannel);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
102
|
/**
|
|
112
103
|
* Changes to the next/previous channel.
|
|
113
104
|
* @param direction direction of the change
|
|
@@ -96,20 +96,10 @@ export class Zapping<T extends Asset = Asset> extends Component<Props<T>> {
|
|
|
96
96
|
this.channelZapping!.onKeyDown(event);
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
-
/**
|
|
100
|
-
* Updates channel zapping with new data.
|
|
101
|
-
* @param channels the array of all channels
|
|
102
|
-
* @param currentChannel currently active channel
|
|
103
|
-
*/
|
|
104
|
-
onUpdate(channels: T[], currentChannel: T) {
|
|
105
|
-
this.channelZapping!.onUpdate(channels, currentChannel);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
99
|
render() {
|
|
109
100
|
const { numericZapper } = this.props;
|
|
110
101
|
return numericZapper
|
|
111
102
|
? <NumericZapper {...numericZapper} ref={zapperServiceRef} />
|
|
112
|
-
// eslint-disable-next-line react/jsx-no-useless-fragment
|
|
113
103
|
: <></>;
|
|
114
104
|
}
|
|
115
105
|
}
|
package/.vscode/settings.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { A } from '@24i/appstage-shared-analytics';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { analytics } from '@24i/appstage-shared-analytics';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { analyticsOnScroll } from '@24i/appstage-shared-analytics';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { ConsoleAnalytics } from '@24i/appstage-shared-analytics/dist/clients/ConsoleAnalytics';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { ConsoleAnalytics } from './ConsoleAnalytics';
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { Storage } from '@24i/bigscreen-sdk/storage';
|
|
2
|
-
import { device } from '@24i/bigscreen-sdk/device';
|
|
3
|
-
import { debounce } from '@24i/bigscreen-sdk/utils/debounce';
|
|
4
|
-
import { createTimeout } from '@24i/bigscreen-sdk/utils/timers';
|
|
5
|
-
import { MINUTE_IN_MS } from '@24i/bigscreen-sdk/utils/timeConstants';
|
|
6
|
-
import { generateUuid } from '@24i/bigscreen-sdk/utils/generateUuid';
|
|
7
|
-
import { i18n } from '@24i/bigscreen-sdk/i18n';
|
|
8
|
-
import type { AnalyticsClient, AnalyticsEventsMap, SceneInfo } from '../../interface';
|
|
9
|
-
import { mapEventParamsToUrlParams, mapPayload } from './mapPayload';
|
|
10
|
-
import { prepareBody } from './prepareBody';
|
|
11
|
-
import { getUrl } from './getUrl';
|
|
12
|
-
import { generateSessionId } from '../../utils/generateSessionId';
|
|
13
|
-
import { GOOGLE_ANALYTICS_TRIGGERS, TRIGGER_NAME_TO_GA_EVENTS } from './constants';
|
|
14
|
-
import {
|
|
15
|
-
GAEventsNames,
|
|
16
|
-
QueuedEvent,
|
|
17
|
-
ConstantUrlParams,
|
|
18
|
-
SessionInfo,
|
|
19
|
-
EventUrlParams,
|
|
20
|
-
} from './interface';
|
|
21
|
-
|
|
22
|
-
const SEND_DEBOUNCE_MS = 5000;
|
|
23
|
-
const MAX_QUEUE_LENGTH = 10;
|
|
24
|
-
// eslint-disable-next-line no-magic-numbers
|
|
25
|
-
const SESSION_TIMEOUT = 30 * MINUTE_IN_MS;
|
|
26
|
-
|
|
27
|
-
const GA_CLIENT_ID = 'GA_client_id';
|
|
28
|
-
const GA_SESSION_COUNTER = 'GA_session_counter';
|
|
29
|
-
const GA_FIRST_VISIT = 'GA_first_visit';
|
|
30
|
-
|
|
31
|
-
export class GoogleAnalytics implements AnalyticsClient {
|
|
32
|
-
name = 'GoogleAnalytics';
|
|
33
|
-
|
|
34
|
-
constantUrlParams: ConstantUrlParams = {
|
|
35
|
-
cid: '',
|
|
36
|
-
sid: 0,
|
|
37
|
-
seg: 0,
|
|
38
|
-
sct: 0,
|
|
39
|
-
_p: generateUuid(),
|
|
40
|
-
'up.device_manufacturer': '',
|
|
41
|
-
'up.device_platform': '',
|
|
42
|
-
'up.device_platform_version': '',
|
|
43
|
-
'up.app_version': '',
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
manufacturer = '';
|
|
47
|
-
|
|
48
|
-
platform = '';
|
|
49
|
-
|
|
50
|
-
platformVersion = '';
|
|
51
|
-
|
|
52
|
-
lastOnEvent: number | undefined = undefined;
|
|
53
|
-
|
|
54
|
-
eventsQueue: QueuedEvent[] = [];
|
|
55
|
-
|
|
56
|
-
sessionTimeout = createTimeout();
|
|
57
|
-
|
|
58
|
-
isSessionActive = false;
|
|
59
|
-
|
|
60
|
-
sessionStartSent = false;
|
|
61
|
-
|
|
62
|
-
firstEvent = true;
|
|
63
|
-
|
|
64
|
-
firstVisit: boolean | undefined = undefined;
|
|
65
|
-
|
|
66
|
-
constructor(private id: string, private appVersion: string = '') {
|
|
67
|
-
this.init();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async init() {
|
|
71
|
-
const params = this.constantUrlParams;
|
|
72
|
-
params.cid = await Storage.getItem(GA_CLIENT_ID) ?? '';
|
|
73
|
-
if (!params.cid) {
|
|
74
|
-
params.cid = generateUuid();
|
|
75
|
-
await Storage.setItem(GA_CLIENT_ID, params.cid);
|
|
76
|
-
}
|
|
77
|
-
this.firstVisit = !(await Storage.getItem(GA_FIRST_VISIT)) ?? true;
|
|
78
|
-
if (this.firstVisit) {
|
|
79
|
-
await Storage.setItem(GA_FIRST_VISIT, '0');
|
|
80
|
-
}
|
|
81
|
-
this.manufacturer = await device.getManufacturerName();
|
|
82
|
-
this.platform = await device.getPlatformName();
|
|
83
|
-
this.platformVersion = await device.getPlatformVersion();
|
|
84
|
-
await this.startSession();
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async startSession() {
|
|
88
|
-
const sessionNumber = parseInt(await Storage.getItem(GA_SESSION_COUNTER) ?? '0', 10) + 1;
|
|
89
|
-
this.constantUrlParams.sct = sessionNumber;
|
|
90
|
-
this.constantUrlParams.sid = generateSessionId();
|
|
91
|
-
this.constantUrlParams['up.device_manufacturer'] = this.manufacturer;
|
|
92
|
-
this.constantUrlParams['up.device_platform'] = this.platform;
|
|
93
|
-
this.constantUrlParams['up.device_platform_version'] = this.platformVersion;
|
|
94
|
-
this.constantUrlParams['up.app_version'] = this.appVersion;
|
|
95
|
-
await Storage.setItem(GA_SESSION_COUNTER, sessionNumber.toString());
|
|
96
|
-
this.isSessionActive = true;
|
|
97
|
-
this.setSessionTimeout();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
setSessionTimeout() {
|
|
101
|
-
this.sessionTimeout.set(() => {
|
|
102
|
-
this.isSessionActive = false;
|
|
103
|
-
this.sessionStartSent = false;
|
|
104
|
-
this.constantUrlParams.seg = 0;
|
|
105
|
-
}, SESSION_TIMEOUT);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// @ts-ignore - cross event typing
|
|
109
|
-
async onEvent<Event extends keyof AnalyticsEventsMap>(
|
|
110
|
-
triggerName: Event,
|
|
111
|
-
payload: Parameters<AnalyticsEventsMap[Event]>[0],
|
|
112
|
-
) {
|
|
113
|
-
if (this.isSessionActive) {
|
|
114
|
-
this.setSessionTimeout();
|
|
115
|
-
} else {
|
|
116
|
-
await this.startSession();
|
|
117
|
-
}
|
|
118
|
-
const events = TRIGGER_NAME_TO_GA_EVENTS[
|
|
119
|
-
triggerName as typeof GOOGLE_ANALYTICS_TRIGGERS[number]
|
|
120
|
-
];
|
|
121
|
-
const now = Date.now();
|
|
122
|
-
const engagementTime = this.lastOnEvent ? now - this.lastOnEvent : undefined;
|
|
123
|
-
this.lastOnEvent = now;
|
|
124
|
-
await Promise.all(events.map(async (event, index) => {
|
|
125
|
-
const sessionInfo = await this.getSessionInfo(
|
|
126
|
-
index === 0 ? engagementTime : undefined,
|
|
127
|
-
);
|
|
128
|
-
const gtagPayload = mapPayload(
|
|
129
|
-
event, triggerName, {
|
|
130
|
-
...payload,
|
|
131
|
-
...sessionInfo,
|
|
132
|
-
},
|
|
133
|
-
);
|
|
134
|
-
const urlParams = mapEventParamsToUrlParams({
|
|
135
|
-
...sessionInfo as SessionInfo,
|
|
136
|
-
...payload as SceneInfo,
|
|
137
|
-
});
|
|
138
|
-
this.send(event, gtagPayload, urlParams);
|
|
139
|
-
}));
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
private send(name: GAEventsNames, params: Record<string, any>, urlParams: EventUrlParams) {
|
|
143
|
-
const lastUrlParams = JSON.stringify(
|
|
144
|
-
this.eventsQueue[this.eventsQueue.length - 1]?.urlParams ?? {},
|
|
145
|
-
);
|
|
146
|
-
if (lastUrlParams !== '{}' && lastUrlParams !== JSON.stringify(urlParams)) {
|
|
147
|
-
this.sendQueue();
|
|
148
|
-
}
|
|
149
|
-
if (this.constantUrlParams.seg === 0) {
|
|
150
|
-
this.eventsQueue.push({ name, params, urlParams });
|
|
151
|
-
this.sendQueue();
|
|
152
|
-
this.constantUrlParams.seg = 1;
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.eventsQueue.push({ name, params, urlParams });
|
|
156
|
-
if (this.eventsQueue.length >= MAX_QUEUE_LENGTH) {
|
|
157
|
-
this.sendQueue();
|
|
158
|
-
} else {
|
|
159
|
-
this.sendQueueWithDelay();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
private sendQueue = () => {
|
|
164
|
-
if (this.eventsQueue.length === 0) return;
|
|
165
|
-
const body = prepareBody(this.eventsQueue);
|
|
166
|
-
const { urlParams } = this.eventsQueue[0];
|
|
167
|
-
this.eventsQueue.length = 0;
|
|
168
|
-
try {
|
|
169
|
-
fetch(getUrl(this.id, {
|
|
170
|
-
...this.constantUrlParams,
|
|
171
|
-
...urlParams,
|
|
172
|
-
}), { method: 'POST', body });
|
|
173
|
-
} catch (e) {
|
|
174
|
-
// Effort to send was made.
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
private sendQueueWithDelay = debounce(this.sendQueue, SEND_DEBOUNCE_MS);
|
|
179
|
-
|
|
180
|
-
private async getSessionInfo(engagementTime: number | undefined): Promise<SessionInfo> {
|
|
181
|
-
const sessionStarted = !this.sessionStartSent;
|
|
182
|
-
this.sessionStartSent = true;
|
|
183
|
-
const { firstEvent } = this;
|
|
184
|
-
this.firstEvent = false;
|
|
185
|
-
const { firstVisit } = this;
|
|
186
|
-
this.firstVisit = false;
|
|
187
|
-
return {
|
|
188
|
-
appVersion: this.appVersion,
|
|
189
|
-
manufacturer: this.manufacturer,
|
|
190
|
-
language: i18n.getLanguage(),
|
|
191
|
-
resolution: `${window.screen.width}x${window.screen.height}`,
|
|
192
|
-
referrer: document.referrer,
|
|
193
|
-
platform: this.platform,
|
|
194
|
-
sessionStarted,
|
|
195
|
-
engagementTime,
|
|
196
|
-
firstEvent,
|
|
197
|
-
firstVisit: firstVisit as boolean,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { AnalyticsTriggers } from '@24i/appstage-shared-analytics';
|
|
2
|
-
import { GAEventsNames } from './interface';
|
|
3
|
-
|
|
4
|
-
const stringParameter = 'ep';
|
|
5
|
-
const numericParameter = 'epn';
|
|
6
|
-
|
|
7
|
-
export const GOOGLE_ANALYTICS_TRIGGERS = [
|
|
8
|
-
AnalyticsTriggers.SCENE_VIEW,
|
|
9
|
-
AnalyticsTriggers.APP_CLOSE,
|
|
10
|
-
// player triggers
|
|
11
|
-
AnalyticsTriggers.PLAYBACK_10,
|
|
12
|
-
AnalyticsTriggers.PLAYBACK_25,
|
|
13
|
-
AnalyticsTriggers.PLAYBACK_50,
|
|
14
|
-
AnalyticsTriggers.PLAYBACK_75,
|
|
15
|
-
AnalyticsTriggers.PLAYBACK_90,
|
|
16
|
-
AnalyticsTriggers.PLAYBACK_PAUSE,
|
|
17
|
-
AnalyticsTriggers.PLAYBACK_START,
|
|
18
|
-
AnalyticsTriggers.PLAYBACK_STOP,
|
|
19
|
-
AnalyticsTriggers.PLAYER_CLOSE,
|
|
20
|
-
AnalyticsTriggers.PLAYER_OPEN,
|
|
21
|
-
AnalyticsTriggers.HEARTBEAT_5,
|
|
22
|
-
// scroll triggers
|
|
23
|
-
AnalyticsTriggers.SCROLL_25,
|
|
24
|
-
AnalyticsTriggers.SCROLL_50,
|
|
25
|
-
AnalyticsTriggers.SCROLL_75,
|
|
26
|
-
AnalyticsTriggers.SCROLL_90,
|
|
27
|
-
// additional triggers
|
|
28
|
-
AnalyticsTriggers.APP_ERROR,
|
|
29
|
-
AnalyticsTriggers.FAVORITE_ADD,
|
|
30
|
-
AnalyticsTriggers.FAVORITE_REMOVE,
|
|
31
|
-
AnalyticsTriggers.SEARCH,
|
|
32
|
-
AnalyticsTriggers.RATE_CONTENT,
|
|
33
|
-
// ads triggers
|
|
34
|
-
AnalyticsTriggers.AD_LOADED,
|
|
35
|
-
AnalyticsTriggers.AD_SKIPPED,
|
|
36
|
-
// user triggers
|
|
37
|
-
AnalyticsTriggers.LOGIN,
|
|
38
|
-
AnalyticsTriggers.LOGOUT,
|
|
39
|
-
AnalyticsTriggers.SIGN_UP,
|
|
40
|
-
// purchases
|
|
41
|
-
AnalyticsTriggers.PURCHASE_CANCEL,
|
|
42
|
-
AnalyticsTriggers.PURCHASE_COMPLETE,
|
|
43
|
-
AnalyticsTriggers.PURCHASE_START,
|
|
44
|
-
|
|
45
|
-
] as const;
|
|
46
|
-
|
|
47
|
-
export const TRIGGER_NAME_TO_GA_EVENTS: Record<
|
|
48
|
-
typeof GOOGLE_ANALYTICS_TRIGGERS[number], GAEventsNames[]
|
|
49
|
-
> = {
|
|
50
|
-
// App
|
|
51
|
-
[AnalyticsTriggers.APP_CLOSE]: ['close_player_session', 'video_progress'],
|
|
52
|
-
|
|
53
|
-
// Playback
|
|
54
|
-
[AnalyticsTriggers.HEARTBEAT_5]: ['video_progress'],
|
|
55
|
-
[AnalyticsTriggers.PLAYBACK_10]: ['video_progress'],
|
|
56
|
-
[AnalyticsTriggers.PLAYBACK_25]: ['video_progress'],
|
|
57
|
-
[AnalyticsTriggers.PLAYBACK_50]: ['video_progress'],
|
|
58
|
-
[AnalyticsTriggers.PLAYBACK_75]: ['video_progress'],
|
|
59
|
-
[AnalyticsTriggers.PLAYBACK_90]: ['video_complete'],
|
|
60
|
-
[AnalyticsTriggers.PLAYBACK_PAUSE]: ['video_progress'],
|
|
61
|
-
[AnalyticsTriggers.PLAYBACK_START]: ['video_start'],
|
|
62
|
-
[AnalyticsTriggers.PLAYBACK_STOP]: ['video_progress'],
|
|
63
|
-
|
|
64
|
-
// Player
|
|
65
|
-
[AnalyticsTriggers.PLAYER_CLOSE]: ['close_player_session', 'video_progress'],
|
|
66
|
-
[AnalyticsTriggers.PLAYER_OPEN]: ['open_player_session'],
|
|
67
|
-
|
|
68
|
-
// Scenes
|
|
69
|
-
[AnalyticsTriggers.SCENE_VIEW]: ['page_view'],
|
|
70
|
-
|
|
71
|
-
// Scrolling in scene
|
|
72
|
-
[AnalyticsTriggers.SCROLL_25]: ['scroll'],
|
|
73
|
-
[AnalyticsTriggers.SCROLL_50]: ['scroll'],
|
|
74
|
-
[AnalyticsTriggers.SCROLL_75]: ['scroll'],
|
|
75
|
-
[AnalyticsTriggers.SCROLL_90]: ['scroll'],
|
|
76
|
-
|
|
77
|
-
// purchases
|
|
78
|
-
[AnalyticsTriggers.PURCHASE_CANCEL]: [],
|
|
79
|
-
[AnalyticsTriggers.PURCHASE_COMPLETE]: [],
|
|
80
|
-
[AnalyticsTriggers.PURCHASE_START]: [],
|
|
81
|
-
|
|
82
|
-
// additional triggers
|
|
83
|
-
[AnalyticsTriggers.APP_ERROR]: ['app_exception'],
|
|
84
|
-
[AnalyticsTriggers.FAVORITE_ADD]: ['favorite_add'],
|
|
85
|
-
[AnalyticsTriggers.FAVORITE_REMOVE]: ['favorite_remove'],
|
|
86
|
-
[AnalyticsTriggers.SEARCH]: ['search'],
|
|
87
|
-
[AnalyticsTriggers.RATE_CONTENT]: ['rate_content'],
|
|
88
|
-
|
|
89
|
-
// ads triggers
|
|
90
|
-
[AnalyticsTriggers.AD_LOADED]: ['ad_loaded'],
|
|
91
|
-
[AnalyticsTriggers.AD_SKIPPED]: ['ad_skipped'],
|
|
92
|
-
|
|
93
|
-
// user triggers
|
|
94
|
-
[AnalyticsTriggers.LOGIN]: ['login'],
|
|
95
|
-
[AnalyticsTriggers.LOGOUT]: ['logout'],
|
|
96
|
-
[AnalyticsTriggers.SIGN_UP]: ['sign_up'],
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export const gtagPayloadParams: Record<string, string> = {
|
|
100
|
-
contentType: `${stringParameter}.content_type`,
|
|
101
|
-
itemId: `${stringParameter}.video_asset_id`,
|
|
102
|
-
episodeNumber: `${numericParameter}.video_episode_number`,
|
|
103
|
-
seasonNumber: `${numericParameter}.video_season_number`,
|
|
104
|
-
currentTime: `${numericParameter}.video_current_time`,
|
|
105
|
-
duration: `${numericParameter}.video_duration`,
|
|
106
|
-
percent: `${numericParameter}.video_percent`,
|
|
107
|
-
provider: `${stringParameter}.video_provider`,
|
|
108
|
-
title: `${stringParameter}.video_title`,
|
|
109
|
-
seriesTitle: `${stringParameter}.video_series_title`,
|
|
110
|
-
url: `${stringParameter}.video_url`,
|
|
111
|
-
assetId: `${stringParameter}.video_asset_id`,
|
|
112
|
-
externalId: `${stringParameter}.video_external_id`,
|
|
113
|
-
channelNumber: `${numericParameter}.channel_number`,
|
|
114
|
-
channelTitle: `${stringParameter}.channel_title`,
|
|
115
|
-
method: `${stringParameter}.method`,
|
|
116
|
-
searchTerm: `${stringParameter}.search_term`,
|
|
117
|
-
message: `${stringParameter}.message`,
|
|
118
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { ConstantUrlParams, EventUrlParams } from './interface';
|
|
2
|
-
|
|
3
|
-
const TRANSPORT_URL = 'https://www.google-analytics.com/g/collect?';
|
|
4
|
-
// You can use the following URL for debugging if the events are not getting collected.
|
|
5
|
-
// const TRANSPORT_URL = 'https://www.google-analytics.com/debug/g/collec?';
|
|
6
|
-
|
|
7
|
-
export const getUrl = (id: string, params: ConstantUrlParams & EventUrlParams) => {
|
|
8
|
-
const urlParts = [
|
|
9
|
-
TRANSPORT_URL,
|
|
10
|
-
`v=2&tid=${id}`,
|
|
11
|
-
];
|
|
12
|
-
(Object.keys(params) as (keyof (ConstantUrlParams & EventUrlParams))[])
|
|
13
|
-
.forEach((paramName: keyof (ConstantUrlParams & EventUrlParams)) => {
|
|
14
|
-
urlParts.push(`&${paramName}=${encodeURIComponent(params[paramName])}`);
|
|
15
|
-
});
|
|
16
|
-
return urlParts.join('');
|
|
17
|
-
};
|