@@ -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,9 @@ 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" ,
254
+ alternatives : [ "/" ] ,
260
255
} ,
261
256
] ;
262
257
@@ -269,24 +264,29 @@ export default function Menu() {
269
264
} ;
270
265
const renderTeamMenu = ( ) => {
271
266
return (
272
- < div className = "flex p-1 pl-3 " >
267
+ < div className = "flex p-1 pl-3" >
273
268
{ 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 >
269
+ < Link to = { team ? `/t/${ team . slug } /projects` : `/projects` } >
270
+ < 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" >
271
+ { team ?. name || userFullName }
272
+ </ span >
273
+ </ Link >
281
274
) }
282
- < div className = "flex h-full rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800" >
275
+ { ! projectSlug && (
276
+ < Link to = "/projects" >
277
+ < 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" >
278
+ { team ?. name || userFullName }
279
+ </ span >
280
+ </ Link >
281
+ ) }
282
+ < 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
283
< ContextMenu
284
284
classes = "w-64 left-0"
285
285
menuEntries = { [
286
286
{
287
287
title : userFullName ,
288
288
customContent : (
289
- < div className = "w-full text-gray-400 flex flex-col" >
289
+ < div className = "w-full text-gray-500 flex flex-col" >
290
290
< span className = "text-gray-800 dark:text-gray-100 text-base font-semibold" >
291
291
{ userFullName }
292
292
</ span >
@@ -343,35 +343,50 @@ export default function Menu() {
343
343
} ,
344
344
] }
345
345
>
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
- />
346
+ < div className = "flex h-full pl-0 pr-1 py-1.5 text-gray-50" >
347
+ < svg width = "20" height = "20" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
348
+ < path
349
+ fill-rule = "evenodd"
350
+ clip-rule = "evenodd"
351
+ 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"
352
+ fill = "#78716C"
353
+ />
354
+ < title > Toggle team selection menu</ title >
355
+ </ svg >
359
356
</ div >
360
357
</ ContextMenu >
361
358
</ 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 >
359
+ { projectSlug && ! prebuildId && (
360
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } ${ prebuildId ? "/prebuilds" : "" } ` } >
361
+ < 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" >
362
+ { project ?. name }
363
+ </ span >
364
+ </ Link >
370
365
) }
371
366
{ 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 >
367
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } ${ prebuildId ? "/prebuilds" : "" } ` } >
368
+ < 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" >
369
+ { project ?. name }
370
+ </ span >
371
+ </ Link >
372
+ ) }
373
+ { prebuildId && (
374
+ < div className = "flex ml-2" >
375
+ < div className = "flex pl-0 pr-1 py-1.5" >
376
+ < svg width = "20" height = "20" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
377
+ < path
378
+ fill-rule = "evenodd"
379
+ clip-rule = "evenodd"
380
+ 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"
381
+ fill = "#78716C"
382
+ />
383
+ </ svg >
384
+ </ div >
385
+ < Link to = { `${ teamOrUserSlug } /${ projectSlug } /${ prebuildId } ` } >
386
+ < 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" >
387
+ { prebuildId . substring ( 0 , 8 ) . trimEnd ( ) }
388
+ </ span >
389
+ </ Link >
375
390
</ div >
376
391
) }
377
392
</ div >
@@ -380,11 +395,8 @@ export default function Menu() {
380
395
381
396
return (
382
397
< >
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" >
398
+ < header className = "app-container flex flex-col pt-4 space-y-4" data-analytics = '{"button_type":"menu"}' >
399
+ < div className = "flex h-10 mb-3" >
388
400
< div className = "flex justify-between items-center pr-3" >
389
401
< Link to = "/" >
390
402
< img src = { gitpodIcon } className = "h-6" alt = "Gitpod's logo" />
@@ -393,7 +405,7 @@ export default function Menu() {
393
405
</ div >
394
406
< div className = "flex flex-1 items-center w-auto" id = "menu" >
395
407
< nav className = "flex-1" >
396
- < ul className = "flex flex-1 items-center justify-between text-base text-gray-700 space-x-2" >
408
+ < ul className = "flex flex-1 items-center justify-between text-base text-gray-500 dark:text-gray-400 space-x-2" >
397
409
< li className = "flex-1" > </ li >
398
410
{ ! isMinimalUI &&
399
411
rightMenu . map ( ( entry ) => (
@@ -427,6 +439,10 @@ export default function Menu() {
427
439
title : "Settings" ,
428
440
link : "/settings" ,
429
441
} ,
442
+ {
443
+ title : "Docs" ,
444
+ link : "https://www.gitpod.io/docs/" ,
445
+ } ,
430
446
{
431
447
title : "Help" ,
432
448
href : "https://www.gitpod.io/support" ,
@@ -448,7 +464,7 @@ export default function Menu() {
448
464
</ div >
449
465
{ isFeedbackFormVisible && < FeedbackFormModal onClose = { onFeedbackFormClose } /> }
450
466
</ div >
451
- { ! isMinimalUI && ! prebuildId && (
467
+ { ! isMinimalUI && ! prebuildId && ! isWorkspacesUI && (
452
468
< nav className = "flex" >
453
469
{ leftMenu . map ( ( entry : Entry ) => (
454
470
< TabMenuItem
0 commit comments