@@ -75,34 +75,55 @@ export class Theme extends React.Component<ThemeProps, ThemeState> {
7575 }
7676
7777 componentDidMount ( ) {
78+ this . setThemeHelper ( this . state . currTheme ) ;
7879 window . addEventListener ( "scroll" , this . handleScrollReveal ) ;
7980 }
8081
8182 componentWillUnmount ( ) {
83+ window . removeEventListener ( "scroll" , this . handleScrollReveal ) ;
84+ this . state . currTheme . styleManager . cleanAllStyles ( ) ;
85+ this . removeTheme ( this . state . currTheme ) ;
86+
8287 const {
83- currTheme : {
84- acrylicTexture40,
85- acrylicTexture60,
86- acrylicTexture80,
87- styleManager
88- }
89- } = this . state ;
88+ acrylicTexture40,
89+ acrylicTexture60,
90+ acrylicTexture80
91+ } = this . state . currTheme ;
9092 URL . revokeObjectURL ( acrylicTexture40 . background ) ;
9193 URL . revokeObjectURL ( acrylicTexture60 . background ) ;
9294 URL . revokeObjectURL ( acrylicTexture80 . background ) ;
93- styleManager . cleanStyleSheet ( ) ;
95+ }
9496
95- window . removeEventListener ( "scroll" , this . handleScrollReveal ) ;
97+ removeTheme ( prevTheme : ThemeType , newTheme ?: ThemeType ) {
98+ const {
99+ styleManager
100+ } = prevTheme ;
101+ const { scrollBarStyleSelector } = this . props ;
102+
103+ if ( newTheme ) {
104+ styleManager . onSheetsUpdate = ( ( ) => {
105+ if ( this . styleManagerSheet ) {
106+ this . styleManagerSheet . setState ( ( ) => ( { CSSText : styleManager . getAllCSSText ( ) } ) ) ;
107+ }
108+ } ) ;
109+
110+ styleManager . removeCSSText ( getBaseCSSText ( prevTheme , scrollBarStyleSelector ) ) ;
111+ const CSSText = getBaseCSSText ( newTheme , scrollBarStyleSelector ) ;
112+ styleManager . addCSSText ( CSSText ) ;
113+ newTheme . styleManager . addCSSText ( CSSText ) ;
114+ } else {
115+ styleManager . removeCSSText ( getBaseCSSText ( prevTheme , scrollBarStyleSelector ) ) ;
116+ }
96117 }
97118
98119 componentWillReceiveProps ( nextProps : ThemeProps ) {
99- const { theme } = nextProps ;
100- this . setState ( ( ) => ( { currTheme : theme } ) ) ;
120+ this . updateTheme ( nextProps . theme ) ;
101121 }
102122
103123 setThemeHelper ( theme : ThemeType ) {
104124 const { scrollBarStyleSelector } = this . props ;
105125 const { styleManager } = theme ;
126+
106127 styleManager . addCSSText ( getBaseCSSText ( theme , scrollBarStyleSelector ) ) ;
107128 styleManager . onSheetsUpdate = ( ( ) => {
108129 if ( this . styleManagerSheet ) {
@@ -112,7 +133,7 @@ export class Theme extends React.Component<ThemeProps, ThemeState> {
112133
113134 Object . assign ( theme , {
114135 onThemeUpdate : currTheme => {
115- this . setState ( { currTheme } ) ;
136+ this . updateTheme ( currTheme ) ;
116137 } ,
117138 onToastsUpdate : ( toasts ) => {
118139 const { toastWrapper } = this ;
@@ -134,47 +155,13 @@ export class Theme extends React.Component<ThemeProps, ThemeState> {
134155 }
135156
136157 updateTheme ( currTheme : ThemeType ) {
137- this . setState ( ( ) => ( { currTheme } ) ) ;
158+ this . setState ( ( prevState ) => {
159+ this . removeTheme ( prevState . currTheme , currTheme ) ;
160+ this . setThemeHelper ( currTheme ) ;
161+ return { currTheme } ;
162+ } ) ;
138163 }
139164
140- // sureNeedGenerateAcrylic(newTheme: ThemeType) {
141- // const { currTheme } = this.state;
142- // let needGenerateAcrylic = newTheme.desktopBackgroundImage && this.props.needGenerateAcrylic;
143-
144- // if (needGenerateAcrylic &&
145- // newTheme.desktopBackgroundImage === currTheme.desktopBackgroundImage
146- // ) {
147- // if (currTheme.useFluentDesign) {
148- // Object.assign(currTheme.isDarkTheme ? this.cacheDarkAcrylicTextures : this.cacheLightAcrylicTextures, {
149- // acrylicTexture40: currTheme.acrylicTexture40,
150- // acrylicTexture60: currTheme.acrylicTexture60,
151- // acrylicTexture80: currTheme.acrylicTexture80
152- // } as ThemeType);
153- // needGenerateAcrylic = false;
154- // }
155- // if (newTheme.useFluentDesign) {
156- // if (newTheme.isDarkTheme && this.cacheDarkAcrylicTextures.acrylicTexture40 || (
157- // !newTheme.isDarkTheme && this.cacheLightAcrylicTextures.acrylicTexture40
158- // )) {
159- // Object.assign(newTheme, newTheme.isDarkTheme ? this.cacheDarkAcrylicTextures : this.cacheLightAcrylicTextures);
160- // needGenerateAcrylic = false;
161- // } else {
162- // needGenerateAcrylic = true;
163- // }
164- // } else {
165- // needGenerateAcrylic = false;
166- // Object.assign(newTheme, {
167- // acrylicTexture40: currTheme.acrylicTexture40,
168- // acrylicTexture60: currTheme.acrylicTexture60,
169- // acrylicTexture80: currTheme.acrylicTexture80
170- // } as ThemeType);
171- // }
172- // }
173- // needGenerateAcrylic = needGenerateAcrylic && newTheme.useFluentDesign && this.props.needGenerateAcrylic;
174-
175- // return needGenerateAcrylic;
176- // }
177-
178165 handleScrollReveal = ( e ?: Event ) => {
179166 handleScrollReveal ( this . state . currTheme ) ;
180167 }
@@ -192,7 +179,6 @@ export class Theme extends React.Component<ThemeProps, ThemeState> {
192179 ...attributes
193180 } = this . props ;
194181 const { currTheme } = this . state ;
195- this . setThemeHelper ( currTheme ) ;
196182
197183 const styles = getStyles ( this ) ;
198184 const classes = currTheme . prepareStyles ( {
0 commit comments