bbbcf9f586
Adds necessary dependencies including axios and react-native-calendars to pnpm-lock.yaml. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7b0991ce-c7b8-4c82-9acc-fd3f9e762a01 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: dc1266fa-8375-43e1-aca0-9df31350f647 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/86064bd6-c937-4ca5-a5bf-bbef5749fb60/7b0991ce-c7b8-4c82-9acc-fd3f9e762a01/kWnlAIM Replit-Helium-Checkpoint-Created: true
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import React, { Component, ComponentType, PropsWithChildren } from "react";
|
|
|
|
import { ErrorFallback, ErrorFallbackProps } from "@/components/ErrorFallback";
|
|
|
|
export type ErrorBoundaryProps = PropsWithChildren<{
|
|
FallbackComponent?: ComponentType<ErrorFallbackProps>;
|
|
onError?: (error: Error, stackTrace: string) => void;
|
|
}>;
|
|
|
|
type ErrorBoundaryState = { error: Error | null };
|
|
|
|
/**
|
|
* This is a special case for for using the class components. Error boundaries must be class components because React only provides error boundary functionality through lifecycle methods (componentDidCatch and getDerivedStateFromError) which are not available in functional components.
|
|
* https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
|
|
*/
|
|
export class ErrorBoundary extends Component<
|
|
ErrorBoundaryProps,
|
|
ErrorBoundaryState
|
|
> {
|
|
state: ErrorBoundaryState = { error: null };
|
|
|
|
static defaultProps: {
|
|
FallbackComponent: ComponentType<ErrorFallbackProps>;
|
|
} = {
|
|
FallbackComponent: ErrorFallback,
|
|
};
|
|
|
|
static getDerivedStateFromError(error: Error): ErrorBoundaryState {
|
|
return { error };
|
|
}
|
|
|
|
componentDidCatch(error: Error, info: { componentStack: string }): void {
|
|
if (typeof this.props.onError === "function") {
|
|
this.props.onError(error, info.componentStack);
|
|
}
|
|
}
|
|
|
|
resetError = (): void => {
|
|
this.setState({ error: null });
|
|
};
|
|
|
|
render() {
|
|
const { FallbackComponent } = this.props;
|
|
|
|
return this.state.error && FallbackComponent ? (
|
|
<FallbackComponent
|
|
error={this.state.error}
|
|
resetError={this.resetError}
|
|
/>
|
|
) : (
|
|
this.props.children
|
|
);
|
|
}
|
|
}
|