From f3c867e96d5e96c29fc45630dcdf9f1c1f9dca5b Mon Sep 17 00:00:00 2001 From: nicosammito Date: Fri, 15 May 2026 21:52:58 +0200 Subject: [PATCH 1/4] feat: update triangulum dependency to version 0.15.0 for improved functionality --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9cce8b59..e824d7cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@apollo/client": "^4.0.9", "@code0-tech/pictor": "^0.7.2", - "@code0-tech/triangulum": "^0.14.6", + "@code0-tech/triangulum": "^0.15.0", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lint": "^6.9.5", "@opentelemetry/api": "^1.9.1", @@ -373,17 +373,17 @@ } }, "node_modules/@code0-tech/sagittarius-graphql-types": { - "version": "0.0.0-experimental-2462825049-b5d5dce99ef9bf2f81df41d896ec36fa5e28559c", - "resolved": "https://registry.npmjs.org/@code0-tech/sagittarius-graphql-types/-/sagittarius-graphql-types-0.0.0-experimental-2462825049-b5d5dce99ef9bf2f81df41d896ec36fa5e28559c.tgz", - "integrity": "sha512-78JJyek0eswNfGKhIFfgzVXF7Io6pxzRJA/lg20nQIYmKJKlUijwRunEKYaheZSGULpAZ/7YJKqBcT2sfBGfow==", + "version": "0.0.0-experimental-2528981282-646152abf1c648db37127248f703b21a210a68da", + "resolved": "https://registry.npmjs.org/@code0-tech/sagittarius-graphql-types/-/sagittarius-graphql-types-0.0.0-experimental-2528981282-646152abf1c648db37127248f703b21a210a68da.tgz", + "integrity": "sha512-V9tiWkrqG8fW3sjpWQzo5ofsuDvJUlt49F+bnUlEtEiqTa2Lt2me8At5rYgW93HdsELsCzZ/ueFdUoRCELfyTQ==", "peer": true }, "node_modules/@code0-tech/triangulum": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/@code0-tech/triangulum/-/triangulum-0.14.6.tgz", - "integrity": "sha512-1SUZjIJd3SWWAU9Z/YkaEWMLvb3J2VY+NmECeoAwUzPfQfPUzhfYzsb+uc7xc/H2YVl9rOMK7foyHJCoYNbOVQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@code0-tech/triangulum/-/triangulum-0.15.0.tgz", + "integrity": "sha512-914Pxw8QJb3yVJPwxU8cBZKA7SGuZfIZXuHj7df9sueCEJ1qS5cKuSHThsgaaR+a7RctpN3mZVh2905oDGMoFg==", "peerDependencies": { - "@code0-tech/sagittarius-graphql-types": "0.0.0-experimental-2462825049-b5d5dce99ef9bf2f81df41d896ec36fa5e28559c", + "@code0-tech/sagittarius-graphql-types": "0.0.0-experimental-2528981282-646152abf1c648db37127248f703b21a210a68da", "@typescript/vfs": "^1.6.4", "lossless-json": "^4.3.0", "typescript": "^5.9.3 || ^6.0.2" diff --git a/package.json b/package.json index 9558a30d..fd2bd431 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "dependencies": { "@apollo/client": "^4.0.9", "@code0-tech/pictor": "^0.7.2", - "@code0-tech/triangulum": "^0.14.6", + "@code0-tech/triangulum": "^0.15.0", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/lint": "^6.9.5", "@opentelemetry/api": "^1.9.1", From 4b72b97a4b262fd346be1549944e0f385a42d848 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Fri, 15 May 2026 22:03:56 +0200 Subject: [PATCH 2/4] feat: update User type references to improve type consistency across components --- graphql.config.yml | 2 +- src/app/(auth)/layout.tsx | 4 +- src/app/(dashboard)/layout.tsx | 5 +- src/app/(flow)/layout.tsx | 5 +- .../ce/src/member/pages/MemberAddPage.tsx | 5 +- .../components/UserDataTableComponent.tsx | 2 +- .../user/components/UserInputComponent.tsx | 4 +- .../ce/src/user/services/User.service.ts | 23 ++- .../ce/src/user/services/User.view.ts | 160 ------------------ .../fragments/User.basic.fragment.graphql | 1 + .../services/fragments/User.fragment.graphql | 1 + .../LicensesDataTableRowComponent.tsx | 11 +- 12 files changed, 27 insertions(+), 196 deletions(-) delete mode 100644 src/packages/ce/src/user/services/User.view.ts diff --git a/graphql.config.yml b/graphql.config.yml index 28e4a3b0..1c5b7ab5 100644 --- a/graphql.config.yml +++ b/graphql.config.yml @@ -3,4 +3,4 @@ documents: '**/*.graphql' extensions: endpoints: Default GraphQL Endpoint: - url: http://localhost:3098/graphql + url: http://localhost:80/graphql diff --git a/src/app/(auth)/layout.tsx b/src/app/(auth)/layout.tsx index d6c6f778..bdeeb233 100644 --- a/src/app/(auth)/layout.tsx +++ b/src/app/(auth)/layout.tsx @@ -19,11 +19,11 @@ import {GraphqlClient} from "@core/util/graphql-client"; import Image from "next/image"; import React from "react"; import {usePersistentReactiveArrayService} from "@/hooks/usePersistentReactiveArrayService"; -import {UserView} from "@edition/user/services/User.view"; import {FullScreen} from "@code0-tech/pictor/dist/components/fullscreen/FullScreen"; import {useUserSession} from "@edition/user/hooks/User.session.hook"; import {OrganizationView} from "@edition/organization/services/Organization.view"; import {OrganizationService} from "@edition/organization/services/Organization.service"; +import {User} from "@code0-tech/sagittarius-graphql-types"; export default function AuthLayout({children}: Readonly<{ children: React.ReactNode }>) { @@ -31,7 +31,7 @@ export default function AuthLayout({children}: Readonly<{ children: React.ReactN const currentSession = useUserSession() const graphqlClient = React.useMemo(() => new GraphqlClient(client), [client]) - const [store, service] = usePersistentReactiveArrayService("auth-users", (store) => new UserService(graphqlClient, store)) + const [store, service] = usePersistentReactiveArrayService("auth-users", (store) => new UserService(graphqlClient, store)) const organization = usePersistentReactiveArrayService(`dashboard::organizations::${currentSession?.id}`, (store) => new OrganizationService(graphqlClient, store)) return ( diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx index a428c980..bdc4a205 100644 --- a/src/app/(dashboard)/layout.tsx +++ b/src/app/(dashboard)/layout.tsx @@ -20,13 +20,12 @@ import {RoleService} from "@edition/role/services/Role.service"; import Image from "next/image"; import {Application, ApplicationService} from "@edition/application/services/Application.service"; import {useUserSession} from "@edition/user/hooks/User.session.hook"; -import {UserView} from "@edition/user/services/User.view"; import {OrganizationView} from "@edition/organization/services/Organization.view"; import {MemberView} from "@edition/member/services/Member.view"; import {ProjectView} from "@edition/project/services/Project.view"; import {RoleView} from "@edition/role/services/Role.view"; import {Layout} from "@code0-tech/pictor/dist/components/layout/Layout"; -import {Namespace, Runtime} from "@code0-tech/sagittarius-graphql-types"; +import {Namespace, Runtime, User} from "@code0-tech/sagittarius-graphql-types"; interface ApplicationLayoutProps { children: React.ReactNode @@ -42,7 +41,7 @@ const ApplicationLayout: React.FC = ({children, bar, tab const graphqlClient = React.useMemo(() => new GraphqlClient(client), [client]) - const user = usePersistentReactiveArrayService(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store)) + const user = usePersistentReactiveArrayService(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store)) const organization = usePersistentReactiveArrayService(`dashboard::organizations::${currentSession?.id}`, (store) => new OrganizationService(graphqlClient, store)) const member = usePersistentReactiveArrayService(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store)) const namespace = usePersistentReactiveArrayService(`dashboard::namespaces::${currentSession?.id}`, (store) => new NamespaceService(graphqlClient, store)) diff --git a/src/app/(flow)/layout.tsx b/src/app/(flow)/layout.tsx index ece3a12d..32c81922 100644 --- a/src/app/(flow)/layout.tsx +++ b/src/app/(flow)/layout.tsx @@ -12,7 +12,7 @@ import { FunctionDefinition, Namespace, NamespaceProject, - Runtime + Runtime, User } from "@code0-tech/sagittarius-graphql-types"; import {usePersistentReactiveArrayService} from "@/hooks/usePersistentReactiveArrayService"; import {UserService} from "@edition/user/services/User.service"; @@ -27,7 +27,6 @@ import {FunctionService} from "@edition/function/services/Function.service"; import {DatatypeService} from "@edition/datatype/services/Datatype.service"; import {FlowTypeService} from "@edition/flowtype/services/FlowType.service"; import Image from "next/image"; -import {UserView} from "@edition/user/services/User.view"; import {OrganizationView} from "@edition/organization/services/Organization.view"; import {MemberView} from "@edition/member/services/Member.view"; import {ProjectView} from "@edition/project/services/Project.view"; @@ -56,7 +55,7 @@ export default function FlowLayout({bar, tab, children}: { if (currentSession === null) router.push("/login") - const user = usePersistentReactiveArrayService(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store)) + const user = usePersistentReactiveArrayService(`dashboard::users::${currentSession?.id}`, (store) => new UserService(graphqlClient, store)) const organization = usePersistentReactiveArrayService(`dashboard::organizations::${currentSession?.id}`, (store) => new OrganizationService(graphqlClient, store)) const member = usePersistentReactiveArrayService(`dashboard::members::${currentSession?.id}`, (store) => new MemberService(graphqlClient, store)) const namespace = usePersistentReactiveArrayService(`dashboard::namespaces::${currentSession?.id}`, (store) => new NamespaceService(graphqlClient, store)) diff --git a/src/packages/ce/src/member/pages/MemberAddPage.tsx b/src/packages/ce/src/member/pages/MemberAddPage.tsx index ebd171c0..f5a19a94 100644 --- a/src/packages/ce/src/member/pages/MemberAddPage.tsx +++ b/src/packages/ce/src/member/pages/MemberAddPage.tsx @@ -4,12 +4,11 @@ import React from "react"; import {Button, Col, Flex, Spacing, Text, useForm, useService, useStore} from "@code0-tech/pictor"; import {MemberService} from "@edition/member/services/Member.service"; import {useParams, useRouter} from "next/navigation"; -import {Namespace} from "@code0-tech/sagittarius-graphql-types"; +import {Namespace, User} from "@code0-tech/sagittarius-graphql-types"; import Link from "next/link"; import {UserService} from "@edition/user/services/User.service"; import {InputSyntaxSegment} from "@code0-tech/pictor/dist/components/form/Input.syntax.hook"; import {UserInputComponent} from "@edition/user/components/UserInputComponent"; -import {UserView} from "@edition/user/services/User.view"; export const MemberAddPage: React.FC = () => { @@ -27,7 +26,7 @@ export const MemberAddPage: React.FC = () => { const members = React.useMemo(() => memberService.values({namespaceId: namespaceId}), [memberStore, userStore]) const formInitialValues = React.useMemo(() => ({users: null}), []) const filteredUsers = React.useMemo(() => { - return (user: UserView) => { + return (user: User) => { return !members.find(m => m.user?.id === user.id) } }, [members]) diff --git a/src/packages/ce/src/user/components/UserDataTableComponent.tsx b/src/packages/ce/src/user/components/UserDataTableComponent.tsx index eae9fb21..94c4e66c 100644 --- a/src/packages/ce/src/user/components/UserDataTableComponent.tsx +++ b/src/packages/ce/src/user/components/UserDataTableComponent.tsx @@ -32,7 +32,7 @@ export const UserDataTableComponent: React.FC = (pr } onSelect={(item) => item && onSelect?.(item)} - data={users.map(u => u.json()).filter(preFilter)}> + data={users.filter(preFilter)}> {(runtime, index) => { return }} diff --git a/src/packages/ce/src/user/components/UserInputComponent.tsx b/src/packages/ce/src/user/components/UserInputComponent.tsx index 339ebc14..4c63a6c4 100644 --- a/src/packages/ce/src/user/components/UserInputComponent.tsx +++ b/src/packages/ce/src/user/components/UserInputComponent.tsx @@ -1,6 +1,5 @@ import React from "react"; import {IconArrowDown, IconArrowUp, IconCornerDownLeft} from "@tabler/icons-react"; -import {UserView} from "@edition/user/services/User.view"; import { Badge, Flex, @@ -16,9 +15,10 @@ import { useStore } from "@code0-tech/pictor"; import {UserService} from "@edition/user/services/User.service"; +import {User} from "@code0-tech/sagittarius-graphql-types"; export interface UserInputComponentProps extends TextInputProps { - filter?: (user: UserView, index: number) => boolean + filter?: (user: User, index: number) => boolean } export const UserInputComponent: React.FC = (props) => { diff --git a/src/packages/ce/src/user/services/User.service.ts b/src/packages/ce/src/user/services/User.service.ts index 64a6e903..58e817f1 100644 --- a/src/packages/ce/src/user/services/User.service.ts +++ b/src/packages/ce/src/user/services/User.service.ts @@ -41,19 +41,18 @@ import usersQuery from "./queries/Users.query.graphql"; import userByUsernameQuery from "./queries/User.byUsername.query.graphql"; import userByIdQuery from "./queries/User.byId.query.graphql"; import {View} from "@code0-tech/pictor/dist/utils/view"; -import {UserView} from "@edition/user/services/User.view"; -export class UserService extends ReactiveArrayService { +export class UserService extends ReactiveArrayService { private readonly client: GraphqlClient private i = 0; - constructor(client: GraphqlClient, store: ReactiveArrayStore>) { + constructor(client: GraphqlClient, store: ReactiveArrayStore>) { super(store); this.client = client } - values(): UserView[] { + values(): User[] { if (super.values().length > 0) return super.values(); this.client.query({ query: usersQuery @@ -61,17 +60,17 @@ export class UserService extends ReactiveArrayService { const data = result.data if (!data) return - if (data && data.currentUser && !this.hasById(data.currentUser.id)) this.set(this.i++, new View(new UserView(data.currentUser))) + if (data && data.currentUser && !this.hasById(data.currentUser.id)) this.set(this.i++, new View(data.currentUser)) if (data.users && data.users.nodes) { data.users.nodes.forEach((user) => { - if (user && !(user.id === data.currentUser?.id) && !this.hasById(user.id)) this.set(this.i++, new View(new UserView(user))) + if (user && !(user.id === data.currentUser?.id) && !this.hasById(user.id)) this.set(this.i++, new View(user)) }) } }) return super.values(); } - getById(id: User["id"]): UserView | undefined { + getById(id: User["id"]): User | undefined { const user = this.values().find(user => user && user.id === id) if (user) return user @@ -85,14 +84,14 @@ export class UserService extends ReactiveArrayService { const data = result.data if (!data) return - if (data && data.user && !this.hasById(data.user.id)) this.set(this.i++, new View(new UserView(data.user))) + if (data && data.user && !this.hasById(data.user.id)) this.set(this.i++, new View(data.user)) }) } return this.values().find(user => user && user.id === id) } - getByUsername(username: User["username"]): UserView | undefined { + getByUsername(username: User["username"]): User | undefined { if (this.values().find(user => user && user.username === username)) return this.values().find(user => user && user.username === username) this.client.query({ @@ -104,7 +103,7 @@ export class UserService extends ReactiveArrayService { const data = result.data if (!data) return - if (data && data.user && !this.hasById(data.user.id)) this.set(this.i++, new View(new UserView(data.user))) + if (data && data.user && !this.hasById(data.user.id)) this.set(this.i++, new View(data.user)) }) return this.values().find(user => user && user.username === username) @@ -165,7 +164,7 @@ export class UserService extends ReactiveArrayService { }) if (result.data && result.data.usersLogin && result.data.usersLogin.userSession?.user && !this.hasById(result.data.usersLogin.userSession?.user.id)) { - this.add(new View(new UserView(result.data.usersLogin.userSession.user))) + this.add(new View(result.data.usersLogin.userSession.user)) } return result.data?.usersLogin ?? undefined @@ -233,7 +232,7 @@ export class UserService extends ReactiveArrayService { }) if (result.data && result.data.usersRegister && result.data.usersRegister.userSession?.user && !this.hasById(result.data.usersRegister.userSession?.user.id)) { - this.add(new View(new UserView(result.data.usersRegister.userSession.user))) + this.add(new View(result.data.usersRegister.userSession.user)) } return result.data?.usersRegister ?? undefined diff --git a/src/packages/ce/src/user/services/User.view.ts b/src/packages/ce/src/user/services/User.view.ts deleted file mode 100644 index a24366eb..00000000 --- a/src/packages/ce/src/user/services/User.view.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { - Maybe, - Namespace, - NamespaceMemberConnection, - Scalars, - User, - UserIdentityConnection, UserSessionConnection, UserUserAbilities -} from "@code0-tech/sagittarius-graphql-types"; - -export class UserView { - - /** Global admin status of the user */ - private _admin?: Maybe; - /** The avatar if present of the user */ - private readonly _avatarPath?: Maybe; - /** Time when this User was created */ - private readonly _createdAt?: Maybe; - /** Email of the user */ - private _email?: Maybe; - /** Email verification date of the user if present */ - private readonly _emailVerifiedAt?: Maybe; - /** Firstname of the user */ - private _firstname?: Maybe; - /** Global ID of this User */ - private readonly _id?: Maybe; - /** Identities of this user */ - private readonly _identities?: Maybe; - /** Lastname of the user */ - private _lastname?: Maybe; - /** Namespace of this user */ - private readonly _namespace?: Maybe; - /** Namespace Memberships of this user */ - private readonly _namespaceMemberships?: Maybe; - /** Sessions of this user */ - private readonly _sessions?: Maybe; - /** Time when this User was last updated */ - private readonly _updatedAt?: Maybe; - /** Username of the user */ - private _username?: Maybe; - /** Abilities for the current user on this User */ - private readonly _userAbilities?: Maybe; - - constructor(user: User) { - this._admin = user.admin; - this._avatarPath = user.avatarPath; - this._createdAt = user.createdAt; - this._email = user.email; - this._emailVerifiedAt = user.emailVerifiedAt; - this._firstname = user.firstname; - this._id = user.id; - this._identities = user.identities; - this._lastname = user.lastname; - this._namespace = user.namespace; - this._namespaceMemberships = user.namespaceMemberships; - this._sessions = user.sessions; - this._updatedAt = user.updatedAt; - this._username = user.username; - this._userAbilities = user.userAbilities; - - } - - get admin(): Maybe | undefined { - return this._admin; - } - - get avatarPath(): Maybe | undefined { - return this._avatarPath; - } - - get createdAt(): Maybe | undefined { - return this._createdAt; - } - - get email(): Maybe | undefined { - return this._email; - } - - get emailVerifiedAt(): Maybe | undefined { - return this._emailVerifiedAt; - } - - get firstname(): Maybe | undefined { - return this._firstname; - } - - get id(): Maybe | undefined { - return this._id; - } - - get identities(): Maybe | undefined { - return this._identities; - } - - get lastname(): Maybe | undefined { - return this._lastname; - } - - get namespace(): Maybe | undefined { - return this._namespace; - } - - get namespaceMemberships(): Maybe | undefined { - return this._namespaceMemberships; - } - - get sessions(): Maybe | undefined { - return this._sessions; - } - - get updatedAt(): Maybe | undefined { - return this._updatedAt; - } - - get username(): Maybe | undefined { - return this._username; - } - - get userAbilities(): Maybe | undefined { - return this._userAbilities; - } - - set admin(value: Maybe) { - this._admin = value; - } - - set email(value: Maybe) { - this._email = value; - } - - set firstname(value: Maybe) { - this._firstname = value; - } - - set lastname(value: Maybe) { - this._lastname = value; - } - - set username(value: Maybe) { - this._username = value; - } - - json(): User { - return { - admin: this._admin, - avatarPath: this._avatarPath, - createdAt: this._createdAt, - email: this._email, - emailVerifiedAt: this._emailVerifiedAt, - firstname: this._firstname, - id: this._id, - identities: this._identities, - lastname: this._lastname, - namespace: this._namespace, - namespaceMemberships: this._namespaceMemberships, - sessions: this._sessions, - updatedAt: this._updatedAt, - username: this._username, - }; - } -} \ No newline at end of file diff --git a/src/packages/ce/src/user/services/fragments/User.basic.fragment.graphql b/src/packages/ce/src/user/services/fragments/User.basic.fragment.graphql index 8b873dfa..6f604d28 100644 --- a/src/packages/ce/src/user/services/fragments/User.basic.fragment.graphql +++ b/src/packages/ce/src/user/services/fragments/User.basic.fragment.graphql @@ -3,6 +3,7 @@ fragment UserBasic on User { admin avatarPath createdAt + readme firstname emailVerifiedAt email diff --git a/src/packages/ce/src/user/services/fragments/User.fragment.graphql b/src/packages/ce/src/user/services/fragments/User.fragment.graphql index 187ec202..d2cc7939 100644 --- a/src/packages/ce/src/user/services/fragments/User.fragment.graphql +++ b/src/packages/ce/src/user/services/fragments/User.fragment.graphql @@ -8,6 +8,7 @@ fragment User on User { email emailVerifiedAt firstname + readme id lastname namespace { diff --git a/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx b/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx index 284ab95b..dcf14442 100644 --- a/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx +++ b/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx @@ -1,14 +1,7 @@ import React from "react"; -import {Namespace, NamespaceLicense, Organization} from "@code0-tech/sagittarius-graphql-types"; -import {Avatar, Button, DataTableColumn, Flex, hashToColor, Text, useService, useStore} from "@code0-tech/pictor"; -import {IconLogout} from "@tabler/icons-react"; -import {OrganizationService} from "@edition/organization/services/Organization.service"; +import {Namespace, NamespaceLicense} from "@code0-tech/sagittarius-graphql-types"; +import {DataTableColumn, useService, useStore} from "@code0-tech/pictor"; import {NamespaceService} from "@edition/namespace/services/Namespace.service"; -import {MemberService} from "@edition/member/services/Member.service"; -import {UserService} from "@edition/user/services/User.service"; -import {formatDistanceToNow} from "date-fns"; -import {useUserSession} from "@edition/user/hooks/User.session.hook"; -import {OrganizationView} from "@edition/organization/services/Organization.view"; export interface LicensesDataTableRowComponentProps { namespaceId: Namespace['id'] From 38569f704f0881dac54d98f7d8acab0a5b867052 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Fri, 15 May 2026 23:56:37 +0200 Subject: [PATCH 3/4] feat: update license type references for improved consistency in LicensesDataTable components --- .../components/LicensesDataTableComponent.tsx | 8 ++--- .../LicensesDataTableRowComponent.tsx | 6 ++-- .../fragments/Namespace.fragment.graphql | 36 +++++++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/packages/cloud/src/namespace/services/fragments/Namespace.fragment.graphql diff --git a/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx b/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx index 0c27e660..c216ab22 100644 --- a/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx +++ b/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx @@ -14,7 +14,7 @@ import { useStore } from "@code0-tech/pictor"; import {DataTableFilterProps, DataTableSortProps} from "@code0-tech/pictor/dist/components/data-table/DataTable"; -import {Namespace, NamespaceLicense} from "@code0-tech/sagittarius-graphql-types"; +import {Namespace, License} from "@code0-tech/sagittarius-graphql-types"; import {NamespaceService} from "@edition/namespace/services/Namespace.service"; import {LicensesDataTableRowComponent} from "@edition/namespace/components/LicensesDataTableRowComponent"; import Link from "next/link"; @@ -23,8 +23,8 @@ export interface LicensesDataTableComponentProps { namespaceId: Namespace['id'] sort?: DataTableSortProps filter?: DataTableFilterProps - preFilter?: (project: NamespaceLicense, index: number) => boolean - onSelect?: (item: NamespaceLicense | undefined) => void + preFilter?: (project: License, index: number) => boolean + onSelect?: (item: License | undefined) => void } export const LicensesDataTableComponent: React.FC = (props) => { @@ -35,7 +35,7 @@ export const LicensesDataTableComponent: React.FC namespaceService.getById(namespaceId)?.namespaceLicenses?.nodes as NamespaceLicense[] ?? [], + () => namespaceService.getById(namespaceId)?.licenses?.nodes as License[] ?? [], [namespaceStore] ) diff --git a/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx b/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx index dcf14442..9daefc0b 100644 --- a/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx +++ b/src/packages/cloud/src/namespace/components/LicensesDataTableRowComponent.tsx @@ -1,11 +1,11 @@ import React from "react"; -import {Namespace, NamespaceLicense} from "@code0-tech/sagittarius-graphql-types"; +import {Namespace, License} from "@code0-tech/sagittarius-graphql-types"; import {DataTableColumn, useService, useStore} from "@code0-tech/pictor"; import {NamespaceService} from "@edition/namespace/services/Namespace.service"; export interface LicensesDataTableRowComponentProps { namespaceId: Namespace['id'] - licenseId: NamespaceLicense['id'] + licenseId: License['id'] } export const LicensesDataTableRowComponent: React.FC = (props) => { @@ -16,7 +16,7 @@ export const LicensesDataTableRowComponent: React.FC namespaceService.getById(namespaceId)?.namespaceLicenses?.nodes?.find(license => license?.id === licenseId) as NamespaceLicense, + () => namespaceService.getById(namespaceId)?.licenses?.nodes?.find(license => license?.id === licenseId) as License, [namespaceStore, namespaceId, licenseId] ) diff --git a/src/packages/cloud/src/namespace/services/fragments/Namespace.fragment.graphql b/src/packages/cloud/src/namespace/services/fragments/Namespace.fragment.graphql new file mode 100644 index 00000000..b0148771 --- /dev/null +++ b/src/packages/cloud/src/namespace/services/fragments/Namespace.fragment.graphql @@ -0,0 +1,36 @@ +#import "@edition/organization/services/fragments/Organization.id.fragment.graphql" +#import "@edition/user/services/fragments/User.id.fragment.graphql" +fragment Namespace on Namespace { + __typename + id + updatedAt + createdAt + roles { + count + } + members { + count + } + projects { + count + } + runtimes { + count + } + parent { + __typename + ...on Organization { + ...OrganizationId + } + ...on User{ + ...UserId + } + } + userAbilities { + createNamespaceProject + createNamespaceRole + createRuntime + inviteMember + __typename + } +} \ No newline at end of file From c48b822322360b04b1554db9b1fc9581497a22ef Mon Sep 17 00:00:00 2001 From: nicosammito Date: Sat, 16 May 2026 00:56:45 +0200 Subject: [PATCH 4/4] feat: update component imports to use @cloud namespace for improved organization --- .../namespace/components/LicensesDataTableComponent.tsx | 2 +- src/packages/cloud/src/namespace/pages/LicensesPage.tsx | 2 +- src/packages/cloud/src/namespace/views/LicensesView.tsx | 2 +- tsconfig.json | 9 +++++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx b/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx index c216ab22..c2f302bd 100644 --- a/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx +++ b/src/packages/cloud/src/namespace/components/LicensesDataTableComponent.tsx @@ -16,7 +16,7 @@ import { import {DataTableFilterProps, DataTableSortProps} from "@code0-tech/pictor/dist/components/data-table/DataTable"; import {Namespace, License} from "@code0-tech/sagittarius-graphql-types"; import {NamespaceService} from "@edition/namespace/services/Namespace.service"; -import {LicensesDataTableRowComponent} from "@edition/namespace/components/LicensesDataTableRowComponent"; +import {LicensesDataTableRowComponent} from "@cloud/namespace/components/LicensesDataTableRowComponent"; import Link from "next/link"; export interface LicensesDataTableComponentProps { diff --git a/src/packages/cloud/src/namespace/pages/LicensesPage.tsx b/src/packages/cloud/src/namespace/pages/LicensesPage.tsx index cba68057..c342b703 100644 --- a/src/packages/cloud/src/namespace/pages/LicensesPage.tsx +++ b/src/packages/cloud/src/namespace/pages/LicensesPage.tsx @@ -1,7 +1,7 @@ "use client" import React from "react"; -import {LicensesView} from "@edition/namespace/views/LicensesView"; +import {LicensesView} from "@cloud/namespace/views/LicensesView"; export const LicensesPage: React.FC = () => { return