From 41537c1552ba378395670a3d8d0c61f395ffa425 Mon Sep 17 00:00:00 2001
From: Federico Ruggi <1081051+ruggi@users.noreply.github.com>
Date: Tue, 1 Oct 2024 16:36:38 +0200
Subject: [PATCH] Don't show active alignment for flow elements, grey out XY
controls for grid/flex children (#6433)
**Problem:**
1. Alignment controls should not look active for flow elements
2. XY controls should be greyed out for flex/grid children
**Fix:**
Do that.
Fixes #6431 #6432
---
.../inspector/alignment-buttons.tsx | 8 +++++
.../frame-updating-layout-section.tsx | 10 ++++++
...performance-regression-tests.spec.tsx.snap | 32 -------------------
.../performance-regression-tests.spec.tsx | 8 ++---
4 files changed, 22 insertions(+), 36 deletions(-)
diff --git a/editor/src/components/inspector/alignment-buttons.tsx b/editor/src/components/inspector/alignment-buttons.tsx
index b99efdfd7de9..b3c9c51d4d73 100644
--- a/editor/src/components/inspector/alignment-buttons.tsx
+++ b/editor/src/components/inspector/alignment-buttons.tsx
@@ -252,6 +252,14 @@ function useActiveAlignments(): ActiveAlignments {
if (selectedViews.current.length === 0) {
return false
}
+
+ // Only flex/grid children can have active alignments, because they would mean nothing for flow elements.
+ if (
+ !selectedViews.current.every((view) => MetadataUtils.isFlexOrGridChild(jsxMetadata, view))
+ ) {
+ return false
+ }
+
return selectedViews.current.every((view) => {
const isFlexOrGridChild = MetadataUtils.isFlexOrGridChild(jsxMetadata, view)
const { align, justify } = MetadataUtils.getRelativeAlignJustify(jsxMetadata, view)
diff --git a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx
index 794b24cbe1d9..92d1aaa6f306 100644
--- a/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx
+++ b/editor/src/components/inspector/sections/layout-section/self-layout-subsection/frame-updating-layout-section.tsx
@@ -285,6 +285,12 @@ export const FrameUpdatingLayoutSection = React.memo(() => {
[dispatch, metadataRef, originalGlobalFrame, projectContentsRef, selectedViewsRef],
)
+ const disableXYControls = React.useMemo(() => {
+ return selectedViewsRef.current.some((view) =>
+ MetadataUtils.isFlexOrGridChild(metadataRef.current, view),
+ )
+ }, [selectedViewsRef, metadataRef])
+
return (
<>
@@ -294,6 +300,7 @@ export const FrameUpdatingLayoutSection = React.memo(() => {
updateFrame={updateFrame}
currentValues={originalLTWHValues.left}
invalid={invalidPins.left || invalidPins.right} // currently showing red for BOTH directions
+ disabled={disableXYControls}
/>
{
updateFrame={updateFrame}
currentValues={originalLTWHValues.top}
invalid={invalidPins.top || invalidPins.bottom} // currently showing red for BOTH directions
+ disabled={disableXYControls}
/>
@@ -363,6 +371,7 @@ interface LayoutPinPropertyControlProps {
currentValues: Array
updateFrame: (frameUpdate: FrameUpdate, transient: boolean) => void
invalid?: boolean
+ disabled?: boolean
}
function getSingleCommonValue(currentValues: Array): number | null {
@@ -449,6 +458,7 @@ const FrameUpdatingLayoutControl = React.memo((props: LayoutPinPropertyControlPr
defaultUnitToHide={'px'}
stepSize={1}
innerLabel={props.label}
+ style={{ opacity: props.disabled ? 0.5 : 1 }}
/>
)
diff --git a/editor/src/core/performance/__snapshots__/performance-regression-tests.spec.tsx.snap b/editor/src/core/performance/__snapshots__/performance-regression-tests.spec.tsx.snap
index 8f9197517fbc..3ad187ea0f3f 100644
--- a/editor/src/core/performance/__snapshots__/performance-regression-tests.spec.tsx.snap
+++ b/editor/src/core/performance/__snapshots__/performance-regression-tests.spec.tsx.snap
@@ -385,14 +385,6 @@ Array [
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-unset'",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)(Separator)",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-distribute-horizontal'",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
@@ -1111,14 +1103,6 @@ Array [
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-unset'",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)(Separator)",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-distribute-horizontal'",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
@@ -2001,14 +1985,6 @@ Array [
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-unset'",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)(Separator)",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-distribute-horizontal'",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
@@ -3050,14 +3026,6 @@ Array [
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-unset'",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)(Separator)",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
- "/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//span",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.forward_ref)(EmotionCssPropInternal):data-testid='item-container-distribute-horizontal'",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//Symbol(react.memo)()",
"/Symbol(react.forward_ref)(EmotionCssPropInternal)/div//div",
diff --git a/editor/src/core/performance/performance-regression-tests.spec.tsx b/editor/src/core/performance/performance-regression-tests.spec.tsx
index b5f21e06e6c8..0398f133d305 100644
--- a/editor/src/core/performance/performance-regression-tests.spec.tsx
+++ b/editor/src/core/performance/performance-regression-tests.spec.tsx
@@ -65,7 +65,7 @@ describe('React Render Count Tests -', () => {
const renderCountAfter = renderResult.getNumberOfRenders()
// if this breaks, GREAT NEWS but update the test please :)
- expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`864`)
+ expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`856`)
expect(renderResult.getRenderInfo()).toMatchSnapshot()
})
@@ -127,7 +127,7 @@ describe('React Render Count Tests -', () => {
const renderCountAfter = renderResult.getNumberOfRenders()
// if this breaks, GREAT NEWS but update the test please :)
- expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`1116`)
+ expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`1108`)
expect(renderResult.getRenderInfo()).toMatchSnapshot()
})
@@ -183,7 +183,7 @@ describe('React Render Count Tests -', () => {
const renderCountAfter = renderResult.getNumberOfRenders()
// if this breaks, GREAT NEWS but update the test please :)
- expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`657`)
+ expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`649`)
expect(renderResult.getRenderInfo()).toMatchSnapshot()
})
@@ -249,7 +249,7 @@ describe('React Render Count Tests -', () => {
const renderCountAfter = renderResult.getNumberOfRenders()
// if this breaks, GREAT NEWS but update the test please :)
- expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`782`)
+ expect(renderCountAfter - renderCountBefore).toMatchInlineSnapshot(`774`)
expect(renderResult.getRenderInfo()).toMatchSnapshot()
})
})