diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx
index 8c21cddae..2595dd309 100644
--- a/src/components/menu-bar/menu-bar.jsx
+++ b/src/components/menu-bar/menu-bar.jsx
@@ -81,6 +81,7 @@ import {
closeErrorsMenu
} from '../../reducers/menus';
import {setFileHandle} from '../../reducers/tw.js';
+import {getFileHandleByName} from '../../lib/recent-files-manager';
import collectMetadata from '../../lib/collect-metadata';
@@ -228,7 +229,8 @@ class MenuBar extends React.Component {
'handleKeyPress',
'handleRestoreOption',
'getSaveToComputerHandler',
- 'restoreOptionMessage'
+ 'restoreOptionMessage',
+ 'handleClickRecentFile'
]);
}
componentDidMount () {
@@ -360,6 +362,71 @@ class MenuBar extends React.Component {
}
};
}
+ async handleClickRecentFile (fileName) {
+ try {
+ // Close the file menu
+ this.props.onRequestCloseFile();
+
+ // Get the file handle from IndexedDB
+ const fileHandle = await getFileHandleByName(fileName);
+ if (!fileHandle) {
+ console.error('File handle not found for:', fileName);
+ return;
+ }
+
+ // Request permission to read the file
+ const permission = await fileHandle.queryPermission({mode: 'read'});
+ if (permission !== 'granted') {
+ const newPermission = await fileHandle.requestPermission({mode: 'read'});
+ if (newPermission !== 'granted') {
+ console.error('Permission denied to read file:', fileName);
+ return;
+ }
+ }
+
+ // Read the file
+ const file = await fileHandle.getFile();
+ const reader = new FileReader();
+
+ reader.onload = () => {
+ // Trigger the file upload with the file content
+ if (this.props.onStartSelectingFileUpload) {
+ // Create a synthetic file input event
+ const dataTransfer = new DataTransfer();
+ dataTransfer.items.add(file);
+ const fileInput = document.createElement('input');
+ fileInput.type = 'file';
+ fileInput.files = dataTransfer.files;
+
+ // Store the handle for future saves
+ if (this.props.onSetFileHandle) {
+ this.props.onSetFileHandle(fileHandle);
+ }
+
+ // Trigger the upload
+ this.props.onStartSelectingFileUpload();
+ // Simulate the file selection
+ setTimeout(() => {
+ const realFileInput = document.querySelector('input[type="file"]');
+ if (realFileInput) {
+ const dt = new DataTransfer();
+ dt.items.add(file);
+ realFileInput.files = dt.files;
+ realFileInput.dispatchEvent(new Event('change', {bubbles: true}));
+ }
+ }, 100);
+ }
+ };
+
+ reader.onerror = error => {
+ console.error('Error reading file:', error);
+ };
+
+ reader.readAsArrayBuffer(file);
+ } catch (error) {
+ console.error('Error opening recent file:', error);
+ }
+ }
restoreOptionMessage (deletedItem) {
switch (deletedItem) {
case 'Sprite':
@@ -723,6 +790,25 @@ class MenuBar extends React.Component {
)}
+ {this.props.autoOpenEnabled && this.props.recentFiles && this.props.recentFiles.length > 0 && (
+
+
+ {this.props.recentFiles.slice(0, 5).map((file, index) => (
+
+ ))}
+
+ )}
{this.props.onClickPackager && (