Skip to content

Commit c889e71

Browse files
authored
Merge pull request #292 from code0-tech/feat/#288
Updates, deletions and queries should correctly use dependencies
2 parents c2073d0 + 0395786 commit c889e71

10 files changed

Lines changed: 42 additions & 123 deletions

File tree

src/app/(dashboard)/layout.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,9 @@ import Image from "next/image";
1717
import {Application, ApplicationService} from "@edition/application/services/Application.service";
1818
import {useUserSession} from "@edition/user/hooks/User.session.hook";
1919
import {OrganizationView} from "@edition/organization/services/Organization.view";
20-
import {MemberView} from "@edition/member/services/Member.view";
2120
import {RoleView} from "@edition/role/services/Role.view";
2221
import {Layout} from "@code0-tech/pictor/dist/components/layout/Layout";
23-
import {Namespace, NamespaceProject, Runtime, User} from "@code0-tech/sagittarius-graphql-types";
22+
import {Namespace, NamespaceMember, NamespaceProject, Runtime, User} from "@code0-tech/sagittarius-graphql-types";
2423
import {ApplicationMiddlewareComponent} from "@edition/application/components/ApplicationMiddlewareComponent";
2524

2625
interface ApplicationLayoutProps {
@@ -39,7 +38,7 @@ const ApplicationLayout: React.FC<ApplicationLayoutProps> = ({children, bar, tab
3938

4039
const user = usePersistentReactiveArrayService<User, UserService>(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store))
4140
const organization = usePersistentReactiveArrayService<OrganizationView, OrganizationService>(`dashboard::organizations::${currentSession?.id}`, (store) => new OrganizationService(graphqlClient, store))
42-
const member = usePersistentReactiveArrayService<MemberView, MemberService>(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store))
41+
const member = usePersistentReactiveArrayService<NamespaceMember, MemberService>(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store))
4342
const namespace = usePersistentReactiveArrayService<Namespace, NamespaceService>(`dashboard::namespaces::${currentSession?.id}`, (store) => new NamespaceService(graphqlClient, store))
4443
const runtime = usePersistentReactiveArrayService<Runtime, RuntimeService>(`dashboard::global_runtimes::${currentSession?.id}`, (store) => new RuntimeService(graphqlClient, store))
4544
const project = usePersistentReactiveArrayService<NamespaceProject, ProjectService>(`dashboard::projects::${currentSession?.id}`, (store) => new ProjectService(graphqlClient, store))

src/app/(flow)/layout.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
Flow,
1111
FlowType,
1212
FunctionDefinition,
13-
Namespace,
13+
Namespace, NamespaceMember,
1414
NamespaceProject,
1515
Runtime, RuntimeModule, User
1616
} from "@code0-tech/sagittarius-graphql-types";
@@ -28,7 +28,6 @@ import {DatatypeService} from "@edition/datatype/services/Datatype.service";
2828
import {FlowTypeService} from "@edition/flowtype/services/FlowType.service";
2929
import Image from "next/image";
3030
import {OrganizationView} from "@edition/organization/services/Organization.view";
31-
import {MemberView} from "@edition/member/services/Member.view";
3231
import {RoleView} from "@edition/role/services/Role.view";
3332
import {useUserSession} from "@edition/user/hooks/User.session.hook";
3433
import {Layout} from "@code0-tech/pictor/dist/components/layout/Layout";
@@ -58,7 +57,7 @@ export default function FlowLayout({bar, tab, children}: {
5857

5958
const user = usePersistentReactiveArrayService<User, UserService>(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store))
6059
const organization = usePersistentReactiveArrayService<OrganizationView, OrganizationService>(`dashboard::organizations::${currentSession?.id}`, (store) => new OrganizationService(graphqlClient, store))
61-
const member = usePersistentReactiveArrayService<MemberView, MemberService>(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store))
60+
const member = usePersistentReactiveArrayService<NamespaceMember, MemberService>(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store))
6261
const namespace = usePersistentReactiveArrayService<Namespace, NamespaceService>(`dashboard::namespaces::${currentSession?.id}`, (store) => new NamespaceService(graphqlClient, store))
6362
const runtime = usePersistentReactiveArrayService<Runtime, RuntimeService>(`dashboard::global_runtimes::${currentSession?.id}`, (store) => new RuntimeService(graphqlClient, store))
6463
const project = usePersistentReactiveArrayService<NamespaceProject, ProjectService>(`dashboard::projects::${currentSession?.id}`, (store) => new ProjectService(graphqlClient, store))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export const MemberDataTableComponent: React.FC<MemberDataTableComponentProps> =
4848
</Text>
4949
</DataTableColumn>}
5050
onSelect={(item) => item && onSelect?.(item)}
51-
data={members.map(u => u.json()).filter(preFilter)}>
51+
data={members.map(u => u).filter(preFilter)}>
5252
{(member, index) => {
5353
return <MemberDataTableRowComponent memberId={member.id}/>
5454
}}

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

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {startTransition} from "react";
1+
import React from "react";
22
import {NamespaceMember} from "@code0-tech/sagittarius-graphql-types";
33
import {
44
Avatar,
@@ -32,6 +32,7 @@ import {MemberService} from "@edition/member/services/Member.service";
3232
import {RoleService} from "@edition/role/services/Role.service";
3333
import {RolePermissionComponent} from "@edition/role/components/RolePermissionComponent";
3434
import {IconDotsVertical, IconUserCog, IconUserOff, IconX} from "@tabler/icons-react";
35+
import {addIslandSuccessNotification} from "@code0-tech/pictor/dist/components/island/Island.hook";
3536

3637
export interface MemberDataTableRowComponentProps {
3738
memberId: NamespaceMember['id']
@@ -60,7 +61,7 @@ export const MemberDataTableRowComponent: React.FC<MemberDataTableRowComponentPr
6061

6162
const assignedRoles = React.useMemo(
6263
() => member?.roles?.nodes?.map(role => roleService.getById(role?.id, {namespaceId: member?.namespace?.id})) || [],
63-
[roleStore, member]
64+
[roleStore, member?.roles?.nodes?.length]
6465
)
6566

6667
const [localAssignedRoles, setLocalAssignedRoles] = React.useState(assignedRoles)
@@ -77,19 +78,29 @@ export const MemberDataTableRowComponent: React.FC<MemberDataTableRowComponentPr
7778

7879

7980
const memberAssignRoles = React.useCallback(() => {
80-
startTransition(() => {
81-
memberService.memberAssignRoles({
82-
memberId: member?.id!,
83-
roleIds: localAssignedRoles.map(r => r?.id!)
84-
})
81+
memberService.memberAssignRoles({
82+
memberId: member?.id!,
83+
roleIds: localAssignedRoles.map(r => r?.id!)
84+
}).then(payload => {
85+
if ((payload?.errors?.length ?? 0) <= 0) {
86+
addIslandSuccessNotification({
87+
message: "Updated roles on member"
88+
})
89+
90+
}
8591
})
8692
}, [localAssignedRoles, member])
8793

8894
const memberDelete = React.useCallback(() => {
89-
startTransition(() => {
90-
memberService.memberDelete({
91-
namespaceMemberId: member?.id!
92-
})
95+
memberService.memberDelete({
96+
namespaceMemberId: member?.id!
97+
}).then(payload => {
98+
if ((payload?.errors?.length ?? 0) <= 0) {
99+
addIslandSuccessNotification({
100+
message: "Removed member"
101+
})
102+
103+
}
93104
})
94105
}, [member])
95106

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

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,22 @@ import memberAssignRoleMutation from "./mutations/Member.assignRoles.mutation.gr
1919
import memberDeleteMutation from "./mutations/Member.delete.mutation.graphql"
2020
import memberInviteMutation from "./mutations/Member.invite.mutation.graphql"
2121
import {View} from "@code0-tech/pictor/dist/utils/view";
22-
import {MemberView} from "@edition/member/services/Member.view";
2322

2423
export type MemberDependencies = {
2524
namespaceId: Namespace['id']
2625
}
2726

28-
export class MemberService extends ReactiveArrayService<MemberView, MemberDependencies> {
27+
export class MemberService extends ReactiveArrayService<NamespaceMember, MemberDependencies> {
2928

3029
private readonly client: GraphqlClient
3130
private i = 0
3231

33-
constructor(client: GraphqlClient, store: ReactiveArrayStore<View<MemberView>>) {
32+
constructor(client: GraphqlClient, store: ReactiveArrayStore<View<NamespaceMember>>) {
3433
super(store)
3534
this.client = client
3635
}
3736

38-
values(dependencies?: MemberDependencies): MemberView[] {
37+
values(dependencies?: MemberDependencies): NamespaceMember[] {
3938
const members = super.values()
4039
if (!dependencies?.namespaceId) return members
4140

@@ -56,7 +55,7 @@ export class MemberService extends ReactiveArrayService<MemberView, MemberDepend
5655
const nodes = res.data?.namespace?.members?.nodes ?? []
5756
nodes.forEach(member => {
5857
if (member && !this.hasById(member.id)) {
59-
this.set(this.i++, new View(new MemberView(member)))
58+
this.set(this.i++, new View(member))
6059
}
6160
})
6261
})
@@ -70,11 +69,11 @@ export class MemberService extends ReactiveArrayService<MemberView, MemberDepend
7069
return member !== undefined
7170
}
7271

73-
getById(id: NamespaceMember['id'], dependencies?: MemberDependencies): MemberView | undefined {
72+
getById(id: NamespaceMember['id'], dependencies?: MemberDependencies): NamespaceMember | undefined {
7473
return this.values(dependencies).find(member => member && member.id === id);
7574
}
7675

77-
getByNamespaceIdAndUserId(namespaceId: Namespace['id'], userId: User['id']): MemberView | undefined {
76+
getByNamespaceIdAndUserId(namespaceId: Namespace['id'], userId: User['id']): NamespaceMember | undefined {
7877
return this.values({namespaceId: namespaceId}).find(member => member.namespace?.id === namespaceId && member.user?.id === userId)
7978
}
8079

@@ -86,18 +85,17 @@ export class MemberService extends ReactiveArrayService<MemberView, MemberDepend
8685
}
8786
})
8887

89-
//TODO: should be done by a new query
9088
if (result.data && result.data.namespacesMembersAssignRoles) {
9189
const currentMember = this.getById(payload.memberId)
9290
const index = super.values().findIndex(m => m.id === payload.memberId)
9391

94-
const newMember = new MemberView({
95-
...currentMember?.json(),
92+
const newMember: NamespaceMember = {
93+
...currentMember,
9694
roles: {
9795
count: payload.roleIds.length,
9896
nodes: payload.roleIds.map(roleId => ({ id: roleId }))
9997
}
100-
})
98+
}
10199

102100
this.set(index, new View(newMember))
103101
}
@@ -115,7 +113,7 @@ export class MemberService extends ReactiveArrayService<MemberView, MemberDepend
115113

116114
if (result.data && result.data.namespacesMembersDelete && result.data.namespacesMembersDelete.namespaceMember) {
117115
const member = result.data.namespacesMembersDelete.namespaceMember
118-
const index = this.values().findIndex(m => m.id === member.id)
116+
const index = super.values().findIndex(m => m.id == member.id)
119117
this.delete(index)
120118
}
121119

@@ -132,7 +130,7 @@ export class MemberService extends ReactiveArrayService<MemberView, MemberDepend
132130

133131
if (result.data && result.data.namespacesMembersInvite && result.data.namespacesMembersInvite.namespaceMember) {
134132
const member = result.data.namespacesMembersInvite.namespaceMember
135-
this.set(this.i++, new View(new MemberView(member)))
133+
this.set(this.i++, new View(member))
136134
}
137135

138136
return result.data?.namespacesMembersInvite ?? undefined

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

Lines changed: 0 additions & 85 deletions
This file was deleted.

src/packages/ce/src/member/services/fragments/Member.fragment.graphql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ fragment Member on NamespaceMember {
77
nodes {
88
__typename
99
id
10-
name
1110
}
1211
pageInfo {
1312
endCursor

src/packages/ce/src/organization/components/OrganizationDataTableComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const OrganizationDataTableComponent: React.FC<OrganizationDataTableCompo
3838
namespace: {
3939
...o.namespace,
4040
members: {
41-
nodes: members.map(m => m.json()),
41+
nodes: members,
4242
}
4343
}
4444
}

src/packages/ce/src/role/services/Role.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ export class RoleService extends ReactiveArrayService<RoleView, RoleDependencies
186186

187187
if (result.data && result.data.namespacesRolesDelete && result.data.namespacesRolesDelete.namespaceRole) {
188188
const role = result.data.namespacesRolesDelete.namespaceRole
189-
const index = this.values({namespaceId: role?.namespace?.id}).findIndex(o => o.id === role.id)
189+
const index = super.values().findIndex(o => o.id == role.id)
190190
this.delete(index)
191191

192192
}

src/packages/ce/src/runtime/services/Runtime.service.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,11 @@ export class RuntimeService extends ReactiveArrayService<Runtime, RuntimeDepende
4444
return this.values().find(runtime => runtime && runtime.id === id);
4545
}
4646

47-
//TODO: rework to be able to get all runtimes that you can access. If no namespace id is provided just get the global runtiimes
48-
// TODO: if namespace id is provided get the runtimes for this namespace and also the global runtimes
4947
values(dependencies?: RuntimeDependencies): Runtime[] {
5048
const runtimes = super.values()
5149

5250
if (!dependencies?.namespaceId) {
53-
if (runtimes.length === 0) {
51+
if (runtimes.length <= 0) {
5452
this.client.query<Query>({
5553
query: globalRuntimesQuery,
5654
variables: {
@@ -73,7 +71,7 @@ export class RuntimeService extends ReactiveArrayService<Runtime, RuntimeDepende
7371
const namespaceId = dependencies.namespaceId
7472
const filtered = runtimes.filter(r => r.namespace?.id === namespaceId)
7573

76-
if (filtered.length === 0) {
74+
if (filtered.length <= 0) {
7775
this.client.query<Query>({
7876
query: namespaceRuntimesQuery,
7977
variables: {

0 commit comments

Comments
 (0)