@applicaster/zapp-react-dom-app 13.0.0-alpha.3755455151 → 13.0.0-alpha.3962361544
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/App/InteractionManager/index.tsx +146 -79
- package/App/Loader/loadLocale.js +2 -2
- package/index.js +0 -7
- package/package.json +9 -10
- package/App/Router/index.js +0 -17
- package/App/Splash/Spinner.js +0 -30
- package/App/Splash/spinner-styles.css +0 -81
|
@@ -31,7 +31,10 @@ import {
|
|
|
31
31
|
import { PlayerContentContext } from "@applicaster/zapp-react-dom-ui-components/Contexts";
|
|
32
32
|
|
|
33
33
|
import { withNavigator } from "@applicaster/zapp-react-native-ui-components/Decorators/Navigator";
|
|
34
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
getXray,
|
|
36
|
+
createLogger,
|
|
37
|
+
} from "@applicaster/zapp-react-native-utils/logger";
|
|
35
38
|
|
|
36
39
|
import {
|
|
37
40
|
confirmationDialogStore,
|
|
@@ -51,6 +54,11 @@ import { KeyInputHandler } from "@applicaster/zapp-react-native-utils/appUtils/k
|
|
|
51
54
|
const { withXray } = getXray();
|
|
52
55
|
const globalAny: any = global;
|
|
53
56
|
|
|
57
|
+
const { log_debug, log_warning } = createLogger({
|
|
58
|
+
category: "InteractionManager",
|
|
59
|
+
subsystem: "zapp-react-dom-app",
|
|
60
|
+
});
|
|
61
|
+
|
|
54
62
|
const shouldUseOnScreenKeyboard = () =>
|
|
55
63
|
isVizioPlatform() || window.applicaster.useOnScreenKeyboard;
|
|
56
64
|
|
|
@@ -140,13 +148,16 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
140
148
|
this.onConfirmDialogOpen = this.onConfirmDialogOpen.bind(this);
|
|
141
149
|
this.onConfirmDialogClose = this.onConfirmDialogClose.bind(this);
|
|
142
150
|
|
|
151
|
+
this.handlePhysicalKeyboardDismiss =
|
|
152
|
+
this.handlePhysicalKeyboardDismiss.bind(this);
|
|
153
|
+
|
|
143
154
|
this.confirmDialog.setConfirmAction(this.performExit);
|
|
144
155
|
this.confirmDialog.setCancelAction(this.onConfirmDialogClose);
|
|
145
156
|
this.longPressDetector = new KeyboardLongPressManager();
|
|
146
157
|
}
|
|
147
158
|
|
|
148
159
|
componentDidMount() {
|
|
149
|
-
window.addEventListener("keydown", this.onKeyDownListener);
|
|
160
|
+
window.addEventListener("keydown", this.onKeyDownListener, true);
|
|
150
161
|
window.addEventListener("keyup", this.onKeyUp);
|
|
151
162
|
window.addEventListener("mousemove", this.onMouseMoveListener);
|
|
152
163
|
|
|
@@ -181,6 +192,11 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
181
192
|
"onLongPressRelease",
|
|
182
193
|
this.handleLongPressRelease.bind(this)
|
|
183
194
|
);
|
|
195
|
+
|
|
196
|
+
document.addEventListener(
|
|
197
|
+
"keyboardDismissedByPhysicalKeypress",
|
|
198
|
+
this.handlePhysicalKeyboardDismiss
|
|
199
|
+
);
|
|
184
200
|
}
|
|
185
201
|
|
|
186
202
|
componentWillUnmount() {
|
|
@@ -209,6 +225,11 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
209
225
|
"onLongPressRelease",
|
|
210
226
|
this.handleLongPressRelease
|
|
211
227
|
);
|
|
228
|
+
|
|
229
|
+
document.removeEventListener(
|
|
230
|
+
"keyboardDismissedByPhysicalKeypress",
|
|
231
|
+
this.handlePhysicalKeyboardDismiss
|
|
232
|
+
);
|
|
212
233
|
}
|
|
213
234
|
|
|
214
235
|
performExit() {
|
|
@@ -270,8 +291,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
270
291
|
this.handleWebOsBack();
|
|
271
292
|
}
|
|
272
293
|
} catch (e) {
|
|
273
|
-
|
|
274
|
-
console.warn("Failed to execute platformBack", e);
|
|
294
|
+
log_warning("Failed to execute platformBack", e);
|
|
275
295
|
}
|
|
276
296
|
}
|
|
277
297
|
|
|
@@ -365,28 +385,108 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
365
385
|
}
|
|
366
386
|
}
|
|
367
387
|
|
|
368
|
-
|
|
388
|
+
/**
|
|
389
|
+
When pressing escape or the Native "Back" button:
|
|
390
|
+
if on the transport controls: we show the player
|
|
391
|
+
if on the player : we show the UI
|
|
392
|
+
if on the UI : we exit the app
|
|
393
|
+
note: backspace affects the keyboard input, so it behaves differently
|
|
394
|
+
*/
|
|
395
|
+
onBackPress(event) {
|
|
369
396
|
const { displayState, setDisplayState, navigator } = this.props;
|
|
397
|
+
const { isDialogVisible } = confirmationDialogStore.getState();
|
|
370
398
|
const { isKeyboardVisible } = this.state;
|
|
371
399
|
|
|
372
|
-
|
|
400
|
+
log_debug("onBackPress", {
|
|
401
|
+
eventCode: event.code,
|
|
402
|
+
displayState,
|
|
403
|
+
isDialogVisible,
|
|
404
|
+
isKeyboardVisible,
|
|
405
|
+
});
|
|
373
406
|
|
|
374
407
|
if (isKeyboardVisible && shouldUseOnScreenKeyboard()) {
|
|
375
|
-
|
|
376
|
-
this.handleKeyboardDismiss();
|
|
377
|
-
}
|
|
378
|
-
|
|
408
|
+
this.handleKeyboardDismiss();
|
|
379
409
|
event.preventDefault();
|
|
380
410
|
event.stopPropagation();
|
|
381
411
|
|
|
382
412
|
return;
|
|
383
413
|
}
|
|
384
414
|
|
|
415
|
+
switch (displayState) {
|
|
416
|
+
case DISPLAY_STATES.DEFAULT:
|
|
417
|
+
case DISPLAY_STATES.PLAYER:
|
|
418
|
+
if (isDialogVisible) {
|
|
419
|
+
this.onConfirmDialogClose();
|
|
420
|
+
} else if (navigator.canGoBack()) {
|
|
421
|
+
navigator.goBack();
|
|
422
|
+
} else if (this.isHomeScreen()) {
|
|
423
|
+
this.platformBack();
|
|
424
|
+
} else if (navigator.currentRoute.includes("hook")) {
|
|
425
|
+
// If code reaches this block navigator cant go back, it is not home,
|
|
426
|
+
// and this is a login plugin that was pushed on top of the home
|
|
427
|
+
// Treat it like a home screen and run platformBack()
|
|
428
|
+
const entryData = navigator?.data?.entry;
|
|
429
|
+
const isHookInHomescreen = entryData?.payload?.home;
|
|
430
|
+
|
|
431
|
+
const isHookFlowBlocker =
|
|
432
|
+
typeof entryData?.hookPlugin?.module?.isFlowBlocker === "function"
|
|
433
|
+
? entryData?.hookPlugin?.module?.isFlowBlocker()
|
|
434
|
+
: entryData?.hookPlugin?.module?.isFlowBlocker;
|
|
435
|
+
|
|
436
|
+
if (isHookInHomescreen && isHookFlowBlocker) {
|
|
437
|
+
this.platformBack();
|
|
438
|
+
} else {
|
|
439
|
+
navigator.goBack(false, true);
|
|
440
|
+
}
|
|
441
|
+
} else {
|
|
442
|
+
this.goToHome();
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
break;
|
|
446
|
+
case DISPLAY_STATES.HUD:
|
|
447
|
+
// IF transport controls are open, close them instead of closing player
|
|
448
|
+
setDisplayState(DISPLAY_STATES.PLAYER);
|
|
449
|
+
break;
|
|
450
|
+
default:
|
|
451
|
+
setDisplayState(DISPLAY_STATES.PLAYER);
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
onBackspacePress(event) {
|
|
457
|
+
const isInputFocused =
|
|
458
|
+
document.activeElement instanceof HTMLInputElement ||
|
|
459
|
+
document.activeElement instanceof HTMLTextAreaElement;
|
|
460
|
+
|
|
461
|
+
// Don't handle backspace if input is focused
|
|
462
|
+
if (isInputFocused) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
this.onBackPress(event);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
onKeyDown(event) {
|
|
470
|
+
const { displayState, setDisplayState, navigator } = this.props;
|
|
471
|
+
const { isDialogVisible } = confirmationDialogStore.getState();
|
|
472
|
+
|
|
473
|
+
if (keyCode(event).matches("Backspace")) {
|
|
474
|
+
this.onBackspacePress(event);
|
|
475
|
+
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
if (keyCode(event).matchesAny(KEYS.Back, KEYS.Escape, KEYS.EscapeDevice)) {
|
|
480
|
+
this.onBackPress(event);
|
|
481
|
+
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
|
|
385
485
|
if (this.keySupportsLongPress(event)) {
|
|
386
486
|
this.longPressDetector.monitorKeyPress(event.code, event);
|
|
387
487
|
}
|
|
388
488
|
|
|
389
|
-
//
|
|
489
|
+
// Only handle repeat events for arrow keys
|
|
390
490
|
if (event.repeat && !keyCode(event).matchesAny(...ARROW_KEYS)) return;
|
|
391
491
|
|
|
392
492
|
/**
|
|
@@ -447,62 +547,6 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
447
547
|
}
|
|
448
548
|
}
|
|
449
549
|
|
|
450
|
-
/**
|
|
451
|
-
When pressing backspace or the Native "Back" button:
|
|
452
|
-
if on the transport controls: we show the player
|
|
453
|
-
if on the player : we show the UI
|
|
454
|
-
if on the UI : we exit the app
|
|
455
|
-
*/
|
|
456
|
-
|
|
457
|
-
if (
|
|
458
|
-
keyCode(event).matchesAny(
|
|
459
|
-
KEYS.Back,
|
|
460
|
-
KEYS.Escape,
|
|
461
|
-
KEYS.EscapeDevice,
|
|
462
|
-
KEYS.Backspace
|
|
463
|
-
)
|
|
464
|
-
) {
|
|
465
|
-
switch (displayState) {
|
|
466
|
-
case DISPLAY_STATES.DEFAULT:
|
|
467
|
-
case DISPLAY_STATES.PLAYER:
|
|
468
|
-
if (isDialogVisible) {
|
|
469
|
-
this.onConfirmDialogClose();
|
|
470
|
-
} else if (navigator.canGoBack()) {
|
|
471
|
-
navigator.goBack();
|
|
472
|
-
} else if (this.isHomeScreen()) {
|
|
473
|
-
this.platformBack();
|
|
474
|
-
} else if (navigator.currentRoute.includes("hook")) {
|
|
475
|
-
// If code reaches this block navigator cant go back, it is not home,
|
|
476
|
-
// and this is a login plugin that was pushed on top of the home
|
|
477
|
-
// Treat it like a home screen and run platformBack()
|
|
478
|
-
const entryData = navigator?.data?.entry;
|
|
479
|
-
const isHookInHomescreen = entryData?.payload?.home;
|
|
480
|
-
|
|
481
|
-
const isHookFlowBlocker =
|
|
482
|
-
typeof entryData?.hookPlugin?.module?.isFlowBlocker === "function"
|
|
483
|
-
? entryData?.hookPlugin?.module?.isFlowBlocker()
|
|
484
|
-
: entryData?.hookPlugin?.module?.isFlowBlocker;
|
|
485
|
-
|
|
486
|
-
if (isHookInHomescreen && isHookFlowBlocker) {
|
|
487
|
-
this.platformBack();
|
|
488
|
-
} else {
|
|
489
|
-
navigator.goBack(false, true);
|
|
490
|
-
}
|
|
491
|
-
} else {
|
|
492
|
-
this.goToHome();
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
break;
|
|
496
|
-
case DISPLAY_STATES.HUD:
|
|
497
|
-
// IF transport controls are open, close them instead of closing player
|
|
498
|
-
setDisplayState(DISPLAY_STATES.PLAYER);
|
|
499
|
-
break;
|
|
500
|
-
default:
|
|
501
|
-
setDisplayState(DISPLAY_STATES.PLAYER);
|
|
502
|
-
break;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
|
|
506
550
|
if (
|
|
507
551
|
keyCode(event).matches(KEYS.Enter) ||
|
|
508
552
|
(__DEV__ && keyCode(event).matches(KEYS.X))
|
|
@@ -510,6 +554,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
510
554
|
if (displayState === DISPLAY_STATES.PLAYER) {
|
|
511
555
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
512
556
|
} else {
|
|
557
|
+
focusManager.pressIn();
|
|
513
558
|
focusManager.press();
|
|
514
559
|
}
|
|
515
560
|
|
|
@@ -526,10 +571,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
526
571
|
this.platformBack();
|
|
527
572
|
}
|
|
528
573
|
|
|
529
|
-
if (
|
|
530
|
-
keyCode(event).matchesAny(...ARROW_KEYS) &&
|
|
531
|
-
!this.state.isKeyboardVisible
|
|
532
|
-
) {
|
|
574
|
+
if (keyCode(event).matchesAny(...ARROW_KEYS)) {
|
|
533
575
|
if (displayState === DISPLAY_STATES.PLAYER) {
|
|
534
576
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
535
577
|
}
|
|
@@ -542,12 +584,6 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
542
584
|
focusManager.moveFocus(direction);
|
|
543
585
|
}
|
|
544
586
|
|
|
545
|
-
if (!isDialogVisible) {
|
|
546
|
-
// run focus recovery on user interaction attempt
|
|
547
|
-
// probably we failed to set initial focus for some reason
|
|
548
|
-
focusManager.recoverFocus();
|
|
549
|
-
}
|
|
550
|
-
|
|
551
587
|
if (
|
|
552
588
|
displayState === DISPLAY_STATES.PLAYER ||
|
|
553
589
|
displayState === DISPLAY_STATES.HUD
|
|
@@ -623,6 +659,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
623
659
|
|
|
624
660
|
if (
|
|
625
661
|
(target.tagName === "INPUT" && target.type === "text") ||
|
|
662
|
+
(target.tagName === "INPUT" && target.type === "password") ||
|
|
626
663
|
target.tagName === "TEXTAREA"
|
|
627
664
|
) {
|
|
628
665
|
this.setState({
|
|
@@ -651,7 +688,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
651
688
|
}
|
|
652
689
|
}
|
|
653
690
|
|
|
654
|
-
handleKeyboardDismiss
|
|
691
|
+
handleKeyboardDismiss() {
|
|
655
692
|
this.isDismissing = true;
|
|
656
693
|
|
|
657
694
|
this.setState(
|
|
@@ -662,9 +699,10 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
662
699
|
},
|
|
663
700
|
() => {
|
|
664
701
|
this.isDismissing = false;
|
|
702
|
+
focusManager.recoverFocus();
|
|
665
703
|
}
|
|
666
704
|
);
|
|
667
|
-
}
|
|
705
|
+
}
|
|
668
706
|
|
|
669
707
|
handleKeyboardInput = (value: string) => {
|
|
670
708
|
const { activeInputRef } = this.state;
|
|
@@ -760,6 +798,35 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
760
798
|
].includes(event.code);
|
|
761
799
|
}
|
|
762
800
|
|
|
801
|
+
handlePhysicalKeyboardDismiss(event: CustomEvent) {
|
|
802
|
+
const { value, position, inputElement } = event.detail;
|
|
803
|
+
|
|
804
|
+
this.isDismissing = true;
|
|
805
|
+
|
|
806
|
+
this.setState(
|
|
807
|
+
{
|
|
808
|
+
isKeyboardVisible: false,
|
|
809
|
+
keyboardInput: "",
|
|
810
|
+
activeInputRef: null,
|
|
811
|
+
},
|
|
812
|
+
() => {
|
|
813
|
+
if (inputElement) {
|
|
814
|
+
inputElement.value = value;
|
|
815
|
+
inputElement.focus();
|
|
816
|
+
inputElement.setSelectionRange(position, position);
|
|
817
|
+
|
|
818
|
+
const keyboardEvent = new CustomEvent("keyboardUpdate", {
|
|
819
|
+
detail: { value },
|
|
820
|
+
});
|
|
821
|
+
|
|
822
|
+
document.dispatchEvent(keyboardEvent);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
this.isDismissing = false;
|
|
826
|
+
}
|
|
827
|
+
);
|
|
828
|
+
}
|
|
829
|
+
|
|
763
830
|
render() {
|
|
764
831
|
return (
|
|
765
832
|
(shouldUseOnScreenKeyboard() && this.state.isKeyboardVisible && (
|
package/App/Loader/loadLocale.js
CHANGED
|
@@ -4,8 +4,8 @@ import { QuickBrickCommunicationModule } from "../../Polyfills/QuickBrickCommuni
|
|
|
4
4
|
import { loadLocaleImpl, getLanguageCode } from "./utils";
|
|
5
5
|
|
|
6
6
|
type Locale = {
|
|
7
|
-
language: string
|
|
8
|
-
country: string
|
|
7
|
+
language: string;
|
|
8
|
+
country: string;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
async function getBrowserLocale() {
|
package/index.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/// <reference types="@applicaster/applicaster-types" />
|
|
2
2
|
import * as R from "ramda";
|
|
3
|
-
import { useHistory, useLocation } from "react-router-dom";
|
|
4
3
|
|
|
5
4
|
import { createQuickBrickApp } from "@applicaster/quick-brick-core";
|
|
6
5
|
import * as QuickBrickManager from "@applicaster/zapp-react-native-bridge/QuickBrick";
|
|
7
6
|
import * as Contexts from "@applicaster/zapp-react-native-ui-components/Contexts";
|
|
8
7
|
import { OfflineHandler } from "@applicaster/zapp-react-native-ui-components/Components/OfflineHandler";
|
|
9
8
|
import { getXray } from "@applicaster/zapp-react-native-utils/logger";
|
|
10
|
-
import { ZappDomRouter } from "./App/Router";
|
|
11
9
|
import { Layout } from "./App/Layout";
|
|
12
10
|
import { SplashLoader } from "./App/Loader/SplashLoader";
|
|
13
11
|
import { appLoader } from "./App/Loader";
|
|
@@ -24,11 +22,6 @@ const contextProviders = R.map(R.prop("withProvider"), R.values(Contexts));
|
|
|
24
22
|
if (withXray) contextProviders.push(withXray);
|
|
25
23
|
|
|
26
24
|
export const ZappApp = createQuickBrickApp({
|
|
27
|
-
navigations: {
|
|
28
|
-
Router: ZappDomRouter,
|
|
29
|
-
useLocation,
|
|
30
|
-
useHistory,
|
|
31
|
-
},
|
|
32
25
|
QuickBrickManager,
|
|
33
26
|
Layout,
|
|
34
27
|
OfflineHandler,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-dom-app",
|
|
3
|
-
"version": "13.0.0-alpha.
|
|
3
|
+
"version": "13.0.0-alpha.3962361544",
|
|
4
4
|
"description": "Zapp App Component for Applicaster's Quick Brick React Native App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,13 +22,12 @@
|
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/applicaster/zapp-react-dom-app#readme",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.
|
|
26
|
-
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.
|
|
27
|
-
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.
|
|
28
|
-
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.
|
|
29
|
-
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.
|
|
25
|
+
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.3962361544",
|
|
26
|
+
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.3962361544",
|
|
27
|
+
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.3962361544",
|
|
28
|
+
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.3962361544",
|
|
29
|
+
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.3962361544",
|
|
30
30
|
"abortcontroller-polyfill": "^1.7.5",
|
|
31
|
-
"history": "^4.7.2",
|
|
32
31
|
"react-router-dom": "^5.1.2",
|
|
33
32
|
"typeface-montserrat": "^0.0.54",
|
|
34
33
|
"video.js": "7.14.3",
|
|
@@ -41,12 +40,12 @@
|
|
|
41
40
|
"@types/node": "*",
|
|
42
41
|
"core-js": "3.29.1",
|
|
43
42
|
"immer": "*",
|
|
44
|
-
"react": "
|
|
45
|
-
"react-dom": "
|
|
43
|
+
"react": "*",
|
|
44
|
+
"react-dom": "*",
|
|
46
45
|
"react-native": "*",
|
|
47
46
|
"react-native-safe-area-context": "*",
|
|
48
47
|
"react-native-svg": "*",
|
|
49
|
-
"react-native-web": "
|
|
48
|
+
"react-native-web": "*",
|
|
50
49
|
"uglify-js": "*",
|
|
51
50
|
"validate-color": "*",
|
|
52
51
|
"zustand": "*"
|
package/App/Router/index.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import PropTypes from "prop-types";
|
|
3
|
-
|
|
4
|
-
import { Router } from "react-router";
|
|
5
|
-
import { createMemoryHistory } from "history";
|
|
6
|
-
|
|
7
|
-
const history = createMemoryHistory();
|
|
8
|
-
|
|
9
|
-
export const ZappDomRouter = ({ children, ...otherProps }) => (
|
|
10
|
-
<Router history={history} {...otherProps}>
|
|
11
|
-
{children}
|
|
12
|
-
</Router>
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
ZappDomRouter.propTypes = {
|
|
16
|
-
children: PropTypes.node.isRequired,
|
|
17
|
-
};
|
package/App/Splash/Spinner.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import "./spinner-styles.css";
|
|
4
|
-
|
|
5
|
-
export const Spinner = (color) => {
|
|
6
|
-
const spinnerColor = {
|
|
7
|
-
background: color.color,
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<div>
|
|
12
|
-
<div id="progress">
|
|
13
|
-
<div className="spinner">
|
|
14
|
-
<div style={spinnerColor} className="bar1" />
|
|
15
|
-
<div style={spinnerColor} className="bar2" />
|
|
16
|
-
<div style={spinnerColor} className="bar3" />
|
|
17
|
-
<div style={spinnerColor} className="bar4" />
|
|
18
|
-
<div style={spinnerColor} className="bar5" />
|
|
19
|
-
<div style={spinnerColor} className="bar6" />
|
|
20
|
-
<div style={spinnerColor} className="bar7" />
|
|
21
|
-
<div style={spinnerColor} className="bar8" />
|
|
22
|
-
<div style={spinnerColor} className="bar9" />
|
|
23
|
-
<div style={spinnerColor} className="bar10" />
|
|
24
|
-
<div style={spinnerColor} className="bar11" />
|
|
25
|
-
<div style={spinnerColor} className="bar12" />
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
);
|
|
30
|
-
};
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
div.spinner {
|
|
2
|
-
position: absolute;
|
|
3
|
-
width: 100px;
|
|
4
|
-
height: 100px;
|
|
5
|
-
display: inline-block;
|
|
6
|
-
top: 50%;
|
|
7
|
-
left: 50%;
|
|
8
|
-
margin: -60px 0 0 -70px;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
div.spinner div {
|
|
12
|
-
width: 6%;
|
|
13
|
-
height: 16%;
|
|
14
|
-
position: absolute;
|
|
15
|
-
left: 49%;
|
|
16
|
-
top: 43%;
|
|
17
|
-
opacity: 0;
|
|
18
|
-
-webkit-border-radius: 50px;
|
|
19
|
-
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
|
20
|
-
-webkit-animation: fade 1s linear infinite;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@-webkit-keyframes fade {
|
|
24
|
-
from {
|
|
25
|
-
opacity: 1;
|
|
26
|
-
}
|
|
27
|
-
to {
|
|
28
|
-
opacity: 0.25;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
div.spinner div.bar1 {
|
|
33
|
-
-webkit-transform: rotate(0deg) translate(0, -130%);
|
|
34
|
-
-webkit-animation-delay: 0s;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
div.spinner div.bar2 {
|
|
38
|
-
-webkit-transform: rotate(30deg) translate(0, -130%);
|
|
39
|
-
-webkit-animation-delay: -0.9167s;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
div.spinner div.bar3 {
|
|
43
|
-
-webkit-transform: rotate(60deg) translate(0, -130%);
|
|
44
|
-
-webkit-animation-delay: -0.833s;
|
|
45
|
-
}
|
|
46
|
-
div.spinner div.bar4 {
|
|
47
|
-
-webkit-transform: rotate(90deg) translate(0, -130%);
|
|
48
|
-
-webkit-animation-delay: -0.7497s;
|
|
49
|
-
}
|
|
50
|
-
div.spinner div.bar5 {
|
|
51
|
-
-webkit-transform: rotate(120deg) translate(0, -130%);
|
|
52
|
-
-webkit-animation-delay: -0.667s;
|
|
53
|
-
}
|
|
54
|
-
div.spinner div.bar6 {
|
|
55
|
-
-webkit-transform: rotate(150deg) translate(0, -130%);
|
|
56
|
-
-webkit-animation-delay: -0.5837s;
|
|
57
|
-
}
|
|
58
|
-
div.spinner div.bar7 {
|
|
59
|
-
-webkit-transform: rotate(180deg) translate(0, -130%);
|
|
60
|
-
-webkit-animation-delay: -0.5s;
|
|
61
|
-
}
|
|
62
|
-
div.spinner div.bar8 {
|
|
63
|
-
-webkit-transform: rotate(210deg) translate(0, -130%);
|
|
64
|
-
-webkit-animation-delay: -0.4167s;
|
|
65
|
-
}
|
|
66
|
-
div.spinner div.bar9 {
|
|
67
|
-
-webkit-transform: rotate(240deg) translate(0, -130%);
|
|
68
|
-
-webkit-animation-delay: -0.333s;
|
|
69
|
-
}
|
|
70
|
-
div.spinner div.bar10 {
|
|
71
|
-
-webkit-transform: rotate(270deg) translate(0, -130%);
|
|
72
|
-
-webkit-animation-delay: -0.2497s;
|
|
73
|
-
}
|
|
74
|
-
div.spinner div.bar11 {
|
|
75
|
-
-webkit-transform: rotate(300deg) translate(0, -130%);
|
|
76
|
-
-webkit-animation-delay: -0.167s;
|
|
77
|
-
}
|
|
78
|
-
div.spinner div.bar12 {
|
|
79
|
-
-webkit-transform: rotate(330deg) translate(0, -130%);
|
|
80
|
-
-webkit-animation-delay: -0.0833s;
|
|
81
|
-
}
|