| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import React from 'react';
- import PropTypes from 'prop-types';
- import { withTranslation } from 'react-i18next';
- import ButtonToolbar from 'react-bootstrap/es/ButtonToolbar';
- import SplitButton from 'react-bootstrap/es/SplitButton';
- import MenuItem from 'react-bootstrap/es/MenuItem';
- import PageContainer from '../services/PageContainer';
- import AppContainer from '../services/AppContainer';
- import EditorContainer from '../services/EditorContainer';
- import { createSubscribedElement } from './UnstatedUtils';
- import SlackNotification from './SlackNotification';
- import GrantSelector from './SavePageControls/GrantSelector';
- class SavePageControls extends React.Component {
- constructor(props) {
- super(props);
- const config = this.props.appContainer.getConfig();
- this.hasSlackConfig = config.hasSlackConfig;
- this.isAclEnabled = config.isAclEnabled;
- this.slackEnabledFlagChangedHandler = this.slackEnabledFlagChangedHandler.bind(this);
- this.slackChannelsChangedHandler = this.slackChannelsChangedHandler.bind(this);
- this.updateGrantHandler = this.updateGrantHandler.bind(this);
- this.submit = this.submit.bind(this);
- this.submitAndOverwriteScopesOfDescendants = this.submitAndOverwriteScopesOfDescendants.bind(this);
- }
- slackEnabledFlagChangedHandler(isSlackEnabled) {
- this.props.editorContainer.setState({ isSlackEnabled });
- }
- slackChannelsChangedHandler(slackChannels) {
- this.props.editorContainer.setState({ slackChannels });
- }
- updateGrantHandler(data) {
- this.props.editorContainer.setState(data);
- }
- submit() {
- this.props.appContainer.setIsDocSaved(true);
- this.props.onSubmit();
- }
- submitAndOverwriteScopesOfDescendants() {
- this.props.onSubmit({ overwriteScopesOfDescendants: true });
- }
- render() {
- const { t, editorContainer } = this.props;
- const labelSubmitButton = this.props.pageContainer.state.pageId == null ? t('Create') : t('Update');
- const labelOverwriteScopes = t('page_edit.overwrite_scopes', { operation: labelSubmitButton });
- return (
- <div className="d-flex align-items-center form-inline">
- {this.hasSlackConfig
- && (
- <div className="mr-2">
- <SlackNotification
- isSlackEnabled={editorContainer.state.isSlackEnabled}
- slackChannels={editorContainer.state.slackChannels}
- onEnabledFlagChange={this.slackEnabledFlagChangedHandler}
- onChannelChange={this.slackChannelsChangedHandler}
- />
- </div>
- )
- }
- {this.isAclEnabled
- && (
- <div className="mr-2">
- <GrantSelector
- grant={editorContainer.state.grant}
- grantGroupId={editorContainer.state.grantGroupId}
- grantGroupName={editorContainer.state.grantGroupName}
- onUpdateGrant={this.updateGrantHandler}
- />
- </div>
- )
- }
- <ButtonToolbar>
- <SplitButton
- id="spl-btn-submit"
- bsStyle="primary"
- className="btn-submit"
- dropup
- pullRight
- onClick={this.submit}
- title={labelSubmitButton}
- >
- <MenuItem eventKey="1" onClick={this.submitAndOverwriteScopesOfDescendants}>{labelOverwriteScopes}</MenuItem>
- {/* <MenuItem divider /> */}
- </SplitButton>
- </ButtonToolbar>
- </div>
- );
- }
- }
- /**
- * Wrapper component for using unstated
- */
- const SavePageControlsWrapper = (props) => {
- return createSubscribedElement(SavePageControls, props, [AppContainer, PageContainer, EditorContainer]);
- };
- SavePageControls.propTypes = {
- t: PropTypes.func.isRequired, // i18next
- appContainer: PropTypes.instanceOf(AppContainer).isRequired,
- pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
- editorContainer: PropTypes.instanceOf(EditorContainer).isRequired,
- onSubmit: PropTypes.func.isRequired,
- };
- export default withTranslation()(SavePageControlsWrapper);
|