diff --git a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue index c9a53ee..05006af 100644 --- a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue +++ b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue @@ -399,37 +399,33 @@ const client = new GamemasterClient(); // Web Worker for search operations let searchWorker = null; let searchWorkerRequestId = 0; +let searchWorkerInitPromise = null; + const initSearchWorker = () => { - if (!searchWorker) { - try { - // Use Vite's ?worker syntax for proper bundling - import('../workers/search.worker.js?worker') - .then(module => { - searchWorker = new module.default(); - console.log('✅ Worker created successfully'); + if (!searchWorkerInitPromise) { + searchWorkerInitPromise = import('../workers/search.worker.js?worker') + .then(module => { + searchWorker = new module.default(); + console.log('✅ Worker created successfully'); - searchWorker.onmessage = handleSearchWorkerMessage; - searchWorker.onerror = error => { - console.error('❌ Worker error:', error.message); - operationProgress.value.active = false; - operationProgress.value.message = 'Search error: ' + error.message; - }; - - console.log('✅ Worker event handlers attached'); - }) - .catch(error => { - console.error('❌ Failed to import worker:', error); + searchWorker.onmessage = handleSearchWorkerMessage; + searchWorker.onerror = error => { + console.error('❌ Worker error:', error.message); operationProgress.value.active = false; - operationProgress.value.message = 'Failed to initialize search'; - searchWorker = null; - }); - } catch (error) { - console.error('❌ Failed to create worker:', error); - operationProgress.value.active = false; - operationProgress.value.message = 'Failed to initialize search'; - searchWorker = null; - } + operationProgress.value.message = 'Search error: ' + error.message; + }; + + console.log('✅ Worker event handlers attached'); + return searchWorker; + }) + .catch(error => { + console.error('❌ Failed to import worker:', error); + searchWorker = null; + searchWorkerInitPromise = null; // Reset so we can retry + throw error; + }); } + return searchWorkerInitPromise; }; const handleSearchWorkerMessage = event => {