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,
};