UNPKG

piral-dashboard

Version:

Plugin for creating a centralized dashboard in Piral.

185 lines (168 loc) 4.56 kB
import type { ComponentType, ReactNode } from 'react'; import type { Dict, WrappedComponent, BaseComponentProps, AnyComponent, BaseRegistration, RegistrationDisposer, } from 'piral-core'; declare module 'piral-core/lib/types/custom' { interface PiletCustomApi extends PiletDashboardApi {} interface PiralCustomState {} interface PiralCustomActions { /** * Registers a new tile. * @param name The name of the tile. * @param value The tile registration. */ registerTile(name: string, value: TileRegistration): void; /** * Unregisters an existing tile. * @param name The name of the tile to be removed. */ unregisterTile(name: string): void; } interface PiralCustomRegistryState { /** * The registered tile components for a dashboard. */ tiles: Dict<TileRegistration>; } interface PiralCustomErrors { tile: TileErrorInfoProps; } interface PiralCustomComponentsState { /** * The dashboard container component. */ DashboardContainer: ComponentType<DashboardContainerProps>; /** * The dashboard tile component. */ DashboardTile: ComponentType<DashboardTileProps>; } } export interface InitialTile { /** * Defines the component to be used for the tile. */ component: ComponentType<BareTileComponentProps>; /** * Optionally sets the preferences for the tile. */ preferences?: TilePreferences; } export interface DashboardContainerProps { /** * The tiles to display. */ children?: ReactNode; } export interface DashboardTileProps { /** * The currently used number of columns. */ columns: number; /** * The currently used number of rows. */ rows: number; /** * The resizable status. */ resizable: boolean; /** * The provided tile preferences. */ meta: TilePreferences; /** * The content of the tile to display. */ children?: ReactNode; } export interface TileErrorInfoProps { /** * The type of the error. */ type: 'tile'; /** * The provided error details. */ error: any; /** * The currently used number of columns. */ columns: number; /** * The currently used number of rows. */ rows: number; /** * The name of the pilet emitting the error. */ pilet?: string; } export interface BareTileComponentProps { /** * The currently used number of columns. */ columns: number; /** * The currently used number of rows. */ rows: number; } export type TileComponentProps = BaseComponentProps & BareTileComponentProps; export interface PiralCustomTilePreferences {} export interface TilePreferences extends PiralCustomTilePreferences { /** * Sets the desired initial number of columns. * This may be overridden either by the user (if resizable true), or by the dashboard. */ initialColumns?: number; /** * Sets the desired initial number of rows. * This may be overridden either by the user (if resizable true), or by the dashboard. */ initialRows?: number; /** * Determines if the tile can be resized by the user. * By default the size of the tile is fixed. */ resizable?: boolean; /** * Declares a set of custom properties to be used with user-specified values. */ customProperties?: Array<string>; } export interface TileRegistration extends BaseRegistration { component: WrappedComponent<TileComponentProps>; preferences: TilePreferences; } export interface PiletDashboardApi { /** * Registers a tile with a predefined tile components. * The name has to be unique within the current pilet. * @param name The name of the tile. * @param Component The component to be rendered within the Dashboard. * @param preferences The optional preferences to be supplied to the Dashboard for the tile. */ registerTile( name: string, Component: AnyComponent<TileComponentProps>, preferences?: TilePreferences, ): RegistrationDisposer; /** * Registers a tile for predefined tile components. * @param Component The component to be rendered within the Dashboard. * @param preferences The optional preferences to be supplied to the Dashboard for the tile. */ registerTile(Component: AnyComponent<TileComponentProps>, preferences?: TilePreferences): RegistrationDisposer; /** * Unregisters a tile known by the given name. * Only previously registered tiles can be unregistered. * @param name The name of the tile to unregister. */ unregisterTile(name: string): void; }