import { PureComponent, Fragment, Suspense, lazy } from 'react'; import Clock from './time/Clock'; import Greeting from './greeting/Greeting'; import Quote from './quote/Quote'; import Search from './search/Search'; import QuickLinks from './quicklinks/QuickLinks'; import Date from './time/Date'; import Message from './message/Message'; import Reminder from './reminder/Reminder'; import EventBus from 'modules/helpers/eventbus'; const Weather = lazy(() => import('./weather/Weather')); const renderLoader = () => <>; export default class Widgets extends PureComponent { online = localStorage.getItem('offlineMode') === 'false'; constructor() { super(); this.state = { order: JSON.parse(localStorage.getItem('order')), welcome: localStorage.getItem('showWelcome'), }; // widgets we can re-order this.widgets = { time: this.enabled('time') ? : null, greeting: this.enabled('greeting') ? : null, quote: this.enabled('quote') ? : null, date: this.enabled('date') ? : null, quicklinks: this.enabled('quicklinksenabled') && this.online ? : null, message: this.enabled('message') ? : null, reminder: this.enabled('reminder') ? : null, }; } enabled(key) { return localStorage.getItem(key) === 'true'; } componentDidMount() { EventBus.on('refresh', (data) => { if (data === 'widgets') { this.setState({ order: JSON.parse(localStorage.getItem('order')), }); } if (data === 'widgetsWelcome') { this.setState({ welcome: localStorage.getItem('showWelcome'), }); localStorage.setItem('showWelcome', true); window.onbeforeunload = () => { localStorage.clear(); }; } if (data === 'widgetsWelcomeDone') { this.setState({ welcome: localStorage.getItem('showWelcome'), }); window.onbeforeunload = null; } }); } render() { // don't show when welcome is there if (this.state.welcome !== 'false') { return
; } // allow for re-ordering widgets let elements = []; if (this.state.order) { this.state.order.forEach((element) => { elements.push({this.widgets[element]}); }); } else { // prevent error elements = [ , , , , , , , ]; } return (
{this.enabled('searchBar') ? : null} {elements} {this.enabled('weatherEnabled') && this.online ? : null}
); } }