Panels
This package contains the shared panel component that also acts as an error boundary for all panels.
Shared Panel Purpose
This component is meant to wrap the contents of a panel. This shared component abstracts away panel error handling for the user.
Use Cases
Below are three common use cases for the shared Panel component.
Title + Render Header Actions
This code is found in ActivityFeed.tsx. The header and body of the panel have been wrapped in the imported Panel component from the shared/panels directory. When an error occurs, a default error panel UI will be displayed and give the user the option to refresh the panel. If rendering a custom header, you'll need to use the title, and renderHeaderActions props.
import { Panel } from '@shared/panels'
return (
<Panel
title={'Panel Header'}
renderHeaderActions={
<ExampleTabset
hasPerson={Boolean(person)}
isLoading={false}
activeTab={activeTab}
/>
}
>
{renderTabsContent()}
</Panel>
)
Render Header
If a header currently exists, you can pass that header into the renderHeader prop.
import { Panel } from '@shared/panels'
return (
<Panel
renderHeader={
<ActivitiesTabset
hasPerson={Boolean(person)}
isLoading={false}
activeTab={activeTab}
/>
}
>
{renderTabsContent()}
</Panel>
)
Custom Error Panel
Error panels can be custom and passed into the renderCustomErrorPanel prop.
import { ThrowError, Panel } from '@shared/panels'
return (
<Panel
renderHeader={
<ActivitiesTabset
hasPerson={Boolean(person)}
isLoading={false}
activeTab={activeTab}
/>
renderCustomErrorPanel={({ resetError }) => (
<CustomErrorPanelWrapper>
<p>Try again</p>
<button onClick={() => resetError()}>Refresh</button>
</CustomErrorPanelWrapper>
)}}
>
{renderTabsContent()}
</Panel>
)