diff --git a/src/core/Components/ItemList/ListViewBase.js b/src/core/Components/ItemList/ListViewBase.js index cae518b..22c6707 100644 --- a/src/core/Components/ItemList/ListViewBase.js +++ b/src/core/Components/ItemList/ListViewBase.js @@ -14,6 +14,23 @@ export default class ListViewBase extends React.Component { } }; + handleModalSelection = (details) => { + if (!details) return; + const modal = window?.parent?.Joomla.Modal?.getCurrent(); + if (!modal) return; + + window.parent.Joomla.selectedMediaFile = details; + Joomla.selectedMediaFile = details; + + let selectButton = modal.querySelector('.btn.btn-secondary.button-save-selected') ?? + modal.querySelector('.button.button-success.btn.btn-success') ?? + modal.querySelector('.btn.btn-success.button-save-selected') ?? + modal.querySelector('.button-save-selected'); + if (selectButton) { + selectButton.click(); + } + } + handleDoubleClick = item => e => { e.preventDefault(); e.stopPropagation(); @@ -27,7 +44,18 @@ export default class ListViewBase extends React.Component { toast.info('Unsupported file type.'); return; } - handlers.handle(item); + + let details; + if(Joomla.selectedMediaFile || window.parent.Joomla.selectedMediaFile){ + details = JSON.parse(JSON.stringify(Joomla.selectedMediaFile || window.parent.Joomla.selectedMediaFile || {})); + } + + try{ + handlers.handle(item); + }catch (e) { + this.handleModalSelection(details); + console.log(e); + } }; toggleSelect = (item, ctrlKey, shiftKey) => { diff --git a/src/core/Components/ItemList/index.jsx b/src/core/Components/ItemList/index.jsx index 78a7127..9c1aae9 100644 --- a/src/core/Components/ItemList/index.jsx +++ b/src/core/Components/ItemList/index.jsx @@ -399,7 +399,54 @@ class ItemList extends Component { }; }; + /* + * @param {string} itemKey + * */ + dispatchFileSelectedEvent(itemKey) { + const item = this.state.entries.files.find(file => file.id === itemKey); + const allowedExtensions = new Set(["bmp", "gif", "jpg", "png", "jpeg", "webp", "avif"]); + if(!item || !allowedExtensions.has(item.extension)) { + if(!item) { + console.log('item not found') + } else { + console.log('extension not allowed') + } + return; + } + + const details = { + "type": "file", + "name": item.name, + "path": `local-images:${item.path}`, + "fileType": item.image_info.mime, + "extension": item.extension, + "width": item.image_info.width, + "height": item.image_info.height, + }; + try { + window.parent.document.dispatchEvent( + new CustomEvent( + "onMediaFileSelected", + { + bubbles: true, + cancelable: false, + detail: details, + }, + ), + ); + console.log('trying to dispatch the event') + } catch (error) { + if(Joomla.selectedMediaFile) Joomla.selectedMediaFile = details; + if (window.parent.Joomla.selectedMediaFile) window.parent.Joomla.selectedMediaFile = details; + + console.error('error dispatching the event', error); + } + } + get selectedItems() { + // const keys = Object.keys(this.state.selected_entries); + // const itemKey = keys.length > 0 ? keys[0] : false; + // if(itemKey && (Joomla.selectedMediaFile || window.parent.Joomla.selectedMediaFile)) this.dispatchFileSelectedEvent(itemKey); return Object.keys(this.state.selected_entries); }