@@ -27,18 +27,31 @@ interface LogoProps {
27
27
className ?: string ;
28
28
}
29
29
30
- export default class InteractiveLogo extends React . Component < LogoProps > {
30
+ interface LogoState {
31
+ player : RufflePlayer | null ;
32
+ }
33
+
34
+ export default class InteractiveLogo extends React . Component < LogoProps , LogoState > {
31
35
private readonly container : React . RefObject < HTMLDivElement > ;
32
36
private player : RufflePlayer | null = null ;
33
37
34
38
constructor ( props : LogoProps ) {
35
39
super ( props ) ;
36
40
37
41
this . container = React . createRef ( ) ;
42
+ this . state = {
43
+ player : null ,
44
+ } ;
45
+ }
46
+
47
+ private removeRufflePlayer ( ) {
48
+ this . player ?. remove ( ) ;
49
+ this . player = null ;
50
+ this . setState ( { player : null } ) ;
38
51
}
39
52
40
53
private load ( ) {
41
- if ( this . player ) {
54
+ if ( this . state . player ) {
42
55
// Already loaded.
43
56
return ;
44
57
}
@@ -47,6 +60,7 @@ export default class InteractiveLogo extends React.Component<LogoProps> {
47
60
48
61
if ( this . player ) {
49
62
this . container . current ! . appendChild ( this . player ) ;
63
+
50
64
this . player . load ( {
51
65
url : "/logo-anim.swf" ,
52
66
autoplay : "on" ,
@@ -55,14 +69,12 @@ export default class InteractiveLogo extends React.Component<LogoProps> {
55
69
contextMenu : "off" ,
56
70
splashScreen : false ,
57
71
preferredRenderer : "canvas" ,
58
- } ) . then ( ( ) => {
59
- this ?. container ?. current ?. querySelector ( "img" ) ?. classList ?. toggle ( classes . hidden ) ;
60
72
} ) . catch ( ( ) => {
61
- this . player ?. remove ( ) ;
62
- this . player = null ;
73
+ this . removeRufflePlayer ( ) ;
63
74
} ) ;
64
75
this . player . style . width = "100%" ;
65
76
this . player . style . height = "100%" ;
77
+ this . setState ( { player : this . player } ) ;
66
78
}
67
79
}
68
80
@@ -71,8 +83,7 @@ export default class InteractiveLogo extends React.Component<LogoProps> {
71
83
}
72
84
73
85
componentWillUnmount ( ) {
74
- this . player ?. remove ( ) ;
75
- this . player = null ;
86
+ this . removeRufflePlayer ( ) ;
76
87
}
77
88
78
89
render ( ) {
@@ -83,7 +94,7 @@ export default class InteractiveLogo extends React.Component<LogoProps> {
83
94
onReady = { ( ) => this . load ( ) }
84
95
/>
85
96
< div ref = { this . container } className = { this . props . className } >
86
- < Image src = "/logo.svg" alt = "Ruffle Logo" className = { classes . staticLogo } width = "340" height = "110" />
97
+ < Image src = "/logo.svg" alt = "Ruffle Logo" className = { this . state . player ? classes . hidden : classes . staticLogo } width = "340" height = "110" />
87
98
</ div >
88
99
</ >
89
100
) ;
0 commit comments