Skip to content

feat: migrate to xyflow 1.0 #5840

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 142 commits into from
Jun 12, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
f6f9d09
migrate to xyflow 1
rubenfiszel May 29, 2025
c38ddc8
nits
rubenfiszel May 29, 2025
c427602
nits
rubenfiszel May 29, 2025
e3149e8
iterate
rubenfiszel May 29, 2025
9a8d119
migrate to xyflow 1
rubenfiszel May 30, 2025
6197fe9
perf opt
rubenfiszel May 30, 2025
5dc06f6
perf opt
rubenfiszel May 30, 2025
ec20d26
npm check fix
rubenfiszel May 30, 2025
37d0430
dataflows
rubenfiszel May 30, 2025
2ec6806
Merge branch 'main' into rf/migrateToXyFlow1
rubenfiszel May 30, 2025
6b43267
nits
rubenfiszel May 30, 2025
551f95d
nits
rubenfiszel May 30, 2025
ed533b2
nits
rubenfiszel May 30, 2025
123e4a4
nits
rubenfiszel May 30, 2025
0c7eda2
nits
rubenfiszel May 30, 2025
f077f07
nits
rubenfiszel May 30, 2025
024879c
nits
rubenfiszel May 30, 2025
74048db
Merge branch 'main' into rf/migrateToXyFlow1
rubenfiszel May 31, 2025
1e29396
more types
rubenfiszel Jun 2, 2025
8d835cb
more types
rubenfiszel Jun 2, 2025
2d1eb95
more types
rubenfiszel Jun 2, 2025
692c0e9
update
rubenfiszel Jun 2, 2025
f8ee078
merge
rubenfiszel Jun 3, 2025
35e4ae7
merge
rubenfiszel Jun 3, 2025
5652a24
merge
rubenfiszel Jun 3, 2025
92efcd8
few nits
rubenfiszel Jun 3, 2025
34c7978
npm run check
rubenfiszel Jun 4, 2025
eab8698
npm run check
rubenfiszel Jun 4, 2025
fea6ac5
npm run check
rubenfiszel Jun 4, 2025
5a6ad27
Merge branch 'main' into rf/migrateToXyFlow1
rubenfiszel Jun 4, 2025
c0e6c7c
schema form fix
rubenfiszel Jun 4, 2025
ef517f7
fix forloop
rubenfiszel Jun 4, 2025
ebf9845
fixed pin sync
rubenfiszel Jun 4, 2025
4732f95
fix pin structured Clones
rubenfiszel Jun 4, 2025
afb5991
fix all static unputs
rubenfiszel Jun 4, 2025
aaf87a1
fix pins
rubenfiszel Jun 4, 2025
551d1d1
fix EditableSchemaForm not propagating schema
diegoimbert Jun 4, 2025
34f3f34
Revert "fix EditableSchemaForm not propagating schema"
diegoimbert Jun 4, 2025
8ede660
Migrate flowStore to $state
diegoimbert Jun 5, 2025
c728ec2
fix run() running before state initialization
diegoimbert Jun 5, 2025
557734d
structureClone fixes
diegoimbert Jun 5, 2025
bb41c64
fix inputCat accessed before initialization
diegoimbert Jun 5, 2025
3d9fd38
improve flow graph algorithm
rubenfiszel Jun 8, 2025
333001d
remove console log
rubenfiszel Jun 9, 2025
a5f3c06
fix flowStore not being reacted to
diegoimbert Jun 9, 2025
6ad19d5
fix FlowModuleSchemaMap not updating flowStore when changing modules
diegoimbert Jun 9, 2025
ecc3880
remove flowState.flowState
diegoimbert Jun 9, 2025
897ca58
Revert "remove flowState.flowState"
diegoimbert Jun 9, 2025
f1f4de6
Revert "fix FlowModuleSchemaMap not updating flowStore when changing …
diegoimbert Jun 9, 2025
b19a2c4
Revert "fix flowStore not being reacted to"
diegoimbert Jun 9, 2025
9a50482
Introduce StateStore
diegoimbert Jun 9, 2025
f677f71
fix FlowModuleSchemaMap not updating flowStore when changing modules
diegoimbert Jun 9, 2025
e1c2c45
fix flowStore not being reacted to
diegoimbert Jun 9, 2025
54c6454
refreshStateStore
diegoimbert Jun 9, 2025
ae639a7
fix refreshStateStore
diegoimbert Jun 10, 2025
2956266
fix structuredClone bugs
diegoimbert Jun 10, 2025
356d923
Merge branch 'main' into rf/migrateToXyFlow1
diegoimbert Jun 10, 2025
99446fc
fix npm run check after merge main
diegoimbert Jun 10, 2025
72ace32
fix editableschemaform not triggering change
diegoimbert Jun 10, 2025
32771fe
commit current
rubenfiszel Jun 10, 2025
d623210
read flowStore recursively to react to every nested change
diegoimbert Jun 10, 2025
a487e9b
fix branch one not deletable (not insertable)
diegoimbert Jun 10, 2025
1c80308
Fix FlowPreviewContent infinite loop
diegoimbert Jun 10, 2025
1fc739e
commit current
rubenfiszel Jun 10, 2025
9b9c1d2
initialise args to avoid binding to undefined
diegoimbert Jun 10, 2025
e2531be
fix script 404
diegoimbert Jun 10, 2025
3af6b7e
svelte migrate script edit and add pages + fix infinite loop
diegoimbert Jun 10, 2025
d935aa6
script editor works again
diegoimbert Jun 10, 2025
4e43438
fix missing onremove in multiselect
diegoimbert Jun 10, 2025
ebff32e
switch back to normal $state and not raw state
diegoimbert Jun 10, 2025
92f6ea8
fix inputCat accessed before initialisation
diegoimbert Jun 10, 2025
8cac97b
Migrate all Drawer actions slots to snippets
diegoimbert Jun 10, 2025
478a159
previewArgs val
rubenfiszel Jun 10, 2025
23f314d
revert states.raw
rubenfiszel Jun 10, 2025
d831de6
finish
rubenfiszel Jun 10, 2025
4fcb346
iterate
rubenfiszel Jun 10, 2025
d377eac
iterate
rubenfiszel Jun 10, 2025
31de3ec
iterate
rubenfiszel Jun 10, 2025
5a4f201
iterate
rubenfiszel Jun 10, 2025
2c71604
iterate
rubenfiszel Jun 10, 2025
dcce029
fix runform
rubenfiszel Jun 11, 2025
dd6ca9b
fix historicinputs
rubenfiszel Jun 11, 2025
eba01ff
apply diff state snapshot
rubenfiszel Jun 11, 2025
c05c2ed
pin fix
rubenfiszel Jun 11, 2025
0f5ad42
fix scheduled poll
rubenfiszel Jun 11, 2025
0bb2d64
schema editor fixes
rubenfiszel Jun 11, 2025
3749c21
fix ToggleButtonGroup resetting state on mount
diegoimbert Jun 11, 2025
b25b766
fix argInput infinite loop
diegoimbert Jun 11, 2025
3ef6910
nits
rubenfiszel Jun 11, 2025
99aa594
Revert "fix ToggleButtonGroup resetting state on mount"
diegoimbert Jun 11, 2025
fbc3989
fix
rubenfiszel Jun 11, 2025
b795bd1
fix
rubenfiszel Jun 11, 2025
9f35d09
migrate ArgEnum to <Select />
diegoimbert Jun 11, 2025
f0e4c06
fix
rubenfiszel Jun 11, 2025
fd715c9
fix structuredClone bug
diegoimbert Jun 11, 2025
2511792
improve tabs
rubenfiszel Jun 11, 2025
b7ed8e1
fix runs table
rubenfiszel Jun 11, 2025
a3d5a92
fix ai chat open
rubenfiszel Jun 11, 2025
944cba0
fix tabs export
rubenfiszel Jun 11, 2025
49a9294
stash
diegoimbert Jun 11, 2025
cb7ece9
Update all Tabs usage to snippet
diegoimbert Jun 11, 2025
a40d7ff
nit fixes
diegoimbert Jun 11, 2025
ede9b56
add untracks to $effect when intended
diegoimbert Jun 11, 2025
d6eb7af
Fix incomplete data in graphBuilder + better typing
diegoimbert Jun 11, 2025
346b44d
Fix CSSMigrationModal on safari
diegoimbert Jun 11, 2025
40eea6f
nits
rubenfiszel Jun 11, 2025
ac57501
nit
rubenfiszel Jun 11, 2025
be36fe0
Fix reactivity bugs in Suspend -> Form -> Edit field drawer
diegoimbert Jun 11, 2025
c06ae9a
nit
rubenfiszel Jun 11, 2025
29b6ad1
nit
rubenfiszel Jun 11, 2025
c191622
nit
rubenfiszel Jun 11, 2025
ba6fa62
nit
rubenfiszel Jun 11, 2025
bc5b5f2
toggle button group
rubenfiszel Jun 11, 2025
f2122af
toggle button group
rubenfiszel Jun 11, 2025
cedfaf9
toggle button group
rubenfiszel Jun 11, 2025
00fd15c
toggle button group
rubenfiszel Jun 11, 2025
f53e0a4
toggle button group
rubenfiszel Jun 11, 2025
fe56b54
more migration
rubenfiszel Jun 12, 2025
7640b30
fix let: directive no longer supported with snippets
diegoimbert Jun 12, 2025
7bc379e
more migration
rubenfiszel Jun 12, 2025
c97f9e1
replace className with class
diegoimbert Jun 12, 2025
a065630
more migration
rubenfiszel Jun 12, 2025
7c57072
npm run check pass 1
diegoimbert Jun 12, 2025
2f353e9
fix css property panel infinite loop
diegoimbert Jun 12, 2025
2b3676c
more migration
rubenfiszel Jun 12, 2025
fe2943f
change layouts
rubenfiszel Jun 12, 2025
bbbaac0
change layouts
rubenfiszel Jun 12, 2025
4ef5a66
change layouts
rubenfiszel Jun 12, 2025
2a23972
app = app
rubenfiszel Jun 12, 2025
755b896
fix audit logs
rubenfiszel Jun 12, 2025
d716640
nit
rubenfiszel Jun 12, 2025
5c9a334
Replaced some Autocompletes
diegoimbert Jun 12, 2025
896713a
nit
rubenfiszel Jun 12, 2025
789be79
fix infinite loop
diegoimbert Jun 12, 2025
279774b
remove state
diegoimbert Jun 12, 2025
c8d2279
Revert "Replaced some Autocompletes"
diegoimbert Jun 12, 2025
46f2e46
fix infinite lists
rubenfiszel Jun 12, 2025
0ff4af9
fix infinite lists
rubenfiszel Jun 12, 2025
b736f95
fix multiselect
rubenfiszel Jun 12, 2025
61e4aa8
fix duplicate overlapping refresh button on AgGrid
diegoimbert Jun 12, 2025
3774b2d
nit
diegoimbert Jun 12, 2025
a3843b4
fix loading resource ext
rubenfiszel Jun 12, 2025
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
Prev Previous commit
Next Next commit
npm run check
  • Loading branch information
rubenfiszel committed Jun 4, 2025
commit 34c7978bb11214c5452a09e003dde5a1aa702a54
12 changes: 12 additions & 0 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@
"svelte-exmarkdown": "^5.0.0",
"svelte-infinite-loading": "^1.4.0",
"svelte-tiny-virtual-list": "^2.0.5",
"@tutorlatin/svelte-tiny-virtual-list": "^3.0.2",
"tailwind-merge": "^1.13.2",
"vscode": "npm:@codingame/monaco-vscode-extension-api@~16.1.1",
"vscode-languageclient": "~9.0.1",
Expand Down
171 changes: 101 additions & 70 deletions frontend/src/lib/components/DisplayResult.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<script lang="ts">
import DisplayResult from './DisplayResult.svelte'

import { Highlight } from 'svelte-highlight'
import { json } from 'svelte-highlight/languages'
import { copyToClipboard, roughSizeOfObject } from '$lib/utils'
Expand Down Expand Up @@ -38,22 +40,6 @@
import { toJsonStr } from '$lib/utils'
import { createDispatcherIfMounted } from '$lib/createDispatcherIfMounted'

export let result: any
export let requireHtmlApproval = false
export let filename: string | undefined = undefined
export let disableExpand = false
export let jobId: string | undefined = undefined
export let workspaceId: string | undefined = undefined
export let hideAsJson: boolean = false
export let noControls: boolean = false
export let drawerOpen = false
export let nodeId: string | undefined = undefined
export let language: string | undefined = undefined
export let appPath: string | undefined = undefined
export let customUi: DisplayResultUi | undefined = undefined
export let isTest: boolean = true
export let externalToolbarAvailable: boolean = false

const IMG_MAX_SIZE = 10000000
const TABLE_MAX_SIZE = 5000000
const DISPLAY_MAX_SIZE = 100000
Expand Down Expand Up @@ -82,14 +68,53 @@
| 'map'
| 'nondisplayable'
| 'pdf'
| undefined
| undefined = $state()

let hasBigInt = false
$: resultKind = inferResultKind(result)
let hasBigInt = $state(false)

interface Props {
result: any
requireHtmlApproval?: boolean
filename?: string | undefined
disableExpand?: boolean
jobId?: string | undefined
workspaceId?: string | undefined
hideAsJson?: boolean
noControls?: boolean
drawerOpen?: boolean
nodeId?: string | undefined
language?: string | undefined
appPath?: string | undefined
customUi?: DisplayResultUi | undefined
isTest?: boolean
externalToolbarAvailable?: boolean
forceJson?: boolean
copilot_fix?: import('svelte').Snippet
children?: import('svelte').Snippet
}

export let forceJson = false
let enableHtml = false
let s3FileDisplayRawMode = false
let {
result,
requireHtmlApproval = false,
filename = undefined,
disableExpand = false,
jobId = undefined,
workspaceId = undefined,
hideAsJson = false,
noControls = false,
drawerOpen = $bindable(false),
nodeId = undefined,
language = undefined,
appPath = undefined,
customUi = undefined,
isTest = true,
externalToolbarAvailable = false,
forceJson = $bindable(false),
copilot_fix,
children
}: Props = $props()
let enableHtml = $state(false)
let s3FileDisplayRawMode = $state(false)

function isTableRow(result: any): boolean {
return Array.isArray(result) && result.every((x) => Array.isArray(x))
Expand Down Expand Up @@ -125,14 +150,14 @@
)
}

let largeObject: boolean | undefined = undefined
let largeObject: boolean | undefined = $state(undefined)

function checkIfS3(result: any, keys: string[]) {
return keys.includes('s3') && typeof result.s3 === 'string'
}

let is_render_all = false
let download_as_csv = false
let is_render_all = $state(false)
let download_as_csv = $state(false)
function inferResultKind(result: any) {
try {
if (result === 'WINDMILL_TOO_BIG') {
Expand Down Expand Up @@ -267,8 +292,8 @@
return 'json'
}

let jsonViewer: Drawer
let s3FileViewer: S3FilePicker
let jsonViewer: Drawer | undefined = $state()
let s3FileViewer: S3FilePicker | undefined = $state()

function checkIfHasBigInt(result: any) {
if (typeof result === 'number' && Number.isInteger(result) && !Number.isSafeInteger(result)) {
Expand Down Expand Up @@ -386,20 +411,20 @@
}

export function openDrawer() {
jsonViewer.openDrawer()
jsonViewer?.openDrawer()
}

let globalForceJson: boolean = false
let globalForceJson: boolean = $state(false)

let seeS3PreviewFileFromList = ''
let seeS3PreviewFileFromList = $state('')

const disableTooltips = hasContext('disableTooltips')
? getContext('disableTooltips') === true
: false

let resultHeaderHeight = 0
let resultHeaderHeight = $state(0)

let toolbarLocation: 'self' | 'external' | undefined = undefined
let toolbarLocation: 'self' | 'external' | undefined = $state(undefined)
function chooseToolbarLocation(shouldShowToolbar: boolean, resultHeaderHeight: number) {
if (!shouldShowToolbar) {
toolbarLocation = undefined
Expand All @@ -415,20 +440,24 @@
return toolbarLocation
}

$: chooseToolbarLocation(
!is_render_all &&
resultKind != 'nondisplayable' &&
result != undefined &&
length != undefined &&
largeObject != undefined &&
!disableExpand &&
!noControls,
resultHeaderHeight
)

onDestroy(() => {
dispatch('toolbar-location-changed', undefined)
})
$effect(() => {
resultKind = inferResultKind(result)
})
$effect(() => {
chooseToolbarLocation(
!is_render_all &&
resultKind != 'nondisplayable' &&
result != undefined &&
length != undefined &&
largeObject != undefined &&
!disableExpand &&
!noControls,
resultHeaderHeight
)
})
</script>

<HighlightTheme />
Expand All @@ -442,17 +471,18 @@
on:selected={(ev) => {
globalForceJson = ev.detail === 'json'
}}
let:item
>
<ToggleButton class="px-1.5" value="pretty" label="Pretty" icon={Highlighter} {item} />
{#snippet children({ item })}
<ToggleButton class="px-1.5" value="pretty" label="Pretty" icon={Highlighter} {item} />

<ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} {item} />
<ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} {item} />
{/snippet}
</ToggleButtonGroup>
</div>
{/if}
<div class="flex flex-col w-full gap-10">
{#each result['render_all'] as res}
<svelte:self
<DisplayResult
{noControls}
result={res}
{requireHtmlApproval}
Expand Down Expand Up @@ -484,30 +514,31 @@
{#if !hideAsJson && !['json', 's3object'].includes(resultKind ?? '') && typeof result === 'object'}<ToggleButtonGroup
class="h-6"
selected={forceJson ? 'json' : resultKind?.startsWith('table-') ? 'table' : 'pretty'}
let:item
on:selected={(ev) => {
forceJson = ev.detail === 'json'
}}
>
{#if ['table-col', 'table-row', 'table-row-object'].includes(resultKind ?? '')}
<ToggleButton class="px-1.5" value="table" label="Table" icon={Table2} {item} />
{:else}
<ToggleButton
class="px-1.5"
value="pretty"
label="Pretty"
icon={Highlighter}
{item}
/>
{/if}
<ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} {item} />
{#snippet children({ item })}
{#if ['table-col', 'table-row', 'table-row-object'].includes(resultKind ?? '')}
<ToggleButton class="px-1.5" value="table" label="Table" icon={Table2} {item} />
{:else}
<ToggleButton
class="px-1.5"
value="pretty"
label="Pretty"
icon={Highlighter}
{item}
/>
{/if}
<ToggleButton class="px-1.5" value="json" label="JSON" icon={Braces} {item} />
{/snippet}
</ToggleButtonGroup>
{/if}
</div>

<div class="text-secondary text-xs flex gap-2.5 z-10 items-center">
{#if customUi?.disableAiFix !== true}
<slot name="copilot_fix" />
{@render copilot_fix?.()}
{/if}
{#if toolbarLocation === 'self'}
<!-- TODO : When svelte 5 is released, use a snippet to pass the toolbar to a parent -->
Expand Down Expand Up @@ -647,7 +678,7 @@
>{JSON.stringify(result.error.extra, null, 4)}</pre
>
{/if}
<slot />
{@render children?.()}
</div>
{#if !isTest && language === 'bun'}
<div class="pt-20"></div>
Expand Down Expand Up @@ -723,7 +754,7 @@
/>
<button
class="text-secondary underline text-2xs whitespace-nowrap"
on:click={() => {
onclick={() => {
s3FileViewer?.open?.(result)
}}
><span class="flex items-center gap-1"
Expand All @@ -738,7 +769,7 @@
<FileDownload {workspaceId} s3object={result} {appPath} />
<button
class="text-secondary underline text-2xs whitespace-nowrap"
on:click={() => {
onclick={() => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change replaces Svelte's event binding (on:click) with the standard HTML attribute (onclick). This looks like a typographical error; please confirm if this is intentional.

Suggested change
onclick={() => {
on:click={() => {

s3FileViewer?.open?.(result)
}}
><span class="flex items-center gap-1"
Expand Down Expand Up @@ -813,7 +844,7 @@
/>
<button
class="text-secondary text-2xs whitespace-nowrap"
on:click={() => {
onclick={() => {
s3FileViewer?.open?.(s3object)
}}
><span class="flex items-center gap-1"
Expand All @@ -835,7 +866,7 @@
/>{:else}
<button
class="text-secondary whitespace-nowrap flex gap-2 items-center"
on:click={() => {
onclick={() => {
seeS3PreviewFileFromList = s3object?.s3
}}
>open table preview <ArrowDownFromLine />
Expand All @@ -855,7 +886,7 @@
{:else}
<button
class="text-secondary whitespace-nowrap flex gap-2 items-center"
on:click={() => {
onclick={() => {
seeS3PreviewFileFromList = s3object?.s3
}}
>open image preview <ArrowDownFromLine />
Expand Down Expand Up @@ -956,7 +987,7 @@
{#if !disableExpand && !noControls}
<Drawer bind:this={jsonViewer} bind:open={drawerOpen} size="900px">
<DrawerContent title="Expanded Result" on:close={jsonViewer.closeDrawer}>
<svelte:fragment slot="actions">
{#snippet actions()}
{#if customUi?.disableDownload !== true}
<Button
download="{filename ?? 'result'}.json"
Expand All @@ -982,8 +1013,8 @@
>
Copy to clipboard
</Button>
</svelte:fragment>
<svelte:self
{/snippet}
<DisplayResult
{noControls}
{result}
{requireHtmlApproval}
Expand Down
Loading
Loading