mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-02-20 07:37:26 -05:00
* wip * wip 2 * Grid list single selection * core & pnpm-lock * Merge branch 'main' Conflicts: interface/app/$libraryId/Explorer/index.tsx * missing import from merge * fix total_orphan_paths bug * add top bar context * missing pieces of merge * missing pieces of merge * missing divs * Fill fallback value - was causing null error of page * spelling fixes * notice light theme, list view update, other explorer updates * Update pnpm-lock * Remove procedure * fix light menu ink color * fix list view scrolled state * Change layout default * Remove unused imports * remove keys * empty notice & context menu overview * Fix prevent selection while context menu is up * Fix scroll with keys * Empty notice icon * Add light icons * Context menu and fixed list view scroll * Fix name column sizing * top/bottom scroll position * Tag assign only when objectData * Fix list view locked state * fix ci * shamefully ignore eslint --------- Co-authored-by: Jamie Pine <ijamespine@me.com> Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com> Co-authored-by: Jamie Pine <32987599+jamiepine@users.noreply.github.com> Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
103 lines
2.7 KiB
TypeScript
103 lines
2.7 KiB
TypeScript
import { captureException } from '@sentry/browser';
|
|
import { FallbackProps } from 'react-error-boundary';
|
|
import { useRouteError } from 'react-router';
|
|
import { useDebugState } from '@sd/client';
|
|
import { Button } from '@sd/ui';
|
|
import { useOperatingSystem } from './hooks';
|
|
|
|
export function RouterErrorBoundary() {
|
|
const error = useRouteError();
|
|
return (
|
|
<ErrorPage
|
|
message={(error as any).toString()}
|
|
sendReportBtn={() => {
|
|
captureException(error);
|
|
location.reload();
|
|
}}
|
|
reloadBtn={() => {
|
|
location.reload();
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default ({ error, resetErrorBoundary }: FallbackProps) => (
|
|
<ErrorPage
|
|
message={`Error: ${error.message}`}
|
|
sendReportBtn={() => {
|
|
captureException(error);
|
|
resetErrorBoundary();
|
|
}}
|
|
reloadBtn={resetErrorBoundary}
|
|
/>
|
|
);
|
|
|
|
export function ErrorPage({
|
|
reloadBtn,
|
|
sendReportBtn,
|
|
message,
|
|
submessage
|
|
}: {
|
|
reloadBtn?: () => void;
|
|
sendReportBtn?: () => void;
|
|
message: string;
|
|
submessage?: string;
|
|
}) {
|
|
const debug = useDebugState();
|
|
const os = useOperatingSystem();
|
|
const isMacOS = os === 'macOS';
|
|
|
|
if (!submessage && debug.enabled)
|
|
submessage = 'Check the console (CMD/CTRL + OPTION + i) for stack trace.';
|
|
|
|
return (
|
|
<div
|
|
data-tauri-drag-region
|
|
role="alert"
|
|
className={
|
|
'flex h-screen w-screen flex-col items-center justify-center border border-app-divider bg-app p-4' +
|
|
(isMacOS ? ' rounded-lg' : '')
|
|
}
|
|
>
|
|
<p className="m-3 text-sm font-bold text-ink-faint">APP CRASHED</p>
|
|
<h1 className="text-2xl font-bold text-ink">We're past the event horizon...</h1>
|
|
<pre className="m-2 text-ink">{message}</pre>
|
|
{submessage && <pre className="m-2 text-sm text-ink-dull">{submessage}</pre>}
|
|
<div className="flex flex-row space-x-2 text-ink">
|
|
{reloadBtn && (
|
|
<Button variant="accent" className="mt-2" onClick={reloadBtn}>
|
|
Reload
|
|
</Button>
|
|
)}
|
|
{sendReportBtn && (
|
|
<Button variant="gray" className="mt-2" onClick={sendReportBtn}>
|
|
Send report
|
|
</Button>
|
|
)}
|
|
{message === 'failed to initialize config' && (
|
|
<div className="flex flex-col items-center pt-12">
|
|
<p className="text-md max-w-[650px] text-center">
|
|
We detected you may have created your library with an older version of
|
|
Spacedrive. Please reset it to continue using the app!
|
|
</p>
|
|
<p className="mt-3 font-bold">
|
|
{' '}
|
|
YOU WILL LOSE ANY EXISTING SPACEDRIVE DATA!
|
|
</p>
|
|
<Button
|
|
variant="colored"
|
|
className="mt-4 max-w-xs border-transparent bg-red-500"
|
|
onClick={() => {
|
|
// @ts-expect-error
|
|
window.__TAURI_INVOKE__('reset_spacedrive');
|
|
}}
|
|
>
|
|
Reset Library
|
|
</Button>
|
|
</div>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|