Yuki Takei 3 лет назад
Родитель
Сommit
9a8d51cf9d

+ 19 - 0
packages/app/src/interfaces/editor-settings.ts

@@ -0,0 +1,19 @@
+export interface ILintRule {
+  name: string;
+  options?: unknown;
+  isEnabled?: boolean;
+}
+
+export interface ITextlintSettings {
+  isTextlintEnabled: boolean;
+  textlintRules: ILintRule[];
+}
+
+export interface IEditorSettings {
+  theme: undefined | string,
+  keymapMode: undefined | 'vim' | 'emacs' | 'sublime',
+  styleActiveLine: boolean,
+  renderMathJaxInRealtime: boolean,
+  renderDrawioInRealtime: boolean,
+  textlintSettings: ITextlintSettings;
+}

+ 3 - 20
packages/app/src/server/models/editor-settings.ts

@@ -3,29 +3,12 @@ import {
   Schema, Model, Document,
 } from 'mongoose';
 
+import { IEditorSettings, ITextlintSettings } from '~/interfaces/editor-settings';
 
-export interface ILintRule {
-  name: string;
-  options?: unknown;
-  isEnabled?: boolean;
-}
-
-export interface ITextlintSettings {
-  isTextlintEnabled: boolean;
-  textlintRules: ILintRule[];
-}
 
-export interface IEditorSettings {
-  userId: Schema.Types.ObjectId;
-  theme: undefined | string,
-  keymapMode: undefined | 'vim' | 'emacs' | 'sublime',
-  styleActiveLine: boolean,
-  renderMathJaxInRealtime: boolean,
-  renderDrawioInRealtime: boolean,
-  textlintSettings: ITextlintSettings;
+export interface EditorSettingsDocument extends IEditorSettings, Document {
+  userId: Schema.Types.ObjectId,
 }
-
-export interface EditorSettingsDocument extends IEditorSettings, Document {}
 export type EditorSettingsModel = Model<EditorSettingsDocument>
 
 const textlintSettingsSchema = new Schema<ITextlintSettings>({

+ 15 - 0
packages/app/src/stores/editor.tsx

@@ -1,6 +1,21 @@
 import { SWRResponse } from 'swr';
+import useSWRImmutable from 'swr/immutable';
+
+import { apiv3Get } from '~/client/util/apiv3-client';
+import { IEditorSettings } from '~/interfaces/editor-settings';
+
+import { useIsGuestUser } from './context';
 import { useStaticSWR } from './use-static-swr';
 
 export const useIsSlackEnabled = (isEnabled?: boolean): SWRResponse<boolean, Error> => {
   return useStaticSWR('isSlackEnabled', isEnabled, { fallbackData: false });
 };
+
+export const useEditorSettings = (): SWRResponse<IEditorSettings, Error> => {
+  const { data: isGuestUser } = useIsGuestUser();
+
+  return useSWRImmutable(
+    isGuestUser ? null : '/personal-setting/editor-settings',
+    endpoint => apiv3Get(endpoint).then(result => result.data),
+  );
+};