Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import { Button } from "semantic-ui-react";

import { SignInContext } from "../../contexts/sign-in-provider";
import {
useFacebookAuth,
useFacebookLogin,
// useFacebookAuth,
// useFacebookLogin,
useGoogleAuth,
useGoogleLogin,
} from "../../custom-hooks/api/auth-api";
Expand Down Expand Up @@ -82,51 +82,51 @@ const GoogleLoginButton = () => {
);
};

const FacebookLoginButton = () => {
const dispatch = useAppDispatch();
const { loading: isLoggingIn, facebookLogin } = useFacebookLogin();

const onFacebookLogin = async (response: fb.StatusResponse) => {
const { accessToken } = response.authResponse;

if (!accessToken) {
throw new Error("Failed to retrieve Facebook access token.");
}

try {
const authData = await facebookLogin({ accessToken });

toast.success("Signed in successfully.");

dispatch(updateCurrentUserAction(authData));
} catch (error) {
resolveApiError(error as ApiResponseError);
}
};

const { startFacebookAuth } = useFacebookAuth((response) => {
onFacebookLogin(response).catch((error) => console.error(error));
});

return (
<Button
icon="facebook"
color="facebook"
onClick={startFacebookAuth}
content="Sign in with Facebook"
fluid
loading={isLoggingIn}
disabled={isLoggingIn}
/>
);
};
// const FacebookLoginButton = () => {
// const dispatch = useAppDispatch();
// const { loading: isLoggingIn, facebookLogin } = useFacebookLogin();

// const onFacebookLogin = async (response: fb.StatusResponse) => {
// const { accessToken } = response.authResponse;

// if (!accessToken) {
// throw new Error("Failed to retrieve Facebook access token.");
// }

// try {
// const authData = await facebookLogin({ accessToken });

// toast.success("Signed in successfully.");

// dispatch(updateCurrentUserAction(authData));
// } catch (error) {
// resolveApiError(error as ApiResponseError);
// }
// };

// const { startFacebookAuth } = useFacebookAuth((response) => {
// onFacebookLogin(response).catch((error) => console.error(error));
// });

// return (
// <Button
// icon="facebook"
// color="facebook"
// onClick={startFacebookAuth}
// content="Sign in with Facebook"
// fluid
// loading={isLoggingIn}
// disabled={isLoggingIn}
// />
// );
// };

function SignInOptionsSection() {
return (
<div className={clsx(styles.signInOptionsSection, styles.important)}>
<PasswordLoginButton />
<GoogleLoginButton />
<FacebookLoginButton />
{/* <FacebookLoginButton /> */}

{/* <Button
content="Sign in with NUSNET"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,55 @@
flex-direction: column;
align-items: center;
}

.headerRow {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
position: relative;
}

.tooltipContainer {
position: relative;
display: inline-block;

.tooltipIcon {
cursor: pointer;
font-weight: bold;
background: #444;
color: #fff;
border-radius: 50%;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
font-size: 15px;
margin-left: 8px;
}

.tooltipText {
visibility: hidden;
opacity: 0;
background: #333;
color: #fff;
padding: 7px 16px;
border-radius: 6px;
position: absolute;
left: 120%;
top: 50%;
transform: translateY(-50%);
white-space: nowrap;
font-size: 0.95rem;
transition: opacity 0.2s;
box-shadow: 0 4px 10px rgba(0,0,0,0.13);
z-index: 10;
}

&:hover .tooltipText,
.tooltipIcon:hover + .tooltipText {
visibility: visible;
opacity: 1;
}
}
8 changes: 6 additions & 2 deletions frontend/src/components/sign-in-section/sign-in-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,12 @@ function SignInSection() {

return (
<>
<Modal.Header as={Header} textAlign="center">
{title}
<Modal.Header as={Header} textAlign="center" className={styles.headerRow}>
<span>{title}</span>
<div className={styles.tooltipContainer}>
<span className={styles.tooltipIcon}>i</span>
<span className={styles.tooltipText}>Log in with your NUS email first, to link your Google account under your profile.</span>
</div>
</Modal.Header>
<Modal.Content className={styles.signInSection}>
{section}
Expand Down