oak-general-business/template/src/components/login/byOauth/ProviderList/web.pc.tsx

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;