diff --git a/packages/fakeyou.com/src/components/common/Button/Button.tsx b/packages/fakeyou.com/src/components/common/Button/Button.tsx index d340bed5cc..02d3ac8e0f 100644 --- a/packages/fakeyou.com/src/components/common/Button/Button.tsx +++ b/packages/fakeyou.com/src/components/common/Button/Button.tsx @@ -20,6 +20,7 @@ interface ButtonProps extends ButtonHTMLAttributes { iconFlip?: boolean; download?: boolean | string; disabled?: boolean; + isLoading?: boolean; } export default function Button({ @@ -36,6 +37,7 @@ export default function Button({ iconFlip = false, download, disabled, + isLoading = false, ...rest }: ButtonProps) { let iconMarginClass = !square && label ? (iconFlip ? "ms-2" : "me-2") : ""; @@ -45,13 +47,22 @@ export default function Button({ let LabelComponent = !square ? label : null; + const SpinnerComponent = isLoading ? ( +
+ Loading... +
+ ) : null; + const externalClass = rest.className || ""; const commonProps = { className: `${externalClass} button ${small ? "button-small" : ""} ${ square ? (small ? "button-square-small" : "button-square") : "" } button-${variant} ${full ? "w-100" : ""}`, - disabled: disabled, + disabled: disabled || isLoading, }; delete rest.className; @@ -60,11 +71,13 @@ export default function Button({ <> {LabelComponent} {IconComponent} + {SpinnerComponent} ) : ( <> {IconComponent} {LabelComponent} + {SpinnerComponent} ); diff --git a/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx b/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx index 3d151eed07..bf3b9e9e65 100644 --- a/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx +++ b/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx @@ -56,7 +56,11 @@ export default function PageHeader({ )}
-
+

{/* {icon} */} @@ -76,7 +80,11 @@ export default function PageHeader({

)}
-
+
{imageUrl && ( + + + + + + + + + + + + @@ -645,9 +666,11 @@ class PageContainer extends React.Component< - + diff --git a/packages/fakeyou.com/src/v2/view/pages/login/LoginPage.tsx b/packages/fakeyou.com/src/v2/view/pages/login/LoginPage.tsx index 621be86326..1135cc46e3 100644 --- a/packages/fakeyou.com/src/v2/view/pages/login/LoginPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/login/LoginPage.tsx @@ -1,5 +1,4 @@ import React, { useState } from "react"; -import { WebUrl } from "../../../../common/WebUrl"; import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import { Link, useHistory } from "react-router-dom"; import { @@ -13,6 +12,9 @@ import { faUser, faKey } from "@fortawesome/free-solid-svg-icons"; import { Analytics } from "../../../../common/Analytics"; import { usePrefixedDocumentTitle } from "../../../../common/UsePrefixedDocumentTitle"; import { PosthogClient } from "@storyteller/components/src/analytics/PosthogClient"; +import Container from "components/common/Container"; +import Panel from "components/common/Panel"; +import PageHeader from "components/layout/PageHeader"; interface Props { sessionWrapper: SessionWrapper; @@ -88,62 +90,59 @@ function LoginPage(props: Props) { } return ( -
-
-
-

Login

-
- {errorWarning} + + + + {errorWarning} -
-
-
- -
- - - - -
- {/*

*/} -
- -
- -
- - - - -
- {/*

*/} -
- - -

- Don’t have an account?   - - Create an account now. - -

+ +
+
+ +
+ + + +
- + {/*

*/} +
+ +
+ +
+ + + + +
+

+ + Forgot your password? + +

+
-
-
-
+ + + + ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetChangePage.tsx b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetChangePage.tsx new file mode 100644 index 0000000000..f8e1127982 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetChangePage.tsx @@ -0,0 +1,80 @@ +import React, { useState } from "react"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { useHistory } from "react-router-dom"; +import { usePrefixedDocumentTitle } from "../../../../common/UsePrefixedDocumentTitle"; +import Container from "components/common/Container"; +import PageHeader from "components/layout/PageHeader"; +import Input from "components/common/Input"; +import { Button } from "components/common"; +import Panel from "components/common/Panel"; +import { faKey } from "@fortawesome/pro-solid-svg-icons"; +import BackButton from "components/common/BackButton"; + +interface Props { + sessionWrapper: SessionWrapper; +} + +function PasswordResetChangePage(props: Props) { + let history = useHistory(); + const [isPasswordChanged, setIsPasswordChanged] = useState(false); + const [isLoading, setIsLoading] = useState(false); + + if (props.sessionWrapper.isLoggedIn()) { + history.push("/"); + } + + usePrefixedDocumentTitle("Reset Password"); + + const handlePasswordChange = async () => { + // Simulate a delay using a timer (dummy timer) + setIsLoading(true); + + setTimeout(() => { + setIsPasswordChanged(true); + setIsLoading(false); + }, 2000); + }; + + return ( + + + + + {isPasswordChanged ? ( +
+

Your password has been successfully changed!

+ +
+ ) : ( +
+
+ + + + +
+
+ )} +
+
+ ); +} + +export { PasswordResetChangePage }; diff --git a/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetEmailPage.tsx b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetEmailPage.tsx new file mode 100644 index 0000000000..c28aa8d728 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetEmailPage.tsx @@ -0,0 +1,52 @@ +import React from "react"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { useHistory } from "react-router-dom"; +import { usePrefixedDocumentTitle } from "../../../../common/UsePrefixedDocumentTitle"; +import Container from "components/common/Container"; +import PageHeader from "components/layout/PageHeader"; +import Input from "components/common/Input"; +import { Button } from "components/common"; +import Panel from "components/common/Panel"; +import { faEnvelope } from "@fortawesome/pro-solid-svg-icons"; + +interface Props { + sessionWrapper: SessionWrapper; +} + +function PasswordResetEmailPage(props: Props) { + let history = useHistory(); + + if (props.sessionWrapper.isLoggedIn()) { + history.push("/"); + } + + usePrefixedDocumentTitle("Reset Password"); + + return ( + + + + +
+
+ + +
+
+
+
+ ); +} + +export { PasswordResetEmailPage }; diff --git a/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetVerificationPage.tsx b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetVerificationPage.tsx new file mode 100644 index 0000000000..12a7b756f2 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/password_reset/PasswordResetVerificationPage.tsx @@ -0,0 +1,64 @@ +import React, { useState } from "react"; +import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; +import { useHistory } from "react-router-dom"; +import { usePrefixedDocumentTitle } from "../../../../common/UsePrefixedDocumentTitle"; +import Container from "components/common/Container"; +import PageHeader from "components/layout/PageHeader"; +import Input from "components/common/Input"; +import { Button } from "components/common"; +import Panel from "components/common/Panel"; +import { faLock } from "@fortawesome/pro-solid-svg-icons"; + +interface Props { + sessionWrapper: SessionWrapper; +} + +function PasswordResetVerificationPage(props: Props) { + let history = useHistory(); + const [isLoading, setIsLoading] = useState(false); + + if (props.sessionWrapper.isLoggedIn()) { + history.push("/"); + } + + usePrefixedDocumentTitle("Code Verification"); + + const handleVerifyCode = async () => { + // Simulate a delay using a timer (dummy timer) + setIsLoading(true); + + setTimeout(() => { + setIsLoading(false); + }, 2000); + }; + + return ( + + + + +
+
+ + +
+
+
+
+ ); +} + +export { PasswordResetVerificationPage };