77 lines
2.9 KiB
TypeScript
77 lines
2.9 KiB
TypeScript
import React from 'react';
|
|
import { EntityDict } from '@project/oak-app-domain';
|
|
import { RowWithActions, WebComponentProps } from 'oak-frontend-base';
|
|
import { Tooltip } from 'antd';
|
|
import Styles from './styles.module.less';
|
|
|
|
const ProviderList = (
|
|
props: WebComponentProps<
|
|
EntityDict,
|
|
'oauthProvider',
|
|
true,
|
|
{
|
|
list: RowWithActions<EntityDict, 'oauthProvider'>[];
|
|
loading: boolean;
|
|
},
|
|
{
|
|
onLogin: (provider: RowWithActions<EntityDict, 'oauthProvider'>) => void
|
|
}
|
|
>
|
|
) => {
|
|
const { list, loading } = props.data;
|
|
const { t, onLogin } = props.methods;
|
|
|
|
if (loading) {
|
|
return (
|
|
<div className={Styles.providerContainer}>
|
|
<div className={Styles.loadingWrapper}>
|
|
<div className={Styles.loadingDots}>
|
|
<span></span>
|
|
<span></span>
|
|
<span></span>
|
|
</div>
|
|
<div className={Styles.loadingText}>{t("waiting")}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className={Styles.providerContainer}>
|
|
{list && list.length > 0 && (
|
|
<>
|
|
<div className={Styles.title}>第三方登录</div>
|
|
<div className={Styles.providerList}>
|
|
{list.map((item) => {
|
|
return (
|
|
<Tooltip key={item.id} title={item.name} placement="bottom">
|
|
<div
|
|
className={Styles.providerItem}
|
|
onClick={() => onLogin(item)}
|
|
>
|
|
<div className={Styles.logoWrapper}>
|
|
{item.logo ? (
|
|
<img
|
|
src={item.logo}
|
|
alt={item.name}
|
|
className={Styles.logo}
|
|
/>
|
|
) : (
|
|
<div className={Styles.logoPlaceholder}>
|
|
{item.name?.charAt(0).toUpperCase()}
|
|
</div>
|
|
)}
|
|
</div>
|
|
<div className={Styles.providerName}>{item.name}</div>
|
|
</div>
|
|
</Tooltip>
|
|
);
|
|
})}
|
|
</div>
|
|
</>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default ProviderList; |