2
2
mirror of https://github.com/Thream/website.git synced 2024-07-21 09:28:32 +02:00
website/components/Authentication/AuthenticationSocialMedia.tsx

50 lines
1.5 KiB
TypeScript
Raw Permalink Normal View History

import { useEffect } from "react"
import { useRouter } from "next/router"
2022-03-16 12:18:09 +01:00
import { api } from "../../tools/api"
import { Authentication, isTokens } from "../../tools/authentication"
import type { SocialMedia } from "../design/SocialMediaButton"
import { SocialMediaButton } from "../design/SocialMediaButton"
import { providers } from "../../models/OAuth"
2022-03-16 12:18:09 +01:00
export const AuthenticationSocialMedia: React.FC = () => {
const router = useRouter()
const handleAuthentication = (
socialMedia: SocialMedia,
2022-03-16 12:18:09 +01:00
): (() => Promise<void>) => {
return async () => {
const redirect = window.location.href.replace(location.search, "")
2022-03-16 12:18:09 +01:00
const { data: url } = await api.get(
`/users/oauth2/${socialMedia.toLowerCase()}/signin?redirectURI=${redirect}`,
2022-03-16 12:18:09 +01:00
)
window.location.href = url
}
}
useEffect(() => {
const data = router.query
if (isTokens(data)) {
const authentication = new Authentication(data, true)
2022-03-16 12:18:09 +01:00
authentication.signin()
router.push("/application").catch(() => {})
2022-03-16 12:18:09 +01:00
}
}, [router])
return (
<div className="flex flex-col sm:w-full sm:items-center">
<div className="flex flex-col items-center justify-center space-y-6 sm:w-4/6 sm:flex-row sm:space-x-6 sm:space-y-0">
2022-04-08 20:59:04 +02:00
{providers.map((provider, index) => {
return (
<SocialMediaButton
key={index}
socialMedia={provider}
onClick={handleAuthentication(provider)}
/>
)
})}
2022-03-16 12:18:09 +01:00
</div>
</div>
)
}