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

View File

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