Skip to content

Commit e29e0dd

Browse files
perf: Do not re-render breakpoint canvas on toggling
1 parent 2c9dca1 commit e29e0dd

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

frontend/src/components/BuilderCanvas.vue

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
background: canvasProps.background,
4444
width: `${breakpoint.width}px`,
4545
}"
46-
v-for="breakpoint in visibleBreakpoints"
46+
v-for="breakpoint in renderedBreakpoints"
47+
v-show="breakpoint.visible"
4748
:key="breakpoint.device">
4849
<div
4950
class="absolute left-0 cursor-pointer select-none text-3xl text-gray-700 dark:text-zinc-300"
@@ -139,6 +140,7 @@ const canvasProps = reactive({
139140
displayName: "Desktop",
140141
width: 1400,
141142
visible: true,
143+
renderedOnce: true,
142144
},
143145
{
144146
icon: "tablet",
@@ -181,10 +183,6 @@ const { isOverDropZone } = useCanvasDropZone(
181183
findBlock,
182184
);
183185
184-
const visibleBreakpoints = computed(() => {
185-
return canvasProps.breakpoints.filter((breakpoint) => breakpoint.visible);
186-
});
187-
188186
onMounted(() => {
189187
const canvasContainerEl = canvasContainer.value as unknown as HTMLElement;
190188
const canvasEl = canvas.value as unknown as HTMLElement;
@@ -280,5 +278,10 @@ function selectBreakpoint(ev: MouseEvent, breakpoint: BreakpointConfig) {
280278
breakpoint.visible = true;
281279
}
282280
}
281+
if (breakpoint.visible) {
282+
breakpoint.renderedOnce = true;
283+
}
283284
}
285+
286+
const renderedBreakpoints = computed(() => canvasProps.breakpoints.filter((bp) => bp.renderedOnce));
284287
</script>

frontend/src/types/Builder/BuilderCanvas.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface BreakpointConfig {
77
displayName: string;
88
width: number;
99
visible: boolean;
10+
renderedOnce: boolean;
1011
}
1112

1213
export interface CanvasProps {

0 commit comments

Comments
 (0)