From 781d092a1d2861fd6e787e5a3f112d51770c48cb Mon Sep 17 00:00:00 2001 From: nicosammito Date: Wed, 19 Nov 2025 11:11:14 +0100 Subject: [PATCH 1/3] feat: enhance styling and structure of components with helper functions --- src/components/badge/Badge.stories.tsx | 4 +-- src/components/badge/Badge.style.scss | 4 +-- src/components/breadcrumb/Breadcrumb.tsx | 3 +- src/components/button/Button.style.scss | 5 +--- src/components/card/Card.style.scss | 15 ++++++++-- src/components/card/CardSection.tsx | 9 +++++- src/components/menu/Menu.style.scss | 6 ++-- src/components/quote/Quote.tsx | 36 +++++++++++------------- src/styles/_box.scss | 10 +++---- src/styles/_helpers.scss | 2 +- 10 files changed, 53 insertions(+), 41 deletions(-) diff --git a/src/components/badge/Badge.stories.tsx b/src/components/badge/Badge.stories.tsx index e66d3981..24a3769c 100644 --- a/src/components/badge/Badge.stories.tsx +++ b/src/components/badge/Badge.stories.tsx @@ -3,7 +3,7 @@ import React from "react"; import {Badge} from "./Badge"; import {Button} from "../button/Button"; import {IconGitBranch} from "@tabler/icons-react"; -import {Colors as BadgeVariants} from "../../utils/types"; +import {Colors as BadgeVariants} from "../../utils/types"; const meta: Meta = { title: "Badge", @@ -26,7 +26,7 @@ export const Variants = () => { export const ButtonExample = () => { return ) : null} {namespaceMember && namespaceMember.userAbilities?.deleteMember ? ( - ) : null} From 1c8e8c62560ed54a5939138cb1f6a1cf5d63c647 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Wed, 19 Nov 2025 14:45:26 +0100 Subject: [PATCH 3/3] feat: add onSelect prop to DNamespaceProjectList, DOrganizationList, DRuntimeList, and DUserList components for improved click handling --- src/components/d-organization/DOrganizationList.tsx | 13 +++++++------ .../d-project/DNamespaceProjectContent.tsx | 5 ++++- src/components/d-project/DNamespaceProjectList.tsx | 9 ++++++--- src/components/d-runtime/DRuntimeContent.tsx | 5 ++++- src/components/d-runtime/DRuntimeList.tsx | 9 ++++++--- src/components/d-user/DUserContent.tsx | 10 ++++++++-- src/components/d-user/DUserList.tsx | 12 +++++++----- 7 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/components/d-organization/DOrganizationList.tsx b/src/components/d-organization/DOrganizationList.tsx index 412610c7..1fe1bbd2 100644 --- a/src/components/d-organization/DOrganizationList.tsx +++ b/src/components/d-organization/DOrganizationList.tsx @@ -7,12 +7,13 @@ import {DOrganizationReactiveService} from "./DOrganization.service"; import CardSection from "../card/CardSection"; import {DOrganizationContent} from "./DOrganizatonContent"; import {DOrganizationView} from "./DOrganization.view"; -import {Scalars} from "@code0-tech/sagittarius-graphql-types"; +import {Organization, Scalars} from "@code0-tech/sagittarius-graphql-types"; -export interface DOrganizationListProps extends Omit { +export interface DOrganizationListProps extends Omit { filter?: (organizations: DOrganizationView, index: number) => boolean - onSetting?: (organizationId: Scalars['OrganizationID']['output']) => void - onLeave?: (organizationId: Scalars['OrganizationID']['output']) => void + onSetting?: (organizationId: Organization['id']) => void + onLeave?: (organizationId: Organization['id']) => void + onSelect?: (organizationId: Organization['id']) => void } export const DOrganizationList: React.FC = (props) => { @@ -20,12 +21,12 @@ export const DOrganizationList: React.FC = (props) => { const organizationService = useService(DOrganizationReactiveService) const organizationStore = useStore(DOrganizationReactiveService) const organizations = React.useMemo(() => organizationService.values(), [organizationStore]) - const {filter = () => true, onLeave, onSetting, ...rest} = props + const {filter = () => true, onLeave, onSetting, onSelect, ...rest} = props return {organizations.filter(filter).map((organization) => organization.id && ( { - console.log("tets") + if (onSelect) onSelect(organization.id) }} key={organization.id}> diff --git a/src/components/d-project/DNamespaceProjectContent.tsx b/src/components/d-project/DNamespaceProjectContent.tsx index b572ddfa..4a05a8ac 100644 --- a/src/components/d-project/DNamespaceProjectContent.tsx +++ b/src/components/d-project/DNamespaceProjectContent.tsx @@ -88,7 +88,10 @@ export const DNamespaceProjectContent: React.FC = )} {project?.userAbilities?.deleteNamespaceProject || project?.userAbilities?.updateNamespaceProject ? ( - ) : null} diff --git a/src/components/d-project/DNamespaceProjectList.tsx b/src/components/d-project/DNamespaceProjectList.tsx index 1e323265..a3c56d2c 100644 --- a/src/components/d-project/DNamespaceProjectList.tsx +++ b/src/components/d-project/DNamespaceProjectList.tsx @@ -7,13 +7,14 @@ import {DNamespaceProjectReactiveService} from "./DNamespaceProject.service"; import CardSection from "../card/CardSection"; import {DNamespaceProjectContent} from "./DNamespaceProjectContent"; -export interface DNamespaceProjectListProps extends Omit { +export interface DNamespaceProjectListProps extends Omit { filter?: (project: DNamespaceProjectView, index: number) => boolean onSetting?: (projectId: NamespaceProject["id"]) => void + onSelect?: (projectId: NamespaceProject["id"]) => void } export const DNamespaceProjectList: React.FC = (props) => { - const {filter = () => true, onSetting, ...rest} = props + const {filter = () => true, onSetting, onSelect, ...rest} = props const projectService = useService(DNamespaceProjectReactiveService) const projectStore = useStore(DNamespaceProjectReactiveService) @@ -21,7 +22,9 @@ export const DNamespaceProjectList: React.FC = (prop return {projects.filter(filter).map((project) => project.id && ( - + { + if (onSelect) onSelect(project.id) + }} key={project.id}> ))} diff --git a/src/components/d-runtime/DRuntimeContent.tsx b/src/components/d-runtime/DRuntimeContent.tsx index f9829638..33830538 100644 --- a/src/components/d-runtime/DRuntimeContent.tsx +++ b/src/components/d-runtime/DRuntimeContent.tsx @@ -43,7 +43,10 @@ export const DRuntimeContent: React.FC = (props) => { )} {runtime?.userAbilities?.deleteRuntime || runtime?.userAbilities?.updateRuntime || runtime?.userAbilities?.rotateRuntimeToken ? ( - ) : null} diff --git a/src/components/d-runtime/DRuntimeList.tsx b/src/components/d-runtime/DRuntimeList.tsx index 0fadab31..586708d3 100644 --- a/src/components/d-runtime/DRuntimeList.tsx +++ b/src/components/d-runtime/DRuntimeList.tsx @@ -7,14 +7,15 @@ import {DRuntimeReactiveService} from "./DRuntime.service"; import CardSection from "../card/CardSection"; import {DRuntimeContent} from "./DRuntimeContent"; -export interface DRuntimeListProps extends Omit { +export interface DRuntimeListProps extends Omit { filter?: (runtime: DRuntimeView, index: number) => boolean + onSelect?: (userId: Runtime['id']) => void onSetting?: (runtimeId: Runtime['id']) => void } export const DRuntimeList: React.FC = (props) => { - const {filter = () => true, onSetting, ...rest} = props + const {filter = () => true, onSetting, onSelect, ...rest} = props const runtimeService = useService(DRuntimeReactiveService) const runtimeStore = useStore(DRuntimeReactiveService) @@ -22,7 +23,9 @@ export const DRuntimeList: React.FC = (props) => { return {runtimes.filter(filter).map((runtime) => runtime.id && ( - + { + if (onSelect) onSelect(runtime.id) + }} key={runtime.id}> ))} diff --git a/src/components/d-user/DUserContent.tsx b/src/components/d-user/DUserContent.tsx index e3ca53e6..77e60ef0 100644 --- a/src/components/d-user/DUserContent.tsx +++ b/src/components/d-user/DUserContent.tsx @@ -53,10 +53,16 @@ export const DUserContent: React.FC = (props) => { { remove ? ( - - diff --git a/src/components/d-user/DUserList.tsx b/src/components/d-user/DUserList.tsx index 006045eb..56f49b2d 100644 --- a/src/components/d-user/DUserList.tsx +++ b/src/components/d-user/DUserList.tsx @@ -7,22 +7,24 @@ import {Card} from "../card/Card"; import CardSection from "../card/CardSection"; import {DUserContent} from "./DUserContent"; -export interface DUserListProps extends Omit { +export interface DUserListProps extends Omit { filter?: (user: DUserView, index: number) => boolean + onSelect?: (userId: User['id']) => void onRemove?: (userId: User['id']) => void } export const DUserList: React.FC = (props) => { - const {filter = () => true, onRemove, ...rest} = props + const {filter = () => true, onRemove, onSelect, ...rest} = props const userService = useService(DUserReactiveService) const userStore = useStore(DUserReactiveService) const users = React.useMemo(() => userService.values(), [userStore]) - return - {users.filter(filter).map((user) => user.id && ( - + {users.filter(filter).map((user) => user && user.id && ( + { + if (onSelect) onSelect(user.id) + }} key={user.id}> ))}