diff --git a/data (3).xlsx b/data (3).xlsx new file mode 100644 index 0000000..3c55edd Binary files /dev/null and b/data (3).xlsx differ diff --git a/src/App.tsx b/src/App.tsx index ca2b268..a9e253e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import React, { useState, useMemo } from 'react'; +import React, { useState, useMemo, useEffect } from 'react'; import * as XLSX from 'xlsx'; import { AppState, ExcelRow, COLUMNS } from './types'; import { Sidebar } from './components/Sidebar'; @@ -19,6 +19,49 @@ export default function App() { }); const [activeModule, setActiveModule] = useState<'descriptions' | 'completeness' | 'matrix' | 'upload'>('descriptions'); const [editingRowIndex, setEditingRowIndex] = useState(null); + const [isLoadingDefault, setIsLoadingDefault] = useState(true); + const [defaultLoadError, setDefaultLoadError] = useState(null); + + useEffect(() => { + const loadDefaultData = async () => { + try { + setIsLoadingDefault(true); + setDefaultLoadError(null); + // Using corsproxy.io to avoid Dropbox CORS issues + const dropboxUrl = 'https://dl.dropboxusercontent.com/scl/fi/nkyabkq2jdwfudof2ovrl/Data-Matrix.xlsx?rlkey=1cz5fuabwipqqivihii7sybw0&st=io0g4wvb&dl=1'; + const proxyUrl = `https://corsproxy.io/?${encodeURIComponent(dropboxUrl)}`; + + const response = await fetch(proxyUrl); + if (!response.ok) { + throw new Error(`Failed to fetch file: ${response.statusText}`); + } + + const arrayBuffer = await response.arrayBuffer(); + const wb = XLSX.read(arrayBuffer, { type: 'array' }); + const wsname = wb.SheetNames[0]; + const ws = wb.Sheets[wsname]; + const data = XLSX.utils.sheet_to_json(ws, { header: 1 }); + + if (data.length > 0) { + setAppState({ + headers: data[0], + data: data.slice(1), + fileName: 'Data-Matrix.xlsx (Auto-loaded Google Drive/Dropbox)', + fileDate: new Date(), + hasUnsavedChanges: false + }); + setActiveModule('descriptions'); + } + } catch (err) { + console.error('Error loading default data:', err); + setDefaultLoadError(err instanceof Error ? err.message : 'Unknown error'); + } finally { + setIsLoadingDefault(false); + } + }; + + loadDefaultData(); + }, []); const handleFileUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; @@ -123,7 +166,20 @@ export default function App() {
- {appState.data.length === 0 && activeModule !== 'upload' ? ( + {isLoadingDefault ? ( +
+
+

Loading latest data...

+
+ ) : defaultLoadError && appState.data.length === 0 ? ( +
+

Failed to auto-load data: {defaultLoadError}

+ +
+ ) : appState.data.length === 0 && activeModule !== 'upload' ? (

No data loaded.