sync then reload setting
This commit is contained in:
@@ -7,10 +7,11 @@ import { createContext, useCallback, useContext } from "react";
|
|||||||
const SettingContext = createContext({
|
const SettingContext = createContext({
|
||||||
setting: null,
|
setting: null,
|
||||||
updateSetting: async () => {},
|
updateSetting: async () => {},
|
||||||
|
reloadSetting: async () => {},
|
||||||
});
|
});
|
||||||
|
|
||||||
export function SettingProvider({ children }) {
|
export function SettingProvider({ children }) {
|
||||||
const { data, update } = useStorage(STOKEY_SETTING, DEFAULT_SETTING);
|
const { data, update, reload } = useStorage(STOKEY_SETTING, DEFAULT_SETTING);
|
||||||
const {
|
const {
|
||||||
sync: { settingUpdateAt },
|
sync: { settingUpdateAt },
|
||||||
updateSync,
|
updateSync,
|
||||||
@@ -31,6 +32,7 @@ export function SettingProvider({ children }) {
|
|||||||
value={{
|
value={{
|
||||||
setting: data,
|
setting: data,
|
||||||
updateSetting,
|
updateSetting,
|
||||||
|
reloadSetting: reload,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -25,16 +25,20 @@ export function useStorage(key, defaultVal = null) {
|
|||||||
await storage.del(key);
|
await storage.del(key);
|
||||||
}, [key]);
|
}, [key]);
|
||||||
|
|
||||||
useEffect(() => {
|
const reload = useCallback(async () => {
|
||||||
(async () => {
|
|
||||||
const val = await storage.getObj(key);
|
const val = await storage.getObj(key);
|
||||||
if (val) {
|
if (val) {
|
||||||
setData(val);
|
setData(val);
|
||||||
} else if (defaultVal) {
|
} else if (defaultVal) {
|
||||||
await storage.setObj(key, defaultVal);
|
await storage.setObj(key, defaultVal);
|
||||||
}
|
}
|
||||||
})();
|
|
||||||
}, [key, defaultVal]);
|
}, [key, defaultVal]);
|
||||||
|
|
||||||
return { data, save, update, remove };
|
useEffect(() => {
|
||||||
|
(async () => {
|
||||||
|
await reload();
|
||||||
|
})();
|
||||||
|
}, [reload]);
|
||||||
|
|
||||||
|
return { data, save, update, remove, reload };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ const syncSetting = async (isBg = false) => {
|
|||||||
settingSyncAt: res.updateAt,
|
settingSyncAt: res.updateAt,
|
||||||
});
|
});
|
||||||
await setSetting(res.value);
|
await setSetting(res.value);
|
||||||
|
return res.value;
|
||||||
} else {
|
} else {
|
||||||
await updateSync({ settingSyncAt: res.updateAt });
|
await updateSync({ settingSyncAt: res.updateAt });
|
||||||
}
|
}
|
||||||
@@ -50,7 +51,7 @@ const syncSetting = async (isBg = false) => {
|
|||||||
|
|
||||||
export const trySyncSetting = async (isBg = false) => {
|
export const trySyncSetting = async (isBg = false) => {
|
||||||
try {
|
try {
|
||||||
await syncSetting(isBg);
|
return await syncSetting(isBg);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync setting]", err);
|
console.log("[sync setting]", err);
|
||||||
}
|
}
|
||||||
@@ -84,6 +85,7 @@ const syncRules = async (isBg = false) => {
|
|||||||
rulesSyncAt: res.updateAt,
|
rulesSyncAt: res.updateAt,
|
||||||
});
|
});
|
||||||
await setRules(res.value);
|
await setRules(res.value);
|
||||||
|
return res.value;
|
||||||
} else {
|
} else {
|
||||||
await updateSync({ rulesSyncAt: res.updateAt });
|
await updateSync({ rulesSyncAt: res.updateAt });
|
||||||
}
|
}
|
||||||
@@ -91,7 +93,7 @@ const syncRules = async (isBg = false) => {
|
|||||||
|
|
||||||
export const trySyncRules = async (isBg = false) => {
|
export const trySyncRules = async (isBg = false) => {
|
||||||
try {
|
try {
|
||||||
await syncRules(isBg);
|
return await syncRules(isBg);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync user rules]", err);
|
console.log("[sync user rules]", err);
|
||||||
}
|
}
|
||||||
@@ -118,11 +120,9 @@ export const syncShareRules = async ({ rules, syncUrl, syncKey }) => {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const syncSettingAndRules = async (isBg = false) => {
|
export const syncSettingAndRules = async (isBg = false) => {
|
||||||
await syncSetting(isBg);
|
return [await syncSetting(isBg), await syncRules(isBg)];
|
||||||
await syncRules(isBg);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const trySyncSettingAndRules = async (isBg = false) => {
|
export const trySyncSettingAndRules = async (isBg = false) => {
|
||||||
await trySyncSetting(isBg);
|
return [await trySyncSetting(isBg), await trySyncRules(isBg)];
|
||||||
await trySyncRules(isBg);
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ import Button from "@mui/material/Button";
|
|||||||
import { useAlert } from "../../hooks/Alert";
|
import { useAlert } from "../../hooks/Alert";
|
||||||
import SyncIcon from "@mui/icons-material/Sync";
|
import SyncIcon from "@mui/icons-material/Sync";
|
||||||
import CircularProgress from "@mui/material/CircularProgress";
|
import CircularProgress from "@mui/material/CircularProgress";
|
||||||
|
import { useSetting } from "../../hooks/Setting";
|
||||||
|
|
||||||
export default function SyncSetting() {
|
export default function SyncSetting() {
|
||||||
const i18n = useI18n();
|
const i18n = useI18n();
|
||||||
const { sync, updateSync } = useSync();
|
const { sync, updateSync } = useSync();
|
||||||
const alert = useAlert();
|
const alert = useAlert();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
const { reloadSetting } = useSetting();
|
||||||
|
|
||||||
const handleChange = async (e) => {
|
const handleChange = async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -32,6 +34,7 @@ export default function SyncSetting() {
|
|||||||
try {
|
try {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
await syncSettingAndRules();
|
await syncSettingAndRules();
|
||||||
|
await reloadSetting();
|
||||||
alert.success(i18n("data_sync_success"));
|
alert.success(i18n("data_sync_success"));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("[sync all]", err);
|
console.log("[sync all]", err);
|
||||||
|
|||||||
Reference in New Issue
Block a user