فهرست منبع

refactor: update maintenance mode hooks and restructure imports

Yuki Takei 6 ماه پیش
والد
کامیت
fe71c1c6c0

+ 2 - 2
apps/app/src/client/components/Admin/App/AppSettingsPageContents.tsx

@@ -4,7 +4,7 @@ import { useTranslation } from 'next-i18next';
 
 import AdminAppContainer from '~/client/services/AdminAppContainer';
 import { toastError } from '~/client/util/toastr';
-import { useIsMaintenanceMode } from '~/stores/maintenanceMode';
+import { useIsMaintenanceMode } from '~/states/global';
 import { toArrayIfNot } from '~/utils/array-utils';
 import loggerFactory from '~/utils/logger';
 
@@ -29,7 +29,7 @@ const AppSettingsPageContents = (props: Props) => {
   const { t } = useTranslation('admin');
   const { adminAppContainer } = props;
 
-  const { data: isMaintenanceMode } = useIsMaintenanceMode();
+  const isMaintenanceMode = useIsMaintenanceMode();
 
   const { isV5Compatible } = adminAppContainer.state;
 

+ 4 - 7
apps/app/src/client/components/Admin/App/MaintenanceMode.tsx

@@ -3,21 +3,18 @@ import React, { useState, useCallback } from 'react';
 
 import { useTranslation } from 'next-i18next';
 
+import { useMaintenanceModeActions } from '~/client/services/maintenance-mode';
 import { toastSuccess, toastError } from '~/client/util/toastr';
-import { useIsMaintenanceMode } from '~/stores/maintenanceMode';
-import loggerFactory from '~/utils/logger';
+import { useIsMaintenanceMode } from '~/states/global';
 
 import { ConfirmModal } from './ConfirmModal';
 
-const logger = loggerFactory('growi:maintenanceMode');
-
 
 export const MaintenanceMode: FC = () => {
   const { t } = useTranslation();
 
-  const {
-    data: isMaintenanceMode, start: startMaintenanceMode, end: endMaintenanceMode,
-  } = useIsMaintenanceMode();
+  const isMaintenanceMode = useIsMaintenanceMode();
+  const { start: startMaintenanceMode, end: endMaintenanceMode } = useMaintenanceModeActions();
 
   const [isModalOpen, setModalOpen] = useState<boolean>(false);
 

+ 32 - 0
apps/app/src/client/services/maintenance-mode.ts

@@ -0,0 +1,32 @@
+import { useCallback } from 'react';
+
+import { useSetAtom } from 'jotai';
+
+import { _atomsForMaintenanceMode } from '../../states/global';
+import { apiv3Post } from '../util/apiv3-client';
+
+const { isMaintenanceModeAtom } = _atomsForMaintenanceMode;
+
+/**
+ * Maintenance Mode Actions
+ */
+export type MaintenanceModeActions = {
+  start: () => Promise<void>;
+  end: () => Promise<void>;
+};
+
+export const useMaintenanceModeActions = (): MaintenanceModeActions => {
+  const setIsMaintenanceMode = useSetAtom(isMaintenanceModeAtom);
+
+  const start = useCallback(async () => {
+    await apiv3Post('/app-settings/maintenance-mode', { flag: true });
+    setIsMaintenanceMode(true);
+  }, [setIsMaintenanceMode]);
+
+  const end = useCallback(async () => {
+    await apiv3Post('/app-settings/maintenance-mode', { flag: false });
+    setIsMaintenanceMode(false);
+  }, [setIsMaintenanceMode]);
+
+  return { start, end };
+};

+ 9 - 1
apps/app/src/states/global/global.ts

@@ -93,7 +93,7 @@ export const useGrowiVersion = () => useAtomValue(growiVersionAtom);
  */
 const isMaintenanceModeAtom = atom<boolean>(false);
 /**
- * Maintenance Mode atom setter
+ * Maintenance Mode atom getter
  */
 export const useIsMaintenanceMode = () => useAtomValue(isMaintenanceModeAtom);
 
@@ -163,6 +163,14 @@ export const _atomsForAdminPagesHydration = {
   growiAppIdForGrowiCloudAtom,
 };
 
+/**
+ * Internal atoms for maintenance mode actions (special naming convention)
+ * These atoms are exposed only for actions in client/services
+ */
+export const _atomsForMaintenanceMode = {
+  isMaintenanceModeAtom,
+} as const;
+
 /**
  * Internal atoms for derived atom usage (special naming convention)
  * These atoms are exposed only for creating derived atoms in other modules

+ 0 - 31
apps/app/src/stores/maintenanceMode.tsx

@@ -1,31 +0,0 @@
-import { withUtils, type SWRResponseWithUtils } from '@growi/core/dist/swr';
-
-import { apiv3Post } from '~/client/util/apiv3-client';
-
-import { useStaticSWR } from './use-static-swr';
-
-
-type maintenanceModeUtils = {
-  start(): Promise<void>,
-  end(): Promise<void>,
-}
-
-export const useIsMaintenanceMode = (initialData?: boolean): SWRResponseWithUtils<maintenanceModeUtils, boolean> => {
-  const swrResult = useStaticSWR<boolean, Error>('isMaintenanceMode', initialData, { fallbackData: false });
-
-  const utils = {
-    start: async() => {
-      const { mutate } = swrResult;
-      await apiv3Post('/app-settings/maintenance-mode', { flag: true });
-      mutate(true);
-    },
-
-    end: async() => {
-      const { mutate } = swrResult;
-      await apiv3Post('/app-settings/maintenance-mode', { flag: false });
-      mutate(false);
-    },
-  };
-
-  return withUtils<maintenanceModeUtils, boolean>(swrResult, utils);
-};