import React from "react"; import styled from "styled-components"; import { getSocialLoginButtonProps, SocialLoginType, } from "constants/SocialLogin"; import { IntentColors, getBorderCSSShorthand } from "constants/DefaultTheme"; import AnalyticsUtil, { EventName } from "utils/AnalyticsUtil"; import { useLocation } from "react-router-dom"; import PerformanceTracker, { PerformanceTransactionName, } from "utils/PerformanceTracker"; import { setOnboardingState } from "utils/storage"; const ThirdPartyAuthWrapper = styled.div` display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-end; margin-left: ${(props) => props.theme.authCard.dividerSpacing}px; `; //TODO(abhinav): Port this to use themes. const StyledSocialLoginButton = styled.a` width: 200px; display: flex; align-items: center; border: ${(props) => getBorderCSSShorthand(props.theme.borders[2])}; padding: 8px; color: ${(props) => props.theme.colors.textDefault}; border-radius: ${(props) => props.theme.radii[1]}px; position: relative; height: 42px; &:hover { text-decoration: none; background: ${IntentColors.success}; color: ${(props) => props.theme.colors.textOnDarkBG}; } & > div { width: 36px; height: 36px; padding: ${(props) => props.theme.radii[1]}px; position: absolute; left: 2px; top: 2px; background: white; display: flex; justify-content: center; align-items: center; & img { width: 80%; height: 80%; } } & p { display: block; margin: 0 0 0 36px; font-size: ${(props) => props.theme.fontSizes[3]}px; font-weight: ${(props) => props.theme.fontWeights[3]}; } `; export const SocialLoginTypes: Record = { GOOGLE: "google", GITHUB: "github", }; type SignInType = "SIGNIN" | "SIGNUP"; const SocialLoginButton = (props: { logo: string; name: string; url: string; type: SignInType; }) => { const location = useLocation(); const queryParams = new URLSearchParams(location.search); let url = props.url; if (queryParams.has("redirectUrl")) { url += `?redirectUrl=${queryParams.get("redirectUrl")}`; } return ( { let eventName: EventName = "LOGIN_CLICK"; if (props.type === "SIGNUP") { eventName = "SIGNUP_CLICK"; // Set onboarding flag on signup setOnboardingState(true); } PerformanceTracker.startTracking( eventName === "SIGNUP_CLICK" ? PerformanceTransactionName.SIGN_UP : PerformanceTransactionName.LOGIN_CLICK, { name: props.name.toUpperCase() }, ); AnalyticsUtil.logEvent(eventName, { loginMethod: props.name.toUpperCase(), }); }} >
{`

{`Sign in with ${props.name}`}

); }; export const ThirdPartyAuth = (props: { logins: SocialLoginType[]; type: SignInType; }) => { const socialLoginButtons = getSocialLoginButtonProps(props.logins).map( (item) => { return ; }, ); return {socialLoginButtons}; }; export default ThirdPartyAuth;