Skip to content

Commit 404eb3a

Browse files
committed
Merge remote-tracking branch 'origin/4.6'
2 parents 149b20a + 7b81232 commit 404eb3a

28 files changed

+708
-372
lines changed

src/bundle/Resources/public/js/scripts/admin.location.view.js

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@ import { checkIsContainer } from './helpers/content.type.helper';
1010
const queryString = window.location.search;
1111
const urlParams = new URLSearchParams(queryString);
1212
const publishedContentId = urlParams.get('publishedContentId');
13-
const handleEditItem = (content, location) => {
13+
const sendForm = () => {
14+
doc.querySelector('#form_subitems_content_edit_create').click();
15+
};
16+
const updateForm = (contentId, languageCode) => {
17+
doc.querySelector('#form_subitems_content_edit_content_info').value = contentId;
18+
doc.querySelector(`#form_subitems_content_edit_language_${languageCode}`).checked = true;
19+
};
20+
const handleEditItem = (content, location, isLanguageSelectorOpened) => {
1421
const contentId = content._id;
1522
const locationId = location._id;
1623
const languageCode = content.mainLanguageCode;
1724
const checkVersionDraftLink = Routing.generate('ibexa.version_draft.has_no_conflict', { contentId, languageCode, locationId });
18-
const submitVersionEditForm = () => {
19-
doc.querySelector('#form_subitems_content_edit_content_info').value = contentId;
20-
doc.querySelector(`#form_subitems_content_edit_language_${languageCode}`).checked = true;
21-
doc.querySelector('#form_subitems_content_edit_create').click();
22-
};
25+
2326
const addDraft = () => {
24-
submitVersionEditForm();
27+
updateForm(contentId, languageCode);
28+
sendForm();
2529
bootstrap.Modal.getOrCreateInstance(doc.querySelector('#version-draft-conflict-modal')).hide();
2630
};
2731
const attachModalListeners = (wrapper) => {
@@ -39,6 +43,9 @@ import { checkIsContainer } from './helpers/content.type.helper';
3943
if (conflictModal) {
4044
bootstrap.Modal.getOrCreateInstance(conflictModal).show();
4145
conflictModal.addEventListener('shown.bs.modal', () => ibexa.helpers.tooltips.parse());
46+
conflictModal.addEventListener('hide.bs.modal', () => {
47+
doc.body.dispatchEvent(new CustomEvent('ibexa:edit-content-reset-language-selector'));
48+
});
4249
}
4350
};
4451
const showModal = (modalHtml) => {
@@ -73,7 +80,11 @@ import { checkIsContainer } from './helpers/content.type.helper';
7380
if (response.status === 409) {
7481
response.text().then(showModal);
7582
} else if (response.status === 200) {
76-
submitVersionEditForm();
83+
updateForm(contentId, languageCode);
84+
85+
if (!isLanguageSelectorOpened) {
86+
sendForm();
87+
}
7788
}
7889
})
7990
.catch(ibexa.helpers.notification.showErrorNotification);
@@ -86,6 +97,7 @@ import { checkIsContainer } from './helpers/content.type.helper';
8697
modalTableTitleNode.setAttribute('title', title);
8798
modalTableTitleNode.dataset.originalTitle = title;
8899
};
100+
89101
const setModalTableBody = (failedItemsData) => {
90102
const modal = doc.querySelector(SELECTOR_MODAL_BULK_ACTION_FAIL);
91103
const table = modal.querySelector('.ibexa-bulk-action-failed-modal__table');
@@ -197,6 +209,14 @@ import { checkIsContainer } from './helpers/content.type.helper';
197209
);
198210
});
199211

212+
doc.body.addEventListener(
213+
'ibexa-sub-items:submit-version-edit-form',
214+
() => {
215+
sendForm();
216+
},
217+
false,
218+
);
219+
200220
if (publishedContentId) {
201221
emdedItemsUpdateChannel.postMessage({ contentId: publishedContentId });
202222
}

src/bundle/Resources/public/js/scripts/button.content.edit.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const editVersion = (event) => {
55
const versionEditForm = doc.querySelector(FORM_EDIT);
66
const versionEditFormName = versionEditForm.name;
7-
const { contentId, versionNo, languageCode } = event.currentTarget.dataset;
7+
const { contentId, versionNo, languageCode, withConfirm } = event.currentTarget.dataset;
88
const contentInfoInput = versionEditForm.querySelector(`input[name="${versionEditFormName}[content_info]"]`);
99
const versionInfoContentInfoInput = versionEditForm.querySelector(
1010
`input[name="${versionEditFormName}[version_info][content_info]"]`,
@@ -34,6 +34,7 @@
3434

3535
wrapper.innerHTML = modalHtml;
3636

37+
const conflictModal = doc.querySelector('#version-draft-conflict-modal');
3738
const addDraftButton = wrapper.querySelector('.ibexa-btn--add-draft');
3839

3940
if (addDraftButton) {
@@ -43,7 +44,11 @@
4344
wrapper
4445
.querySelectorAll('.ibexa-btn--prevented')
4546
.forEach((btn) => btn.addEventListener('click', (wrapperBtnEvent) => wrapperBtnEvent.preventDefault(), false));
46-
bootstrap.Modal.getOrCreateInstance(doc.querySelector('#version-draft-conflict-modal')).show();
47+
48+
bootstrap.Modal.getOrCreateInstance(conflictModal).show();
49+
conflictModal.addEventListener('hide.bs.modal', () => {
50+
doc.body.dispatchEvent(new CustomEvent('ibexa:edit-content-reset-language-selector'));
51+
});
4752
};
4853
const handleCanEditCheck = (response) => {
4954
if (response.canEdit) {
@@ -60,7 +65,9 @@
6065
} else if (response.status === 403) {
6166
response.text().then(showErrorNotification);
6267
} else if (response.status === 200) {
63-
submitVersionEditForm();
68+
if (!withConfirm) {
69+
submitVersionEditForm();
70+
}
6471
}
6572
};
6673

src/bundle/Resources/public/js/scripts/button.translation.edit.js

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,46 @@
33
constructor(config) {
44
this.container = config.container;
55
this.toggler = config.container.querySelector('.ibexa-btn--translations-list-toggler');
6-
this.translationsList = config.container.querySelector('.ibexa-translation-selector__list-wrapper');
6+
this.extraActionsContainer = config.container.querySelector('.ibexa-extra-actions');
7+
this.closeBtn = config.container.querySelector('.ibexa-extra-actions__close-btn');
8+
this.confirmBtn = config.container.querySelector('.ibexa-extra-actions__confirm-btn');
9+
this.languagesBtns = config.container.querySelectorAll('.ibexa-btn--select-language');
710
this.backdrop = config.backdrop;
811

912
this.tableNode = null;
1013

11-
this.hideTranslationsList = this.hideTranslationsList.bind(this);
12-
this.showTranslationsList = this.showTranslationsList.bind(this);
14+
this.hideExtraActionPanel = this.hideExtraActionPanel.bind(this);
15+
this.showExtraActionPanel = this.showExtraActionPanel.bind(this);
16+
this.setActiveLanguage = this.setActiveLanguage.bind(this);
17+
this.resetLanguageSelector = this.resetLanguageSelector.bind(this);
18+
1319
this.setPosition = this.setPosition.bind(this);
1420
}
1521

1622
setPosition() {
17-
const topOffset = parseInt(this.translationsList.dataset.topOffset, 10);
23+
const topOffset = parseInt(this.extraActionsContainer.dataset.topOffset, 10);
1824
const topPosition = window.scrollY > topOffset ? 0 : topOffset - window.scrollY;
1925
const height = window.scrollY > topOffset ? window.innerHeight : window.innerHeight + window.scrollY - topOffset;
2026

21-
this.translationsList.style.top = `${topPosition}px`;
22-
this.translationsList.style.height = `${height}px`;
27+
this.extraActionsContainer.style.top = `${topPosition}px`;
28+
this.extraActionsContainer.style.height = `${height}px`;
2329
}
2430

25-
hideTranslationsList(event) {
26-
const closestTranslationSelector = event.target.closest('.ibexa-translation-selector');
27-
const clickedOnTranslationsList = closestTranslationSelector && closestTranslationSelector.isSameNode(this.container);
28-
const clickedOnDraftConflictModal = event.target.closest('.ibexa-modal--version-draft-conflict');
29-
30-
if (clickedOnTranslationsList || clickedOnDraftConflictModal) {
31-
return;
32-
}
33-
31+
hideExtraActionPanel() {
3432
if (this.tableNode) {
3533
this.tableNode.classList.add('ibexa-table--last-column-sticky');
3634

3735
this.tableNode = null;
3836
}
3937

4038
this.backdrop.hide();
41-
this.translationsList.classList.add('ibexa-translation-selector__list-wrapper--hidden');
42-
doc.removeEventListener('click', this.hideTranslationsList, false);
39+
this.extraActionsContainer.classList.add('ibexa-extra-actions--hidden');
40+
41+
this.closeBtn.removeEventListener('click', this.hideExtraActionPanel, false);
4342
}
4443

45-
showTranslationsList({ currentTarget }) {
46-
this.translationsList.classList.remove('ibexa-translation-selector__list-wrapper--hidden');
44+
showExtraActionPanel({ currentTarget }) {
45+
this.extraActionsContainer.classList.remove('ibexa-extra-actions--hidden');
4746

4847
this.tableNode = currentTarget.closest('.ibexa-table--last-column-sticky');
4948

@@ -52,14 +51,38 @@
5251
}
5352

5453
this.setPosition();
55-
5654
this.backdrop.show();
57-
doc.addEventListener('click', this.hideTranslationsList, false);
55+
this.closeBtn.addEventListener('click', this.hideExtraActionPanel, false);
56+
5857
ibexa.helpers.tooltips.hideAll();
5958
}
6059

60+
setActiveLanguage(event) {
61+
const { contentId, languageCode } = event.currentTarget.dataset;
62+
63+
this.confirmBtn.dataset.contentId = contentId;
64+
this.confirmBtn.dataset.languageCode = languageCode;
65+
this.confirmBtn.disabled = false;
66+
67+
this.languagesBtns.forEach((btn) => btn.classList.remove('ibexa-btn--active'));
68+
event.currentTarget.classList.add('ibexa-btn--active');
69+
}
70+
71+
resetLanguageSelector() {
72+
this.confirmBtn.dataset.contentId = null;
73+
this.confirmBtn.dataset.languageCode = null;
74+
this.confirmBtn.disabled = true;
75+
76+
this.languagesBtns.forEach((btn) => btn.classList.remove('ibexa-btn--active'));
77+
}
78+
6179
init() {
62-
this.toggler.addEventListener('click', this.showTranslationsList, false);
80+
this.toggler.addEventListener('click', this.showExtraActionPanel, false);
81+
this.languagesBtns.forEach((btn) => {
82+
btn.addEventListener('click', this.setActiveLanguage, false);
83+
});
84+
85+
document.body.addEventListener('ibexa:edit-content-reset-language-selector', this.resetLanguageSelector, false);
6386
}
6487
}
6588

src/bundle/Resources/public/js/scripts/sidebar/btn/content.edit.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@
1212
'click',
1313
() => {
1414
languageRadioOption.checked = true;
15-
languageRadioOption.dispatchEvent(new CustomEvent('change'));
15+
languageRadioOption.dispatchEvent(
16+
new CustomEvent('change', {
17+
detail: {
18+
sendImmediately: true,
19+
},
20+
}),
21+
);
1622
},
1723
false,
1824
);

src/bundle/Resources/public/js/scripts/sidebar/btn/location.edit.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,44 @@
4646
attachModalListeners(wrapper, form, btns);
4747
};
4848
const changeHandler = (form, btns, event) => {
49+
const sendImmediately = event?.detail?.sendImmediately ?? false;
4950
const contentIdInput = form.querySelector('.ibexa-extra-actions__form-field--content-info');
5051
const locationInput = form.querySelector('.ibexa-extra-actions__form-field--location');
5152
const contentId = contentIdInput.value;
5253
const locationId = locationInput.value;
5354
const checkedBtn = event.currentTarget;
5455
const languageCode = checkedBtn.value;
5556
const checkVersionDraftLink = Routing.generate('ibexa.version_draft.has_no_conflict', { contentId, languageCode, locationId });
57+
const activeLanguageItem = event.target.closest('.ibexa-instant-filter__group-item')?.querySelector('.ibexa-label');
58+
const allLanguageItems = form.querySelectorAll('.ibexa-instant-filter__group-item .ibexa-label');
59+
const submitBtn = form.querySelector('.ibexa-extra-actions__confirm-btn');
60+
61+
allLanguageItems.forEach((item) => {
62+
item.classList.remove('ibexa-label--active');
63+
});
5664

5765
fetch(checkVersionDraftLink, {
5866
credentials: 'same-origin',
5967
}).then((response) => {
6068
if (response.status === 409) {
6169
response.text().then(showModal.bind(null, form, btns));
70+
submitBtn.disabled = true;
71+
72+
return;
6273
} else if (response.status === 200) {
6374
if (form.querySelector('#user_edit_version_info')) {
6475
redirectToUserEdit(languageCode, contentId, form);
6576

6677
return;
6778
}
6879

69-
form.submit();
80+
if (sendImmediately) {
81+
form.submit();
82+
}
7083
}
84+
85+
submitBtn.disabled = false;
86+
activeLanguageItem?.classList.add('ibexa-label--active');
7187
});
7288
};
7389
const attachEventsToEditActionsWidget = (container) => {

src/bundle/Resources/public/js/scripts/sidebar/btn/user.edit.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@
1111
'click',
1212
() => {
1313
languageRadioOption.checked = true;
14-
languageRadioOption.dispatchEvent(new CustomEvent('change'));
14+
languageRadioOption.dispatchEvent(
15+
new CustomEvent('change', {
16+
detail: {
17+
sendImmediately: true,
18+
},
19+
}),
20+
);
1521
},
1622
false,
1723
);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ import { getInstance } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scri
143143
initExtraActionsWidget(dataset);
144144
});
145145
doc.body.addEventListener('ibexa-extra-actions:toggle-widget', (event) => toggleExtraActionsWidget(event.detail), false);
146+
146147
closeBtns.forEach((closeBtn) =>
147148
closeBtn.addEventListener(
148149
'click',

0 commit comments

Comments
 (0)