Skip to content

Commit 27c2579

Browse files
authored
IBX-9248: The "Discard" button in the "Create content" does not discard anything (#1438)
1 parent 24430f6 commit 27c2579

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getInstance } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/object.instances';
2+
13
(function (global, doc, ibexa) {
24
const CLASS_HIDDEN = 'ibexa-extra-actions--hidden';
35
const CLASS_EXPANDED = 'ibexa-context-menu--expanded';
@@ -8,6 +10,50 @@
810
const btns = [...doc.querySelectorAll('.ibexa-btn--extra-actions')];
911
const menu = doc.querySelector('.ibexa-context-menu');
1012
const backdrop = new ibexa.core.Backdrop();
13+
const formsInitialData = new Map();
14+
const saveInitialFormData = (extraActionsContainer) => {
15+
const extraActionsInputs = extraActionsContainer.querySelectorAll('input, select');
16+
17+
extraActionsInputs.forEach((node) => {
18+
const value = node.type === 'radio' || node.type === 'checkbox' ? node.checked : node.value;
19+
20+
formsInitialData.set(node, value);
21+
});
22+
};
23+
const restoreInitialFormData = (extraActionsContainer) => {
24+
if (formsInitialData.size === 0) {
25+
return;
26+
}
27+
28+
const extraActionsInputs = extraActionsContainer.querySelectorAll('input, select');
29+
30+
extraActionsInputs.forEach((node) => {
31+
const value = formsInitialData.get(node);
32+
let prevValue = node.value;
33+
34+
if (node.type === 'radio' || node.type === 'checkbox') {
35+
prevValue = node.checked;
36+
37+
node.checked = value;
38+
} else if (node.tagName === 'SELECT') {
39+
const dropdownContainer = node.closest('.ibexa-dropdown');
40+
41+
if (dropdownContainer) {
42+
const dropdownInstance = getInstance(dropdownContainer);
43+
44+
dropdownInstance.selectOption(value);
45+
} else {
46+
node.value = value;
47+
}
48+
} else {
49+
node.value = value;
50+
}
51+
52+
if (value !== prevValue) {
53+
node.dispatchEvent(new CustomEvent('change'));
54+
}
55+
});
56+
};
1157
const haveHiddenPart = (element) => element.classList.contains(CLASS_HIDDEN) && !element.classList.contains(CLASS_PREVENT_SHOW);
1258
const removeBackdrop = () => {
1359
backdrop.hide();
@@ -23,6 +69,7 @@
2369
doc.body.dispatchEvent(new CustomEvent('ibexa-extra-actions:after-close'));
2470

2571
removeBackdrop();
72+
restoreInitialFormData(actions);
2673
};
2774
const toggleExtraActionsWidget = (widgetData) => {
2875
const actions = doc.querySelector(`.ibexa-extra-actions[data-actions="${widgetData.actions}"]`);
@@ -50,9 +97,11 @@
5097
backdrop.show();
5198
doc.body.addEventListener('click', detectClickOutside, false);
5299
doc.body.classList.add('ibexa-scroll-disabled');
100+
saveInitialFormData(actions);
53101
} else {
54102
doc.body.removeEventListener('click', detectClickOutside);
55103
removeBackdrop();
104+
restoreInitialFormData(actions);
56105
}
57106

58107
if (focusElement) {

0 commit comments

Comments
 (0)