فهرست منبع

add PageControlsRect swr hook

reiji-h 2 سال پیش
والد
کامیت
de97e59716
3فایلهای تغییر یافته به همراه22 افزوده شده و 2 حذف شده
  1. 2 1
      apps/app/src/interfaces/user-ui-settings.ts
  2. 5 1
      apps/app/src/server/models/user-ui-settings.ts
  3. 15 0
      apps/app/src/stores/ui.tsx

+ 2 - 1
apps/app/src/interfaces/user-ui-settings.ts

@@ -1,7 +1,8 @@
-import { SidebarContentsType } from './ui';
+import type { SidebarContentsType } from './ui';
 
 
 export interface IUserUISettings {
 export interface IUserUISettings {
   currentSidebarContents: SidebarContentsType,
   currentSidebarContents: SidebarContentsType,
+  currentPageControlsRect: DOMRect,
   currentProductNavWidth: number,
   currentProductNavWidth: number,
   preferCollapsedModeByUser: boolean,
   preferCollapsedModeByUser: boolean,
 }
 }

+ 5 - 1
apps/app/src/server/models/user-ui-settings.ts

@@ -1,6 +1,7 @@
 import type { Ref, IUser } from '@growi/core';
 import type { Ref, IUser } from '@growi/core';
+import type { Model, Document } from 'mongoose';
 import {
 import {
-  Schema, Model, Document,
+  Schema,
 } from 'mongoose';
 } from 'mongoose';
 
 
 
 
@@ -22,6 +23,9 @@ const schema = new Schema<UserUISettingsDocument, UserUISettingsModel>({
     enum: SidebarContentsType,
     enum: SidebarContentsType,
     default: SidebarContentsType.RECENT,
     default: SidebarContentsType.RECENT,
   },
   },
+  currentPageControlsRect: {
+    type: DOMRect,
+  },
   currentProductNavWidth: { type: Number },
   currentProductNavWidth: { type: Number },
   preferCollapsedModeByUser: { type: Boolean, default: false },
   preferCollapsedModeByUser: { type: Boolean, default: false },
 });
 });

+ 15 - 0
apps/app/src/stores/ui.tsx

@@ -271,6 +271,21 @@ export const useCurrentSidebarContents = (
   return withUtils(swrResponse, { mutateAndSave });
   return withUtils(swrResponse, { mutateAndSave });
 };
 };
 
 
+export const usePageControlsRect = (
+    initialData?: DOMRect,
+): SWRResponseWithUtils<MutateAndSaveUserUISettingsUtils<DOMRect>, DOMRect> => {
+  const swrResponse = useSWRStatic('pageControlsRect', initialData, { fallbackData: new DOMRect() });
+
+  const { mutate } = swrResponse;
+
+  const mutateAndSave: MutateAndSaveUserUISettings<DOMRect> = useCallback((data, opt?) => {
+    scheduleToPut({ currentPageControlsRect: data });
+    return mutate(data, opt);
+  }, [mutate]);
+
+  return withUtils(swrResponse, { mutateAndSave });
+};
+
 export const useCurrentProductNavWidth = (initialData?: number): SWRResponseWithUtils<MutateAndSaveUserUISettingsUtils<number>, number> => {
 export const useCurrentProductNavWidth = (initialData?: number): SWRResponseWithUtils<MutateAndSaveUserUISettingsUtils<number>, number> => {
   const swrResponse = useSWRStatic('productNavWidth', initialData, { fallbackData: 320 });
   const swrResponse = useSWRStatic('productNavWidth', initialData, { fallbackData: 320 });