@@ -16,19 +16,39 @@ limitations under the License.
1616*/
1717
1818import React from "react" ;
19- import createReactClass from 'create-react-class' ;
19+ import PropTypes from "prop-types" ;
20+ import { _t } from "../../../languageHandler" ;
21+ import SettingsStore from "../../../settings/SettingsStore" ;
2022
21- export default createReactClass ( {
22- displayName : 'Spinner' ,
23+ const Spinner = ( { w = 32 , h = 32 , imgClassName, message} ) => {
24+ let divClass ;
25+ let imageSource ;
26+ if ( SettingsStore . isFeatureEnabled ( 'feature_new_spinner' ) ) {
27+ divClass = "mx_Spinner mx_Spinner_spin" ;
28+ imageSource = require ( "../../../../res/img/spinner.svg" ) ;
29+ } else {
30+ divClass = "mx_Spinner" ;
31+ imageSource = require ( "../../../../res/img/spinner.gif" ) ;
32+ }
2333
24- render : function ( ) {
25- const w = this . props . w || 32 ;
26- const h = this . props . h || 32 ;
27- const imgClass = this . props . imgClassName || "" ;
28- return (
29- < div className = "mx_Spinner" >
30- < img src = { require ( "../../../../res/img/spinner.gif" ) } width = { w } height = { h } className = { imgClass } />
31- </ div >
32- ) ;
33- } ,
34- } ) ;
34+ return (
35+ < div className = { divClass } >
36+ { message && < React . Fragment > < div className = "mx_Spinner_Msg" > { message } </ div > </ React . Fragment > }
37+ < img
38+ src = { imageSource }
39+ width = { w }
40+ height = { h }
41+ className = { imgClassName }
42+ aria-label = { _t ( "Loading..." ) }
43+ />
44+ </ div >
45+ ) ;
46+ } ;
47+ Spinner . propTypes = {
48+ w : PropTypes . number ,
49+ h : PropTypes . number ,
50+ imgClassName : PropTypes . string ,
51+ message : PropTypes . node ,
52+ } ;
53+
54+ export default Spinner ;
0 commit comments