@@ -11,8 +11,6 @@ import { useLocation, useRouteMatch } from "react-router";
11
11
import { Location } from "history" ;
12
12
import { countries } from "countries-list" ;
13
13
import gitpodIcon from "./icons/gitpod.svg" ;
14
- import CaretDown from "./icons/CaretDown.svg" ;
15
- import CaretUpDown from "./icons/CaretUpDown.svg" ;
16
14
import { getGitpodService , gitpodHostUrl } from "./service/service" ;
17
15
import { UserContext } from "./user-context" ;
18
16
import { TeamsContext , getCurrentTeam } from "./teams/teams-context" ;
@@ -108,6 +106,7 @@ export default function Menu() {
108
106
109
107
// Hide most of the top menu when in a full-page form.
110
108
const isMinimalUI = [ "/new" , "/teams/new" , "/open" ] . includes ( location . pathname ) ;
109
+ const isWorkspacesUI = [ "/workspaces" ] . includes ( location . pathname ) ;
111
110
112
111
const [ teamMembers , setTeamMembers ] = useState < Record < string , TeamMemberInfo [ ] > > ( { } ) ;
113
112
useEffect ( ( ) => {
@@ -228,11 +227,6 @@ export default function Menu() {
228
227
}
229
228
// User menu
230
229
return [
231
- {
232
- title : "Workspaces" ,
233
- link : "/workspaces" ,
234
- alternatives : [ "/" ] ,
235
- } ,
236
230
{
237
231
title : "Projects" ,
238
232
link : "/projects" ,
@@ -255,8 +249,8 @@ export default function Menu() {
255
249
]
256
250
: [ ] ) ,
257
251
{
258
- title : "Docs " ,
259
- link : "https://www.gitpod.io/docs/ " ,
252
+ title : "Workspaces " ,
253
+ link : "/workspaces " ,
260
254
} ,
261
255
] ;
262
256
@@ -269,24 +263,29 @@ export default function Menu() {
269
263
} ;
270
264
const renderTeamMenu = ( ) => {
271
265
return (
272
- < div className = "flex p-1 pl-3 " >
266
+ < div className = "flex p-1 pl-3" >
273
267
{ projectSlug && (
274
- < div className = "flex h-full rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 px-2 py-1" >
275
- < Link to = { team ? `/t/${ team . slug } /projects` : `/projects` } >
276
- < span className = "text-base text-gray-600 dark:text-gray-400 font-semibold" >
277
- { team ?. name || userFullName }
278
- </ span >
279
- </ Link >
280
- </ div >
268
+ < Link to = { team ? `/t/${ team . slug } /projects` : `/projects` } >
269
+ < span className = "flex h-full text-base text-gray-500 dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-700 font-semibold pl-3 pr-2 py-1 bg-gray-50 hover:bg-gray-100 rounded-tl-2xl rounded-bl-2xl border-gray-100 dark:border-gray-700 border-r" >
270
+ { team ?. name || userFullName }
271
+ </ span >
272
+ </ Link >
281
273
) }
282
- < div className = "flex h-full rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800" >
274
+ { ! projectSlug && (
275
+ < Link to = "/projects" >
276
+ < span className = "flex h-full text-base text-gray-500 dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-700 font-semibold pl-3 pr-2 py-1 bg-gray-50 hover:bg-gray-100 rounded-tl-2xl rounded-bl-2xl border-gray-100 dark:border-gray-700 border-r" >
277
+ { team ?. name || userFullName }
278
+ </ span >
279
+ </ Link >
280
+ ) }
281
+ < div className = "flex h-full rounded-tr-2xl rounded-br-2xl bg-gray-50 hover:bg-gray-100 px-1 dark:bg-gray-800 dark:hover:bg-gray-700" >
283
282
< ContextMenu
284
283
classes = "w-64 left-0"
285
284
menuEntries = { [
286
285
{
287
286
title : userFullName ,
288
287
customContent : (
289
- < div className = "w-full text-gray-400 flex flex-col" >
288
+ < div className = "w-full text-gray-500 flex flex-col" >
290
289
< span className = "text-gray-800 dark:text-gray-100 text-base font-semibold" >
291
290
{ userFullName }
292
291
</ span >
@@ -343,35 +342,50 @@ export default function Menu() {
343
342
} ,
344
343
] }
345
344
>
346
- < div className = "flex h-full px-2 py-1 space-x-3.5" >
347
- { ! projectSlug && (
348
- < span className = "text-base text-gray-600 dark:text-gray-400 font-semibold" >
349
- { team ?. name || userFullName }
350
- </ span >
351
- ) }
352
- < img
353
- alt = ""
354
- aria-label = "Toggle team selection menu"
355
- className = "filter-grayscale"
356
- style = { { marginTop : 5 , marginBottom : 5 } }
357
- src = { CaretUpDown }
358
- />
345
+ < div className = "flex h-full pl-0 pr-1 py-1.5 text-gray-50" >
346
+ < svg width = "20" height = "20" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
347
+ < path
348
+ fill-rule = "evenodd"
349
+ clip-rule = "evenodd"
350
+ d = "M5.293 7.293a1 1 0 0 1 1.414 0L10 10.586l3.293-3.293a1 1 0 1 1 1.414 1.414l-4 4a1 1 0 0 1-1.414 0l-4-4a1 1 0 0 1 0-1.414Z"
351
+ fill = "#78716C"
352
+ />
353
+ < title > Toggle team selection menu</ title >
354
+ </ svg >
359
355
</ div >
360
356
</ ContextMenu >
361
357
</ div >
362
- { projectSlug && (
363
- < div className = "flex h-full rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 px-2 py-1" >
364
- < Link to = { `${ teamOrUserSlug } /${ projectSlug } ${ prebuildId ? "/prebuilds" : "" } ` } >
365
- < span className = "text-base text-gray-600 dark:text-gray-400 font-semibold" >
366
- { project ?. name }
367
- </ span >
368
- </ Link >
369
- </ div >
358
+ { projectSlug && ! prebuildId && (
359
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } ${ prebuildId ? "/prebuilds" : "" } ` } >
360
+ < span className = " flex h-full text-base text-gray-50 bg-gray-800 dark:bg-gray-50 dark:text-gray-900 font-semibold ml-2 px-3 py-1 rounded-2xl border-gray-100" >
361
+ { project ?. name }
362
+ </ span >
363
+ </ Link >
370
364
) }
371
365
{ prebuildId && (
372
- < div className = "flex h-full ml-2 py-1" >
373
- < img alt = "" className = "mr-3 filter-grayscale m-auto transform -rotate-90" src = { CaretDown } />
374
- < span className = "text-base text-gray-600 dark:text-gray-400 font-semibold" > { prebuildId } </ span >
366
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } ${ prebuildId ? "/prebuilds" : "" } ` } >
367
+ < span className = " flex h-full text-base text-gray-500 bg-gray-50 hover:bg-gray-100 dark:text-gray-400 dark:bg-gray-800 dark:hover:bg-gray-700 font-semibold ml-2 px-3 py-1 rounded-2xl border-gray-100" >
368
+ { project ?. name }
369
+ </ span >
370
+ </ Link >
371
+ ) }
372
+ { prebuildId && (
373
+ < div className = "flex ml-2" >
374
+ < div className = "flex pl-0 pr-1 py-1.5" >
375
+ < svg width = "20" height = "20" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
376
+ < path
377
+ fill-rule = "evenodd"
378
+ clip-rule = "evenodd"
379
+ d = "M7.293 14.707a1 1 0 0 1 0-1.414L10.586 10 7.293 6.707a1 1 0 1 1 1.414-1.414l4 4a1 1 0 0 1 0 1.414l-4 4a1 1 0 0 1-1.414 0Z"
380
+ fill = "#78716C"
381
+ />
382
+ </ svg >
383
+ </ div >
384
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } /${ prebuildId } ` } >
385
+ < span className = "flex h-full text-base text-gray-50 bg-gray-800 dark:bg-gray-50 dark:text-gray-900 font-semibold px-3 py-1 rounded-2xl border-gray-100" >
386
+ { prebuildId . substring ( 0 , 8 ) . trimEnd ( ) }
387
+ </ span >
388
+ </ Link >
375
389
</ div >
376
390
) }
377
391
</ div >
@@ -380,11 +394,8 @@ export default function Menu() {
380
394
381
395
return (
382
396
< >
383
- < header
384
- className = { `app-container flex flex-col pt-4 space-y-4 ${ isMinimalUI || ! ! prebuildId ? "pb-4" : "" } ` }
385
- data-analytics = '{"button_type":"menu"}'
386
- >
387
- < div className = "flex h-10" >
397
+ < header className = "app-container flex flex-col pt-4 space-y-4" data-analytics = '{"button_type":"menu"}' >
398
+ < div className = "flex h-10 mb-3" >
388
399
< div className = "flex justify-between items-center pr-3" >
389
400
< Link to = "/" >
390
401
< img src = { gitpodIcon } className = "h-6" alt = "Gitpod's logo" />
@@ -393,7 +404,7 @@ export default function Menu() {
393
404
</ div >
394
405
< div className = "flex flex-1 items-center w-auto" id = "menu" >
395
406
< nav className = "flex-1" >
396
- < ul className = "flex flex-1 items-center justify-between text-base text-gray-700 space-x-2" >
407
+ < ul className = "flex flex-1 items-center justify-between text-base text-gray-500 dark:text-gray-400 space-x-2" >
397
408
< li className = "flex-1" > </ li >
398
409
{ ! isMinimalUI &&
399
410
rightMenu . map ( ( entry ) => (
@@ -427,6 +438,10 @@ export default function Menu() {
427
438
title : "Settings" ,
428
439
link : "/settings" ,
429
440
} ,
441
+ {
442
+ title : "Docs" ,
443
+ link : "https://www.gitpod.io/docs/" ,
444
+ } ,
430
445
{
431
446
title : "Help" ,
432
447
href : "https://www.gitpod.io/support" ,
@@ -448,7 +463,7 @@ export default function Menu() {
448
463
</ div >
449
464
{ isFeedbackFormVisible && < FeedbackFormModal onClose = { onFeedbackFormClose } /> }
450
465
</ div >
451
- { ! isMinimalUI && ! prebuildId && (
466
+ { ! isMinimalUI && ! prebuildId && ! isWorkspacesUI && (
452
467
< nav className = "flex" >
453
468
{ leftMenu . map ( ( entry : Entry ) => (
454
469
< TabMenuItem
0 commit comments