Skip to content

Commit 332cebb

Browse files
authored
Merge pull request #427 from contentstack/VE-5803-space-key-element-inside-button
fix(VE-5803): sync field after custom space handling
2 parents 32a80bc + fd886ac commit 332cebb

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/visualBuilder/utils/__test__/handleFieldMouseDown.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ describe("handle numeric field key down", () => {
128128
});
129129

130130
describe("handle keydown in button contenteditable", () => {
131+
let spiedSendFieldEvent: MockInstance<() => void> | undefined;
132+
133+
beforeEach(() => {
134+
spiedSendFieldEvent = vi
135+
.spyOn(generateOverlay, "sendFieldEvent")
136+
.mockImplementation(() => {});
137+
const visualBuilderContainer = document.createElement("div");
138+
visualBuilderContainer.classList.add("visual-builder__container");
139+
document.body.appendChild(visualBuilderContainer);
140+
});
141+
142+
afterEach(() => {
143+
vi.clearAllMocks();
144+
});
145+
131146
test("should insert space in button content-editable", () => {
132147
let spiedPreventDefault: MockInstance<(e: []) => void> | undefined;
133148
vi.spyOn(window, "getSelection").mockReturnValue({
@@ -164,6 +179,7 @@ describe("handle keydown in button contenteditable", () => {
164179

165180
expect(spiedPreventDefault).toHaveBeenCalledTimes(1);
166181
expect(spiedInsertSpaceAtCursor).toHaveBeenCalledWith(button);
182+
expect(spiedSendFieldEvent).toHaveBeenCalled();
167183
});
168184

169185
test("should insert space in span content-editable inside button", () => {
@@ -203,6 +219,7 @@ describe("handle keydown in button contenteditable", () => {
203219

204220
expect(spiedPreventDefault).toHaveBeenCalledTimes(1);
205221
expect(spiedInsertSpaceAtCursor).toHaveBeenCalledWith(span);
222+
expect(spiedSendFieldEvent).toHaveBeenCalled();
206223
});
207224
});
208225

src/visualBuilder/utils/handleFieldMouseDown.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export function handleFieldKeyDown(e: Event): void {
5252
element instanceof Element && element.tagName === "BUTTON"
5353
)
5454
) {
55+
// custom space handling when a button is involved
5556
handleKeyDownOnButton(event);
5657
}
5758
if (fieldType === FieldDataType.NUMBER) {
@@ -63,11 +64,12 @@ export function handleFieldKeyDown(e: Event): void {
6364

6465
// spaces do not work inside a button content-editable
6566
// this adds a space and moves the cursor ahead, the
66-
// button press event is also prevented
67+
// button press event is also prevented, finally syncs the field
6768
function handleKeyDownOnButton(e: KeyboardEvent) {
6869
if (e.code === "Space" && e.target) {
6970
e.preventDefault();
7071
insertSpaceAtCursor(e.target as HTMLElement);
72+
throttledFieldSync();
7173
}
7274
}
7375

0 commit comments

Comments
 (0)