Skip to content

Commit 0d5c0d9

Browse files
committed
MC-3775: Button editable state is not consistent with the options panel appearing
- Ensure live edit area’s are saved on key up so a save of the larger entity will persist the data correctly
1 parent 55eef94 commit 0d5c0d9

File tree

2 files changed

+36
-33
lines changed

2 files changed

+36
-33
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/binding/live-edit.js

Lines changed: 18 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/binding/live-edit.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ ko.bindingHandlers.liveEdit = {
3838
init(element, valueAccessor, allBindings, viewModel, bindingContext) {
3939
const {field, placeholder, selectAll = false} = valueAccessor();
4040
let focusedValue = element.innerHTML;
41+
4142
/**
4243
* Strip HTML and return text
4344
*
@@ -58,20 +59,13 @@ ko.bindingHandlers.liveEdit = {
5859
focusedValue = stripHtml(element.innerHTML);
5960

6061
if (selectAll && element.innerHTML !== "") {
61-
const selection = window.getSelection();
62-
const range = document.createRange();
63-
range.selectNodeContents(element);
64-
selection.removeAllRanges();
65-
selection.addRange(range);
66-
}
67-
};
68-
69-
/**
70-
* Blur event on element
71-
*/
72-
const onBlur = () => {
73-
if (focusedValue !== stripHtml(element.innerHTML)) {
74-
viewModel.updateData(field, stripHtml(element.innerHTML));
62+
_.defer(() => {
63+
const selection = window.getSelection();
64+
const range = document.createRange();
65+
range.selectNodeContents(element);
66+
selection.removeAllRanges();
67+
selection.addRange(range);
68+
});
7569
}
7670
};
7771

@@ -91,7 +85,7 @@ ko.bindingHandlers.liveEdit = {
9185
*
9286
* @param {any} event
9387
*/
94-
const onKeyDown = (event: any) => {
88+
const onKeyDown = (event: JQueryEventObject) => {
9589
const key = keyCodes[event.keyCode];
9690

9791
// command or control
@@ -107,7 +101,14 @@ ko.bindingHandlers.liveEdit = {
107101
if (key === "pageLeftKey" || key === "pageRightKey") {
108102
event.stopPropagation();
109103
}
104+
};
110105

106+
/**
107+
* On key up update the view model to ensure all changes are saved
108+
*
109+
* @param {Event} event
110+
*/
111+
const onKeyUp = () => {
111112
if (focusedValue !== stripHtml(element.innerHTML)) {
112113
viewModel.updateData(field, stripHtml(element.innerHTML));
113114
}
@@ -128,13 +129,14 @@ ko.bindingHandlers.liveEdit = {
128129
const onInput = () => {
129130
handlePlaceholderClass(element);
130131
};
132+
131133
element.setAttribute("data-placeholder", placeholder);
132134
element.textContent = viewModel.parent.dataStore.get(field);
133135
element.contentEditable = true;
134136
element.addEventListener("focus", onFocus);
135-
element.addEventListener("blur", onBlur);
136137
element.addEventListener("mousedown", onMouseDown);
137138
element.addEventListener("keydown", onKeyDown);
139+
element.addEventListener("keyup", onKeyUp);
138140
element.addEventListener("input", onInput);
139141
element.addEventListener("drop", onDrop);
140142

0 commit comments

Comments
 (0)