From 7b556b2d0952e608a968db4e6467d8ac936c566a Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Sat, 21 Jun 2025 17:54:09 +0200 Subject: [PATCH] saving the export method to the browser storage. you can choose this --- src/app/admin/page.tsx | 100 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 89 insertions(+), 11 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 91bf6fd..455c361 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -79,6 +79,18 @@ export default function AdminPage() { const [previewHtml, setPreviewHtml] = useState(''); const [editingPost, setEditingPost] = useState<{ slug: string, path: string } | null>(null); const [isDocker, setIsDocker] = useState(false); + const [rememberExportChoice, setRememberExportChoice] = useState(() => { + if (typeof window !== 'undefined') { + return localStorage.getItem('rememberExportChoice') === 'true'; + } + return false; + }); + const [lastExportChoice, setLastExportChoice] = useState(() => { + if (typeof window !== 'undefined') { + return localStorage.getItem('lastExportChoice'); + } + return null; + }); const router = useRouter(); const usernameRef = useRef(null); const passwordRef = useRef(null); @@ -98,6 +110,18 @@ export default function AdminPage() { localStorage.setItem('pinnedPosts', JSON.stringify(pinned)); }, [pinned]); + useEffect(() => { + localStorage.setItem('rememberExportChoice', rememberExportChoice.toString()); + }, [rememberExportChoice]); + + useEffect(() => { + if (lastExportChoice) { + localStorage.setItem('lastExportChoice', lastExportChoice); + } else { + localStorage.removeItem('lastExportChoice'); + } + }, [lastExportChoice]); + useEffect(() => { marked.setOptions({ gfm: true, @@ -491,6 +515,16 @@ export default function AdminPage() { }; function handleExportTarball() { + // Check if we should use the remembered choice + if (rememberExportChoice && lastExportChoice) { + if (lastExportChoice === 'docker') { + exportFromEndpoint('/api/admin/export'); + } else if (lastExportChoice === 'local') { + exportFromEndpoint('/api/admin/exportlocal'); + } + return; + } + // Create popup modal const modal = document.createElement('div'); modal.style.position = 'fixed'; @@ -522,11 +556,24 @@ export default function AdminPage() { +
+ +
+ `; modal.appendChild(modalContent); document.body.appendChild(modal); + // Set the checkbox state + const rememberCheckbox = modal.querySelector('#remember-choice') as HTMLInputElement; + if (rememberCheckbox) { + rememberCheckbox.checked = rememberExportChoice; + } + // Add event listeners const dockerBtn = modal.querySelector('#docker-btn'); const localBtn = modal.querySelector('#local-btn'); @@ -536,14 +583,26 @@ export default function AdminPage() { document.body.removeChild(modal); }; - dockerBtn?.addEventListener('click', () => { + const handleExport = (choice: string) => { + const shouldRemember = rememberCheckbox?.checked || false; + setRememberExportChoice(shouldRemember); + if (shouldRemember) { + setLastExportChoice(choice); + } closeModal(); - exportFromEndpoint('/api/admin/export'); + if (choice === 'docker') { + exportFromEndpoint('/api/admin/export'); + } else if (choice === 'local') { + exportFromEndpoint('/api/admin/exportlocal'); + } + }; + + dockerBtn?.addEventListener('click', () => { + handleExport('docker'); }); localBtn?.addEventListener('click', () => { - closeModal(); - exportFromEndpoint('/api/admin/exportlocal'); + handleExport('local'); }); closeBtn?.addEventListener('click', closeModal); @@ -575,6 +634,11 @@ export default function AdminPage() { }); } + const clearExportChoice = () => { + setRememberExportChoice(false); + setLastExportChoice(null); + }; + return (
{pinFeedback && ( @@ -649,13 +713,27 @@ export default function AdminPage() { Warning: Docker is in use. Exporting will export the entire /app root directory (including all files and folders in the container's root).
)} - +
+ + {rememberExportChoice && lastExportChoice && ( +
+ 💾 {lastExportChoice === 'docker' ? 'Docker' : 'Local'} + +
+ )} +