Improve styling of SSO Buttons for multiple IdPs

This commit is contained in:
Michael Telatynski 2021-01-21 13:33:25 +00:00
parent 3115c4f3f3
commit 928ddeb718
2 changed files with 31 additions and 12 deletions

View file

@ -16,8 +16,15 @@ limitations under the License.
.mx_SSOButtons { .mx_SSOButtons {
display: flex; display: flex;
flex-wrap: wrap;
justify-content: center; justify-content: center;
.mx_SSOButtons_row {
& + .mx_SSOButtons_row {
margin-top: 16px;
}
}
.mx_SSOButton { .mx_SSOButton {
position: relative; position: relative;
width: 100%; width: 100%;
@ -36,6 +43,8 @@ limitations under the License.
box-sizing: border-box; box-sizing: border-box;
width: 50px; // 48px + 1px border on all sides width: 50px; // 48px + 1px border on all sides
height: 50px; // 48px + 1px border on all sides height: 50px; // 48px + 1px border on all sides
min-width: 50px; // prevent crushing by the flexbox
padding: 12px;
> img { > img {
left: 12px; left: 12px;
@ -43,7 +52,7 @@ limitations under the License.
} }
& + .mx_SSOButton_mini { & + .mx_SSOButton_mini {
margin-left: 24px; margin-left: 16px;
} }
} }
} }

View file

@ -15,13 +15,14 @@ limitations under the License.
*/ */
import React from "react"; import React from "react";
import { chunk } from "lodash";
import classNames from "classnames";
import {MatrixClient} from "matrix-js-sdk/src/client"; import {MatrixClient} from "matrix-js-sdk/src/client";
import PlatformPeg from "../../../PlatformPeg"; import PlatformPeg from "../../../PlatformPeg";
import AccessibleButton from "./AccessibleButton"; import AccessibleButton from "./AccessibleButton";
import {_t} from "../../../languageHandler"; import {_t} from "../../../languageHandler";
import {IIdentityProvider, ISSOFlow} from "../../../Login"; import {IIdentityProvider, ISSOFlow} from "../../../Login";
import classNames from "classnames";
interface ISSOButtonProps extends Omit<IProps, "flow"> { interface ISSOButtonProps extends Omit<IProps, "flow"> {
idp: IIdentityProvider; idp: IIdentityProvider;
@ -83,6 +84,8 @@ interface IProps {
primary?: boolean; primary?: boolean;
} }
const MAX_PER_ROW = 6;
const SSOButtons: React.FC<IProps> = ({matrixClient, flow, loginType, fragmentAfterLogin, primary}) => { const SSOButtons: React.FC<IProps> = ({matrixClient, flow, loginType, fragmentAfterLogin, primary}) => {
const providers = flow["org.matrix.msc2858.identity_providers"] || []; const providers = flow["org.matrix.msc2858.identity_providers"] || [];
if (providers.length < 2) { if (providers.length < 2) {
@ -97,17 +100,24 @@ const SSOButtons: React.FC<IProps> = ({matrixClient, flow, loginType, fragmentAf
</div>; </div>;
} }
const rows = Math.ceil(providers.length / MAX_PER_ROW);
const size = Math.ceil(providers.length / rows);
return <div className="mx_SSOButtons"> return <div className="mx_SSOButtons">
{ providers.map(idp => ( { chunk(providers, size).map(chunk => (
<SSOButton <div key={chunk[0].id} className="mx_SSOButtons_row">
key={idp.id} { chunk.map(idp => (
matrixClient={matrixClient} <SSOButton
loginType={loginType} key={idp.id}
fragmentAfterLogin={fragmentAfterLogin} matrixClient={matrixClient}
idp={idp} loginType={loginType}
mini={true} fragmentAfterLogin={fragmentAfterLogin}
primary={primary} idp={idp}
/> mini={true}
primary={primary}
/>
)) }
</div>
)) } )) }
</div>; </div>;
}; };