Skip to content

Commit a66a674

Browse files
authored
chore: Rename editable block component (#4489)
## Description ref #3994 ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
1 parent 974f613 commit a66a674

File tree

14 files changed

+116
-137
lines changed

14 files changed

+116
-137
lines changed

apps/builder/app/builder/features/navigator/navigator-tree.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
} from "@webstudio-is/design-system";
2222
import {
2323
collectionComponent,
24-
editableBlockComponent,
24+
blockComponent,
2525
rootComponent,
2626
showAttribute,
2727
WsComponentMeta,
@@ -34,7 +34,7 @@ import {
3434
} from "@webstudio-is/icons";
3535
import {
3636
$dragAndDropState,
37-
$editableBlockChildOutline,
37+
$blockChildOutline,
3838
$editingItemSelector,
3939
$hoveredInstanceSelector,
4040
$instances,
@@ -424,7 +424,7 @@ const canDrag = (instance: Instance, instanceSelector: InstanceSelector) => {
424424
return false;
425425
}
426426

427-
if (parentInstance.component !== editableBlockComponent) {
427+
if (parentInstance.component !== blockComponent) {
428428
return false;
429429
}
430430
}
@@ -453,16 +453,16 @@ const canDrop = (
453453
// Allow dropping into the parent only
454454
const isSameParent = dragSelector[1] === dropSelector[0];
455455

456-
const isDropTargetEditableBlock =
456+
const isDropTargetBlock =
457457
isSameParent &&
458-
instances.get(dropSelector[0])?.component === editableBlockComponent;
458+
instances.get(dropSelector[0])?.component === blockComponent;
459459

460460
if ($isContentMode.get()) {
461-
return isDropTargetEditableBlock && dropTarget.indexWithinChildren > 0;
461+
return isDropTargetBlock && dropTarget.indexWithinChildren > 0;
462462
}
463463

464-
if (isDropTargetEditableBlock && dropTarget.indexWithinChildren === 0) {
465-
// We want Templates to be the first child of the editable block
464+
if (isDropTargetBlock && dropTarget.indexWithinChildren === 0) {
465+
// We want Templates to be the first child of the content block
466466
return false;
467467
}
468468

@@ -631,7 +631,7 @@ export const NavigatorTree = () => {
631631
buttonProps={{
632632
onMouseEnter: () => {
633633
$hoveredInstanceSelector.set(item.selector);
634-
$editableBlockChildOutline.set(undefined);
634+
$blockChildOutline.set(undefined);
635635
},
636636
onMouseLeave: () => $hoveredInstanceSelector.set(undefined),
637637
onClick: () => selectInstance(item.selector),

apps/builder/app/builder/features/workspace/canvas-tools/canvas-tools.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { ResizeHandles } from "./resize-handles";
1919
import { MediaBadge } from "./media-badge";
2020
import { applyScale } from "./outline";
2121
import { $scale } from "~/builder/shared/nano-states";
22-
import { EditableBlockChildHoveredInstanceOutline } from "./outline/editable-block-instance-outline";
22+
import { BlockChildHoveredInstanceOutline } from "./outline/editable-block-instance-outline";
2323

2424
const containerStyle = css({
2525
position: "absolute",
@@ -76,7 +76,7 @@ export const CanvasTools = () => {
7676
<CollaborativeInstanceOutline />
7777
<TextToolbar />
7878

79-
<EditableBlockChildHoveredInstanceOutline />
79+
<BlockChildHoveredInstanceOutline />
8080
</>
8181
)}
8282
</>

apps/builder/app/builder/features/workspace/canvas-tools/outline/editable-block-instance-outline.tsx

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { useStore } from "@nanostores/react";
22
import {
3-
$editableBlockChildOutline,
3+
$blockChildOutline,
44
$instances,
55
$isContentMode,
66
$registeredComponentMetas,
7-
type EditableBlockChildOutline,
7+
type BlockChildOutline,
88
} from "~/shared/nano-states";
99
import {
1010
Box,
@@ -23,7 +23,7 @@ import {
2323
Text,
2424
iconButtonSize,
2525
} from "@webstudio-is/design-system";
26-
import { EditableBlockChildAddButtonOutline } from "./outline";
26+
import { BlockChildAddButtonOutline } from "./outline";
2727
import { applyScale } from "./apply-scale";
2828
import { $scale } from "~/builder/shared/nano-states";
2929
import { PlusIcon } from "@webstudio-is/icons";
@@ -33,8 +33,8 @@ import { isFeatureEnabled } from "@webstudio-is/feature-flags";
3333
import type { DroppableTarget, InstanceSelector } from "~/shared/tree-utils";
3434
import type { Instance, Instances } from "@webstudio-is/sdk";
3535
import {
36-
editableBlockComponent,
37-
editableBlockTemplateComponent,
36+
blockComponent,
37+
blockTemplateComponent,
3838
} from "@webstudio-is/react-sdk";
3939
import {
4040
extractWebstudioFragment,
@@ -47,7 +47,7 @@ import {
4747
import { shallowEqual } from "shallow-equal";
4848
import { MetaIcon } from "~/builder/shared/meta-icon";
4949

50-
export const findEditableBlockSelector = (
50+
export const findBlockSelector = (
5151
anchor: InstanceSelector,
5252
instances: Instances
5353
) => {
@@ -59,7 +59,7 @@ export const findEditableBlockSelector = (
5959
return;
6060
}
6161

62-
let editableBlockInstanceSelector: InstanceSelector | undefined = undefined;
62+
let blockInstanceSelector: InstanceSelector | undefined = undefined;
6363

6464
for (let i = 0; i < anchor.length; ++i) {
6565
const instanceId = anchor[i];
@@ -69,40 +69,37 @@ export const findEditableBlockSelector = (
6969
return;
7070
}
7171

72-
if (instance.component === editableBlockComponent) {
73-
editableBlockInstanceSelector = anchor.slice(i);
72+
if (instance.component === blockComponent) {
73+
blockInstanceSelector = anchor.slice(i);
7474
break;
7575
}
7676
}
7777

78-
if (editableBlockInstanceSelector === undefined) {
78+
if (blockInstanceSelector === undefined) {
7979
return;
8080
}
8181

82-
return editableBlockInstanceSelector;
82+
return blockInstanceSelector;
8383
};
8484

8585
const findTemplates = (anchor: InstanceSelector, instances: Instances) => {
86-
const editableBlockInstanceSelector = findEditableBlockSelector(
87-
anchor,
88-
instances
89-
);
90-
if (editableBlockInstanceSelector === undefined) {
86+
const blockInstanceSelector = findBlockSelector(anchor, instances);
87+
if (blockInstanceSelector === undefined) {
9188
toast.error("Editable block not found");
9289
return;
9390
}
9491

95-
const editableBlockInstance = instances.get(editableBlockInstanceSelector[0]);
92+
const blockInstance = instances.get(blockInstanceSelector[0]);
9693

97-
if (editableBlockInstance === undefined) {
94+
if (blockInstance === undefined) {
9895
toast.error("Editable block instance not found");
9996
return;
10097
}
10198

102-
const templateInstanceId = editableBlockInstance.children.find(
99+
const templateInstanceId = blockInstance.children.find(
103100
(child) =>
104101
child.type === "id" &&
105-
instances.get(child.value)?.component === editableBlockTemplateComponent
102+
instances.get(child.value)?.component === blockTemplateComponent
106103
)?.value;
107104

108105
if (templateInstanceId === undefined) {
@@ -125,7 +122,7 @@ const findTemplates = (anchor: InstanceSelector, instances: Instances) => {
125122
.filter((child) => child !== undefined)
126123
.map((child) => [
127124
child,
128-
[child.id, templateInstanceId, ...editableBlockInstanceSelector],
125+
[child.id, templateInstanceId, ...blockInstanceSelector],
129126
]);
130127

131128
return result;
@@ -136,29 +133,27 @@ const getInsertionIndex = (
136133
instances: Instances,
137134
insertBefore: boolean = false
138135
) => {
139-
const editableBlockSelector = findEditableBlockSelector(anchor, instances);
140-
if (editableBlockSelector === undefined) {
136+
const blockSelector = findBlockSelector(anchor, instances);
137+
if (blockSelector === undefined) {
141138
return;
142139
}
143140

144-
const insertAtInitialPosition = shallowEqual(editableBlockSelector, anchor);
141+
const insertAtInitialPosition = shallowEqual(blockSelector, anchor);
145142

146-
const editableBlockInstance = instances.get(editableBlockSelector[0]);
143+
const blockInstance = instances.get(blockSelector[0]);
147144

148-
if (editableBlockInstance === undefined) {
145+
if (blockInstance === undefined) {
149146
toast.error("Editable block instance not found");
150147
return;
151148
}
152149

153-
const index = editableBlockInstance.children.findIndex((child) => {
150+
const index = blockInstance.children.findIndex((child) => {
154151
if (child.type !== "id") {
155152
return false;
156153
}
157154

158155
if (insertAtInitialPosition) {
159-
return (
160-
instances.get(child.value)?.component === editableBlockTemplateComponent
161-
);
156+
return instances.get(child.value)?.component === blockTemplateComponent;
162157
}
163158

164159
return child.value === anchor[0];
@@ -256,10 +251,7 @@ const TemplatesMenu = ({
256251
templateSelector[0]
257252
);
258253

259-
const parentSelector = findEditableBlockSelector(
260-
anchor,
261-
instances
262-
);
254+
const parentSelector = findBlockSelector(anchor, instances);
263255

264256
if (parentSelector === undefined) {
265257
return;
@@ -322,19 +314,19 @@ const TemplatesMenu = ({
322314
);
323315
};
324316

325-
export const EditableBlockChildHoveredInstanceOutline = () => {
326-
const editableBlockChildOutline = useStore($editableBlockChildOutline);
317+
export const BlockChildHoveredInstanceOutline = () => {
318+
const blockChildOutline = useStore($blockChildOutline);
327319
const scale = useStore($scale);
328320
const isContentMode = useStore($isContentMode);
329321

330322
const timeoutRef = useRef<undefined | ReturnType<typeof setTimeout>>(
331323
undefined
332324
);
333325
const [buttonOutline, setButtonOutline] = useState<
334-
undefined | EditableBlockChildOutline
326+
undefined | BlockChildOutline
335327
>(undefined);
336328

337-
const outline = editableBlockChildOutline ?? buttonOutline;
329+
const outline = blockChildOutline ?? buttonOutline;
338330

339331
const [isMenuOpen, setIsMenuOpen] = useState(false);
340332

@@ -353,7 +345,7 @@ export const EditableBlockChildHoveredInstanceOutline = () => {
353345
const rect = applyScale(outline.rect, scale);
354346

355347
return (
356-
<EditableBlockChildAddButtonOutline rect={rect}>
348+
<BlockChildAddButtonOutline rect={rect}>
357349
<Flex
358350
css={{
359351
width: "min-content",
@@ -399,6 +391,6 @@ export const EditableBlockChildHoveredInstanceOutline = () => {
399391
</IconButton>
400392
</TemplatesMenu>
401393
</Flex>
402-
</EditableBlockChildAddButtonOutline>
394+
</BlockChildAddButtonOutline>
403395
);
404396
};

apps/builder/app/builder/features/workspace/canvas-tools/outline/hovered-instance-outline.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useStore } from "@nanostores/react";
22
import {
3-
$editableBlockChildOutline,
3+
$blockChildOutline,
44
$hoveredInstanceOutlineAndInstance,
55
$hoveredInstanceSelector,
66
$instances,
@@ -26,7 +26,7 @@ const isDescendantOrSelf = (
2626
export const HoveredInstanceOutline = () => {
2727
const instances = useStore($instances);
2828
const hoveredInstanceSelector = useStore($hoveredInstanceSelector);
29-
const editableBlockChildOutline = useStore($editableBlockChildOutline);
29+
const blockChildOutline = useStore($blockChildOutline);
3030
const outline = useStore($hoveredInstanceOutlineAndInstance);
3131
const scale = useStore($scale);
3232
const textEditingInstanceSelector = useStore($textEditingInstanceSelector);
@@ -37,9 +37,7 @@ export const HoveredInstanceOutline = () => {
3737
}
3838

3939
if (isFeatureEnabled("contentEditableMode") && isContentMode) {
40-
if (
41-
shallowEqual(editableBlockChildOutline?.selector, hoveredInstanceSelector)
42-
) {
40+
if (shallowEqual(blockChildOutline?.selector, hoveredInstanceSelector)) {
4341
return;
4442
}
4543
}

apps/builder/app/builder/features/workspace/canvas-tools/outline/outline.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ type OutlineProps = {
7272
variant?: "default" | "collaboration" | "slot";
7373
};
7474

75-
export const EditableBlockChildAddButtonOutline = ({
75+
export const BlockChildAddButtonOutline = ({
7676
rect,
7777
children,
7878
}: {

apps/builder/app/builder/shared/commands.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ import {
3232
import { selectInstance } from "~/shared/awareness";
3333
import { openCommandPanel } from "../features/command-panel";
3434
import { builderApi } from "~/shared/builder-api";
35-
import { findEditableBlockSelector } from "../features/workspace/canvas-tools/outline/editable-block-instance-outline";
36-
import { editableBlockTemplateComponent } from "@webstudio-is/react-sdk";
35+
import { findBlockSelector } from "../features/workspace/canvas-tools/outline/editable-block-instance-outline";
36+
import { blockTemplateComponent } from "@webstudio-is/react-sdk";
3737

3838
const makeBreakpointCommand = <CommandName extends string>(
3939
name: CommandName,
@@ -71,7 +71,7 @@ const deleteSelectedInstance = () => {
7171

7272
if ($isContentMode.get()) {
7373
// In content mode we are allowing to delete childen of the editable block
74-
const editableInstanceSelector = findEditableBlockSelector(
74+
const editableInstanceSelector = findBlockSelector(
7575
selectedInstanceSelector,
7676
instances
7777
);
@@ -80,19 +80,19 @@ const deleteSelectedInstance = () => {
8080
return;
8181
}
8282

83-
const isChildOfEditableBlock =
83+
const isChildOfBlock =
8484
selectedInstanceSelector.length - editableInstanceSelector.length === 1;
8585

8686
const isTemplateInstance =
8787
instances.get(selectedInstanceSelector[0])?.component ===
88-
editableBlockTemplateComponent;
88+
blockTemplateComponent;
8989

9090
if (isTemplateInstance) {
9191
builderApi.toast.info("You can't delete this instance in conent mode.");
9292
return;
9393
}
9494

95-
if (!isChildOfEditableBlock) {
95+
if (!isChildOfBlock) {
9696
builderApi.toast.info("You can't delete this instance in conent mode.");
9797
return;
9898
}

apps/builder/app/canvas/features/build-mode/editable-block-template.tsx renamed to apps/builder/app/canvas/features/build-mode/block-template.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import * as React from "react";
88
import { $isDesignMode, $selectedInstanceSelector } from "~/shared/nano-states";
99

10-
export const EditableBlockTemplate = React.forwardRef<
10+
export const BlockTemplate = React.forwardRef<
1111
HTMLDivElement,
1212
WebstudioComponentSystemProps & { children: React.ReactNode }
1313
>(({ ...props }, ref) => {

apps/builder/app/canvas/features/build-mode/editable-block.tsx renamed to apps/builder/app/canvas/features/build-mode/block.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useStore } from "@nanostores/react";
22
import {
3-
editableBlockTemplateComponent,
3+
blockTemplateComponent,
44
idAttribute,
55
selectorIdAttribute,
66
type AnyComponent,
@@ -14,7 +14,7 @@ import {
1414
$selectedInstanceSelector,
1515
} from "~/shared/nano-states";
1616

17-
export const EditableBlock = React.forwardRef<
17+
export const Block = React.forwardRef<
1818
HTMLDivElement,
1919
{ children: React.ReactNode } & WebstudioComponentSystemProps
2020
>(({ children, ...props }, ref) => {
@@ -36,7 +36,7 @@ export const EditableBlock = React.forwardRef<
3636
const templateInstanceId = instance.children.find(
3737
(child) =>
3838
child.type === "id" &&
39-
instances.get(child.value)?.component === editableBlockTemplateComponent
39+
instances.get(child.value)?.component === blockTemplateComponent
4040
)?.value;
4141

4242
if (templateInstanceId === undefined) {

0 commit comments

Comments
 (0)