@@ -16,11 +16,10 @@ import {
1616 isWidgetPlugin ,
1717 isWidgetMiddlewarePlugin ,
1818 createChainedComponent ,
19+ createChainedPanelComponent ,
1920 usePlugins ,
2021 type WidgetPlugin ,
2122 type WidgetMiddlewarePlugin ,
22- type WidgetPanelProps ,
23- type WidgetMiddlewarePanelProps ,
2423} from '@deephaven/plugin' ;
2524import { WidgetPanel } from './panels' ;
2625import { type WidgetPanelDescriptor } from './panels/WidgetPanelTypes' ;
@@ -37,50 +36,6 @@ interface WidgetTypeInfo {
3736 middleware : WidgetMiddlewarePlugin [ ] ;
3837}
3938
40- /**
41- * Creates a panel component that chains middleware around a base panel component.
42- * Each middleware panel wraps the next, with the base panel at the innermost layer.
43- */
44- function createChainedPanelComponent < T > (
45- basePanelComponent : React . ComponentType < WidgetPanelProps < T > > ,
46- middleware : WidgetMiddlewarePlugin < T > [ ]
47- ) : React . ComponentType < WidgetPanelProps < T > > {
48- // Filter to middleware that has a panelComponent and extract just the panel components
49- type MiddlewareWithPanel = WidgetMiddlewarePlugin < T > & {
50- panelComponent : React . ComponentType < WidgetMiddlewarePanelProps < T > > ;
51- } ;
52- const panelMiddleware = middleware . filter (
53- ( m ) : m is MiddlewareWithPanel => m . panelComponent != null
54- ) ;
55-
56- if ( panelMiddleware . length === 0 ) {
57- return basePanelComponent ;
58- }
59-
60- // Build the chain from inside out (base panel is innermost)
61- return [ ...panelMiddleware ]
62- . reverse ( )
63- . reduce < React . ComponentType < WidgetPanelProps < T > > > (
64- ( WrappedPanel , middlewarePlugin ) => {
65- const { panelComponent : MiddlewarePanelComponent } = middlewarePlugin ;
66-
67- function ChainedPanel ( props : WidgetPanelProps < T > ) {
68- return (
69- // eslint-disable-next-line react/jsx-props-no-spreading
70- < MiddlewarePanelComponent { ...props } Component = { WrappedPanel } />
71- ) ;
72- }
73- ChainedPanel . displayName = `${ middlewarePlugin . name } Panel(${
74- ( WrappedPanel as React . ComponentType ) . displayName ??
75- ( WrappedPanel as React . ComponentType ) . name ??
76- 'Panel'
77- } )`;
78- return ChainedPanel ;
79- } ,
80- basePanelComponent
81- ) ;
82- }
83-
8439export function WrapWidgetPlugin (
8540 plugin : WidgetPlugin
8641) : React . ForwardRefExoticComponent < PanelProps & React . RefAttributes < unknown > > {
0 commit comments