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.
memos/web/src/pages/AdminSignIn.tsx

44 lines
2.1 KiB
TypeScript

import { observer } from "mobx-react-lite";
import AppearanceSelect from "@/components/AppearanceSelect";
import LocaleSelect from "@/components/LocaleSelect";
import PasswordSignInForm from "@/components/PasswordSignInForm";
import { useWorkspaceSettingStore } from "@/store/v1";
import { workspaceStore } from "@/store/v2";
import { WorkspaceGeneralSetting } from "@/types/proto/api/v1/workspace_setting_service";
import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting";
const AdminSignIn = observer(() => {
const workspaceSettingStore = useWorkspaceSettingStore();
const workspaceGeneralSetting =
workspaceSettingStore.getWorkspaceSettingByKey(WorkspaceSettingKey.GENERAL).generalSetting || WorkspaceGeneralSetting.fromPartial({});
const handleLocaleSelectChange = (locale: Locale) => {
workspaceStore.state.setPartial({ locale });
};
const handleAppearanceSelectChange = (appearance: Appearance) => {
workspaceStore.state.setPartial({ appearance });
};
return (
<div className="py-4 sm:py-8 w-80 max-w-full min-h-[100svh] mx-auto flex flex-col justify-start items-center">
<div className="w-full py-4 grow flex flex-col justify-center items-center">
<div className="w-full flex flex-row justify-center items-center mb-6">
<img className="h-14 w-auto rounded-full shadow" src={workspaceGeneralSetting.customProfile?.logoUrl || "/logo.webp"} alt="" />
<p className="ml-2 text-5xl text-black opacity-80 dark:text-gray-200">
{workspaceGeneralSetting.customProfile?.title || "Memos"}
</p>
</div>
<p className="w-full text-xl font-medium dark:text-gray-500">Sign in with admin accounts</p>
<PasswordSignInForm />
</div>
<div className="mt-4 flex flex-row items-center justify-center w-full gap-2">
<LocaleSelect value={workspaceStore.state.locale} onChange={handleLocaleSelectChange} />
<AppearanceSelect value={workspaceStore.state.appearance as Appearance} onChange={handleAppearanceSelectChange} />
</div>
</div>
);
});
export default AdminSignIn;