diff --git a/components/dashboard/src/components/Tooltip.tsx b/components/dashboard/src/components/Tooltip.tsx new file mode 100644 index 00000000000000..fbcf30cfc422a7 --- /dev/null +++ b/components/dashboard/src/components/Tooltip.tsx @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2021 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License-AGPL.txt in the project root for license information. + */ + +import { useState } from 'react'; + +export interface TooltipProps { + children: React.ReactChild[] | React.ReactChild; + content: string; +} + +function Tooltip(props: TooltipProps) { + const [expanded, setExpanded] = useState(false); + + return ( +
setExpanded(false)} onMouseEnter={() => setExpanded(true)} className="relative"> +
+ {props.children} +
+ {expanded ? +
+ {props.content} +
+ : + null + } +
+ ); +} + +export default Tooltip; \ No newline at end of file diff --git a/components/dashboard/src/workspaces/WorkspaceEntry.tsx b/components/dashboard/src/workspaces/WorkspaceEntry.tsx index 4a15f59d1bcb0c..2a997a1cd9f140 100644 --- a/components/dashboard/src/workspaces/WorkspaceEntry.tsx +++ b/components/dashboard/src/workspaces/WorkspaceEntry.tsx @@ -13,7 +13,11 @@ import { getGitpodService } from '../service/service'; import Modal from '../components/Modal'; import { MouseEvent, useState } from 'react'; import { WorkspaceModel } from './workspace-model'; +import Tooltip from '../components/Tooltip'; +function getLabel(state: WorkspaceInstancePhase) { + return state.substr(0,1).toLocaleUpperCase() + state.substr(1); +} export function WorkspaceEntry({ desc, model }: { desc: WorkspaceInfo, model: WorkspaceModel }) { const [isModalVisible, setModalVisible] = useState(false); @@ -100,20 +104,23 @@ export function WorkspaceEntry({ desc, model }: { desc: WorkspaceInfo, model: Wo setChangesModalVisible(true); } return
- +
-
-   -
+ +
+
+
-
{ws.id}
-
{project || 'Unknown'}
+
{ws.id}
+
{project || 'Unknown'}
{ws.description}
-
{ws.contextURL}
+ +
{ws.contextURL}
+
0 ? showChanges : undefined}> @@ -127,19 +134,21 @@ export function WorkspaceEntry({ desc, model }: { desc: WorkspaceInfo, model: Wo }
-
-
{moment(WorkspaceInfo.lastActiveISODate(desc)).fromNow()}
+
+ +
{moment(WorkspaceInfo.lastActiveISODate(desc)).fromNow()}
+
Actions
- +
setChangesModalVisible(false)}> {getChangesPopup(pendingChanges)} - setModalVisible(false)} onEnter={() => {model.deleteWorkspace(ws.id); return true;}}> + setModalVisible(false)} onEnter={() => { model.deleteWorkspace(ws.id); return true; }}>

Delete Workspace