diff --git a/new-ui/src/pages/full/AddPage/AddPage.tsx b/new-ui/src/pages/full/AddPage/AddPage.tsx index ff77246c..03c67d6a 100644 --- a/new-ui/src/pages/full/AddPage/AddPage.tsx +++ b/new-ui/src/pages/full/AddPage/AddPage.tsx @@ -11,7 +11,6 @@ import { import { ThemeSpacing } from '../../../shared/types'; import { mfaConfigurableInstances } from '../../../shared/utils/mfa'; import { AddCard } from './components/AddCard/AddCard'; -import { useStartMfaConfiguration } from './hooks/useStartMfaConfiguration'; export const AddPage = () => { const navigate = useNavigate(); @@ -22,9 +21,6 @@ export const AddPage = () => { [instances], ); - const { mutate: startConfigureMfa, isPending: configureMfaPending } = - useStartMfaConfiguration(); - return ( @@ -60,16 +56,10 @@ export const AddPage = () => { description={`Add new MFA methods to securely authenticate when connecting to a location, with flexible options to match your security requirements.`} actionText="Add MFA" onClick={() => { - // Below two instances there is nothing to pick, so the flow starts here. - if (mfaInstances.length > 1) { - navigate({ - to: '/full/add/mfa', - }); - return; - } - startConfigureMfa(mfaInstances[0]); + navigate({ + to: '/full/add/mfa', + }); }} - loading={configureMfaPending} /> )} diff --git a/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/InstanceSelector.tsx b/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/InstanceSelector.tsx index 4f302e26..a24f290b 100644 --- a/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/InstanceSelector.tsx +++ b/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/InstanceSelector.tsx @@ -1,14 +1,12 @@ -import clsx from 'clsx'; -import './style.scss'; -import { Icon, IconKind } from '../../../../../shared/components/Icon'; -import { RadioIndicator } from '../../../../../shared/components/RadioIndicator/RadioIndicator'; -import { ThemeVariable } from '../../../../../shared/types'; +import { IconKind } from '../../../../../shared/components/Icon'; +import { SelectionItem } from '../../../../../shared/components/SelectionItem/SelectionItem'; interface Props { instanceId: number; instanceName: string; selected: boolean; - onClick: () => void; + disabled?: boolean; + onClick?: () => void; } export const InstanceSelector = ({ @@ -16,24 +14,17 @@ export const InstanceSelector = ({ instanceName, selected, onClick, + disabled = false, }: Props) => { return ( -
-
-
- -
-
-

{instanceName}

-
-
- -
-
-
+ /> ); }; diff --git a/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/style.scss b/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/style.scss deleted file mode 100644 index f66ae476..00000000 --- a/new-ui/src/pages/full/ConfigureMfaPage/components/InstanceSelector/style.scss +++ /dev/null @@ -1,44 +0,0 @@ -.instance-selector { - --border-color: var(--border-disabled); - --bg: transparent; - - user-select: none; - border: 1px solid var(--border-color); - border-radius: 12px; - background-color: var(--bg); - box-sizing: border-box; - padding: var(--spacing-md) var(--spacing-lg); - transition: - border-color 160ms ease-out, - background-color 160ms ease-out; - cursor: pointer; - min-height: 40px; - - &:hover { - --bg: var(--bg-white-5); - } - - &.selected { - --border-color: var(--border-emphasis); - } - - > .track { - display: grid; - grid-template-columns: 20px minmax(0, 1fr) 24px; - column-gap: var(--spacing-lg); - align-items: center; - justify-content: start; - - > .side-col { - display: flex; - flex-flow: row; - align-items: center; - justify-content: center; - } - } - - .name { - font: var(--t-body-sm-400); - color: var(--fg-white-100); - } -} diff --git a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/MethodRow.tsx b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/MethodRow.tsx index 80a099be..6326db3b 100644 --- a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/MethodRow.tsx +++ b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/MethodRow.tsx @@ -1,3 +1,4 @@ +import { Badge } from '../../../../../../shared/components/Badge/Badge'; import { Checkbox } from '../../../../../../shared/components/Checkbox/Checkbox'; import { Icon } from '../../../../../../shared/components/Icon'; import { TooltipContent } from '../../../../../../shared/providers/tooltip/TooltipContent'; @@ -44,11 +45,7 @@ export const MethodRow = ({ /> {(configured || isPresent(hint)) && (
- {configured && ( -
-

{`Configured`}

-
- )} + {configured && } {isPresent(hint) && ( diff --git a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/style.scss b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/style.scss index e69d1ef4..d353dcd6 100644 --- a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/style.scss +++ b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureSelectMethodsStep/components/style.scss @@ -12,26 +12,5 @@ align-items: center; justify-content: flex-end; user-select: none; - - .configured-badge { - user-select: none; - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - box-sizing: border-box; - padding: 0 var(--spacing-sm); - flex-grow: 0; - flex-shrink: 1; - border-radius: 8px; - background-color: var(--bg-white-5); - min-height: 24px; - - p, - span { - font: var(--t-body-xs-400); - color: var(--fg-white-50); - } - } } } diff --git a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureVerifyOidcStep/ConfigureVerifyOidcStep.tsx b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureVerifyOidcStep/ConfigureVerifyOidcStep.tsx index 5d802919..9b0769c5 100644 --- a/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureVerifyOidcStep/ConfigureVerifyOidcStep.tsx +++ b/new-ui/src/pages/full/ConfigureMfaPage/verify/ConfigureVerifyOidcStep/ConfigureVerifyOidcStep.tsx @@ -1,9 +1,11 @@ import { Button } from '../../../../../shared/components/Button/Button'; import { ButtonVariant } from '../../../../../shared/components/Button/types'; import { Controls } from '../../../../../shared/components/Controls/Controls'; +import { ExternalProviderButton } from '../../../../../shared/components/ExternalProviderButton/ExternalProviderButton'; import { FullPageTitle } from '../../../../../shared/components/FullPageTitle/FullPageTitle'; import { FullPage } from '../../../../../shared/layouts/FullPage/FullPage'; import { isPresent } from '../../../../../shared/utils/isPresent'; +import { findOpenIdProvider, openIdProviderName } from '../../../../../shared/utils/mfa'; import { useConfigureMfaStore } from '../../hooks/useConfigureMfaStore'; import { useConfigureVerifyOidc } from './useConfigureVerifyOidc'; import '../style.scss'; @@ -13,8 +15,11 @@ interface Props { } export const ConfigureVerifyOidcStep = ({ onSessionExpired }: Props) => { + const instance = useConfigureMfaStore((s) => s.instance) ?? undefined; + const providerName = openIdProviderName(instance); const { start, abort, isOpening, isPolling, error } = useConfigureVerifyOidc({ onSessionExpired, + autoStart: true, }); const handleBack = async () => { @@ -35,14 +40,14 @@ export const ConfigureVerifyOidcStep = ({ onSessionExpired }: Props) => { {isPolling ? 'Complete the sign-in in your browser. This page will update automatically.' - : 'Authenticate via your OpenID provider. A browser window will open for you to sign in.'} + : `A browser window will open for you to sign in with ${providerName}.`}

{isPresent(error) &&

{error}

}
-