Skip to content

Commit ca2e6a8

Browse files
authored
Merge pull request #299 from code0-tech/feat/#298
Roles assignment and removal isn't updating
2 parents 9e69661 + 0dd671b commit ca2e6a8

4 files changed

Lines changed: 33 additions & 8 deletions

File tree

src/packages/ce/src/member/components/MemberDataTableComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const MemberDataTableComponent: React.FC<MemberDataTableComponentProps> =
3737

3838
const members = React.useMemo(
3939
() => memberService.values({namespaceId: namespaceId}),
40-
[memberStore]
40+
[memberStore, namespaceId]
4141
)
4242

4343
return <DataTable filter={filter}

src/packages/ce/src/member/components/MemberDataTableRowComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export const MemberDataTableRowComponent: React.FC<MemberDataTableRowComponentPr
6161

6262
const assignedRoles = React.useMemo(
6363
() => member?.roles?.nodes?.map(role => roleService.getById(role?.id, {namespaceId: member?.namespace?.id})) || [],
64-
[roleStore, member?.roles?.nodes?.length]
64+
[roleStore, member]
6565
)
6666

6767
const [localAssignedRoles, setLocalAssignedRoles] = React.useState(assignedRoles)

src/packages/ce/src/member/services/Member.service.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
NamespacesMembersBulkInvitePayload,
1212
NamespacesMembersDeleteInput,
1313
NamespacesMembersDeletePayload,
14+
NamespaceRole,
1415
Query, User
1516
} from "@code0-tech/sagittarius-graphql-types"
1617
import {GraphqlClient} from "@core/util/graphql-client"
@@ -89,18 +90,39 @@ export class MemberService extends ReactiveArrayService<NamespaceMember, MemberD
8990
const currentMember = this.getById(payload.memberId)
9091
const index = super.values().findIndex(m => m.id === payload.memberId)
9192

93+
if (currentMember && index >= 0) {
94+
const newMember: NamespaceMember = {
95+
...currentMember,
96+
roles: {
97+
...currentMember.roles,
98+
count: payload.roleIds.length,
99+
nodes: payload.roleIds.map(roleId => ({ id: roleId }))
100+
}
101+
}
102+
103+
this.set(index, new View(newMember))
104+
}
105+
}
106+
107+
return result.data?.namespacesMembersAssignRoles ?? undefined
108+
}
109+
110+
removeRoleFromMembers(roleId: NamespaceRole['id']): void {
111+
super.values().forEach((member, index) => {
112+
if (!member?.roles?.nodes?.some(role => role?.id === roleId)) return
113+
114+
const nodes = member.roles.nodes.filter(role => role?.id !== roleId)
92115
const newMember: NamespaceMember = {
93-
...currentMember,
116+
...member,
94117
roles: {
95-
count: payload.roleIds.length,
96-
nodes: payload.roleIds.map(roleId => ({ id: roleId }))
118+
...member.roles,
119+
count: nodes.length,
120+
nodes: nodes
97121
}
98122
}
99123

100124
this.set(index, new View(newMember))
101-
}
102-
103-
return result.data?.namespacesMembersAssignRoles ?? undefined
125+
})
104126
}
105127

106128
async memberDelete(payload: NamespacesMembersDeleteInput): Promise<NamespacesMembersDeletePayload | undefined> {

src/packages/ce/src/role/views/RoleDeleteView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React from "react";
44
import {useParams, useRouter} from "next/navigation";
55
import {Button, Card, Flex, Spacing, Text, useService} from "@code0-tech/pictor";
66
import {RoleService} from "@edition/role/services/Role.service";
7+
import {MemberService} from "@edition/member/services/Member.service";
78
import type {NamespaceRole} from "@code0-tech/sagittarius-graphql-types";
89
import {TabContent} from "@code0-tech/pictor/dist/components/tab/Tab";
910
import {addIslandSuccessNotification} from "@code0-tech/pictor/dist/components/island/Island.hook";
@@ -13,6 +14,7 @@ export const RoleDeleteView: React.FC = () => {
1314
const params = useParams()
1415
const router = useRouter()
1516
const roleService = useService(RoleService)
17+
const memberService = useService(MemberService)
1618
const [, startTransition] = React.useTransition()
1719

1820
const namespaceIndex = params.namespaceId as any as number
@@ -25,6 +27,7 @@ export const RoleDeleteView: React.FC = () => {
2527
namespaceRoleId: roleId
2628
}).then(payload => {
2729
if ((payload?.errors?.length ?? 0) <= 0) {
30+
memberService.removeRoleFromMembers(roleId)
2831
addIslandSuccessNotification({
2932
message: "Deleted role"
3033
})

0 commit comments

Comments
 (0)