From 7fb26f58e80a47c7e4f25c5dc441faa2367fa5f7 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 26 Nov 2024 09:28:11 +0100 Subject: [PATCH] improve app editor context panel performance for large apps --- .../contextPanel/ComponentOutput.svelte | 18 +- .../contextPanel/ComponentOutputViewer.svelte | 5 +- .../editor/contextPanel/ContextPanel.svelte | 12 +- .../editor/contextPanel/SubGridOutput.svelte | 5 +- .../components/BackgroundScriptOutput.svelte | 3 +- .../components/MenuItemsOutput.svelte | 3 +- .../contextPanel/components/Output.svelte | 4 +- .../components/OutputHeader.svelte | 168 +++++++++--------- .../components/TableActionsOutput.svelte | 5 +- 9 files changed, 126 insertions(+), 97 deletions(-) diff --git a/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutput.svelte b/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutput.svelte index 1ceb7c1162..a69d8aadd0 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutput.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutput.svelte @@ -15,7 +15,7 @@ export let first: boolean = false export let nested: boolean = false export let expanded: boolean = false - + export let renderRec: boolean = true const { connectingInput } = getContext('AppViewerContext') const name = getComponentNameById(gridItem.id) @@ -41,14 +41,22 @@ ) - + { connectOutput(connectingInput, gridItem?.data?.type, gridItem.data.id, detail) }} /> - - - + + + diff --git a/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte b/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte index e7ef0d9ccb..6988abf138 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/ComponentOutputViewer.svelte @@ -8,7 +8,7 @@ export let componentId: string export let hasContent: boolean = false export let suffix: string = '' - + export let render: boolean = true const { worldStore, connectingInput } = getContext('AppViewerContext') const { search, hasResult } = getContext('ContextPanel') @@ -34,12 +34,13 @@ } } + console.log('componentId', componentId) $: subscribeToAllOutputs($worldStore?.outputsById?.[componentId]) $: filtered = recursivelyFilterInJSON(object, $search, componentId) $: $hasResult[componentId] = Object.keys(filtered).length > 0 -{#if object != undefined && Object.keys(object).length > 0} +{#if render && object != undefined && Object.keys(object).length > 0} {#if $hasResult[componentId] || $search == ''}
State & Context - + { $connectingInput = connectInput($connectingInput, 'ctx', detail) @@ -67,6 +75,7 @@ { diff --git a/frontend/src/lib/components/apps/editor/contextPanel/SubGridOutput.svelte b/frontend/src/lib/components/apps/editor/contextPanel/SubGridOutput.svelte index 7f92a5cd16..1c025bdaaa 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/SubGridOutput.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/SubGridOutput.svelte @@ -11,7 +11,7 @@ export let expanded: boolean = false export let subGrids: string[] export let nameOverrides: string[] | undefined = undefined - + export let render: boolean const { app, connectingInput, worldStore } = getContext('AppViewerContext') let selected = 0 @@ -44,7 +44,7 @@ {#each subgridItems as { k, items }, index (k)}
- {#if subGrids.length > 1} + {#if subGrids.length > 1 && render}
0} {#each items as subGridItem, index (subGridItem.id)} - + { $connectingInput = connectInput($connectingInput, id, detail) diff --git a/frontend/src/lib/components/apps/editor/contextPanel/components/MenuItemsOutput.svelte b/frontend/src/lib/components/apps/editor/contextPanel/components/MenuItemsOutput.svelte index 62f38548dc..2ddb722eb6 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/components/MenuItemsOutput.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/components/MenuItemsOutput.svelte @@ -3,13 +3,14 @@ import Output from './Output.svelte' export let gridItem: GridItem + export let render: boolean
{#if gridItem.data.type === 'menucomponent' && gridItem.data.menuItems.length > 0}
{#each gridItem.data.menuItems as action, index} - + {/each}
{/if} diff --git a/frontend/src/lib/components/apps/editor/contextPanel/components/Output.svelte b/frontend/src/lib/components/apps/editor/contextPanel/components/Output.svelte index 551f8958a8..c030207504 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/components/Output.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/components/Output.svelte @@ -10,10 +10,12 @@ export let id: string export let first: boolean = false export let label: string + export let renderRec: boolean - + { $connectingInput = connectInput($connectingInput, id, detail) diff --git a/frontend/src/lib/components/apps/editor/contextPanel/components/OutputHeader.svelte b/frontend/src/lib/components/apps/editor/contextPanel/components/OutputHeader.svelte index 897c7d77f1..ab089acbae 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/components/OutputHeader.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/components/OutputHeader.svelte @@ -18,6 +18,7 @@ export let selectable: boolean = true export let renamable: boolean = true export let disabled: boolean = false + export let render: boolean = true const { manuallyOpened, search, hasResult } = getContext('ContextPanel') @@ -200,92 +201,95 @@
- - -
{ - if (id !== $hoverStore) { - $hoverStore = id - } - }} - on:mouseleave|stopPropagation={() => { - if ($hoverStore !== undefined) { - $hoverStore = undefined - } - }} - class={classNames( - 'flex items-center justify-between p-1 cursor-pointer gap-1 truncate', - hoverColor[color], - $selectedComponent?.includes(id) - ? openBackground[color] - : $connectingInput.hoveredComponent === id - ? 'bg-[#fab157]' - : 'bg-surface-secondary', - first ? 'border-t' : '', - nested ? 'border-l' : '', - 'transition-all' - )} - on:click={() => { - if (!disabled) { - $manuallyOpened[id] = $manuallyOpened[id] != undefined ? !$manuallyOpened[id] : true - } - }} - id={`output-${id}`} - > -
-
- {#if selectable && !$selectedComponent?.includes(id)} -
- -
- {/if} - - {#if selectable && renamable && $selectedComponent?.includes(id)} -
- {id} - on:selected={() => ($selectedComponent = [id])} - on:save={({ detail }) => renameId(detail)} - />
- {/if} -
-
- {#if ['ctx', 'state'].includes(id)} - - {/if} - {name} -
- {#if !open} - - {:else if $manuallyOpened[id]} - - {:else} - +
+ {#if selectable && !$selectedComponent?.includes(id)} +
+ +
+ {/if} + + {#if selectable && renamable && $selectedComponent?.includes(id)} +
+ ($selectedComponent = [id])} + on:save={({ detail }) => renameId(detail)} + />
{/if}
+
+ {#if ['ctx', 'state'].includes(id)} + + {/if} + {name} +
+ {#if !open} + + {:else if $manuallyOpened[id]} + + {:else} + + {/if} +
+
-
+ {/if} +
- +
diff --git a/frontend/src/lib/components/apps/editor/contextPanel/components/TableActionsOutput.svelte b/frontend/src/lib/components/apps/editor/contextPanel/components/TableActionsOutput.svelte index 979f05e6ed..43eb9717dd 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/components/TableActionsOutput.svelte @@ -3,20 +3,21 @@ import Output from './Output.svelte' export let gridItem: GridItem + export let render: boolean
{#if gridItem.data.type === 'tablecomponent' && gridItem.data.actionButtons.length > 0}
{#each gridItem.data.actionButtons as action, index} - + {/each}
{/if} {#if (gridItem.data.type === 'aggridcomponent' || gridItem.data.type === 'aggridcomponentee' || gridItem.data.type === 'dbexplorercomponent' || gridItem.data.type === 'aggridinfinitecomponent' || gridItem.data.type === 'aggridinfinitecomponentee') && gridItem.data.actions?.length > 0}
{#each gridItem.data.actions as action, index} - + {/each}
{/if}