import { createEffect, createMemo, createSignal, For, Resource } from 'solid-js' import { startOAuthLogin } from './lib/oauth-login' import { loginByToken } from './lib/token-login' import { LoginMethod } from './lib/methods' import type { AuthContext } from './types' export interface DialogMethodsProps { ctx: AuthContext methods: Resource changeTitle: (title: string) => void onComplete: () => void } export const DialogMethods = (props: DialogMethodsProps) => { const { ctx, methods } = props const [isLoading, setIsLoading] = createSignal(true) props.changeTitle(ctx.$t('signIn')) const clickHandler = (m: LoginMethod) => { if (m.onClick) m.onClick() else if (m.link) (async () => { const url = /^(http|https):\/\//.test(m.link!) ? m.link! : `${ctx.getConf().get().server}${m.link}` const { token } = await startOAuthLogin(ctx, url) loginByToken(ctx, token) props.onComplete() })() } createEffect(() => { if (methods()?.length) setIsLoading(false) else setIsLoading(true) if (methods()?.length === 1) { const m = methods()![0] clickHandler(m) } }) const $methods = (
{(m) => (
clickHandler(m)} >
{m.label}
)}
{isLoading() && [...Array(3)].map((_, i) => (
))}
) return
{$methods}
}