Skip to content

Commit fff1a1c

Browse files
author
Nico Sammito
authored
Merge pull request #584 from code0-tech/feat/sagittarius-update
Sagittarius update
2 parents 06d08f6 + 8819fec commit fff1a1c

30 files changed

Lines changed: 495 additions & 268 deletions

package-lock.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
"@ariakit/react": "^0.4.17",
2121
"@babel/plugin-proposal-decorators": "^7.28.6",
2222
"@babel/plugin-transform-class-properties": "^7.28.6",
23-
"@code0-tech/sagittarius-graphql-types": "^0.0.0-a2b1f5e9adf8f52b5a0f235ca9906ac5a699b4fc",
23+
"@code0-tech/sagittarius-graphql-types": "^0.0.0-e610ffe24a7dc3cf7b4c285994830412410f229e",
2424
"@dagrejs/dagre": "^2.0.0",
2525
"@mdx-js/react": "^3.1.1",
2626
"@radix-ui/react-checkbox": "^1.3.3",
27+
"@radix-ui/react-context-menu": "^2.2.16",
2728
"@radix-ui/react-dialog": "^1.1.15",
2829
"@radix-ui/react-dropdown-menu": "^2.1.16",
2930
"@radix-ui/react-one-time-password-field": "^0.1.8",
30-
"@radix-ui/react-context-menu": "^2.2.16",
3131
"@radix-ui/react-radio-group": "^1.3.8",
3232
"@radix-ui/react-scroll-area": "^1.2.10",
3333
"@radix-ui/react-tabs": "^1.1.13",
@@ -59,7 +59,6 @@
5959
"cmdk": "^1.1.1",
6060
"concurrently": "^9.2.1",
6161
"css-loader": "^7.1.2",
62-
"react-contenteditable": "^3.3.7",
6362
"html-webpack-plugin": "^5.6.6",
6463
"identity-obj-proxy": "^3.0.0",
6564
"jest-image-snapshot": "^6.5.1",
@@ -68,6 +67,7 @@
6867
"overlap-area": "^1.1.0",
6968
"playwright": "1.57.0",
7069
"react": "^19.2.3",
70+
"react-contenteditable": "^3.3.7",
7171
"react-dom": "^19.2.3",
7272
"react-resizable-panels": "^4.4.0",
7373
"react-zoom-pan-pinch": "^3.7.0",
@@ -95,14 +95,13 @@
9595
],
9696
"types": "dist/index.d.ts",
9797
"peerDependencies": {
98-
"react-contenteditable": "^3.3.7",
9998
"@ariakit/react": "^0.4.17",
100-
"@code0-tech/sagittarius-graphql-types": "0.0.0-a2b1f5e9adf8f52b5a0f235ca9906ac5a699b4fc",
99+
"@code0-tech/sagittarius-graphql-types": "0.0.0-e610ffe24a7dc3cf7b4c285994830412410f229e",
101100
"@radix-ui/react-checkbox": "^1.3.3",
101+
"@radix-ui/react-context-menu": "^2.2.16",
102102
"@radix-ui/react-dialog": "^1.1.15",
103103
"@radix-ui/react-dropdown-menu": "^2.1.16",
104104
"@radix-ui/react-one-time-password-field": "^0.1.8",
105-
"@radix-ui/react-context-menu": "^2.2.16",
106105
"@radix-ui/react-radio-group": "^1.3.8",
107106
"@radix-ui/react-scroll-area": "^1.2.10",
108107
"@radix-ui/react-tabs": "^1.1.13",
@@ -115,6 +114,7 @@
115114
"merge-props": "^6.0.0",
116115
"overlap-area": "^1.1.0",
117116
"react": "^18.0.0 || ^19.0.0",
117+
"react-contenteditable": "^3.3.7",
118118
"react-dom": "^18.0.0 || ^19.0.0",
119119
"react-resizable-panels": "^4.3.1",
120120
"react-zoom-pan-pinch": "^3.7.0",

src/components/button-group/ButtonGroup.style.scss

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,34 @@
88
background: transparent;
99
position: relative;
1010
display: flex;
11-
padding: variables.$xxs;
11+
padding: variables.$xxs / 2;
1212
gap: variables.$xxs;
1313

1414
& {
15-
@include box.box(variables.$primary);
15+
@include box.box(variables.$secondary);
1616
@include helpers.borderRadius();
17+
border-width: 0;
1718
}
1819

1920
.button {
2021
display: inline-flex;
2122
height: 100%;
23+
border-radius: variables.$borderRadius - (variables.$xxs / 2);
2224
}
2325

26+
&__first, &__item {
27+
position: relative;
28+
&:after {
29+
content: '';
30+
position: absolute;
31+
top: 25%;
32+
bottom: 0;
33+
right: -1 * (variables.$xxs / 2);
34+
height: 50%;
35+
width: 1px;
36+
background: helpers.borderColor();
37+
}
38+
}
39+
40+
2441
}

src/components/d-application/DApplication.service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@ import type {
44
ApplicationSettingsUpdateInput,
55
ApplicationSettingsUpdatePayload
66
} from "@code0-tech/sagittarius-graphql-types";
7+
import {Payload} from "../../utils/view";
78

8-
export abstract class DApplicationService extends ReactiveArrayService<Application> {
9+
interface App extends Payload, Application{
10+
11+
}
12+
13+
export abstract class DApplicationService extends ReactiveArrayService<App> {
914

1015
abstract settingsUpdate(payload: ApplicationSettingsUpdateInput): Promise<ApplicationSettingsUpdatePayload | undefined>;
1116

src/components/d-flow-file/DFlowTabDefault.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export const DFlowTabDefault: React.FC<DFlowTabDefaultProps> = (props) => {
130130

131131
if (!parameter) return null
132132

133-
const parameterDefinition = paramDefinitions[parameter.id!!]
133+
const parameterDefinition = paramDefinitions[parameter?.parameterDefinition?.id!!]
134134
const title = parameterDefinition?.names ? parameterDefinition?.names!![0]?.content : parameterDefinition?.id
135135
const description = parameterDefinition?.descriptions ? parameterDefinition?.descriptions!![0]?.content : JSON.stringify(parameterDefinition?.dataTypeIdentifier)
136136

src/components/d-flow-file/DFlowTabs.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ export const DFlowTabs: React.FC<DFlowTabsProps> = (props) => {
4242

4343
const triggerTab = React.useMemo(() => {
4444
if (!flowType?.id) return undefined
45-
return fileTabsStore.find((tab: FileTabsView) => tab.id === flowType.id)
45+
return fileTabsService.values().find((tab: FileTabsView) => tab.id === flowType.id)
4646
}, [fileTabsStore, flowType])
4747

4848
const visibleTabs = React.useMemo(() => {
49-
return fileTabsStore.filter((tab: FileTabsView) => tab.show)
49+
return fileTabsService.values().filter((tab: FileTabsView) => tab.show)
5050
}, [fileTabsStore, triggerTab])
5151

5252
const hiddenTabs = React.useMemo(() => {
53-
return fileTabsStore.filter((tab: FileTabsView) => !tab.show && tab.id !== triggerTab?.id)
53+
return fileTabsService.values().filter((tab: FileTabsView) => !tab.show && tab.id !== triggerTab?.id)
5454
}, [fileTabsStore, triggerTab])
5555

5656
React.useEffect(() => {
@@ -189,11 +189,13 @@ export const DFlowTabs: React.FC<DFlowTabsProps> = (props) => {
189189
</FileTabsTrigger>
190190
})}
191191
</FileTabsList>}>
192-
{fileTabsStore.map((tab: FileTabsView) => (
193-
<FileTabsContent key={`content-${tab.id}`} value={tab.id!}>
194-
{tab.content}
195-
</FileTabsContent>
196-
))}
192+
<>
193+
{fileTabsService.values().map((tab: FileTabsView) => (
194+
<FileTabsContent key={`content-${tab.id}`} value={tab.id!}>
195+
{tab.content}
196+
</FileTabsContent>
197+
))}
198+
</>
197199
</DLayout>
198200
</FileTabs>
199201
);

src/components/d-flow-node/DFlowNodeDefaultCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const DFlowNodeDefaultCard: React.FC<DFlowNodeDefaultCardProps> = memo((p
3737
const definition = React.useMemo(() => node ? functionService.getById(node.functionDefinition?.id!!) : undefined, [functionStore, data, node])
3838
const validation = useNodeValidation(data.nodeId, data.flowId)
3939
const activeTabId = React.useMemo(() => {
40-
return fileTabsStore.find((t: any) => (t as any).active)?.id
40+
return fileTabsService.getActiveTab()?.id
4141
}, [fileTabsStore, fileTabsService]);
4242

4343
const firstItem = useStore((s) => {
@@ -67,7 +67,7 @@ export const DFlowNodeDefaultCard: React.FC<DFlowNodeDefaultCardProps> = memo((p
6767

6868
const displayMessage = React.useMemo(() => splitTemplate(definition?.displayMessages!![0]?.content ?? "").map(item => {
6969
const param = node?.parameters?.nodes?.find(p => {
70-
const parameterDefinition = definition?.parameterDefinitions?.find(pd => pd.id == p?.id)
70+
const parameterDefinition = definition?.parameterDefinitions?.find(pd => pd.id == p?.parameterDefinition?.id)
7171
return parameterDefinition?.identifier == item
7272
})
7373

src/components/d-flow-panel/DFlowPanelControl.tsx

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {DFlowReactiveService} from "../d-flow";
99
import {Flow, NodeFunction} from "@code0-tech/sagittarius-graphql-types";
1010
import {Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipTrigger} from "../tooltip/Tooltip";
1111
import {Text} from "../text/Text";
12-
import {Badge} from "../badge/Badge";
1312
import {DFlowSuggestionMenu} from "../d-flow-suggestion/DFlowSuggestionMenu";
1413
import {useSuggestions} from "../d-flow-suggestion/DFlowSuggestion.hook";
1514

@@ -31,30 +30,30 @@ export const DFlowPanelControl: React.FC<DFlowPanelControlProps> = (props) => {
3130

3231
//memoized values
3332
const activeTab = React.useMemo(() => {
34-
return fileTabsStore.find((t: any) => (t as any).active)
33+
return fileTabsService.values().find((t: any) => (t as any).active)
3534
}, [fileTabsStore, fileTabsService])
3635

3736
const result = useSuggestions(flowId, activeTab?.content?.props?.node?.id as NodeFunction['id'] | undefined)
3837

3938
//callbacks
4039
const deleteActiveNode = React.useCallback(() => {
4140
if (!activeTab) return
42-
if (!(activeTab.content.props.flowId as Flow['id'])) return
41+
if (!(activeTab?.content?.props?.flowId as Flow['id'])) return
4342
// @ts-ignore
4443
startTransition(async () => {
45-
const linkedNodes = flowService.getLinkedNodesById(flowId, activeTab.content.props.node.id)
44+
const linkedNodes = flowService.getLinkedNodesById(flowId, activeTab?.content?.props?.node.id)
4645
linkedNodes.forEach(node => {
4746
if (node.id) fileTabsService.deleteById(node.id)
4847
})
4948

50-
await flowService.deleteNodeById((activeTab.content.props.flowId as Flow['id']), (activeTab.content.props.node.id as NodeFunction['id']))
49+
await flowService.deleteNodeById((activeTab?.content?.props?.flowId as Flow['id']), (activeTab?.content?.props?.node.id as NodeFunction['id']))
5150
})
5251
}, [activeTab, flowService, flowStore])
5352

5453
const addNodeToFlow = React.useCallback((suggestion: any) => {
55-
if (flowId && suggestion.value.__typename === "NodeFunction" && "node" in activeTab.content.props) {
54+
if (flowId && suggestion.value.__typename === "NodeFunction" && "node" in activeTab!.content?.props) {
5655
startTransition(async () => {
57-
await flowService.addNextNodeById(flowId, (activeTab.content.props.node.id as NodeFunction['id']) ?? undefined, suggestion.value)
56+
await flowService.addNextNodeById(flowId, (activeTab?.content?.props.node.id as NodeFunction['id']) ?? undefined, suggestion.value)
5857
})
5958
} else {
6059
startTransition(async () => {
@@ -65,32 +64,37 @@ export const DFlowPanelControl: React.FC<DFlowPanelControlProps> = (props) => {
6564

6665
return <Panel position={"bottom-center"}>
6766
<ButtonGroup>
67+
{/*<Tooltip>*/}
68+
{/* <TooltipTrigger asChild>*/}
69+
{/* <Button paddingSize={"xxs"}*/}
70+
{/* variant={"filled"}*/}
71+
{/* color={"primary"}>*/}
72+
{/* Execute flow*/}
73+
{/* </Button>*/}
74+
{/* </TooltipTrigger>*/}
75+
{/* <TooltipPortal>*/}
76+
{/* <TooltipContent maw={"300px"}>*/}
77+
{/* <Text>*/}
78+
{/* To execute this flow you can call the following endpoint {" "} <br/>*/}
79+
{/* <Badge>*/}
80+
{/* <Text>POST</Text>*/}
81+
{/* </Badge>*/}
82+
{/* <Badge color={"info"} border>*/}
83+
{/* <Text style={{color: "inherit"}}>localhost:6212/72hsa13/users/get</Text>*/}
84+
{/* </Badge>*/}
85+
{/* </Text>*/}
86+
{/* <TooltipArrow/>*/}
87+
{/* </TooltipContent>*/}
88+
{/* </TooltipPortal>*/}
89+
{/*</Tooltip>*/}
6890
<Tooltip>
6991
<TooltipTrigger asChild>
70-
<Button color={"info"} paddingSize={"xxs"} variant={"none"} aria-selected={true}>
71-
Execute flow
72-
</Button>
73-
</TooltipTrigger>
74-
<TooltipPortal>
75-
<TooltipContent maw={"300px"}>
76-
<Text>
77-
To execute this flow you can call the following endpoint {" "} <br/>
78-
<Badge>
79-
<Text>POST</Text>
80-
</Badge>
81-
<Badge color={"info"} border>
82-
<Text style={{color: "inherit"}}>localhost:6212/72hsa13/users/get</Text>
83-
</Badge>
84-
</Text>
85-
<TooltipArrow/>
86-
</TooltipContent>
87-
</TooltipPortal>
88-
</Tooltip>
89-
<Tooltip>
90-
<TooltipTrigger asChild>
91-
<Button disabled={!activeTab || !(activeTab.content.props.flowId as Flow['id'])} onClick={deleteActiveNode} paddingSize={"xxs"} variant={"none"}
92-
color={"primary"}>
93-
<IconTrash size={16}/>
92+
<Button disabled={!activeTab || !(activeTab?.content?.props.flowId as Flow['id'])}
93+
onClick={deleteActiveNode}
94+
paddingSize={"xxs"}
95+
variant={"filled"}
96+
color={"error"}>
97+
<Text>Delete node</Text>
9498
</Button>
9599
</TooltipTrigger>
96100
<TooltipPortal>
@@ -103,10 +107,11 @@ export const DFlowPanelControl: React.FC<DFlowPanelControlProps> = (props) => {
103107
<DFlowSuggestionMenu suggestions={result}
104108
onSuggestionSelect={addNodeToFlow}
105109
triggerContent={
106-
<Button disabled={!activeTab} paddingSize={"xxs"} variant={"none"}
107-
color={"primary"}>
108-
<IconPlus size={16}/>
109-
Next node
110+
<Button disabled={!activeTab}
111+
paddingSize={"xxs"}
112+
variant={"filled"}
113+
color={"secondary"}>
114+
<Text>Add next node</Text>
110115
</Button>
111116
}/>
112117
</ButtonGroup>

src/components/d-flow-panel/DFlowPanelLayout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const DFlowPanelLayout: React.FC<DFlowPanelLayoutProps> = (props) => {
1818
<Tooltip>
1919
<TooltipTrigger asChild>
2020
<SegmentedControlItem value={"horizontal"} display={"flex"}>
21-
<IconLayoutDistributeHorizontal size={16}/>
21+
<IconLayoutDistributeHorizontal size={13}/>
2222
</SegmentedControlItem>
2323
</TooltipTrigger>
2424
<TooltipPortal>
@@ -31,7 +31,7 @@ export const DFlowPanelLayout: React.FC<DFlowPanelLayoutProps> = (props) => {
3131
<Tooltip>
3232
<TooltipTrigger asChild>
3333
<SegmentedControlItem disabled value={"vertical"} display={"flex"}>
34-
<IconLayoutDistributeVertical size={16}/>
34+
<IconLayoutDistributeVertical size={13}/>
3535
</SegmentedControlItem>
3636
</TooltipTrigger>
3737
<TooltipPortal>
@@ -44,7 +44,7 @@ export const DFlowPanelLayout: React.FC<DFlowPanelLayoutProps> = (props) => {
4444
<Tooltip>
4545
<TooltipTrigger asChild>
4646
<SegmentedControlItem disabled value={"manual"} display={"flex"}>
47-
<IconLayout size={16}/>
47+
<IconLayout size={13}/>
4848
</SegmentedControlItem>
4949
</TooltipTrigger>
5050
<TooltipPortal>

src/components/d-flow-panel/DFlowPanelSize.tsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,18 @@ export const DFlowPanelSize: React.FC = () => {
2929
}
3030

3131
return <Panel position="bottom-left">
32-
<Flex style={{flexDirection: "column", gap: "1rem"}}>
33-
<Flex align="center" style={{gap: ".7rem"}}>
34-
<ButtonGroup>
35-
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"} onClick={() => zoomIn()}><IconPlus size={15}/></Button>
36-
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"} onClick={() => zoomOut()}><IconMinus size={15}/></Button>
37-
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"} onClick={() => center()}><IconFocusCentered size={15}/></Button>
38-
</ButtonGroup>
39-
<Badge color={"primary"} style={{border: "none"}}>
40-
<Text>{getCurrentZoomInPercent()}%</Text>
41-
</Badge>
42-
</Flex>
32+
<Flex align="center" style={{gap: ".35rem"}}>
33+
<ButtonGroup>
34+
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"}
35+
onClick={() => zoomIn()}><IconPlus size={13}/></Button>
36+
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"}
37+
onClick={() => zoomOut()}><IconMinus size={13}/></Button>
38+
<Button style={{border: "none"}} paddingSize={"xxs"} color={"secondary"}
39+
onClick={() => center()}><IconFocusCentered size={13}/></Button>
40+
</ButtonGroup>
41+
<Badge color={"primary"} style={{border: "none"}}>
42+
<Text>{getCurrentZoomInPercent()}%</Text>
43+
</Badge>
4344
</Flex>
4445
</Panel>
4546

0 commit comments

Comments
 (0)