import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { inject, observer } from 'mobx-react'; import AppStore from '../../stores/AppStore'; import RecipesStore from '../../stores/RecipesStore'; import ServicesStore from '../../stores/ServicesStore'; import UIStore from '../../stores/UIStore'; import NewsStore from '../../stores/NewsStore'; import SettingsStore from '../../stores/SettingsStore'; import RequestStore from '../../stores/RequestStore'; import GlobalErrorStore from '../../stores/GlobalErrorStore'; import { oneOrManyChildElements } from '../../prop-types'; import AppLayout from '../../components/layout/AppLayout'; import Sidebar from '../../components/layout/Sidebar'; import Services from '../../components/services/content/Services'; import AppLoader from '../../components/ui/AppLoader'; @inject('stores', 'actions') @observer export default class AppLayoutContainer extends Component { static defaultProps = { children: null, }; render() { const { app, services, ui, news, settings, globalError, requests, } = this.props.stores; const { setActive, handleIPCMessage, setWebviewReference, openWindow, reloadUpdatedServices, reorder, reload, toggleNotifications, toggleAudio, deleteService, updateService, } = this.props.actions.service; const { hide } = this.props.actions.news; const { retryRequiredRequests } = this.props.actions.requests; const { installUpdate, toggleMuteApp, } = this.props.actions.app; const { openSettings, closeSettings, } = this.props.actions.ui; const { children } = this.props; const isLoadingServices = services.allServicesRequest.isExecuting && services.allServicesRequest.isExecutingFirstTime; if (isLoadingServices) { return ( ); } const sidebar = ( ); const servicesContainer = ( ); return ( {React.Children.count(children) > 0 ? children : null} ); } } AppLayoutContainer.wrappedComponent.propTypes = { stores: PropTypes.shape({ services: PropTypes.instanceOf(ServicesStore).isRequired, recipes: PropTypes.instanceOf(RecipesStore).isRequired, app: PropTypes.instanceOf(AppStore).isRequired, ui: PropTypes.instanceOf(UIStore).isRequired, news: PropTypes.instanceOf(NewsStore).isRequired, settings: PropTypes.instanceOf(SettingsStore).isRequired, requests: PropTypes.instanceOf(RequestStore).isRequired, globalError: PropTypes.instanceOf(GlobalErrorStore).isRequired, }).isRequired, actions: PropTypes.shape({ service: PropTypes.shape({ setActive: PropTypes.func.isRequired, reload: PropTypes.func.isRequired, toggleNotifications: PropTypes.func.isRequired, toggleAudio: PropTypes.func.isRequired, handleIPCMessage: PropTypes.func.isRequired, setWebviewReference: PropTypes.func.isRequired, openWindow: PropTypes.func.isRequired, reloadUpdatedServices: PropTypes.func.isRequired, updateService: PropTypes.func.isRequired, deleteService: PropTypes.func.isRequired, reorder: PropTypes.func.isRequired, }).isRequired, news: PropTypes.shape({ hide: PropTypes.func.isRequired, }).isRequired, ui: PropTypes.shape({ openSettings: PropTypes.func.isRequired, closeSettings: PropTypes.func.isRequired, }).isRequired, app: PropTypes.shape({ installUpdate: PropTypes.func.isRequired, toggleMuteApp: PropTypes.func.isRequired, }).isRequired, requests: PropTypes.shape({ retryRequiredRequests: PropTypes.func.isRequired, }).isRequired, }).isRequired, children: oneOrManyChildElements, };