|
|
@@ -1,3 +1,5 @@
|
|
|
+import { useCallback } from 'react';
|
|
|
+
|
|
|
import type { SWRResponse } from 'swr';
|
|
|
import useSWRImmutable from 'swr/immutable';
|
|
|
|
|
|
@@ -6,47 +8,52 @@ import type { ISidebarConfig } from '~/interfaces/sidebar-config';
|
|
|
|
|
|
type SidebarConfigOption = {
|
|
|
update: () => Promise<void>,
|
|
|
- isSidebarCollapsedMode: boolean|undefined,
|
|
|
+
|
|
|
setIsSidebarCollapsedMode: (isSidebarCollapsedMode: boolean) => void,
|
|
|
+ setIsSidebarClosedAtDockMode: (isSidebarClosedAtDockMode: boolean | undefined) => void,
|
|
|
}
|
|
|
|
|
|
export const useSWRxSidebarConfig = (): SWRResponse<ISidebarConfig, Error> & SidebarConfigOption => {
|
|
|
const swrResponse = useSWRImmutable<ISidebarConfig>(
|
|
|
'/customize-setting/sidebar',
|
|
|
endpoint => apiv3Get<ISidebarConfig>(endpoint).then(result => result.data),
|
|
|
+ {
|
|
|
+ keepPreviousData: true,
|
|
|
+ },
|
|
|
);
|
|
|
+
|
|
|
+ const { data, mutate } = swrResponse;
|
|
|
+
|
|
|
return {
|
|
|
...swrResponse,
|
|
|
- update: async() => {
|
|
|
- const { data } = swrResponse;
|
|
|
-
|
|
|
+ update: useCallback(async() => {
|
|
|
if (data == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const { isSidebarCollapsedMode } = data;
|
|
|
-
|
|
|
- const updateData = {
|
|
|
- isSidebarCollapsedMode,
|
|
|
- };
|
|
|
-
|
|
|
// invoke API
|
|
|
- await apiv3Put('/customize-setting/sidebar', updateData);
|
|
|
- },
|
|
|
- isSidebarCollapsedMode: swrResponse.data?.isSidebarCollapsedMode,
|
|
|
- setIsSidebarCollapsedMode: (isSidebarCollapsedMode) => {
|
|
|
- const { data, mutate } = swrResponse;
|
|
|
-
|
|
|
- if (data == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- const updateData = {
|
|
|
- isSidebarCollapsedMode,
|
|
|
- };
|
|
|
+ await apiv3Put<ISidebarConfig>('/customize-setting/sidebar', data);
|
|
|
+ }, [data]),
|
|
|
|
|
|
+ setIsSidebarCollapsedMode: useCallback((isSidebarCollapsedMode) => {
|
|
|
// update isSidebarCollapsedMode in cache, not revalidate
|
|
|
- mutate({ ...data, ...updateData }, false);
|
|
|
- },
|
|
|
+ mutate((prevData) => {
|
|
|
+ if (prevData == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ return { ...prevData, isSidebarCollapsedMode };
|
|
|
+ }, false);
|
|
|
+ }, [mutate]),
|
|
|
+
|
|
|
+ setIsSidebarClosedAtDockMode: useCallback((isSidebarClosedAtDockMode) => {
|
|
|
+ // update isSidebarClosedAtDockMode in cache, not revalidate
|
|
|
+ mutate((prevData) => {
|
|
|
+ if (prevData == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ return { ...prevData, isSidebarClosedAtDockMode };
|
|
|
+ }, false);
|
|
|
+ }, [mutate]),
|
|
|
};
|
|
|
};
|