itizawa hace 6 años
padre
commit
43d72f8d32

+ 4 - 13
src/client/js/components/Me/BasicInfoSettings.jsx

@@ -18,22 +18,11 @@ class BasicInfoSettings extends React.Component {
   constructor(appContainer) {
     super();
 
-    this.state = {
-      retrieveError: null,
-    };
-
     this.onClickSubmit = this.onClickSubmit.bind(this);
   }
 
   componentDidMount() {
-    try {
-      this.props.personalContainer.retrievePersonalData();
-    }
-    catch (err) {
-      logger.error(err);
-      toastError(new Error('Failed to fetch data'));
-      this.setState({ retrieveError: err.message });
-    }
+    this.props.personalContainer.retrievePersonalData();
   }
 
   async onClickSubmit() {
@@ -146,7 +135,9 @@ class BasicInfoSettings extends React.Component {
 
         <div className="row my-3">
           <div className="col-xs-offset-4 col-xs-5">
-            <button type="button" className="btn btn-primary" onClick={this.onClickSubmit} disabled={this.state.retrieveError != null}>{t('Update')}</button>
+            <button type="button" className="btn btn-primary" onClick={this.onClickSubmit} disabled={personalContainer.state.retrieveError != null}>
+              {t('Update')}
+            </button>
           </div>
         </div>
 

+ 0 - 5
src/client/js/services/AppContainer.js

@@ -218,11 +218,6 @@ export default class AppContainer extends Container {
     });
   }
 
-  getCurrentUser() {
-    const currentUser = this.findUser(this.me);
-    return currentUser;
-  }
-
   fetchUsers() {
     const interval = 1000 * 60 * 15; // 15min
     const currentTime = new Date();

+ 20 - 7
src/client/js/services/PersonalContainer.js

@@ -2,6 +2,8 @@ import { Container } from 'unstated';
 
 import loggerFactory from '@alias/logger';
 
+import { toastError } from '../util/apiNotification';
+
 // eslint-disable-next-line no-unused-vars
 const logger = loggerFactory('growi:services:PersonalContainer');
 
@@ -17,6 +19,7 @@ export default class PersonalContainer extends Container {
     this.appContainer = appContainer;
 
     this.state = {
+      retrieveError: null,
       name: '',
       email: '',
       registrationWhiteList: appContainer.getConfig().registrationWhiteList,
@@ -37,13 +40,23 @@ export default class PersonalContainer extends Container {
    * retrieve personal data
    */
   async retrievePersonalData() {
-    const currentUser = this.appContainer.getCurrentUser();
-    const {
-      name, email, isEmailPublished, lang,
-    } = currentUser;
-    this.setState({
-      name, email, isEmailPublished, lang,
-    });
+    try {
+      const response = await this.appContainer.apiv3.get('/personal-setting/');
+      const { currentUser, registrationWhiteList } = response.data;
+
+      this.setState({
+        name: currentUser.name,
+        email: currentUser.email,
+        registrationWhiteList,
+        isEmailPublished: currentUser.isEmailPublished,
+        lang: currentUser.lang,
+      });
+    }
+    catch (err) {
+      this.setState({ retrieveError: err.message });
+      logger.error(err);
+      toastError(new Error('Failed to fetch data'));
+    }
   }
 
   /**

+ 6 - 10
src/server/routes/apiv3/index.js

@@ -13,29 +13,25 @@ module.exports = (crowi) => {
 
   router.use('/healthcheck', require('./healthcheck')(crowi));
 
+  // admin
   router.use('/admin-home', require('./admin-home')(crowi));
-
   router.use('/markdown-setting', require('./markdown-setting')(crowi));
-
   router.use('/app-settings', require('./app-settings')(crowi));
-
   router.use('/customize-setting', require('./customize-setting')(crowi));
-
   router.use('/users', require('./users')(crowi));
-
   router.use('/user-groups', require('./user-group')(crowi));
+  router.use('/export', require('./export')(crowi));
+  router.use('/import', require('./import')(crowi));
+  router.use('/search', require('./search')(crowi));
+
+  router.use('/personal-setting', require('./personal-setting')(crowi));
 
   router.use('/user-group-relations', require('./user-group-relation')(crowi));
 
   router.use('/mongo', require('./mongo')(crowi));
 
-  router.use('/export', require('./export')(crowi));
-
-  router.use('/import', require('./import')(crowi));
-
   router.use('/statistics', require('./statistics')(crowi));
 
-  router.use('/search', require('./search')(crowi));
 
   return router;
 };

+ 39 - 0
src/server/routes/apiv3/personal-setting.js

@@ -0,0 +1,39 @@
+/* eslint-disable no-unused-vars */
+const loggerFactory = require('@alias/logger');
+
+const logger = loggerFactory('growi:routes:apiv3:personal-setting');
+
+const express = require('express');
+
+const router = express.Router();
+
+const { body } = require('express-validator/check');
+const ErrorV3 = require('../../models/vo/error-apiv3');
+
+/**
+ * @swagger
+ *  tags:
+ *    name: PsersonalSetting
+ */
+module.exports = (crowi) => {
+  const loginRequiredStrictly = require('../../middleware/login-required')(crowi);
+  const adminRequired = require('../../middleware/admin-required')(crowi);
+  const csrf = require('../../middleware/csrf')(crowi);
+  const { customizeService } = crowi;
+
+  const { User } = crowi.models;
+
+
+  const { ApiV3FormValidator } = crowi.middlewares;
+
+  // TODO swagger
+  router.get('/', loginRequiredStrictly, async(req, res) => {
+    const personalParams = {
+      currentUser: await User.findUserByUsername(req.user.username),
+      registrationWhiteList: await crowi.configManager.getConfig('crowi', 'security:registrationWhiteList'),
+    };
+    return res.apiv3(personalParams);
+  });
+
+  return router;
+};