import React from "react";
import styled from "styled-components";
import type { SocialLoginType } from "ee/constants/SocialLogin";
import { getSocialLoginButtonProps } from "ee/utils/signupHelpers";
import type { EventName } from "ee/utils/analyticsUtilTypes";
import AnalyticsUtil from "ee/utils/AnalyticsUtil";
import { useLocation } from "react-router-dom";
import PerformanceTracker, {
PerformanceTransactionName,
} from "utils/PerformanceTracker";
import { Button } from "@appsmith/ads";
import { isTenantConfig } from "ee/utils/adminSettingsHelpers";
import { useSelector } from "react-redux";
import { getTenantConfig } from "ee/selectors/tenantSelectors";
const ThirdPartyAuthWrapper = styled.div`
display: flex;
gap: var(--ads-v2-spaces-3);
width: 100%;
flex-wrap: wrap;
`;
const StyledButton = styled(Button)`
flex: 1 0 171px;
`;
type SignInType = "SIGNIN" | "SIGNUP";
const startIcon: {
[key: string]: string;
} = {
Google: "google-colored",
Github: "github-fill",
};
function SocialLoginButton(props: {
logo: string;
name: string;
url: string;
type: SignInType;
}) {
const tenantConfiguration = useSelector(getTenantConfig);
const location = useLocation();
const queryParams = new URLSearchParams(location.search);
let url = props.url;
const redirectUrl = queryParams.get("redirectUrl");
if (redirectUrl != null) {
url += `?redirectUrl=${encodeURIComponent(redirectUrl)}`;
}
let buttonLabel = props.name;
if (props.name && isTenantConfig(props.name)) {
buttonLabel = tenantConfiguration[props.name];
}
return (
{
let eventName: EventName = "LOGIN_CLICK";
if (props.type === "SIGNUP") {
eventName = "SIGNUP_CLICK";
}
PerformanceTracker.startTracking(
eventName === "SIGNUP_CLICK"
? PerformanceTransactionName.SIGN_UP
: PerformanceTransactionName.LOGIN_CLICK,
{ name: props.name.toUpperCase() },
);
AnalyticsUtil.logEvent(eventName, {
loginMethod: props.name.toUpperCase(),
});
}}
renderAs="a"
size="md"
startIcon={
["Google", "Github"].includes(props.name)
? startIcon[props.name]
: "key-2-line"
}
>
{buttonLabel}
);
}
function ThirdPartyAuth(props: {
logins: SocialLoginType[];
type: SignInType;
}) {
const socialLoginButtons = getSocialLoginButtonProps(props.logins).map(
(item) => {
return ;
},
);
return {socialLoginButtons};
}
export default ThirdPartyAuth;