Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
d800b02
feat: update PICTOR version in environment configuration to 0.9.2
nicosammito Jun 4, 2026
d7c20bf
feat: add execution results and node results fields to Flow fragment …
nicosammito Jun 4, 2026
679f243
feat: update PICTOR and triangulum dependencies to latest versions
nicosammito Jun 4, 2026
eaf7fce
feat: add pagination fields for execution and node results in Flows q…
nicosammito Jun 4, 2026
e06a5bf
feat: add FlowExecutionResultView component to display execution resu…
nicosammito Jun 4, 2026
b368088
feat: enhance FlowExecutionResultView with Gantt chart integration an…
nicosammito Jun 4, 2026
966747f
feat: update Project service and GraphQL schema to handle moduleConfi…
nicosammito Jun 5, 2026
e59aed2
feat: update PICTOR version to 0.10.3 in environment configuration
nicosammito Jun 5, 2026
bf6dcf7
feat: enhance ApplicationBarView with dynamic navigation buttons and …
nicosammito Jun 5, 2026
5c5a275
feat: simplify ApplicationBreadcrumbView by removing unused services …
nicosammito Jun 5, 2026
87a0028
feat: streamline ApplicationGeneralSettingsView by optimizing imports…
nicosammito Jun 5, 2026
3bd5156
feat: optimize ApplicationLicensesDataTableRowComponent by consolidat…
nicosammito Jun 5, 2026
4dce1bf
feat: update ApplicationRestrictionsView to replace toast notificatio…
nicosammito Jun 5, 2026
5d7e97c
feat: replace toast notifications with island notifications in FlowCr…
nicosammito Jun 5, 2026
cd27234
feat: replace toast notifications with island notifications in FlowFo…
nicosammito Jun 5, 2026
7ef360f
feat: add island success notification on successful flow update in Fl…
nicosammito Jun 5, 2026
e62d36d
feat: replace toast error notifications with island error notificatio…
nicosammito Jun 5, 2026
07c6bf6
feat: replace toast success notification with island success notifica…
nicosammito Jun 5, 2026
b309e21
feat: replace toast notifications with island success notifications i…
nicosammito Jun 5, 2026
136b720
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
2522ff3
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
4651c7f
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
9acae1b
feat: update @code0-tech/pictor dependency to version 0.10.3
nicosammito Jun 5, 2026
2346a84
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
13d2f4c
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
f835590
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
ae51f2d
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
5d99be6
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
48c0eba
feat: replace toast notification with island success notification in …
nicosammito Jun 5, 2026
0064c38
feat: replace toast notifications with island success notifications i…
nicosammito Jun 5, 2026
b1c4c97
feat: replace toast notifications with island success notifications i…
nicosammito Jun 6, 2026
bf56ddf
feat: better performance for size panel
nicosammito Jun 6, 2026
d174780
feat: only import used methods
nicosammito Jun 6, 2026
be3581d
feat: safari GPU acceleration
nicosammito Jun 6, 2026
b51357c
feat: changed xxl from 2 to 3
nicosammito Jun 6, 2026
ff94450
feat: removed execution result pagination
nicosammito Jun 7, 2026
b41eacd
fix: problem with node update and change to selection state
nicosammito Jun 7, 2026
d9598cd
feat: Execution result view
nicosammito Jun 7, 2026
b1a44a6
feat: showing active tab for current selected node
nicosammito Jun 7, 2026
af684e5
feat: updating triangulum
nicosammito Jun 7, 2026
66bf0a4
feat: removed unnecessary tranisation
nicosammito Jun 7, 2026
61442cf
feat: changes to execution view
nicosammito Jun 7, 2026
c5b6f3f
feat: adding value display to trigger node
nicosammito Jun 7, 2026
dca33c5
feat: updating triangulum and adding usehook library
nicosammito Jun 9, 2026
b517b56
feat: adding support for module definitons
nicosammito Jun 9, 2026
e76f676
feat: showing primary endpoint
nicosammito Jun 9, 2026
b16ad37
feat: adding support for function within execution result
nicosammito Jun 12, 2026
ecb90ee
feat: switching out tooltip with dialog for execution info
nicosammito Jun 13, 2026
d1ba9e9
feat: correct handling of flow settings to display values within node
nicosammito Jun 13, 2026
fc9fa31
feat: deactivate deleteKeyCode
nicosammito Jun 13, 2026
299dbd8
feat: changing design of square node
nicosammito Jun 13, 2026
491dde6
feat: fixing icon size to 16px
nicosammito Jun 13, 2026
dd21038
feat: make tabs toggle able
nicosammito Jun 13, 2026
f6cf8c5
feat: changing padding of tabs and deleting old license pages in cloud
nicosammito Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.local
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ NEXT_PUBLIC_EDITION=ce
SAGITTARIUS_GRAPHQL_URL=http://localhost:80/graphql

NEXT_PUBLIC_SCULPTOR_VERSION=0.0.0
NEXT_PUBLIC_PICTOR_VERSION=0.9.1
NEXT_PUBLIC_PICTOR_VERSION=0.10.3
NEXT_PUBLIC_ALLOWED_REDIRECT_DOMAINS=*.code0.tech,*.codezero.build

NEXT_PUBLIC_OTEL_SERVICE_NAME=#"sculptor-client"
Expand Down
1,483 changes: 789 additions & 694 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
},
"dependencies": {
"@apollo/client": "^4.0.9",
"@code0-tech/pictor": "^0.9.1",
"@code0-tech/triangulum": "^0.19.1",
"@code0-tech/pictor": "^0.10.3",
"@code0-tech/triangulum": "^0.22.0",
"@codemirror/lang-javascript": "^6.2.5",
"@codemirror/lint": "^6.9.5",
"@opentelemetry/api": "^1.9.1",
Expand All @@ -27,7 +27,9 @@
"@opentelemetry/instrumentation-fetch": "^0.218.0",
"@opentelemetry/instrumentation-xml-http-request": "^0.218.0",
"@opentelemetry/sdk-trace-web": "^2.6.1",
"@uidotdev/usehooks": "^2.4.1",
"@vercel/otel": "^2.1.1",
"@xyflow/react": "^12.11.0",
"date-fns": "^4.1.0",
"graphql": "^16.12.0",
"graphql-tag": "^2.12.6",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
"use client"

import {
Button,
Flex,
} from "@code0-tech/pictor";
import {Button, Flex,} from "@code0-tech/pictor";
import React from "react";
import {IconDatabase, IconFile, IconMessageChatbot} from "@tabler/icons-react";
import {IconFile, IconPlayerPlay} from "@tabler/icons-react";
import {useParams} from "next/navigation";
import {Flow} from "@code0-tech/sagittarius-graphql-types";
import {FlowBuilderComponent} from "@edition/flow/components/builder/FlowBuilderComponent";
Expand All @@ -16,6 +13,7 @@ import {
ResizablePanelGroup
} from "@code0-tech/pictor/dist/components/resizable/Resizable";
import {Layout} from "@code0-tech/pictor/dist/components/layout/Layout";
import {FlowExecutionResultView} from "@edition/flow/views/FlowExecutionResultView";

export default function Page() {

Expand All @@ -24,31 +22,49 @@ export default function Page() {
const flowIndex = params.flowId as any as number
const flowId: Flow['id'] = `gid://sagittarius/Flow/${flowIndex}`

const [show, setShow] = React.useState(false);
const [tab, setTab] = React.useState<string | undefined>(undefined);

return <ResizablePanel id={"2"}>
<Layout layoutGap={0} showLayoutSplitter={false} rightContent={
<Flex pl={0.7} style={{flexDirection: "column", gap: "0.7rem"}}>
<Button aria-selected={show} onClick={() => setShow(prevState => !prevState)} variant={"none"}
<Button aria-selected={tab === "file"}
onClick={() => setTab(prevState => prevState === "file" ? undefined : "file")} variant={"none"}
paddingSize={"xs"}>
<IconFile size={16}/>
</Button>
<Button variant={"none"} paddingSize={"xs"}>
<IconDatabase size={16}/>
</Button>
<Button variant={"none"} paddingSize={"xs"}>
<IconMessageChatbot size={16}/>
<Button aria-selected={tab === "execution"}
onClick={() => setTab(prevState => prevState === "execution" ? undefined : "execution")}
variant={"none"}
paddingSize={"xs"}>
<IconPlayerPlay size={16}/>
</Button>
</Flex>
}>
<ResizablePanelGroup orientation={"horizontal"} key={flowIndex}>
<ResizablePanel id={"2"} color={"primary"} style={{borderTopLeftRadius: "1rem", borderTopRightRadius: "1rem"}}>
<FlowBuilderComponent flowId={flowId} namespaceId={undefined} projectId={undefined}/>
<ResizablePanel id={"2"}>
<ResizablePanelGroup orientation={"vertical"}>
<ResizablePanel id={"1"} color={"primary"}
style={{borderRadius: "1rem"}}>
<FlowBuilderComponent flowId={flowId} namespaceId={undefined} projectId={undefined}/>
</ResizablePanel>
{
tab === "execution" && (
<>
<ResizableHandle/>
<ResizablePanel id={"2"} color={"primary"}
style={{borderTopLeftRadius: "1rem", borderTopRightRadius: "1rem"}}>
<FlowExecutionResultView/>
</ResizablePanel>
</>
)
}
</ResizablePanelGroup>
</ResizablePanel>
{show && (
{tab === "file" && (
<>
<ResizableHandle/>
<ResizablePanel id={"3"} defaultSize={"25%"} color={"primary"} style={{borderTopLeftRadius: "1rem", borderTopRightRadius: "1rem"}}>
<ResizablePanel id={"3"} defaultSize={"25%"} color={"primary"}
style={{borderTopLeftRadius: "1rem", borderTopRightRadius: "1rem"}}>
<FunctionFilesComponent flowId={flowId} namespaceId={undefined}
projectId={undefined}/>
</ResizablePanel>
Expand Down
14 changes: 5 additions & 9 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import {ErrorLink} from "@apollo/client/link/error";
import {useRouter} from "next/navigation";
import {Toaster} from "sonner";
import {Error} from "@code0-tech/sagittarius-graphql-types";
import {toast} from "@code0-tech/pictor";
import {Inter} from 'next/font/google'
import {GraphQLFormattedError} from "graphql/error";
import {addIslandErrorNotification} from "@code0-tech/pictor/dist/components/island/Island.hook";

/**
* Load the Inter font with Latin subset and swap display strategy
Expand Down Expand Up @@ -70,16 +70,12 @@ const ErrorCodeDescription: Record<string, string> = {
const toastHandler = (error: Error | GraphQLFormattedError) => {
console.error("[ERROR]", error)
if (error && "errorCode" in error) {
toast({
title: ErrorCodeDescription[(error.errorCode as string)],
color: "error",
dismissible: true,
addIslandErrorNotification({
message: ErrorCodeDescription[(error.errorCode as string)]
})
} else {
toast({
title: "An internal error occurred",
color: "error",
dismissible: true,
addIslandErrorNotification({
message: "Internal error"
})
}
}
Expand Down
44 changes: 38 additions & 6 deletions src/packages/ce/src/application/views/ApplicationBarView.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
"use client"

import {Button, Flex, MenuItem, MenuSeparator, useService, useStore} from "@code0-tech/pictor";
import {Button, Flex, MenuItem, MenuSeparator, Text, useService, useStore} from "@code0-tech/pictor";
import {UserService} from "@edition/user/services/User.service";
import {useRouter} from "next/navigation";
import {useParams, useRouter} from "next/navigation";
import React from "react";
import Link from "next/link";
import {IconBuilding, IconFolders, IconInbox, IconLogout, IconSearch, IconUser} from "@tabler/icons-react";
import {ApplicationBreadcrumbView} from "@edition/application/views/ApplicationBreadcrumbView";
import UserMenuComponent from "@edition/user/components/UserMenuComponent";
import {useUserSession} from "@edition/user/hooks/User.session.hook";
import {Island} from "@code0-tech/pictor/dist/components/island/Island";
import {ButtonGroup} from "@code0-tech/pictor/dist/components/button-group/ButtonGroup";

export const ApplicationBarView: React.FC = () => {

Expand All @@ -17,10 +19,14 @@ export const ApplicationBarView: React.FC = () => {
const userStore = useStore(UserService)
const router = useRouter()
const [loading, startTransition] = React.useTransition()
const params = useParams()

const namespaceIndex = params.namespaceId as string | undefined
const projectIndex = params.projectId as string | undefined
const currentUser = React.useMemo(() => userService.getById(currentSession?.user?.id), [userStore, currentSession])
const namespaceIndex = React.useMemo(() => currentUser?.namespace?.id?.match(/Namespace\/(\d+)$/)?.[1], [currentUser])
const userNamespaceIndex = React.useMemo(() => currentUser?.namespace?.id?.match(/Namespace\/(\d+)$/)?.[1], [currentUser])
const userIndex = currentUser?.id?.match(/User\/(\d+)$/)?.[1]
const currentStep = projectIndex ? "project" : namespaceIndex ? "namespace" : "home";

const userMenu = React.useMemo(() => {

Expand Down Expand Up @@ -51,7 +57,7 @@ export const ApplicationBarView: React.FC = () => {
<IconBuilding size={16}/>Organizations
</MenuItem>
</Link>
<Link href={`/namespace/${namespaceIndex}`}>
<Link href={`/namespace/${userNamespaceIndex}`}>
<MenuItem>
<IconFolders size={16}/>Personal Workspace
</MenuItem>
Expand All @@ -61,10 +67,36 @@ export const ApplicationBarView: React.FC = () => {
<IconLogout size={16}/>Logout
</MenuItem>
</UserMenuComponent>
}, [currentUser, currentSession, namespaceIndex])
}, [currentUser, currentSession, userNamespaceIndex])

return <Flex py={0.7} align={"center"} justify={"space-between"}>
return <Flex py={0.7} key={`island-${currentStep}`} align={"center"} justify={"space-between"}>
<ApplicationBreadcrumbView/>
<Flex pos={"fixed"} top={"1rem"} left={"50%"} justify={"center"}
style={{zIndex: 9999, transform: "translateX(-50%)"}}>
<Island>
<ButtonGroup color={"primary"} bg={"transparent"} style={{boxShadow: "none"}}>
<Button paddingSize={"xxs"} key={"home-button"} variant={"none"}
aria-selected={!namespaceIndex && !projectIndex} onClick={() => router.push(`/`)}>
<Text>Home</Text>
</Button>
{namespaceIndex ? (
<Button paddingSize={"xxs"} key={"orga-button"} variant={"none"}
onClick={() => router.push(`/namespace/${namespaceIndex}`)}
aria-selected={!!namespaceIndex && !projectIndex}>
<Text>Organization</Text>
</Button>
) : (null as any)}
{namespaceIndex && projectIndex ? (
<Button paddingSize={"xxs"} key={"home-button"} variant={"none"}
onClick={() => router.push(`/namespace/${namespaceIndex}/project/${projectIndex}/flow`)}
aria-selected={!!namespaceIndex && !!projectIndex}>
<Text>Project</Text>
</Button>
) : (null as any)}
</ButtonGroup>

</Island>
</Flex>
<Flex align={"center"} style={{gap: ".7rem"}}>
<Button disabled variant={"none"} paddingSize={"xs"}>
<IconSearch size={16}/>
Expand Down
Loading