63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { useTranslation } from 'react-i18next'
|
|
import { useSearchParams } from 'next/navigation'
|
|
import style from '../page.module.css'
|
|
import Button from '@/app/components/base/button'
|
|
import { apiPrefix } from '@/config'
|
|
import classNames from '@/utils/classnames'
|
|
import { getPurifyHref } from '@/utils'
|
|
|
|
type SocialAuthProps = {
|
|
disabled?: boolean
|
|
}
|
|
|
|
export default function SocialAuth(props: SocialAuthProps) {
|
|
const { t } = useTranslation()
|
|
const searchParams = useSearchParams()
|
|
|
|
const getOAuthLink = (href: string) => {
|
|
const url = getPurifyHref(`${apiPrefix}${href}`)
|
|
if (searchParams.has('invite_token'))
|
|
return `${url}?${searchParams.toString()}`
|
|
|
|
return url
|
|
}
|
|
return <>
|
|
<div className='w-full'>
|
|
<a href={getOAuthLink('/oauth/login/github')}>
|
|
<Button
|
|
disabled={props.disabled}
|
|
className='w-full'
|
|
>
|
|
<>
|
|
<span className={
|
|
classNames(
|
|
style.githubIcon,
|
|
'w-5 h-5 mr-2',
|
|
)
|
|
} />
|
|
<span className="truncate">{t('login.withGitHub')}</span>
|
|
</>
|
|
</Button>
|
|
</a>
|
|
</div>
|
|
<div className='w-full'>
|
|
<a href={getOAuthLink('/oauth/login/google')}>
|
|
<Button
|
|
disabled={props.disabled}
|
|
className='w-full'
|
|
>
|
|
<>
|
|
<span className={
|
|
classNames(
|
|
style.googleIcon,
|
|
'w-5 h-5 mr-2',
|
|
)
|
|
} />
|
|
<span className="truncate">{t('login.withGoogle')}</span>
|
|
</>
|
|
</Button>
|
|
</a>
|
|
</div>
|
|
</>
|
|
}
|