mirror of https://github.com/usememos/memos
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import * as api from "../../helpers/api";
|
|
import * as storage from "../../helpers/storage";
|
|
import store, { useAppSelector } from "../";
|
|
import { setAppearance, setGlobalState, setLocale } from "../reducer/global";
|
|
|
|
export const initialGlobalState = async () => {
|
|
const defaultGlobalState = {
|
|
locale: "en" as Locale,
|
|
appearance: "system" as Appearance,
|
|
systemStatus: {
|
|
allowSignUp: false,
|
|
additionalStyle: "",
|
|
additionalScript: "",
|
|
customizedProfile: {
|
|
name: "memos",
|
|
logoUrl: "/logo.png",
|
|
description: "",
|
|
locale: "en",
|
|
appearance: "system",
|
|
externalUrl: "",
|
|
},
|
|
} as SystemStatus,
|
|
};
|
|
|
|
const { locale: storageLocale, appearance: storageAppearance } = storage.get(["locale", "appearance"]);
|
|
if (storageLocale) {
|
|
defaultGlobalState.locale = storageLocale;
|
|
}
|
|
if (storageAppearance) {
|
|
defaultGlobalState.appearance = storageAppearance;
|
|
}
|
|
|
|
try {
|
|
const { data } = (await api.getSystemStatus()).data;
|
|
if (data) {
|
|
const customizedProfile = data.customizedProfile;
|
|
defaultGlobalState.systemStatus = {
|
|
...data,
|
|
customizedProfile: {
|
|
name: customizedProfile.name || "memos",
|
|
logoUrl: customizedProfile.logoUrl || "/logo.png",
|
|
description: customizedProfile.description,
|
|
locale: customizedProfile.locale || "en",
|
|
appearance: customizedProfile.appearance || "system",
|
|
externalUrl: "",
|
|
},
|
|
};
|
|
defaultGlobalState.locale = customizedProfile.locale;
|
|
defaultGlobalState.appearance = customizedProfile.appearance;
|
|
}
|
|
} catch (error) {
|
|
// do nth
|
|
}
|
|
|
|
store.dispatch(setGlobalState(defaultGlobalState));
|
|
};
|
|
|
|
export const useGlobalStore = () => {
|
|
const state = useAppSelector((state) => state.global);
|
|
|
|
return {
|
|
state,
|
|
getState: () => {
|
|
return store.getState().global;
|
|
},
|
|
fetchSystemStatus: async () => {
|
|
const { data: systemStatus } = (await api.getSystemStatus()).data;
|
|
store.dispatch(setGlobalState({ systemStatus: systemStatus }));
|
|
return systemStatus;
|
|
},
|
|
setLocale: (locale: Locale) => {
|
|
store.dispatch(setLocale(locale));
|
|
},
|
|
setAppearance: (appearance: Appearance) => {
|
|
store.dispatch(setAppearance(appearance));
|
|
},
|
|
};
|
|
};
|