@@ -50,8 +50,6 @@ import {
5050 getDashboardSessionWrapper ,
5151 ControlType ,
5252 ToolType ,
53- FilterSet ,
54- Link ,
5553 getDashboardConnection ,
5654 NotebookPanel ,
5755} from '@deephaven/dashboard-core-plugins' ;
@@ -155,6 +153,9 @@ interface AppMainContainerState {
155153 widgets : DhType . ide . VariableDefinition [ ] ;
156154 tabs : NavTabItem [ ] ;
157155 activeTabKey : string ;
156+
157+ // Number of times the layout has been re-initialized
158+ layoutIteration : number ;
158159}
159160
160161export class AppMainContainer extends Component <
@@ -255,6 +256,7 @@ export class AppMainContainer extends Component<
255256 title : value . title ?? 'Untitled' ,
256257 } ) ) ,
257258 activeTabKey : DEFAULT_DASHBOARD_ID ,
259+ layoutIteration : 0 ,
258260 } ;
259261 }
260262
@@ -577,13 +579,7 @@ export class AppMainContainer extends Component<
577579 try {
578580 const { workspace } = this . props ;
579581 const { data } = workspace ;
580- const exportedConfig = UserLayoutUtils . exportLayout (
581- data as {
582- filterSets : FilterSet [ ] ;
583- links : Link [ ] ;
584- layoutConfig : ItemConfigType [ ] ;
585- }
586- ) ;
582+ const exportedConfig = UserLayoutUtils . exportLayout ( data ) ;
587583
588584 log . info ( 'handleExportLayoutClick exportedConfig' , exportedConfig ) ;
589585
@@ -658,14 +654,18 @@ export class AppMainContainer extends Component<
658654 const { updateDashboardData, updateWorkspaceData } = this . props ;
659655 const fileText = await file . text ( ) ;
660656 const exportedLayout = JSON . parse ( fileText ) ;
661- const { filterSets, layoutConfig, links } =
657+ const { filterSets, layoutConfig, links, pluginDataMap } =
662658 UserLayoutUtils . normalizeLayout ( exportedLayout ) ;
663659
664660 updateWorkspaceData ( { layoutConfig } ) ;
665661 updateDashboardData ( DEFAULT_DASHBOARD_ID , {
666662 filterSets,
667663 links,
664+ pluginDataMap,
668665 } ) ;
666+ this . setState ( ( { layoutIteration } ) => ( {
667+ layoutIteration : layoutIteration + 1 ,
668+ } ) ) ;
669669 } catch ( e ) {
670670 log . error ( 'Unable to import layout' , e ) ;
671671 }
@@ -832,8 +832,9 @@ export class AppMainContainer extends Component<
832832 getDashboards ( ) : {
833833 id : string ;
834834 layoutConfig : ItemConfigType [ ] ;
835+ key ?: string ;
835836 } [ ] {
836- const { tabs } = this . state ;
837+ const { layoutIteration , tabs } = this . state ;
837838 const { allDashboardData, workspace } = this . props ;
838839 const { data : workspaceData } = workspace ;
839840 const { layoutConfig } = workspaceData ;
@@ -842,11 +843,13 @@ export class AppMainContainer extends Component<
842843 {
843844 id : DEFAULT_DASHBOARD_ID ,
844845 layoutConfig : layoutConfig as ItemConfigType [ ] ,
846+ key : `${ DEFAULT_DASHBOARD_ID } -${ layoutIteration } ` ,
845847 } ,
846848 ...tabs . map ( tab => ( {
847849 id : tab . key ,
848850 layoutConfig : ( allDashboardData [ tab . key ] ?. layoutConfig ??
849851 EMPTY_ARRAY ) as ItemConfigType [ ] ,
852+ key : `${ tab . key } -${ layoutIteration } ` ,
850853 } ) ) ,
851854 ] ;
852855 }
@@ -1019,6 +1022,7 @@ export class AppMainContainer extends Component<
10191022 accept = ".json"
10201023 style = { { display : 'none' } }
10211024 onChange = { this . handleImportLayoutFiles }
1025+ data-testid = "input-import-layout"
10221026 />
10231027 < DebouncedModal
10241028 isOpen = { isDisconnected && ! isAuthFailed }
0 commit comments