|
@@ -1,4 +1,6 @@
|
|
|
-import React, { useCallback, useState } from 'react';
|
|
|
|
|
|
|
+import React, {
|
|
|
|
|
+ useCallback, useEffect, useState,
|
|
|
|
|
+} from 'react';
|
|
|
|
|
|
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useTranslation } from 'next-i18next';
|
|
|
|
|
|
|
@@ -6,16 +8,31 @@ import { toastSuccess, toastError } from '~/client/util/apiNotification';
|
|
|
import { useSWRxLayoutSetting } from '~/stores/admin/customize';
|
|
import { useSWRxLayoutSetting } from '~/stores/admin/customize';
|
|
|
import { useNextThemes } from '~/stores/use-next-themes';
|
|
import { useNextThemes } from '~/stores/use-next-themes';
|
|
|
|
|
|
|
|
|
|
+const useIsContainerFluid = () => {
|
|
|
|
|
+ const { data: layoutSetting, update: updateLayoutSetting } = useSWRxLayoutSetting();
|
|
|
|
|
+ const [isContainerFluid, setIsContainerFluid] = useState<boolean>();
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ setIsContainerFluid(layoutSetting?.isContainerFluid);
|
|
|
|
|
+ }, [layoutSetting?.isContainerFluid]);
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ isContainerFluid,
|
|
|
|
|
+ setIsContainerFluid,
|
|
|
|
|
+ updateLayoutSetting,
|
|
|
|
|
+ };
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
const CustomizeLayoutSetting = (): JSX.Element => {
|
|
const CustomizeLayoutSetting = (): JSX.Element => {
|
|
|
const { t } = useTranslation('admin');
|
|
const { t } = useTranslation('admin');
|
|
|
|
|
|
|
|
const { resolvedTheme } = useNextThemes();
|
|
const { resolvedTheme } = useNextThemes();
|
|
|
- const { data: layoutSetting, update: updateLayoutSetting } = useSWRxLayoutSetting();
|
|
|
|
|
|
|
|
|
|
- const [isContainerFluid, setIsContainerFluid] = useState<boolean>(layoutSetting?.isContainerFluid ?? false);
|
|
|
|
|
|
|
+ const { isContainerFluid, setIsContainerFluid, updateLayoutSetting } = useIsContainerFluid();
|
|
|
const [retrieveError, setRetrieveError] = useState<any>();
|
|
const [retrieveError, setRetrieveError] = useState<any>();
|
|
|
|
|
|
|
|
const onClickSubmit = useCallback(async() => {
|
|
const onClickSubmit = useCallback(async() => {
|
|
|
|
|
+ if (isContainerFluid == null) { return }
|
|
|
try {
|
|
try {
|
|
|
await updateLayoutSetting({ isContainerFluid });
|
|
await updateLayoutSetting({ isContainerFluid });
|
|
|
toastSuccess(t('toaster.update_successed', { target: t('customize_settings.layout'), ns: 'commons' }));
|
|
toastSuccess(t('toaster.update_successed', { target: t('customize_settings.layout'), ns: 'commons' }));
|
|
@@ -25,6 +42,14 @@ const CustomizeLayoutSetting = (): JSX.Element => {
|
|
|
}
|
|
}
|
|
|
}, [isContainerFluid, updateLayoutSetting, t]);
|
|
}, [isContainerFluid, updateLayoutSetting, t]);
|
|
|
|
|
|
|
|
|
|
+ if (isContainerFluid == null) {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <div className="text-muted text-center">
|
|
|
|
|
+ <i className="fa fa-2x fa-spinner fa-pulse"></i>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<React.Fragment>
|
|
<React.Fragment>
|
|
|
<div className="row">
|
|
<div className="row">
|