Steven Fukase 4 ani în urmă
părinte
comite
c992737694

+ 5 - 5
packages/app/src/components/Me/EditorSettings.tsx

@@ -214,13 +214,9 @@ const EditorSettingsBody: FC<EditorSettingsBodyProps> = (props) => {
   const initializeEditorSettings = useCallback(async() => {
     const { data } = await appContainer.apiv3Get('/personal-setting/editor-settings');
     const retrievedRules: LintRule[] = data?.textlintSettings?.textlintRules;
-    if (retrievedRules != null) {
-      setTextlintRules(retrievedRules);
-    }
 
     // If database is empty, add default rules to state
-    if (retrievedRules?.length === 0 || retrievedRules == null) {
-
+    if (retrievedRules != null && retrievedRules.length > 0) {
       const createRulesFromDefaultList = (rule: { name: string }) => (
         {
           name: rule.name,
@@ -232,6 +228,10 @@ const EditorSettingsBody: FC<EditorSettingsBodyProps> = (props) => {
       const defaultJapaneseRules = japaneseRulesMenuItems.map(rule => createRulesFromDefaultList(rule));
       setTextlintRules([...defaultCommonRules, ...defaultJapaneseRules]);
     }
+    else {
+      setTextlintRules(retrievedRules);
+    }
+
   }, [appContainer]);
 
   useEffect(() => {

+ 20 - 15
packages/app/src/server/routes/apiv3/personal-setting.js

@@ -484,23 +484,28 @@ module.exports = (crowi) => {
    *                      type: object
    *                      description: editor settings
    */
-  router.put('/editor-settings', accessTokenParser, loginRequiredStrictly, csrf, validator.editorSettings, apiV3FormValidator, async(req, res) => {
-    try {
-      const query = { userId: req.user.id };
-      const textlintSettings = req.body?.textlintSettings;
-      const update = {};
+  // router.put('/editor-settings', accessTokenParser, loginRequiredStrictly, csrf, validator.editorSettings, apiV3FormValidator, async(req, res) => {
+  router.put('/editor-settings', accessTokenParser, loginRequiredStrictly, async(req, res) => {
+    const query = { userId: req.user.id };
+    const textlintSettings = req.body.textlintSettings;
+    const document = {};
+
+    if (textlintSettings == null) {
+      return res.apiv3Err('no-settings-found');
+    }
 
-      if (textlintSettings?.isTextlintEnabled != null) {
-        Object.assign(update, { 'textlintSettings.isTextlintEnabled': textlintSettings.isTextlintEnabled });
-      }
-      if (textlintSettings?.textlintRules != null) {
-        Object.assign(update, { 'textlintSettings.textlintRules': textlintSettings.textlintRules });
-      }
+    if (textlintSettings.isTextlintEnabled != null) {
+      Object.assign(document, { 'textlintSettings.isTextlintEnabled': textlintSettings.isTextlintEnabled });
+    }
+    if (textlintSettings.textlintRules != null) {
+      Object.assign(document, { 'textlintSettings.textlintRules': textlintSettings.textlintRules });
+    }
 
-      // Insert if document does not exist, and return new values
-      // See: https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate
-      const options = { upsert: true, new: true };
-      const response = await EditorSettings.findOneAndUpdate(query, { $set: update }, options);
+    // Insert if document does not exist, and return new values
+    // See: https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate
+    const options = { upsert: true, new: true };
+    try {
+      const response = await EditorSettings.findOneAndUpdate(query, { $set: document }, options);
       return res.apiv3(response);
     }
     catch (err) {