Skip to content

Commit c3a8d93

Browse files
authored
Merge pull request #233 from code0-tech/feat/#195
Display all available modules on runtime column and within settings
2 parents a4651e8 + d293fa1 commit c3a8d93

5 files changed

Lines changed: 72 additions & 36 deletions

File tree

src/app/(flow)/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export default function FlowLayout({bar, tab, children}: {
7878
functions[1].values({namespaceId, projectId, runtimeId})
7979
datatype[1].values({namespaceId, projectId, runtimeId})
8080
flowtype[1].values({namespaceId, projectId, runtimeId})
81-
module[1].values({namespaceId, projectId})
81+
module[1].values({namespaceId, projectId, runtimeId})
8282
}, [runtimeId, namespaceId, projectId, currentSession, flow, functions, datatype, flowtype])
8383

8484
return <ContextStoreProvider

src/packages/ce/src/module/pages/ModuleConfigurationPage.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,6 @@ export const ModuleConfigurationPage: React.FC = () => {
6565
const projectId: NamespaceProject['id'] = `gid://sagittarius/NamespaceProject/${projectIndex}`
6666
const moduleId: RuntimeModule['id'] = `gid://sagittarius/RuntimeModule/${moduleIndex}`
6767

68-
const module = React.useMemo(
69-
() => moduleService.getById(moduleId, {
70-
namespaceId,
71-
projectId
72-
}),
73-
[moduleId, moduleStore, namespaceId, projectId]
74-
)
75-
7668
const project = React.useMemo(
7769
() => projectService.getById(projectId),
7870
[projectStore, projectId]
@@ -85,7 +77,16 @@ export const ModuleConfigurationPage: React.FC = () => {
8577

8678
const runtime = React.useMemo(
8779
() => runtimes.find((runtime) => runtime.modules?.nodes?.find(module => module?.id === moduleId)),
88-
[runtimes, module]
80+
[runtimes]
81+
)
82+
83+
const module = React.useMemo(
84+
() => moduleService.getById(moduleId, {
85+
namespaceId,
86+
projectId,
87+
runtimeId: runtime?.id
88+
}),
89+
[moduleId, moduleStore, namespaceId, projectId, runtime]
8990
)
9091

9192
const moduleConfigurationSchemas = module?.configurationDefinitions?.nodes?.map(moduleConfiguration => {

src/packages/ce/src/module/pages/ModulesPage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ export const ModulesPage: React.FC = () => {
4545
const modules = React.useMemo(
4646
() => moduleService.values({
4747
namespaceId,
48-
projectId
49-
}).filter(module => module.runtime?.id === project?.primaryRuntime?.id),
48+
projectId,
49+
runtimeId: project?.primaryRuntime?.id
50+
}),
5051
[params, namespaceId, projectId, moduleStore, project]
5152
)
5253

src/packages/ce/src/module/services/Module.service.ts

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import {ReactiveArrayService, ReactiveArrayStore} from "@code0-tech/pictor";
2-
import {Namespace, NamespaceProject, Query, RuntimeModule} from "@code0-tech/sagittarius-graphql-types";
2+
import {Namespace, NamespaceProject, Query, Runtime, RuntimeModule} from "@code0-tech/sagittarius-graphql-types";
33
import {GraphqlClient} from "@core/util/graphql-client";
44
import {View} from "@code0-tech/pictor/dist/utils/view";
55
import modulesQuery from "@edition/module/services/queries/Modules.query.graphql"
66

77
export type ModuleDependencies = {
88
namespaceId: Namespace['id']
99
projectId: NamespaceProject['id']
10+
runtimeId: Runtime['id']
1011
}
1112

1213
export class ModuleService extends ReactiveArrayService<RuntimeModule, ModuleDependencies> {
@@ -23,31 +24,35 @@ export class ModuleService extends ReactiveArrayService<RuntimeModule, ModuleDep
2324
const modules = super.values()
2425
if (!dependencies?.namespaceId || !dependencies.projectId) return modules
2526

26-
this.client.query<Query>({
27-
query: modulesQuery,
28-
variables: {
29-
namespaceId: dependencies?.namespaceId,
30-
projectId: dependencies.projectId,
31-
32-
firstRuntime: 50,
33-
afterRuntime: null,
34-
35-
firstModule: 50,
36-
afterModule: null,
37-
38-
firstConfiguration: 50,
39-
afterConfiguration: null
40-
}
41-
}).then(res => {
42-
const nodes = res.data?.namespace?.project?.runtimes?.nodes?.flatMap(runtime => runtime?.modules?.nodes ?? []) ?? []
43-
nodes.forEach(module => {
44-
if (module && !this.hasById(module.id)) {
45-
this.set(this.i++, new View(module))
27+
const filtered = modules.filter(m => m.runtime?.id === dependencies.runtimeId)
28+
29+
if (filtered.length <= 0) {
30+
this.client.query<Query>({
31+
query: modulesQuery,
32+
variables: {
33+
namespaceId: dependencies?.namespaceId,
34+
projectId: dependencies.projectId,
35+
36+
firstRuntime: 50,
37+
afterRuntime: null,
38+
39+
firstModule: 50,
40+
afterModule: null,
41+
42+
firstConfiguration: 50,
43+
afterConfiguration: null
4644
}
45+
}).then(res => {
46+
const nodes = res.data?.namespace?.project?.runtimes?.nodes?.flatMap(runtime => runtime?.modules?.nodes ?? []) ?? []
47+
nodes.forEach(module => {
48+
if (module && !this.hasById(module.id)) {
49+
this.set(this.i++, new View(module))
50+
}
51+
})
4752
})
48-
})
53+
}
4954

50-
return modules
55+
return filtered
5156
}
5257

5358
hasById(id: RuntimeModule["id"]): boolean {

src/packages/ce/src/runtime/components/RuntimeProjectDataTableRowComponent.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
MenuContent,
1212
MenuItem,
1313
MenuPortal,
14-
MenuTrigger,
14+
MenuTrigger, Spacing,
1515
Text,
1616
useService,
1717
useStore
@@ -20,6 +20,7 @@ import {RuntimeService} from "@edition/runtime/services/Runtime.service";
2020
import {formatDistanceToNow} from "date-fns";
2121
import {IconDotsVertical, IconServerSpark, IconX} from "@tabler/icons-react";
2222
import {ProjectService} from "@edition/project/services/Project.service";
23+
import {ModuleService} from "@edition/module/services/Module.service";
2324

2425
export interface RuntimeProjectDataTableRowComponentProps {
2526
projectId: NamespaceProject['id']
@@ -34,6 +35,8 @@ export const RuntimeProjectDataTableRowComponent: React.FC<RuntimeProjectDataTab
3435
const projectStore = useStore(ProjectService)
3536
const runtimeService = useService(RuntimeService)
3637
const runtimeStore = useStore(RuntimeService)
38+
const moduleService = useService(ModuleService)
39+
const moduleStore = useStore(ModuleService)
3740

3841
const runtime = React.useMemo(
3942
() => runtimeService.getById(runtimeId),
@@ -45,6 +48,11 @@ export const RuntimeProjectDataTableRowComponent: React.FC<RuntimeProjectDataTab
4548
[projectStore, projectId]
4649
)
4750

51+
const modules = React.useMemo(
52+
() =>moduleService.values({namespaceId: project?.namespace?.id, projectId: projectId, runtimeId: runtimeId}),
53+
[moduleStore, runtime]
54+
)
55+
4856
const makePrimary = React.useCallback(() => {
4957
startTransition(() => {
5058
projectService.projectUpdate({
@@ -91,6 +99,27 @@ export const RuntimeProjectDataTableRowComponent: React.FC<RuntimeProjectDataTab
9199
</Flex>
92100
</DataTableColumn>
93101
<DataTableColumn>
102+
<Text>
103+
Installed plugins
104+
</Text>
105+
<Spacing spacing={"xxs"}/>
106+
<Flex align={"center"} style={{gap: "0.35rem"}}>
107+
{
108+
modules.map(m => m.names?.[0].content).map((name, index) => {
109+
return index <= 5 ? <Badge color={"secondary"}>
110+
{name}
111+
</Badge> : index == 6 ? <Text>...</Text> : null
112+
})
113+
114+
}
115+
</Flex>
116+
117+
</DataTableColumn>
118+
<DataTableColumn>
119+
<Text>
120+
Status
121+
</Text>
122+
<Spacing spacing={"xxs"}/>
94123
<Badge color={runtime?.status === "CONNECTED" ? "success" : "error"} border>
95124
<Text style={{color: "inherit"}}>{runtime?.status}</Text>
96125
</Badge>

0 commit comments

Comments
 (0)