X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e954cfb45dbe418c151144cc42847b848c9b0ebf..589629e80967dc1f318561fbe6a4174e1da231a6:/src/views/link-account-panel/link-account-panel-root.tsx diff --git a/src/views/link-account-panel/link-account-panel-root.tsx b/src/views/link-account-panel/link-account-panel-root.tsx index 19c4b97a..359f7798 100644 --- a/src/views/link-account-panel/link-account-panel-root.tsx +++ b/src/views/link-account-panel/link-account-panel-root.tsx @@ -11,14 +11,17 @@ import { CardContent, Button, Grid, + Select, + CircularProgress } from '@material-ui/core'; import { ArvadosTheme } from '~/common/custom-theme'; import { UserResource } from "~/models/user"; import { LinkAccountType } from "~/models/link-account"; import { formatDate } from "~/common/formatters"; import { LinkAccountPanelStatus, LinkAccountPanelError } from "~/store/link-account-panel/link-account-panel-reducer"; +import { Config } from '~/common/config'; -type CssRules = 'root';// | 'gridItem' | 'label' | 'title' | 'actions'; +type CssRules = 'root'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ root: { @@ -30,89 +33,155 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ export interface LinkAccountPanelRootDataProps { targetUser?: UserResource; userToLink?: UserResource; - status : LinkAccountPanelStatus; + remoteHostsConfig: { [key: string]: Config }; + hasRemoteHosts: boolean; + localCluster: string; + loginCluster: string; + status: LinkAccountPanelStatus; error: LinkAccountPanelError; + selectedCluster?: string; + isProcessing: boolean; } export interface LinkAccountPanelRootActionProps { startLinking: (type: LinkAccountType) => void; cancelLinking: () => void; linkAccount: () => void; + setSelectedCluster: (cluster: string) => void; } -function displayUser(user: UserResource, showCreatedAt: boolean = false) { +function displayUser(user: UserResource, showCreatedAt: boolean = false, showCluster: boolean = false) { const disp = []; disp.push({user.email} ({user.username}, {user.uuid})); + if (showCluster) { + const homeCluster = user.uuid.substr(0, 5); + disp.push( hosted on cluster {homeCluster} and ); + } if (showCreatedAt) { - disp.push( created on {formatDate(user.createdAt, true)}); + disp.push( created on {formatDate(user.createdAt)}); } return disp; } +function isLocalUser(uuid: string, localCluster: string) { + return uuid.substring(0, 5) === localCluster; +} + type LinkAccountPanelRootProps = LinkAccountPanelRootDataProps & LinkAccountPanelRootActionProps & WithStyles; -export const LinkAccountPanelRoot = withStyles(styles) ( - ({classes, targetUser, userToLink, status, error, startLinking, cancelLinking, linkAccount}: LinkAccountPanelRootProps) => { +export const LinkAccountPanelRoot = withStyles(styles)( + ({ classes, targetUser, userToLink, status, isProcessing, error, startLinking, cancelLinking, linkAccount, + remoteHostsConfig, hasRemoteHosts, selectedCluster, setSelectedCluster, localCluster, loginCluster }: LinkAccountPanelRootProps) => { return - { status === LinkAccountPanelStatus.INITIAL && targetUser && - - - - You are currently logged in as {displayUser(targetUser, true)} - - - You can link Arvados accounts. After linking, either login will take you to the same account. - - - - - - - - - - - } - { (status === LinkAccountPanelStatus.LINKING || status === LinkAccountPanelStatus.ERROR) && userToLink && targetUser && - - { status === LinkAccountPanelStatus.LINKING && - - Clicking 'Link accounts' will link {displayUser(userToLink, true)} to {displayUser(targetUser, true)}. - - - After linking, logging in as {displayUser(userToLink)} will log you into the same account as {displayUser(targetUser)}. - - - Any object owned by {displayUser(userToLink)} will be transfered to {displayUser(targetUser)}. - - } - { error === LinkAccountPanelError.NON_ADMIN && - Cannot link admin account {displayUser(userToLink)} to non-admin account {displayUser(targetUser)}. - } - { error === LinkAccountPanelError.SAME_USER && - Cannot link {displayUser(targetUser)} to the same account. - } - { error === LinkAccountPanelError.INACTIVE && - Cannot link account {displayUser(userToLink)} to inactive account {displayUser(targetUser)}. - } - - - - + {isProcessing && - + Loading user info. Please wait. + + + - - } + } + {!isProcessing && status === LinkAccountPanelStatus.INITIAL && targetUser &&
+ {isLocalUser(targetUser.uuid, localCluster) ? + + + You are currently logged in as {displayUser(targetUser, true)} + + + You can link Arvados accounts. After linking, either login will take you to the same account. + + + + + + + + + + + {hasRemoteHosts && selectedCluster && + + You can also link {displayUser(targetUser, false)} with an account from a remote cluster. + + + Please select the cluster that hosts the account you want to link with: + + + + + + } + : + + + + You are currently logged in as {displayUser(targetUser, true, true)} + + {targetUser.isActive ? (loginCluster === "" ? + <> + This a remote account. You can link a local Arvados account to this one. After linking, you can access the local account's data by logging into the {localCluster} cluster as user {targetUser.email} from {targetUser.uuid.substr(0, 5)}. + + + + + : Must perform account linking on login cluster {loginCluster} + ) + : + This an inactive remote account. An administrator must activate your account before you can proceed. After your accounts is activated, you can link a local Arvados account hosted by the {localCluster} cluster to this one. + } + + } +
} + {!isProcessing && (status === LinkAccountPanelStatus.LINKING || status === LinkAccountPanelStatus.ERROR) && userToLink && targetUser && + + {status === LinkAccountPanelStatus.LINKING && + + Clicking 'Link accounts' will link {displayUser(userToLink, true, !isLocalUser(targetUser.uuid, localCluster))} to {displayUser(targetUser, true, !isLocalUser(targetUser.uuid, localCluster))}. + + {(isLocalUser(targetUser.uuid, localCluster)) && + After linking, logging in as {displayUser(userToLink)} will log you into the same account as {displayUser(targetUser)}. + } + + Any object owned by {displayUser(userToLink)} will be transfered to {displayUser(targetUser)}. + + {!isLocalUser(targetUser.uuid, localCluster) && + You can access {userToLink.email} data by logging into {localCluster} with the {targetUser.email} account. + } + } + {error === LinkAccountPanelError.NON_ADMIN && + Cannot link admin account {displayUser(userToLink)} to non-admin account {displayUser(targetUser)}. + } + {error === LinkAccountPanelError.SAME_USER && + Cannot link {displayUser(targetUser)} to the same account. + } + {error === LinkAccountPanelError.INACTIVE && + Cannot link account {displayUser(userToLink)} to inactive account {displayUser(targetUser)}. + } + + + + + + + + + }
-
; -}); \ No newline at end of file + ; + });