mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-08-03 02:11:07 +05:30
feat(renderer): mount UpdateBanner, FirstRunWizard, and CrashReportModal
This commit is contained in:
@@ -4,6 +4,8 @@ import { ModalLayer } from './components/modals/ModalLayer';
|
|||||||
import { Toaster } from './components/ui/sonner';
|
import { Toaster } from './components/ui/sonner';
|
||||||
import { ReplPanel } from './components/tools/ReplPanel';
|
import { ReplPanel } from './components/tools/ReplPanel';
|
||||||
import { PrintPreview } from './components/tools/PrintPreview';
|
import { PrintPreview } from './components/tools/PrintPreview';
|
||||||
|
import { UpdateBanner } from './components/UpdateBanner';
|
||||||
|
import { FirstRunWizard } from './components/FirstRunWizard';
|
||||||
import { useWelcomeTrigger } from './hooks/use-welcome-trigger';
|
import { useWelcomeTrigger } from './hooks/use-welcome-trigger';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
@@ -21,6 +23,8 @@ function App() {
|
|||||||
<AppShell />
|
<AppShell />
|
||||||
<ModalLayer />
|
<ModalLayer />
|
||||||
<Toaster />
|
<Toaster />
|
||||||
|
<UpdateBanner />
|
||||||
|
<FirstRunWizard />
|
||||||
<ReplPanel />
|
<ReplPanel />
|
||||||
{printOpen && <PrintPreview onClose={() => setPrintOpen(false)} />}
|
{printOpen && <PrintPreview onClose={() => setPrintOpen(false)} />}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useAppStore } from '@/stores/app-store';
|
|||||||
import { AboutDialog } from './AboutDialog';
|
import { AboutDialog } from './AboutDialog';
|
||||||
import { AsciiGeneratorDialog } from './AsciiGeneratorDialog';
|
import { AsciiGeneratorDialog } from './AsciiGeneratorDialog';
|
||||||
import { ConfirmDialog } from './ConfirmDialog';
|
import { ConfirmDialog } from './ConfirmDialog';
|
||||||
|
import { CrashReportModal } from './CrashReportModal';
|
||||||
import { ExportBatchDialog } from './ExportBatchDialog';
|
import { ExportBatchDialog } from './ExportBatchDialog';
|
||||||
import { ExportDocxDialog } from './ExportDocxDialog';
|
import { ExportDocxDialog } from './ExportDocxDialog';
|
||||||
import { ExportHtmlDialog } from './ExportHtmlDialog';
|
import { ExportHtmlDialog } from './ExportHtmlDialog';
|
||||||
@@ -41,5 +42,7 @@ export function ModalLayer() {
|
|||||||
return <TableGeneratorDialog />;
|
return <TableGeneratorDialog />;
|
||||||
case 'find-in-files':
|
case 'find-in-files':
|
||||||
return <FindInFilesDialog />;
|
return <FindInFilesDialog />;
|
||||||
|
case 'crashReports':
|
||||||
|
return <CrashReportModal onClose={useAppStore.getState().closeModal} />;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,8 @@ export type ModalState =
|
|||||||
| { kind: 'export-word'; props: { sourcePath: string } }
|
| { kind: 'export-word'; props: { sourcePath: string } }
|
||||||
| { kind: 'ascii-generator' }
|
| { kind: 'ascii-generator' }
|
||||||
| { kind: 'table-generator' }
|
| { kind: 'table-generator' }
|
||||||
| { kind: 'find-in-files' };
|
| { kind: 'find-in-files' }
|
||||||
|
| { kind: 'crashReports' };
|
||||||
|
|
||||||
export type ModalKind = ModalState['kind'];
|
export type ModalKind = ModalState['kind'];
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ interface AppState {
|
|||||||
zenMode: boolean;
|
zenMode: boolean;
|
||||||
paneSizes: PaneSizes;
|
paneSizes: PaneSizes;
|
||||||
modal: ModalState;
|
modal: ModalState;
|
||||||
|
firstRun: boolean;
|
||||||
toggleSidebar: () => void;
|
toggleSidebar: () => void;
|
||||||
togglePreview: () => void;
|
togglePreview: () => void;
|
||||||
setZenMode: (value: boolean) => void;
|
setZenMode: (value: boolean) => void;
|
||||||
@@ -49,6 +51,8 @@ interface AppState {
|
|||||||
...args: Extract<ModalState, { kind: K }> extends { props: infer P } ? [props?: P] : []
|
...args: Extract<ModalState, { kind: K }> extends { props: infer P } ? [props?: P] : []
|
||||||
) => void;
|
) => void;
|
||||||
closeModal: () => void;
|
closeModal: () => void;
|
||||||
|
setFirstRun: (value: boolean) => void;
|
||||||
|
newBuffer: (content?: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useAppStore = create<AppState>()(
|
export const useAppStore = create<AppState>()(
|
||||||
@@ -59,6 +63,7 @@ export const useAppStore = create<AppState>()(
|
|||||||
zenMode: false,
|
zenMode: false,
|
||||||
paneSizes: { sidebar: 20, editor: 50, preview: 30 },
|
paneSizes: { sidebar: 20, editor: 50, preview: 30 },
|
||||||
modal: { kind: null },
|
modal: { kind: null },
|
||||||
|
firstRun: true,
|
||||||
toggleSidebar: () => set((s) => ({ sidebarVisible: !s.sidebarVisible })),
|
toggleSidebar: () => set((s) => ({ sidebarVisible: !s.sidebarVisible })),
|
||||||
togglePreview: () => set((s) => ({ previewVisible: !s.previewVisible })),
|
togglePreview: () => set((s) => ({ previewVisible: !s.previewVisible })),
|
||||||
setZenMode: (value) => set({ zenMode: value }),
|
setZenMode: (value) => set({ zenMode: value }),
|
||||||
@@ -69,6 +74,8 @@ export const useAppStore = create<AppState>()(
|
|||||||
return { modal: candidate };
|
return { modal: candidate };
|
||||||
}),
|
}),
|
||||||
closeModal: () => set({ modal: { kind: null } }),
|
closeModal: () => set({ modal: { kind: null } }),
|
||||||
|
setFirstRun: (value) => set({ firstRun: value }),
|
||||||
|
newBuffer: (_content?: string) => set({ firstRun: false }),
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: 'mc-app-store',
|
name: 'mc-app-store',
|
||||||
|
|||||||
Reference in New Issue
Block a user