import React from 'react'; import PropTypes from 'prop-types'; import { observable, action, computed } from 'mobx'; import { observer } from 'mobx-react'; import { map, compact, invoke, each } from 'lodash'; import Heading from 'grommet/components/Heading'; import Header from 'grommet/components/Header'; import Button from 'grommet/components/Button'; import SaveIcon from 'grommet/components/icons/base/Save'; import Screen from 'hippo/components/screen'; import Asset from 'hippo/components/asset'; import Settings from 'hippo/models/system-setting'; import {Row, Col} from 'react-flexbox-grid'; import ScreenInstance from 'hippo/screens/instance'; import Extensions from '../extensions'; import MailerConfig from './system-settings/mailer-config'; import TenantSettings from './system-settings/tenant'; import './system-settings/system-settings.scss'; @observer export default class SystemSettings extends React.PureComponent { @observable settings = new Settings(); extensionPanelRefs = new Map(); static propTypes = { screen: PropTypes.instanceOf(ScreenInstance).isRequired, } renderExtPanel(ext) { const { systemSettingsComponent: Panel } = ext; if (!Panel) return null; return (
this.extensionPanelRefs.set(ext.id, panel)} />
); } get extensionPanels() { return compact(map(Extensions.instances.values(), panel => this.renderExtPanel(panel))); } constructor(props) { super(props); this.settings.fetch(); } @action.bound onSave() { this.extensionPanelRefs.forEach(panel => invoke(panel, 'onSave')); this.tenantSettings.onSave() this.settings.save(); } render() { return (
{this.props.screen.definition.title} this.tenantSettings = ts} /> Images this.extensionPanelRefs.set('mail', panel)} /> {this.extensionPanels}
); } }