Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit307538b

Browse files
committed
fix: Make the workspace URL pretty
This adds the `@username/workspacename` format to theworkspace page!
1 parent1a39931 commit307538b

File tree

5 files changed

+37
-32
lines changed

5 files changed

+37
-32
lines changed

‎site/src/AppRouter.tsx

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,6 @@ export const AppRouter: FC = () => (
6565
</RequireAuth>
6666
}
6767
/>
68-
69-
<Routepath=":workspace">
70-
<Route
71-
index
72-
element={
73-
<AuthAndFrame>
74-
<WorkspacePage/>
75-
</AuthAndFrame>
76-
}
77-
/>
78-
<Route
79-
path="schedule"
80-
element={
81-
<RequireAuth>
82-
<WorkspaceSchedulePage/>
83-
</RequireAuth>
84-
}
85-
/>
86-
</Route>
8768
</Route>
8869

8970
<Routepath="templates">
@@ -142,6 +123,23 @@ export const AppRouter: FC = () => (
142123

143124
<Routepath="/@:username">
144125
<Routepath=":workspace">
126+
<Route
127+
index
128+
element={
129+
<AuthAndFrame>
130+
<WorkspacePage/>
131+
</AuthAndFrame>
132+
}
133+
/>
134+
<Route
135+
path="schedule"
136+
element={
137+
<RequireAuth>
138+
<WorkspaceSchedulePage/>
139+
</RequireAuth>
140+
}
141+
/>
142+
145143
<Route
146144
path="terminal"
147145
element={

‎site/src/pages/WorkspacePage/WorkspacePage.test.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ import { WorkspacePage } from "./WorkspacePage"
2727

2828
// It renders the workspace page and waits for it be loaded
2929
constrenderWorkspacePage=async()=>{
30-
renderWithAuth(<WorkspacePage/>,{route:`/workspaces/${MockWorkspace.id}`,path:"/workspaces/:workspace"})
30+
renderWithAuth(<WorkspacePage/>,{
31+
route:`/@${MockWorkspace.owner_name}/${MockWorkspace.name}`,
32+
path:"/@:username/:workspace",
33+
})
3134
awaitscreen.findByText(MockWorkspace.name)
3235
}
3336

@@ -47,7 +50,7 @@ const testButton = async (label: string, actionMock: jest.SpyInstance) => {
4750

4851
consttestStatus=async(mock:Workspace,label:string)=>{
4952
server.use(
50-
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`,(req,res,ctx)=>{
53+
rest.get(`/api/v2/users/:userId/workspace/${MockWorkspace.name}`,(req,res,ctx)=>{
5154
returnres(ctx.status(200),ctx.json(mock))
5255
}),
5356
)
@@ -87,7 +90,7 @@ describe("Workspace Page", () => {
8790
})
8891
it("requests a start job when the user presses Start",async()=>{
8992
server.use(
90-
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`,(req,res,ctx)=>{
93+
rest.get(`/api/v2/users/:userId/workspace/${MockWorkspace.name}`,(req,res,ctx)=>{
9194
returnres(ctx.status(200),ctx.json(MockStoppedWorkspace))
9295
}),
9396
)
@@ -98,7 +101,7 @@ describe("Workspace Page", () => {
98101
})
99102
it("requests cancellation when the user presses Cancel",async()=>{
100103
server.use(
101-
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`,(req,res,ctx)=>{
104+
rest.get(`/api/v2/users/:userId/workspace/${MockWorkspace.name}`,(req,res,ctx)=>{
102105
returnres(ctx.status(200),ctx.json(MockStartingWorkspace))
103106
}),
104107
)
@@ -110,7 +113,7 @@ describe("Workspace Page", () => {
110113
it("requests a template when the user presses Update",async()=>{
111114
constgetTemplateMock=jest.spyOn(api,"getTemplate").mockResolvedValueOnce(MockTemplate)
112115
server.use(
113-
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`,(req,res,ctx)=>{
116+
rest.get(`/api/v2/users/:userId/workspace/${MockWorkspace.name}`,(req,res,ctx)=>{
114117
returnres(ctx.status(200),ctx.json(MockOutdatedWorkspace))
115118
}),
116119
)
@@ -159,7 +162,10 @@ describe("Workspace Page", () => {
159162

160163
describe("Resources",()=>{
161164
it("shows the status of each agent in each resource",async()=>{
162-
renderWithAuth(<WorkspacePage/>,{route:`/workspaces/${MockWorkspace.id}`,path:"/workspaces/:workspace"})
165+
renderWithAuth(<WorkspacePage/>,{
166+
route:`/api/v2/users/:userId/workspace/${MockWorkspace.name}`,
167+
path:"/@:userId/:workspace",
168+
})
163169
constagent1Names=awaitscreen.findAllByText(MockWorkspaceAgent.name)
164170
expect(agent1Names.length).toEqual(2)
165171
constagent2Names=awaitscreen.findAllByText(MockWorkspaceAgentDisconnected.name)

‎site/src/pages/WorkspacePage/WorkspacePage.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ import { workspaceMachine } from "../../xServices/workspace/workspaceXService"
1414
import{workspaceScheduleBannerMachine}from"../../xServices/workspaceSchedule/workspaceScheduleBannerXService"
1515

1616
exportconstWorkspacePage:React.FC=()=>{
17-
const{workspace:workspaceQueryParam}=useParams()
17+
const{username:usernameQueryParam,workspace:workspaceQueryParam}=useParams()
1818
constnavigate=useNavigate()
19-
constworkspaceId=firstOrItem(workspaceQueryParam,null)
19+
constusername=firstOrItem(usernameQueryParam,null)
20+
constworkspaceName=firstOrItem(workspaceQueryParam,null)
2021

2122
const[workspaceState,workspaceSend]=useMachine(workspaceMachine)
2223
const{ workspace, resources, getWorkspaceError, getResourcesError, builds}=workspaceState.context
@@ -28,8 +29,8 @@ export const WorkspacePage: React.FC = () => {
2829
* workspaceSend should not change.
2930
*/
3031
useEffect(()=>{
31-
workspaceId&&workspaceSend({type:"GET_WORKSPACE",workspaceId})
32-
},[workspaceId,workspaceSend])
32+
username&&workspaceName&&workspaceSend({type:"GET_WORKSPACE",username, workspaceName})
33+
},[username,workspaceName,workspaceSend])
3334

3435
if(workspaceState.matches("error")){
3536
return<ErrorSummaryerror={getWorkspaceError}/>

‎site/src/pages/WorkspacesPage/WorkspacesPageView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export const WorkspacesPageView: FC<WorkspacesPageViewProps> = ({ loading, works
7474
<AvatarData
7575
title={workspace.name}
7676
subtitle={workspace.owner_name}
77-
link={`/workspaces/${workspace.id}`}
77+
link={`/@${workspace.owner_name}/${workspace.name}`}
7878
/>
7979
</TableCell>
8080
<TableCell>{workspace.template_name}</TableCell>

‎site/src/xServices/workspace/workspaceXService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface WorkspaceContext {
3737
}
3838

3939
exporttypeWorkspaceEvent=
40-
|{type:"GET_WORKSPACE";workspaceId:string}
40+
|{type:"GET_WORKSPACE";workspaceName:string;username:string}
4141
|{type:"START"}
4242
|{type:"STOP"}
4343
|{type:"ASK_DELETE"}
@@ -431,7 +431,7 @@ export const workspaceMachine = createMachine(
431431
},
432432
services:{
433433
getWorkspace:async(_,event)=>{
434-
returnawaitAPI.getWorkspace(event.workspaceId)
434+
returnawaitAPI.getWorkspaceByOwnerAndName(event.username,event.workspaceName)
435435
},
436436
getTemplate:async(context)=>{
437437
if(context.workspace){

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp