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

Commitf26f123

Browse files
authored
feat: route groups by name instead of id (#13692)
* feat: route groups by name instead of id* fix: update group navigation when name changes* fix: update isLoading and error checking* fix: fix format* fix: update isLoading and error* fix: cleanup
1 parent41e1383 commitf26f123

File tree

10 files changed

+58
-24
lines changed

10 files changed

+58
-24
lines changed

‎site/e2e/tests/groups/addMembers.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ test("add members", async ({ page, baseURL }) => {
2020
Array.from({length:numberOfMembers},()=>createUser(orgId)),
2121
);
2222

23-
awaitpage.goto(`${baseURL}/groups/${group.id}`,{
23+
awaitpage.goto(`${baseURL}/groups/${group.name}`,{
2424
waitUntil:"domcontentloaded",
2525
});
2626
awaitexpect(page).toHaveTitle(`${group.display_name} - Coder`);

‎site/e2e/tests/groups/removeGroup.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ test("remove group", async ({ page, baseURL }) => {
1111
constorgId=awaitgetCurrentOrgId();
1212
constgroup=awaitcreateGroup(orgId);
1313

14-
awaitpage.goto(`${baseURL}/groups/${group.id}`,{
14+
awaitpage.goto(`${baseURL}/groups/${group.name}`,{
1515
waitUntil:"domcontentloaded",
1616
});
1717
awaitexpect(page).toHaveTitle(`${group.display_name} - Coder`);

‎site/e2e/tests/groups/removeMember.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ test("remove member", async ({ page, baseURL }) => {
2121
]);
2222
awaitAPI.addMember(group.id,member.id);
2323

24-
awaitpage.goto(`${baseURL}/groups/${group.id}`,{
24+
awaitpage.goto(`${baseURL}/groups/${group.name}`,{
2525
waitUntil:"domcontentloaded",
2626
});
2727
awaitexpect(page).toHaveTitle(`${group.display_name} - Coder`);

‎site/src/api/api.ts‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,8 +1455,10 @@ class ApiMethods {
14551455
returnresponse.data;
14561456
};
14571457

1458-
getGroup=async(groupId:string):Promise<TypesGen.Group>=>{
1459-
constresponse=awaitthis.axios.get(`/api/v2/groups/${groupId}`);
1458+
getGroup=async(groupName:string):Promise<TypesGen.Group>=>{
1459+
constresponse=awaitthis.axios.get(
1460+
`/api/v2/organizations/default/groups/${groupName}`,
1461+
);
14601462
returnresponse.data;
14611463
};
14621464

‎site/src/api/queries/groups.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type {
99
constGROUPS_QUERY_KEY=["groups"];
1010
typeGroupSortOrder="asc"|"desc";
1111

12-
constgetGroupQueryKey=(groupId:string)=>["group",groupId];
12+
constgetGroupQueryKey=(groupName:string)=>["group",groupName];
1313

1414
exportconstgroups=(organizationId:string)=>{
1515
return{
@@ -18,10 +18,10 @@ export const groups = (organizationId: string) => {
1818
}satisfiesUseQueryOptions<Group[]>;
1919
};
2020

21-
exportconstgroup=(groupId:string)=>{
21+
exportconstgroup=(groupName:string)=>{
2222
return{
23-
queryKey:getGroupQueryKey(groupId),
24-
queryFn:()=>API.getGroup(groupId),
23+
queryKey:getGroupQueryKey(groupName),
24+
queryFn:()=>API.getGroup(groupName),
2525
};
2626
};
2727

‎site/src/pages/GroupsPage/CreateGroupPage.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const CreateGroupPage: FC = () => {
2424
organizationId,
2525
...data,
2626
});
27-
navigate(`/groups/${newGroup.id}`);
27+
navigate(`/groups/${newGroup.name}`);
2828
}}
2929
error={createGroupMutation.error}
3030
isLoading={createGroupMutation.isLoading}

‎site/src/pages/GroupsPage/GroupPage.tsx‎

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
removeMember,
2424
}from"api/queries/groups";
2525
importtype{Group,ReducedUser,User}from"api/typesGenerated";
26+
import{ErrorAlert}from"components/Alert/ErrorAlert";
2627
import{AvatarData}from"components/AvatarData/AvatarData";
2728
import{DeleteDialog}from"components/Dialogs/DeleteDialog/DeleteDialog";
2829
import{EmptyState}from"components/EmptyState/EmptyState";
@@ -53,16 +54,20 @@ import { isEveryoneGroup } from "utils/groups";
5354
import{pageTitle}from"utils/page";
5455

5556
exportconstGroupPage:FC=()=>{
56-
const{groupId}=useParams()as{groupId:string};
57+
const{groupName}=useParams()as{groupName:string};
5758
constqueryClient=useQueryClient();
5859
constnavigate=useNavigate();
59-
constgroupQuery=useQuery(group(groupId));
60+
constgroupQuery=useQuery(group(groupName));
6061
constgroupData=groupQuery.data;
61-
const{data:permissions}=useQuery(groupPermissions(groupId));
62+
const{data:permissions}=useQuery(
63+
groupData!==undefined
64+
?groupPermissions(groupData.id)
65+
:{enabled:false},
66+
);
6267
constaddMemberMutation=useMutation(addMember(queryClient));
6368
constdeleteGroupMutation=useMutation(deleteGroup(queryClient));
6469
const[isDeletingGroup,setIsDeletingGroup]=useState(false);
65-
constisLoading=!groupData||!permissions;
70+
constisLoading=groupQuery.isLoading||!groupData||!permissions;
6671
constcanUpdateGroup=permissions ?permissions.canUpdateGroup :false;
6772

6873
consthelmet=(
@@ -75,6 +80,10 @@ export const GroupPage: FC = () => {
7580
</Helmet>
7681
);
7782

83+
if(groupQuery.error){
84+
return<ErrorAlerterror={groupQuery.error}/>;
85+
}
86+
7887
if(isLoading){
7988
return(
8089
<>
@@ -83,6 +92,7 @@ export const GroupPage: FC = () => {
8392
</>
8493
);
8594
}
95+
constgroupId=groupData.id;
8696

8797
return(
8898
<>
@@ -137,6 +147,7 @@ export const GroupPage: FC = () => {
137147
userId:user.id,
138148
});
139149
reset();
150+
awaitgroupQuery.refetch();
140151
}catch(error){
141152
displayError(getErrorMessage(error,"Failed to add member."));
142153
}

‎site/src/pages/GroupsPage/GroupsPageView.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export const GroupsPageView: FC<GroupsPageViewProps> = ({
9696

9797
<Cond>
9898
{groups?.map((group)=>{
99-
constgroupPageLink=`/groups/${group.id}`;
99+
constgroupPageLink=`/groups/${group.name}`;
100100

101101
return(
102102
<TableRow

‎site/src/pages/GroupsPage/SettingsGroupPage.tsx‎

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,47 @@ import { useMutation, useQuery, useQueryClient } from "react-query";
44
import{useNavigate,useParams}from"react-router-dom";
55
import{getErrorMessage}from"api/errors";
66
import{group,patchGroup}from"api/queries/groups";
7+
import{ErrorAlert}from"components/Alert/ErrorAlert";
78
import{displayError}from"components/GlobalSnackbar/utils";
9+
import{Loader}from"components/Loader/Loader";
810
import{pageTitle}from"utils/page";
911
importSettingsGroupPageViewfrom"./SettingsGroupPageView";
1012

1113
exportconstSettingsGroupPage:FC=()=>{
12-
const{groupId}=useParams()as{groupId:string};
14+
const{groupName}=useParams()as{groupName:string};
1315
constqueryClient=useQueryClient();
14-
constgroupQuery=useQuery(group(groupId));
16+
constgroupQuery=useQuery(group(groupName));
17+
const{data:groupData, isLoading, error}=useQuery(group(groupName));
1518
constpatchGroupMutation=useMutation(patchGroup(queryClient));
1619
constnavigate=useNavigate();
1720

1821
constnavigateToGroup=()=>{
19-
navigate(`/groups/${groupId}`);
22+
navigate(`/groups/${groupName}`);
2023
};
2124

25+
consthelmet=(
26+
<Helmet>
27+
<title>{pageTitle("Settings Group")}</title>
28+
</Helmet>
29+
);
30+
31+
if(error){
32+
return<ErrorAlerterror={error}/>;
33+
}
34+
35+
if(isLoading||!groupData){
36+
return(
37+
<>
38+
{helmet}
39+
<Loader/>
40+
</>
41+
);
42+
}
43+
constgroupId=groupData.id;
44+
2245
return(
2346
<>
24-
<Helmet>
25-
<title>{pageTitle("Settings Group")}</title>
26-
</Helmet>
47+
{helmet}
2748

2849
<SettingsGroupPageView
2950
onCancel={navigateToGroup}
@@ -35,7 +56,7 @@ export const SettingsGroupPage: FC = () => {
3556
add_users:[],
3657
remove_users:[],
3758
});
38-
navigateToGroup();
59+
navigate(`/groups/${data.name}`,{replace:true});
3960
}catch(error){
4061
displayError(getErrorMessage(error,"Failed to update group"));
4162
}

‎site/src/router.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,8 @@ export const router = createBrowserRouter(
330330
</Route>
331331

332332
<Routepath="create"element={<CreateGroupPage/>}/>
333-
<Routepath=":groupId"element={<GroupPage/>}/>
334-
<Routepath=":groupId/settings"element={<SettingsGroupPage/>}/>
333+
<Routepath=":groupName"element={<GroupPage/>}/>
334+
<Routepath=":groupName/settings"element={<SettingsGroupPage/>}/>
335335
</Route>
336336

337337
<Routepath="/audit"element={<AuditPage/>}/>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp