SavePageControls.jsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import ButtonToolbar from 'react-bootstrap/es/ButtonToolbar';
  5. import SplitButton from 'react-bootstrap/es/SplitButton';
  6. import MenuItem from 'react-bootstrap/es/MenuItem';
  7. import PageContainer from '../services/PageContainer';
  8. import AppContainer from '../services/AppContainer';
  9. import { createSubscribedElement } from './UnstatedUtils';
  10. import SlackNotification from './SlackNotification';
  11. import GrantSelector from './SavePageControls/GrantSelector';
  12. class SavePageControls extends React.PureComponent {
  13. constructor(props) {
  14. super(props);
  15. const config = this.props.appContainer.getConfig();
  16. this.hasSlackConfig = config.hasSlackConfig;
  17. this.isAclEnabled = config.isAclEnabled;
  18. this.submit = this.submit.bind(this);
  19. this.submitAndOverwriteScopesOfDescendants = this.submitAndOverwriteScopesOfDescendants.bind(this);
  20. }
  21. componentWillMount() {
  22. }
  23. submit() {
  24. this.props.appContainer.setIsDocSaved(true);
  25. this.props.onSubmit();
  26. }
  27. submitAndOverwriteScopesOfDescendants() {
  28. this.props.onSubmit({ overwriteScopesOfDescendants: true });
  29. }
  30. render() {
  31. const { t } = this.props;
  32. const labelSubmitButton = this.props.pageContainer.state.pageId == null ? t('Create') : t('Update');
  33. const labelOverwriteScopes = t('page_edit.overwrite_scopes', { operation: labelSubmitButton });
  34. return (
  35. <div className="d-flex align-items-center form-inline">
  36. {this.hasSlackConfig
  37. && (
  38. <div className="mr-2">
  39. <SlackNotification
  40. isSlackEnabled={false}
  41. />
  42. </div>
  43. )
  44. }
  45. {this.isAclEnabled
  46. && (
  47. <div className="mr-2">
  48. <GrantSelector />
  49. </div>
  50. )
  51. }
  52. <ButtonToolbar>
  53. <SplitButton
  54. id="spl-btn-submit"
  55. bsStyle="primary"
  56. className="btn-submit"
  57. dropup
  58. pullRight
  59. onClick={this.submit}
  60. title={labelSubmitButton}
  61. >
  62. <MenuItem eventKey="1" onClick={this.submitAndOverwriteScopesOfDescendants}>{labelOverwriteScopes}</MenuItem>
  63. {/* <MenuItem divider /> */}
  64. </SplitButton>
  65. </ButtonToolbar>
  66. </div>
  67. );
  68. }
  69. }
  70. /**
  71. * Wrapper component for using unstated
  72. */
  73. const SavePageControlsWrapper = (props) => {
  74. return createSubscribedElement(SavePageControls, props, [AppContainer, PageContainer]);
  75. };
  76. SavePageControls.propTypes = {
  77. t: PropTypes.func.isRequired, // i18next
  78. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  79. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  80. onSubmit: PropTypes.func.isRequired,
  81. };
  82. export default withTranslation()(SavePageControlsWrapper);