-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathlocation.edit.js
More file actions
97 lines (81 loc) · 4.18 KB
/
location.edit.js
File metadata and controls
97 lines (81 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
(function (global, doc, ibexa, bootstrap, Routing) {
const editActions = doc.querySelectorAll('.ibexa-extra-actions--edit, .ibexa-extra-actions--edit-user');
const resetRadioButtons = (btns) =>
btns.forEach((btn) => {
btn.checked = false;
});
const addDraft = (form) => {
form.submit();
bootstrap.Modal.getOrCreateInstance(doc.querySelector('#version-draft-conflict-modal')).hide();
};
const redirectToUserEdit = (languageCode, contentId, form) => {
const versionNo = form.querySelector('#user_edit_version_info_version_no').value;
window.location.href = Routing.generate('ibexa.user.update', { contentId, versionNo, language: languageCode });
};
const onModalHidden = (btns) => {
resetRadioButtons(btns);
const event = new CustomEvent('ibexa-draft-conflict-modal-hidden');
doc.body.dispatchEvent(event);
};
const attachModalListeners = (wrapper, form, btns) => {
const addDraftButton = wrapper.querySelector('.ibexa-btn--add-draft');
const conflictModal = doc.querySelector('#version-draft-conflict-modal');
if (addDraftButton) {
addDraftButton.addEventListener('click', addDraft.bind(null, form), false);
}
wrapper
.querySelectorAll('.ibexa-btn--prevented')
.forEach((btn) => btn.addEventListener('click', (event) => event.preventDefault(), false));
if (conflictModal) {
bootstrap.Modal.getOrCreateInstance(conflictModal).show();
conflictModal.addEventListener('hidden.bs.modal', onModalHidden.bind(null, btns));
conflictModal.addEventListener('shown.bs.modal', () => ibexa.helpers.tooltips.parse());
}
};
const showModal = (form, btns, modalHtml) => {
const wrapper = doc.querySelector('.ibexa-modal-wrapper');
wrapper.innerHTML = modalHtml;
attachModalListeners(wrapper, form, btns);
};
const changeHandler = (form, btns, event) => {
const sendImmediately = event?.detail?.sendImmediately ?? false;
const contentIdInput = form.querySelector('.ibexa-extra-actions__form-field--content-info');
const locationInput = form.querySelector('.ibexa-extra-actions__form-field--location');
const contentId = contentIdInput.value;
const locationId = locationInput.value;
const checkedBtn = event.currentTarget;
const languageCode = checkedBtn.value;
const checkVersionDraftLink = Routing.generate('ibexa.version_draft.has_no_conflict', { contentId, languageCode, locationId });
const activeLanguageItem = event.target.closest('.ibexa-instant-filter__group-item')?.querySelector('.ids-label');
const allLanguageItems = form.querySelectorAll('.ibexa-instant-filter__group-item .ids-label');
const submitBtn = form.querySelector('.ibexa-extra-actions__confirm-btn');
allLanguageItems.forEach((item) => {
item.classList.remove('ids-label--active');
});
fetch(checkVersionDraftLink, {
credentials: 'same-origin',
}).then((response) => {
if (response.status === 409) {
response.text().then(showModal.bind(null, form, btns));
submitBtn.disabled = true;
return;
} else if (response.status === 200) {
if (form.querySelector('#user_edit_version_info')) {
redirectToUserEdit(languageCode, contentId, form);
return;
}
if (sendImmediately) {
form.submit();
}
}
submitBtn.disabled = false;
activeLanguageItem?.classList.add('ids-label--active');
});
};
const attachEventsToEditActionsWidget = (container) => {
const btns = [...container.querySelectorAll('.form-check [type="radio"]')];
const form = container.querySelector('form');
btns.forEach((btn) => btn.addEventListener('change', changeHandler.bind(null, form, btns), false));
};
[...editActions].forEach(attachEventsToEditActionsWidget);
})(window, window.document, window.ibexa, window.bootstrap, window.Routing);