Skip to content
This repository was archived by the owner on Feb 8, 2024. It is now read-only.
Merged
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
16 changes: 11 additions & 5 deletions packages/shared/components/MenuSshLogin/MenuSshLogin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { NavLink } from 'react-router-dom';
import Menu, { MenuItem } from 'design/Menu';
import { space } from 'design/system';
import { MenuSshLoginProps } from './types';
import { ButtonBorder } from 'design';
import { ButtonBorder, Flex } from 'design';
import { CarrotDown } from 'design/Icon';

class MenuSshLogin extends React.Component<MenuSshLoginProps> {
Expand Down Expand Up @@ -100,7 +100,7 @@ export const LoginItemList = ({ logins, onClick, onKeyPress }) => {
key={key}
px="2"
mx="2"
as={NavLink}
as={url ? NavLink : StyledButton}
to={url}
onClick={(e: Event) => {
onClick(e, login);
Expand All @@ -112,7 +112,7 @@ export const LoginItemList = ({ logins, onClick, onKeyPress }) => {
});

return (
<React.Fragment>
<Flex flexDirection="column">
<Input
p="2"
m="2"
Expand All @@ -123,10 +123,16 @@ export const LoginItemList = ({ logins, onClick, onKeyPress }) => {
autoComplete="off"
/>
{$menuItems}
</React.Fragment>
</Flex>
);
};

const StyledButton = styled.button`
color: inherit;
border: none;
flex: 1;
`;

const StyledMenuItem = styled(MenuItem)(
({ theme }) => `
color: ${theme.colors.grey[400]};
Expand All @@ -150,7 +156,7 @@ const Input = styled.input(
border: 1px solid ${theme.colors.subtle};
border-radius: 4px;
box-sizing: border-box;
color: #263238;
color: ${theme.colors.grey[900]};
height: 32px;
outline: none;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import React, { FC } from 'react';
import { ThemeProvider } from 'styled-components';
import theme from 'teleterm/ui/ThemeProvider/theme';

const menuSshLoginTheme = {
...theme,
colors: {
...theme.colors,
subtle:theme.colors.primary.lighter,
light: theme.colors.primary.dark,
grey: {
[50]: 'rgba(255,255,255,0.05)',
[900]: theme.colors.text.primary,
},
link: theme.colors.text.primary,
},
};

export const MenuSshLoginTheme: FC = props => (
<ThemeProvider theme={menuSshLoginTheme} children={props.children} />
);
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@ import React from 'react';
import { useServers, State } from './useServers';
import * as types from 'teleterm/ui/services/clusters/types';
import Table, { Cell } from 'design/DataTable';
import { ButtonBorder } from 'design';
import { renderLabelCell } from '../renderLabelCell';
import MenuSshLogin from 'shared/components/MenuSshLogin';
import { MenuSshLoginTheme } from './MenuSshLoginTheme';

export default function Container() {
const state = useServers();
return <ServerList {...state} />;
}

function ServerList(props: State) {
const { servers = [], connect } = props;
const { servers = [], getSshLogins, connect } = props;
return (
<Table
columns={[
Expand All @@ -49,7 +50,11 @@ function ServerList(props: State) {
},
{
altKey: 'connect-btn',
render: server => renderConnectCell(server.uri, connect),
render: server =>
renderConnectCell(
() => getSshLogins(server.uri),
login => connect(server.uri, login)
),
},
]}
emptyText="No Nodes Found"
Expand All @@ -60,19 +65,25 @@ function ServerList(props: State) {
}

const renderConnectCell = (
serverUri: string,
connect: (serverUri: string) => void
getSshLogins: () => string[],
onConnect: (login: string) => void
) => {
return (
<Cell align="right">
<ButtonBorder
size="small"
onClick={() => {
connect(serverUri);
}}
>
Connect
</ButtonBorder>
<MenuSshLoginTheme>
<MenuSshLogin
onOpen={() => getSshLogins().map(login => ({ login, url: '' }))}
onSelect={(e, login) => onConnect(login)}
transformOrigin={{
vertical: 'top',
horizontal: 'right',
}}
anchorOrigin={{
vertical: 'center',
horizontal: 'right',
}}
/>
</MenuSshLoginTheme>
</Cell>
);
};
Expand All @@ -87,4 +98,4 @@ const renderAddressCell = ({ addr, tunnel }: types.Server) => (
)}
{!tunnel && addr}
</Cell>
);
);
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,39 @@ limitations under the License.
*/

import { useClusterContext } from 'teleterm/ui/DocumentCluster/clusterContext';
import { useAppContext } from 'teleterm/ui/appContextProvider';

export function useServers() {
const ctx = useClusterContext();
const servers = ctx.getServers();
const syncStatus = ctx.getSyncStatus().servers;
const appContext = useAppContext();
const clusterContext = useClusterContext();
const servers = clusterContext.getServers();
const syncStatus = clusterContext.getSyncStatus().servers;

function getSshLogins(serverUri: string): string[] {
const cluster = appContext.clustersService.findClusterByResource(serverUri);
return cluster?.loggedInUser?.sshLoginsList || [];
}

function connect(serverUri: string, login: string): void {
const server = appContext.clustersService.getServer(serverUri);

const rootCluster =
appContext.clustersService.findRootClusterByResource(serverUri);
const documentsService =
appContext.workspacesService.getWorkspaceDocumentService(rootCluster.uri);
const doc = documentsService.createTshNodeDocument(serverUri);
doc.title = `${login}@${server.hostname}`;
doc.login = login;

documentsService.add(doc);
documentsService.setLocation(doc.uri);
}

return {
connect: ctx.connectServer,
servers,
syncStatus,
getSshLogins,
connect,
};
}

Expand Down
4 changes: 0 additions & 4 deletions packages/teleterm/src/ui/DocumentCluster/clusterContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,6 @@ class ClusterContext extends Store<State> {
this.appCtx.commandLauncher.executeCommand('kube-connect', { kubeUri });
};

connectServer = (serverUri: string) => {
this.appCtx.commandLauncher.executeCommand('ssh', { serverUri });
};

connectDb = (dbUri: string) => {
this.appCtx.commandLauncher.executeCommand('proxy-db', { dbUri });
};
Expand Down
5 changes: 0 additions & 5 deletions packages/teleterm/src/ui/ModalsHost/ModalsHost.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import React from 'react';
import { useAppContext } from 'teleterm/ui/appContextProvider';
import GatewayCreate from 'teleterm/ui/GatewayCreate';
import ServerConnect from 'teleterm/ui/ServerConnect';
import ClusterRemove from '../ClusterRemove/ClusterRemove';
import { ClusterConnect } from 'teleterm/ui/ClusterConnect';

Expand Down Expand Up @@ -51,9 +50,5 @@ export default function ModalsHost() {
return <GatewayCreate {...dialog} onClose={handleClose} />;
}

if (dialog.kind === 'server-connect') {
return <ServerConnect serverUri={dialog.serverUri} onClose={handleClose} />;
}

return null;
}
44 changes: 0 additions & 44 deletions packages/teleterm/src/ui/ServerConnect/ServerConnect.story.tsx

This file was deleted.

82 changes: 0 additions & 82 deletions packages/teleterm/src/ui/ServerConnect/ServerConnect.tsx

This file was deleted.

18 changes: 0 additions & 18 deletions packages/teleterm/src/ui/ServerConnect/index.ts

This file was deleted.

Loading