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.
93 lines
3.0 KiB
TypeScript
93 lines
3.0 KiB
TypeScript
import { systemServiceClient } from "@/grpcweb";
|
|
import * as api from "@/helpers/api";
|
|
import storage from "@/helpers/storage";
|
|
import i18n from "@/i18n";
|
|
import { findNearestLanguageMatch } from "@/utils/i18n";
|
|
import store, { useAppSelector } from "../";
|
|
import { setAppearance, setGlobalState, setLocale } from "../reducer/global";
|
|
|
|
export const initialGlobalState = async () => {
|
|
const { locale: storageLocale, appearance: storageAppearance } = storage.get(["locale", "appearance"]);
|
|
const defaultGlobalState = {
|
|
locale: (storageLocale || "en") as Locale,
|
|
appearance: (storageAppearance || "system") as Appearance,
|
|
systemStatus: {
|
|
allowSignUp: false,
|
|
disablePasswordLogin: false,
|
|
disablePublicMemos: false,
|
|
maxUploadSizeMiB: 0,
|
|
additionalStyle: "",
|
|
additionalScript: "",
|
|
memoDisplayWithUpdatedTs: false,
|
|
customizedProfile: {
|
|
name: "Memos",
|
|
logoUrl: "/logo.webp",
|
|
description: "",
|
|
locale: "en",
|
|
appearance: "system",
|
|
externalUrl: "",
|
|
},
|
|
} as SystemStatus,
|
|
};
|
|
|
|
const { data } = await api.getSystemStatus();
|
|
if (data) {
|
|
const customizedProfile = data.customizedProfile;
|
|
defaultGlobalState.systemStatus = {
|
|
...data,
|
|
customizedProfile: {
|
|
name: customizedProfile.name || "Memos",
|
|
logoUrl: customizedProfile.logoUrl || "/logo.webp",
|
|
description: customizedProfile.description,
|
|
locale: customizedProfile.locale || "en",
|
|
appearance: customizedProfile.appearance || "system",
|
|
externalUrl: "",
|
|
},
|
|
};
|
|
defaultGlobalState.locale =
|
|
defaultGlobalState.locale || defaultGlobalState.systemStatus.customizedProfile.locale || findNearestLanguageMatch(i18n.language);
|
|
defaultGlobalState.appearance = defaultGlobalState.appearance || defaultGlobalState.systemStatus.customizedProfile.appearance;
|
|
}
|
|
store.dispatch(setGlobalState(defaultGlobalState));
|
|
};
|
|
|
|
export const useGlobalStore = () => {
|
|
const state = useAppSelector((state) => state.global);
|
|
|
|
return {
|
|
state,
|
|
getState: () => {
|
|
return store.getState().global;
|
|
},
|
|
getDisablePublicMemos: () => {
|
|
return store.getState().global.systemStatus.disablePublicMemos;
|
|
},
|
|
isDev: () => {
|
|
return state.systemStatus.profile.mode !== "prod";
|
|
},
|
|
fetchSystemStatus: async () => {
|
|
const { data: systemStatus } = await api.getSystemStatus();
|
|
const { systemInfo } = await systemServiceClient.getSystemInfo({});
|
|
systemStatus.dbSize = systemInfo?.dbSize || 0;
|
|
store.dispatch(setGlobalState({ systemStatus: systemStatus }));
|
|
return systemStatus;
|
|
},
|
|
setSystemStatus: (systemStatus: Partial<SystemStatus>) => {
|
|
store.dispatch(
|
|
setGlobalState({
|
|
systemStatus: {
|
|
...state.systemStatus,
|
|
...systemStatus,
|
|
},
|
|
})
|
|
);
|
|
},
|
|
setLocale: (locale: Locale) => {
|
|
store.dispatch(setLocale(locale));
|
|
},
|
|
setAppearance: (appearance: Appearance) => {
|
|
store.dispatch(setAppearance(appearance));
|
|
},
|
|
};
|
|
};
|