refactor: lazy load renderer dialogs

This commit is contained in:
Misaka
2026-03-21 19:32:03 +08:00
parent 16ac892c93
commit 86614efa22
2 changed files with 61 additions and 52 deletions

View File

@@ -1,4 +1,4 @@
import React from 'react' import React, { Suspense } from 'react'
import { import {
ArrowUpCircle, ArrowUpCircle,
Database, Database,
@@ -16,12 +16,13 @@ import type {
UpdateStatus UpdateStatus
} from '../../../../main/types/update.types' } from '../../../../main/types/update.types'
import type { CurrentUser, Page } from '../../hooks/useAppBootstrap' import type { CurrentUser, Page } from '../../hooks/useAppBootstrap'
import UpdateDialog from '../UpdateDialog'
import { Toast } from '../ui/Toast' import { Toast } from '../ui/Toast'
import CleanerPage from '../../pages/CleanerPage' import CleanerPage from '../../pages/CleanerPage'
import ExtractorPage from '../../pages/ExtractorPage' import ExtractorPage from '../../pages/ExtractorPage'
import SettingsPage from '../../pages/SettingsPage' import SettingsPage from '../../pages/SettingsPage'
const UpdateDialog = React.lazy(() => import('../UpdateDialog'))
interface AuthenticatedAppShellProps { interface AuthenticatedAppShellProps {
currentUser: CurrentUser | null currentUser: CurrentUser | null
currentPage: Page currentPage: Page
@@ -192,18 +193,20 @@ export function AuthenticatedAppShell({
<Toast /> <Toast />
<UpdateDialog <Suspense fallback={null}>
isOpen={showUpdateDialog} <UpdateDialog
userType={currentUser?.userType ?? null} isOpen={showUpdateDialog}
status={updateStatus} userType={currentUser?.userType ?? null}
catalog={updateCatalog} status={updateStatus}
onClose={onCloseUpdateDialog} catalog={updateCatalog}
onInstallUserRelease={onInstallUserRelease} onClose={onCloseUpdateDialog}
onDownloadAndInstallAdminRelease={async (release) => onInstallUserRelease={onInstallUserRelease}
onDownloadAndInstallAdminRelease(release) onDownloadAndInstallAdminRelease={async (release) =>
} onDownloadAndInstallAdminRelease(release)
onRefreshCatalog={onRefreshCatalog} }
/> onRefreshCatalog={onRefreshCatalog}
/>
</Suspense>
</div> </div>
) )
} }

View File

@@ -1,14 +1,17 @@
import React from 'react' import React, { Suspense } from 'react'
import { CleanerExecutionBar } from '../components/cleaner/CleanerExecutionBar' import { CleanerExecutionBar } from '../components/cleaner/CleanerExecutionBar'
import { CleanerResultsTable } from '../components/cleaner/CleanerResultsTable' import { CleanerResultsTable } from '../components/cleaner/CleanerResultsTable'
import { CleanerSidebar } from '../components/cleaner/CleanerSidebar' import { CleanerSidebar } from '../components/cleaner/CleanerSidebar'
import { CleanerToolbar } from '../components/cleaner/CleanerToolbar' import { CleanerToolbar } from '../components/cleaner/CleanerToolbar'
import MaterialTypeManagementDialog from '../components/MaterialTypeManagementDialog'
import ExecutionReportDialog from '../components/ExecutionReportDialog'
import ReportViewerDialog from '../components/ReportViewerDialog'
import { ConfirmDialog } from '../components/ui/ConfirmDialog' import { ConfirmDialog } from '../components/ui/ConfirmDialog'
import { useCleaner } from '../hooks/useCleaner' import { useCleaner } from '../hooks/useCleaner'
const MaterialTypeManagementDialog = React.lazy(
() => import('../components/MaterialTypeManagementDialog')
)
const ExecutionReportDialog = React.lazy(() => import('../components/ExecutionReportDialog'))
const ReportViewerDialog = React.lazy(() => import('../components/ReportViewerDialog'))
const CleanerPage: React.FC = () => { const CleanerPage: React.FC = () => {
const typeManagementButtonRef = React.useRef<HTMLButtonElement>(null) const typeManagementButtonRef = React.useRef<HTMLButtonElement>(null)
const executeButtonRef = React.useRef<HTMLButtonElement>(null) const executeButtonRef = React.useRef<HTMLButtonElement>(null)
@@ -129,42 +132,45 @@ const CleanerPage: React.FC = () => {
/> />
</div> </div>
{/* Material Type Management Dialog */} <Suspense fallback={null}>
<MaterialTypeManagementDialog <MaterialTypeManagementDialog
isOpen={isTypeDialogOpen} isOpen={isTypeDialogOpen}
onClose={() => setIsTypeDialogOpen(false)} onClose={() => setIsTypeDialogOpen(false)}
isAdmin={isAdmin} isAdmin={isAdmin}
currentUsername={currentUsername} currentUsername={currentUsername}
triggerRef={typeManagementButtonRef} triggerRef={typeManagementButtonRef}
/> />
</Suspense>
{/* Execution Report Dialog */} <Suspense fallback={null}>
<ExecutionReportDialog <ExecutionReportDialog
isOpen={isReportDialogOpen} isOpen={isReportDialogOpen}
onClose={() => { onClose={() => {
setIsReportDialogOpen(false) setIsReportDialogOpen(false)
resetStartTime() resetStartTime()
}} }}
ordersProcessed={reportData?.ordersProcessed} ordersProcessed={reportData?.ordersProcessed}
materialsDeleted={reportData?.materialsDeleted} materialsDeleted={reportData?.materialsDeleted}
materialsSkipped={reportData?.materialsSkipped} materialsSkipped={reportData?.materialsSkipped}
errors={reportData?.errors} errors={reportData?.errors}
dryRun={dryRun} dryRun={dryRun}
isExecuting={isExecuting} isExecuting={isExecuting}
progress={progress} progress={progress}
startTime={startTime} startTime={startTime}
triggerRef={executeButtonRef} triggerRef={executeButtonRef}
retriedOrders={reportData?.retriedOrders} retriedOrders={reportData?.retriedOrders}
successfulRetries={reportData?.successfulRetries} successfulRetries={reportData?.successfulRetries}
/> />
</Suspense>
{/* Report Viewer Dialog */} <Suspense fallback={null}>
<ReportViewerDialog <ReportViewerDialog
isOpen={isReportViewerOpen} isOpen={isReportViewerOpen}
onClose={() => setIsReportViewerOpen(false)} onClose={() => setIsReportViewerOpen(false)}
isAdmin={isAdmin} isAdmin={isAdmin}
currentUsername={currentUsername} currentUsername={currentUsername}
/> />
</Suspense>
{/* Confirmation Dialog */} {/* Confirmation Dialog */}
{confirmDialog && <ConfirmDialog {...confirmDialog} />} {confirmDialog && <ConfirmDialog {...confirmDialog} />}