chore: extract auth footer

pull/4407/head
Johnny 2 weeks ago
parent 3c71ee9d7b
commit 920b0f64f2

@ -0,0 +1,28 @@
import { observer } from "mobx-react-lite";
import { workspaceStore } from "@/store/v2";
import { cn } from "@/utils";
import AppearanceSelect from "./AppearanceSelect";
import LocaleSelect from "./LocaleSelect";
interface Props {
className?: string;
}
const AuthFooter = observer(({ className }: Props) => {
const handleLocaleSelectChange = (locale: Locale) => {
workspaceStore.state.setPartial({ locale });
};
const handleAppearanceSelectChange = (appearance: Appearance) => {
workspaceStore.state.setPartial({ appearance });
};
return (
<div className={cn("mt-4 flex flex-row items-center justify-center w-full gap-2", className)}>
<LocaleSelect value={workspaceStore.state.locale} onChange={handleLocaleSelectChange} />
<AppearanceSelect value={workspaceStore.state.appearance as Appearance} onChange={handleAppearanceSelectChange} />
</div>
);
});
export default AuthFooter;

@ -2,7 +2,7 @@ import { Button, Checkbox, Input } from "@usememos/mui";
import { LoaderIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { ClientError } from "nice-grpc-web";
import { useEffect, useState } from "react";
import { useState } from "react";
import { toast } from "react-hot-toast";
import { authServiceClient } from "@/grpcweb";
import useLoading from "@/hooks/useLoading";
@ -15,17 +15,10 @@ const PasswordSignInForm = observer(() => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const actionBtnLoadingState = useLoading(false);
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [username, setUsername] = useState(workspaceStore.state.profile.mode === "demo" ? "yourselfhosted" : "");
const [password, setPassword] = useState(workspaceStore.state.profile.mode === "demo" ? "yourselfhosted" : "");
const [remember, setRemember] = useState(true);
useEffect(() => {
if (workspaceStore.state.profile.mode === "demo") {
setUsername("yourselfhosted");
setPassword("yourselfhosted");
}
}, [workspaceStore.state.profile.mode]);
const handleUsernameInputChanged = (e: React.ChangeEvent<HTMLInputElement>) => {
const text = e.target.value as string;
setUsername(text);

@ -22,7 +22,7 @@ interface State {
description: string;
}
const UpdateAccountDialog: React.FC<Props> = ({ destroy }: Props) => {
const UpdateAccountDialog = ({ destroy }: Props) => {
const t = useTranslate();
const currentUser = useCurrentUser();
const [state, setState] = useState<State>({

@ -14,7 +14,7 @@ import LocaleSelect from "./LocaleSelect";
type Props = DialogProps;
const UpdateCustomizedProfileDialog: React.FC<Props> = ({ destroy }: Props) => {
const UpdateCustomizedProfileDialog = ({ destroy }: Props) => {
const t = useTranslate();
const workspaceGeneralSetting = workspaceStore.state.generalSetting;
const [customProfile, setCustomProfile] = useState<WorkspaceCustomProfile>(

@ -1,20 +1,10 @@
import { observer } from "mobx-react-lite";
import AppearanceSelect from "@/components/AppearanceSelect";
import LocaleSelect from "@/components/LocaleSelect";
import AuthFooter from "@/components/AuthFooter";
import PasswordSignInForm from "@/components/PasswordSignInForm";
import { workspaceStore } from "@/store/v2";
const AdminSignIn = observer(() => {
const AdminSignIn = () => {
const workspaceGeneralSetting = workspaceStore.state.generalSetting;
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">
@ -27,12 +17,9 @@ const AdminSignIn = observer(() => {
<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>
<AuthFooter />
</div>
);
});
};
export default AdminSignIn;

@ -1,11 +1,9 @@
import { Divider } from "@mui/joy";
import { Button } from "@usememos/mui";
import { observer } from "mobx-react-lite";
import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { Link } from "react-router-dom";
import AppearanceSelect from "@/components/AppearanceSelect";
import LocaleSelect from "@/components/LocaleSelect";
import AuthFooter from "@/components/AuthFooter";
import PasswordSignInForm from "@/components/PasswordSignInForm";
import { identityProviderServiceClient } from "@/grpcweb";
import { absolutifyLink } from "@/helpers/utils";
@ -16,7 +14,7 @@ import { workspaceStore } from "@/store/v2";
import { IdentityProvider, IdentityProvider_Type } from "@/types/proto/api/v1/idp_service";
import { useTranslate } from "@/utils/i18n";
const SignIn = observer(() => {
const SignIn = () => {
const t = useTranslate();
const currentUser = useCurrentUser();
const [identityProviderList, setIdentityProviderList] = useState<IdentityProvider[]>([]);
@ -38,14 +36,6 @@ const SignIn = observer(() => {
fetchIdentityProviderList();
}, []);
const handleLocaleSelectChange = (locale: Locale) => {
workspaceStore.state.setPartial({ locale });
};
const handleAppearanceSelectChange = (appearance: Appearance) => {
workspaceStore.state.setPartial({ appearance });
};
const handleSignInWithIdentityProvider = async (identityProvider: IdentityProvider) => {
const stateQueryParameter = `auth.signin.${identityProvider.title}-${extractIdentityProviderIdFromName(identityProvider.name)}`;
if (identityProvider.type === IdentityProvider_Type.OAUTH2) {
@ -105,12 +95,9 @@ const SignIn = observer(() => {
</>
)}
</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>
<AuthFooter />
</div>
);
});
};
export default SignIn;

@ -1,12 +1,10 @@
import { Button, Input } from "@usememos/mui";
import { LoaderIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { ClientError } from "nice-grpc-web";
import { useState } from "react";
import { toast } from "react-hot-toast";
import { Link } from "react-router-dom";
import AppearanceSelect from "@/components/AppearanceSelect";
import LocaleSelect from "@/components/LocaleSelect";
import AuthFooter from "@/components/AuthFooter";
import { authServiceClient } from "@/grpcweb";
import useLoading from "@/hooks/useLoading";
import useNavigateTo from "@/hooks/useNavigateTo";
@ -14,7 +12,7 @@ import { workspaceStore } from "@/store/v2";
import { initialUserStore } from "@/store/v2/user";
import { useTranslate } from "@/utils/i18n";
const SignUp = observer(() => {
const SignUp = () => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const actionBtnLoadingState = useLoading(false);
@ -32,14 +30,6 @@ const SignUp = observer(() => {
setPassword(text);
};
const handleLocaleSelectChange = (locale: Locale) => {
workspaceStore.state.setPartial({ locale });
};
const handleAppearanceSelectChange = (appearance: Appearance) => {
workspaceStore.state.setPartial({ appearance });
};
const handleFormSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
handleSignUpButtonClick();
@ -142,12 +132,9 @@ const SignUp = observer(() => {
</p>
)}
</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>
<AuthFooter />
</div>
);
});
};
export default SignUp;

Loading…
Cancel
Save