Merge pull request #33795 from element-hq/backport-33792-to-staging
[Backport staging] Recreate resizer view-model when switching to/from module renderer view
This commit is contained in:
@@ -202,8 +202,18 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||||||
|
|
||||||
OwnProfileStore.instance.on(UPDATE_EVENT, this.refreshBackgroundImage);
|
OwnProfileStore.instance.on(UPDATE_EVENT, this.refreshBackgroundImage);
|
||||||
this.refreshBackgroundImage();
|
this.refreshBackgroundImage();
|
||||||
|
}
|
||||||
|
|
||||||
this.resizerViewModel = new ResizerViewModel();
|
private getResizerViewModel(): ResizerViewModel {
|
||||||
|
if (!this.resizerViewModel) {
|
||||||
|
this.resizerViewModel = new ResizerViewModel();
|
||||||
|
}
|
||||||
|
return this.resizerViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private disposeResizerViewModel(): void {
|
||||||
|
this.resizerViewModel?.dispose();
|
||||||
|
this.resizerViewModel = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -739,6 +749,8 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||||||
break;
|
break;
|
||||||
default: {
|
default: {
|
||||||
if (moduleRenderer) {
|
if (moduleRenderer) {
|
||||||
|
// Since the view will be removed, remove the vm as well
|
||||||
|
this.disposeResizerViewModel();
|
||||||
pageElement = moduleRenderer();
|
pageElement = moduleRenderer();
|
||||||
} else {
|
} else {
|
||||||
console.warn(`Couldn't render page type "${this.props.page_type}"`);
|
console.warn(`Couldn't render page type "${this.props.page_type}"`);
|
||||||
@@ -797,14 +809,15 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||||||
const roomView = <div className="mx_RoomView_wrapper">{pageElement}</div>;
|
const roomView = <div className="mx_RoomView_wrapper">{pageElement}</div>;
|
||||||
|
|
||||||
let content: React.ReactNode;
|
let content: React.ReactNode;
|
||||||
if (useNewRoomList && this.resizerViewModel && !moduleRenderer) {
|
const resizerViewModel = !moduleRenderer ? this.getResizerViewModel() : undefined;
|
||||||
|
if (useNewRoomList && resizerViewModel && !moduleRenderer) {
|
||||||
// New room list owned by element-web: resizable layout with a draggable separator.
|
// New room list owned by element-web: resizable layout with a draggable separator.
|
||||||
// The SpacePanel lives inside GroupView (leftPanel omits it when the new room list is enabled).
|
// The SpacePanel lives inside GroupView (leftPanel omits it when the new room list is enabled).
|
||||||
content = (
|
content = (
|
||||||
<GroupView vm={this.resizerViewModel}>
|
<GroupView vm={resizerViewModel}>
|
||||||
<SpacePanel />
|
<SpacePanel />
|
||||||
<LeftResizablePanelView
|
<LeftResizablePanelView
|
||||||
vm={this.resizerViewModel}
|
vm={resizerViewModel}
|
||||||
className="mx_LeftPanel_panel"
|
className="mx_LeftPanel_panel"
|
||||||
minSize="200px"
|
minSize="200px"
|
||||||
maxSize="370px"
|
maxSize="370px"
|
||||||
@@ -812,7 +825,7 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||||||
>
|
>
|
||||||
{leftPanel}
|
{leftPanel}
|
||||||
</LeftResizablePanelView>
|
</LeftResizablePanelView>
|
||||||
<SeparatorView className="mx_Separator" vm={this.resizerViewModel} />
|
<SeparatorView className="mx_Separator" vm={resizerViewModel} />
|
||||||
<Panel className="mx_LeftPanel_panel">{roomView}</Panel>
|
<Panel className="mx_LeftPanel_panel">{roomView}</Panel>
|
||||||
</GroupView>
|
</GroupView>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user