Files
spacedrive/interface/app/$libraryId/Explorer/FilePath/ErrorBarrier.tsx
Vítor Vasconcellos cc7c9d5793 Improve file thumbnails and Quick Preview (+ some code clean-up and rust deps update) (#2758)
* Update rspc, prisma-client-rust, axum and tanstack-query
 - Deleted some unused examples and fully commented out frontend code
 - Implement many changes required due to the updates
 - Update most rust dependencies

* Re-enable p2p

* Fix server

* Auto format

* Fix injected script format
 - Update some github actions
 - Update pnpm lock file

* Fix devtools showing up when app opens
 - Fix million complaining about Sparkles component

* Fix sd-server

* Fix and improve thumbnails rendering
 - Fix core always saying a new thumbnail was generated even for files that it skiped thumbnail generation
 - Rewrite FileThumb and improve related components

* Ignore tmp files when running prettier

* Improve FileThumb component performance
 - Rework useExplorerDraggable and useExplorerItemData hooks due to reduce unecessary re-renders

* More fixes for thumb component
 - A couple of minor performance improvements to frontend code

* auto format

* Fix Thumbnail and QuickPreview

* Fix logic for when to show 'fail to load original' error message in QuickPreview
 - Updated prisma-client-rust, libp2p, tauri, tauri-specta, rspc and hyper

* Fix type checking
 - Format scripts

* Add script prettier config

* Fix serde missing feature
 - Use rust-libp2p spacedrive fork again
 - Update rspc

* Autoformat + fix pnpm lock

* Fix thumbnail first load again

* Autoformat

* autoformat

* Fix rust-libp2p fork url again?

* Remove usePathsInfiniteQuery hook

* Update tauri 2.0.6
2024-10-21 15:47:40 +00:00

41 lines
1005 B
TypeScript

import React, { Component, ReactNode } from 'react';
interface ErrorBarrierProps {
onError: (error: Error, info: React.ErrorInfo) => void;
children: ReactNode;
}
interface ErrorBarrierState {
hasError: boolean;
}
export class ErrorBarrier extends Component<ErrorBarrierProps, ErrorBarrierState> {
constructor(props: ErrorBarrierProps) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error: Error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error: Error, info: React.ErrorInfo) {
// Call the onError function passed as a prop
this.props.onError(error, info);
// Reset the error state after calling onError
Promise.resolve().then(() => this.setState({ hasError: false }));
}
render() {
if (this.state.hasError) {
// Render nothing since the parent component will handle the error
return null;
}
return this.props.children;
}
}
export default ErrorBarrier;