Browse Source

add apiv3 for presentation

sooouh 6 years ago
parent
commit
e55d5fc11e

+ 23 - 1
src/client/js/components/Admin/MarkdownSetting/PresentationForm.jsx

@@ -1,14 +1,36 @@
 import React from 'react';
 import React from 'react';
 import PropTypes from 'prop-types';
 import PropTypes from 'prop-types';
 import { withTranslation } from 'react-i18next';
 import { withTranslation } from 'react-i18next';
+import loggerFactory from '@alias/logger';
 
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import { createSubscribedElement } from '../../UnstatedUtils';
+import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 
 import AppContainer from '../../../services/AppContainer';
 import AppContainer from '../../../services/AppContainer';
 import MarkDownSettingContainer from '../../../services/MarkDownSettingContainer';
 import MarkDownSettingContainer from '../../../services/MarkDownSettingContainer';
 
 
+const logger = loggerFactory('growi:importer');
+
 class PresentationForm extends React.Component {
 class PresentationForm extends React.Component {
 
 
+  constructor(props) {
+    super(props);
+
+    this.onClickSubmit = this.onClickSubmit.bind(this);
+  }
+
+  async onClickSubmit() {
+    try {
+      await this.props.markDownSettingContainer.updatePresentationSetting();
+      toastSuccess('Success update Presentation setting');
+    }
+    catch (err) {
+      toastError(err);
+      logger.error(err);
+    }
+  }
+
+
   render() {
   render() {
     const { t, markDownSettingContainer } = this.props;
     const { t, markDownSettingContainer } = this.props;
     const { pageBreakOption, customRegularExpression } = markDownSettingContainer.state;
     const { pageBreakOption, customRegularExpression } = markDownSettingContainer.state;
@@ -75,7 +97,7 @@ class PresentationForm extends React.Component {
         <div className="form-group my-3">
         <div className="form-group my-3">
           <div className="col-xs-offset-4 col-xs-5">
           <div className="col-xs-offset-4 col-xs-5">
             {/* TODO GW-220 create function */}
             {/* TODO GW-220 create function */}
-            <button type="submit" className="btn btn-primary">{ t('Update') }</button>
+            <div className="btn btn-primary" onClick={this.onClickSubmit}>{ t('Update') }</div>
           </div>
           </div>
         </div>
         </div>
 
 

+ 12 - 0
src/client/js/services/MarkDownSettingContainer.js

@@ -55,4 +55,16 @@ export default class MarkDownSettingContainer extends Container {
     return response;
     return response;
   }
   }
 
 
+  /**
+   * Update Presentation Setting
+   */
+  async updatePresentationSetting() {
+
+    const response = await this.appContainer.apiv3.put('/markdown-setting/presentation', {
+      pageBreakOption: this.state.pageBreakOption,
+    });
+
+    return response;
+  }
+
 }
 }

+ 57 - 0
src/server/routes/apiv3/markdown-setting.js

@@ -29,6 +29,63 @@ module.exports = (crowi) => {
 
 
   const { ApiV3FormValidator } = crowi.middlewares;
   const { ApiV3FormValidator } = crowi.middlewares;
 
 
+  validator.presentationSetting = [
+    // body('').isBoolean(),
+  ];
+
+  /**
+   * @swagger
+   *
+   *  paths:
+   *    /_api/v3/markdown-setting/presentation:
+   *      put:
+   *        tags: [MarkDownSetting]
+   *        description: Update presentation
+   *        parameters:
+   *          - name: markdown:presentation:isEnabledPresentation
+   *            in: query
+   *            description: enable presentation
+   *            schema:
+   *              type: boolean
+   *          - name: markdown:presentation:option
+   *            in: query
+   *            description: presentation option
+   *            schema:
+   *              type: boolean
+   *        responses:
+   *          200:
+   *            description: Updating presentation success
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  properties:
+   *                    presentationParams:
+   *                      type: object
+   *                      description: new presentation params
+   */
+  router.put('/presentation', loginRequiredStrictly, adminRequired, csrf, validator.presentationSetting, ApiV3FormValidator, async(req, res) => {
+    if (req.body.isEnabledXss && req.body.presentationOption == null) {
+      return res.apiv3Err(new ErrorV3('presentation option is required'));
+    }
+
+    const presentationParams = {
+      'markdown:presentation:isEnabledPresentation': req.body.isEnabledPresentation,
+      'markdown:presentation:option': req.body.presentationOption,
+    };
+
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('markdown', presentationParams);
+      return res.apiv3({ presentationParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating presentation';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-presentation-failed'));
+    }
+
+  });
+
+
   validator.xssSetting = [
   validator.xssSetting = [
     body('isEnabledXss').isBoolean(),
     body('isEnabledXss').isBoolean(),
     body('tagWhiteList').isArray(),
     body('tagWhiteList').isArray(),