@@ -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