Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 1 addition & 20 deletions frontend/src/pages/User/Details/PublicKeys/index.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useParams } from 'react-router-dom';
import CloudscapeInput from '@cloudscape-design/components/input';
import CloudscapeTextarea from '@cloudscape-design/components/textarea';

import { Box, Button, ButtonWithConfirmation, FormField, Header, InfoLink, Modal, SpaceBetween, Table } from 'components';

import { useBreadcrumbs, useCollection, useHelpPanel, useNotifications } from 'hooks';
import { useCollection, useHelpPanel, useNotifications } from 'hooks';
import { getServerError } from 'libs';
import { ROUTES } from 'routes';
import { IPublicKey, useAddPublicKeyMutation, useDeletePublicKeysMutation, useListPublicKeysQuery } from 'services/publicKeys';

import { SSH_KEYS_INFO } from './constants';

export const PublicKeys: React.FC = () => {
const { t } = useTranslation();
const params = useParams();
const paramUserName = params.userName ?? '';
const [pushNotification] = useNotifications();
const [openHelpPanel] = useHelpPanel();

Expand All @@ -29,21 +25,6 @@ export const PublicKeys: React.FC = () => {
const [addPublicKey, { isLoading: isAdding }] = useAddPublicKeyMutation();
const [deletePublicKeys, { isLoading: isDeleting }] = useDeletePublicKeysMutation();

useBreadcrumbs([
{
text: t('navigation.account'),
href: ROUTES.USER.LIST,
},
{
text: paramUserName,
href: ROUTES.USER.DETAILS.FORMAT(paramUserName),
},
{
text: t('users.public_keys.title'),
href: ROUTES.USER.PUBLIC_KEYS.FORMAT(paramUserName),
},
]);

const { items, collectionProps } = useCollection(publicKeys, {
selection: {},
});
Expand Down
114 changes: 60 additions & 54 deletions frontend/src/pages/User/Details/Settings/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import { GlobalUserRole } from 'types';

import { selectUserData } from 'App/slice';

import { PublicKeys } from '../PublicKeys';

import styles from './styles.module.scss';

export const Settings: React.FC = () => {
Expand Down Expand Up @@ -51,62 +53,66 @@ export const Settings: React.FC = () => {
};

return (
<Container
header={
<Header
variant="h2"
actions={
<Button onClick={editUserHandler} disabled={isDisabledUserEditing()}>
{t('common.edit')}
</Button>
}
>
{t('users.account_settings')}
</Header>
}
>
{isLoading && <Loader />}

{data && (
<ColumnLayout columns={2} variant="text-grid">
<SpaceBetween size="l">
{/*<div>*/}
{/* <Box variant="awsui-key-label">{t('users.user_name')}</Box>*/}
{/* <div>{data.user_name}</div>*/}
{/*</div>*/}

<div>
<Box variant="awsui-key-label">{t('users.email')}</Box>
<div>{data.email ? <Link href={`mailto:${data.email}`}>{data.email}</Link> : '-'}</div>
</div>

<PermissionGuard allowedGlobalRoles={[GlobalUserRole.ADMIN]}>
<SpaceBetween size="l">
<Container
header={
<Header
variant="h2"
actions={
<Button onClick={editUserHandler} disabled={isDisabledUserEditing()}>
{t('common.edit')}
</Button>
}
>
{t('users.account_settings')}
</Header>
}
>
{isLoading && <Loader />}

{data && (
<ColumnLayout columns={2} variant="text-grid">
<SpaceBetween size="l">
{/*<div>*/}
{/* <Box variant="awsui-key-label">{t('users.user_name')}</Box>*/}
{/* <div>{data.user_name}</div>*/}
{/*</div>*/}

<div>
<Box variant="awsui-key-label">{t('users.global_role')}</Box>
<div>{t(`roles.${data.global_role}`)}</div>
<Box variant="awsui-key-label">{t('users.email')}</Box>
<div>{data.email ? <Link href={`mailto:${data.email}`}>{data.email}</Link> : '-'}</div>
</div>
</PermissionGuard>

<div>
<Box variant="awsui-key-label">{t('users.token')}</Box>

<div className={styles.token}>
<Popover
dismissButton={false}
position="top"
size="small"
triggerType="custom"
content={<StatusIndicator type="success">{t('users.token_copied')}</StatusIndicator>}
>
<Button formAction="none" iconName="copy" variant="link" onClick={onCopyToken} />
</Popover>

<div>{data.creds.token}</div>

<PermissionGuard allowedGlobalRoles={[GlobalUserRole.ADMIN]}>
<div>
<Box variant="awsui-key-label">{t('users.global_role')}</Box>
<div>{t(`roles.${data.global_role}`)}</div>
</div>
</PermissionGuard>

<div>
<Box variant="awsui-key-label">{t('users.token')}</Box>

<div className={styles.token}>
<Popover
dismissButton={false}
position="top"
size="small"
triggerType="custom"
content={<StatusIndicator type="success">{t('users.token_copied')}</StatusIndicator>}
>
<Button formAction="none" iconName="copy" variant="link" onClick={onCopyToken} />
</Popover>

<div>{data.creds.token}</div>
</div>
</div>
</div>
</SpaceBetween>
</ColumnLayout>
)}
</Container>
</SpaceBetween>
</ColumnLayout>
)}
</Container>

<PublicKeys />
</SpaceBetween>
);
};
6 changes: 0 additions & 6 deletions frontend/src/pages/User/Details/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ export { Settings as UserSettings } from './Settings';
export { Billing as UserBilling } from './Billing';
export { Events as UserEvents } from './Events';
export { UserProjectList as UserProjects } from './Projects';
export { PublicKeys as UserPublicKeys } from './PublicKeys';

export const UserDetails: React.FC = () => {
const { t } = useTranslation();
Expand Down Expand Up @@ -68,11 +67,6 @@ export const UserDetails: React.FC = () => {
id: UserDetailsTabTypeEnum.SETTINGS,
href: ROUTES.USER.DETAILS.FORMAT(paramUserName),
},
{
label: t('users.public_keys.title'),
id: UserDetailsTabTypeEnum.PUBLIC_KEYS,
href: ROUTES.USER.PUBLIC_KEYS.FORMAT(paramUserName),
},
{
label: t('users.projects'),
id: UserDetailsTabTypeEnum.PROJECTS,
Expand Down
1 change: 0 additions & 1 deletion frontend/src/pages/User/Details/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@ export enum UserDetailsTabTypeEnum {
PROJECTS = 'projects',
EVENTS = 'events',
ACTIVITY = 'activity',
PUBLIC_KEYS = 'public-keys',
BILLING = 'billing',
}
5 changes: 3 additions & 2 deletions frontend/src/router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { RunInspect } from 'pages/Runs/Details/Inspect';
import { JobDetailsPage } from 'pages/Runs/Details/Jobs/Details';
import { EventsList as JobEvents } from 'pages/Runs/Details/Jobs/Events';
import { CreditsHistoryAdd, UserAdd, UserDetails, UserEdit, UserList } from 'pages/User';
import { UserBilling, UserEvents, UserProjects, UserPublicKeys, UserSettings } from 'pages/User/Details';
import { UserBilling, UserEvents, UserProjects, UserSettings } from 'pages/User/Details';

import { AuthErrorMessage } from './App/AuthErrorMessage';
import { EventList } from './pages/Events';
Expand Down Expand Up @@ -280,8 +280,9 @@ export const router = createBrowserRouter([
element: <UserEvents />,
},
{
// SSH keys moved to a section inside the Settings tab
path: ROUTES.USER.PUBLIC_KEYS.TEMPLATE,
element: <UserPublicKeys />,
element: <Navigate replace to=".." />,
},
process.env.UI_VERSION === 'sky' && {
path: ROUTES.USER.BILLING.LIST.TEMPLATE,
Expand Down
Loading