UI improvement in SSO
Signed-off-by: Ajay Bura <ajbura@gmail.com>
This commit is contained in:
parent
2e62f103f2
commit
1dc0f9288a
2 changed files with 50 additions and 38 deletions
|
@ -4,6 +4,8 @@ import './SSOButtons.scss';
|
||||||
|
|
||||||
import { createTemporaryClient, getLoginFlows, startSsoLogin } from '../../../client/action/auth';
|
import { createTemporaryClient, getLoginFlows, startSsoLogin } from '../../../client/action/auth';
|
||||||
|
|
||||||
|
import Text from '../../atoms/text/Text';
|
||||||
|
|
||||||
function SSOButtons({ homeserver }) {
|
function SSOButtons({ homeserver }) {
|
||||||
const [identityProviders, setIdentityProviders] = useState([]);
|
const [identityProviders, setIdentityProviders] = useState([]);
|
||||||
|
|
||||||
|
@ -39,23 +41,15 @@ function SSOButtons({ homeserver }) {
|
||||||
});
|
});
|
||||||
}, [homeserver]);
|
}, [homeserver]);
|
||||||
|
|
||||||
// TODO Render all non-icon providers at the end so that they are never inbetween icons.
|
if (identityProviders.length === 0) return <></>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="sso-buttons">
|
<div className="sso-buttons">
|
||||||
{identityProviders.map((idp) => {
|
<div className="sso-buttons__divider">
|
||||||
if (idp.imageSrc == null || idp.imageSrc === undefined || idp.imageSrc === '') {
|
<Text>OR</Text>
|
||||||
return (
|
</div>
|
||||||
<button
|
<div className="sso-buttons__container">
|
||||||
key={idp.id}
|
{identityProviders.sort((idp) => !!idp.imageSrc).map((idp) => (
|
||||||
type="button"
|
|
||||||
onClick={() => { startSsoLogin(homeserver, idp.type, idp.id); }}
|
|
||||||
className="sso-buttons__fallback-text text-b1"
|
|
||||||
>
|
|
||||||
{`Log in with ${idp.name}`}
|
|
||||||
</button>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
<SSOButton
|
<SSOButton
|
||||||
key={idp.id}
|
key={idp.id}
|
||||||
homeserver={idp.homeserver}
|
homeserver={idp.homeserver}
|
||||||
|
@ -64,8 +58,8 @@ function SSOButtons({ homeserver }) {
|
||||||
type={idp.type}
|
type={idp.type}
|
||||||
imageSrc={idp.imageSrc}
|
imageSrc={idp.imageSrc}
|
||||||
/>
|
/>
|
||||||
);
|
))}
|
||||||
})}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -73,12 +67,18 @@ function SSOButtons({ homeserver }) {
|
||||||
function SSOButton({
|
function SSOButton({
|
||||||
homeserver, id, name, type, imageSrc,
|
homeserver, id, name, type, imageSrc,
|
||||||
}) {
|
}) {
|
||||||
|
const isImageAvail = !!imageSrc;
|
||||||
function handleClick() {
|
function handleClick() {
|
||||||
startSsoLogin(homeserver, type, id);
|
startSsoLogin(homeserver, type, id);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<button type="button" className="sso-button" onClick={handleClick}>
|
<button
|
||||||
<img className="sso-button__img" src={imageSrc} alt={name} />
|
type="button"
|
||||||
|
className={`sso-btn${!isImageAvail ? ' sso-btn__text-only' : ''}`}
|
||||||
|
onClick={handleClick}
|
||||||
|
>
|
||||||
|
{isImageAvail && <img className="sso-btn__img" src={imageSrc} alt={name} />}
|
||||||
|
{!isImageAvail && <Text>{`Login with ${name}`}</Text>}
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,43 @@
|
||||||
.sso-buttons {
|
.sso-buttons {
|
||||||
margin-top: var(--sp-extra-loose);
|
&__divider {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
flex: 1;
|
||||||
|
content: '';
|
||||||
|
margin: var(--sp-tight);
|
||||||
|
border-bottom: 1px solid var(--bg-surface-border);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__container {
|
||||||
|
margin-bottom: var(--sp-extra-loose);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
&__fallback-text {
|
|
||||||
margin: var(--sp-tight) 0px;
|
|
||||||
|
|
||||||
flex-basis: 100%;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
color: var(--bg-primary);
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sso-button {
|
.sso-btn {
|
||||||
margin-bottom: var(--sp-normal);
|
margin: var(--sp-tight);
|
||||||
|
display: inline-flex;
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-basis: 20%;
|
|
||||||
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&__img {
|
&__img {
|
||||||
height: var(--av-normal);
|
height: var(--av-small);
|
||||||
|
width: var(--av-small);
|
||||||
|
}
|
||||||
|
&__text-only {
|
||||||
|
flex-basis: 100%;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
margin: var(--sp-tight) 0px;
|
||||||
|
cursor: pointer;
|
||||||
|
& .text {
|
||||||
|
color: var(--tc-link);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue