import { Alert, AlertTitle } from '@mui/material'
import { useWidgetSelector } from '../stores/use-widget-selector'
import type { WidgetErrorProps } from './types'
/**
* Displays an error alert when a widget encounters an error during data loading. Reads error state from the widget store and hides errors during loading/fetching to prevent flashing.
*
* @example
* ```tsx
*
*
*
* ```
*/
export function WidgetError({
id,
children,
title: titleProp,
description,
}: WidgetErrorProps) {
// Single consolidated subscription instead of 3 separate ones.
const { isLoading, isFetching, error } = useWidgetSelector(id, (w) => ({
isLoading: w?.isLoading,
isFetching: w?.isFetching,
error: w?.error,
}))
// Don't show error during loading/fetching states
if (isLoading || isFetching) {
return children
}
// Show error UI if error exists
if (error) {
const errorTitle = titleProp ?? error.title ?? 'Error'
const errorMessage =
description ??
error.message ??
'An error occurred while loading the widget. Please try again.'
return (
{errorTitle}
{errorMessage}
)
}
// No error, render children
return children
}