(core) Fixing bug with type change when a collapsed section is maximized

Summary:
Changing type of a collapsed widget didn't work. It was grabbed
by the collapsed dom to soon.

Test Plan: Updated

Reviewers: georgegevoian

Reviewed By: georgegevoian

Subscribers: georgegevoian

Differential Revision: https://phab.getgrist.com/D3839
This commit is contained in:
Jarosław Sadziński 2023-03-28 17:13:33 +02:00
parent 3a1fbbc533
commit 6b5c178953

View File

@ -119,8 +119,11 @@ export class LayoutTray extends DisposableWithEvents {
public buildPopup(owner: IDisposableOwner, selected: Observable<number|null>, close: () => void) { public buildPopup(owner: IDisposableOwner, selected: Observable<number|null>, close: () => void) {
const section = Observable.create<number|null>(owner, null); const section = Observable.create<number|null>(owner, null);
owner.autoDispose(selected.addListener((cur, prev) => { owner.autoDispose(selected.addListener((cur, prev) => {
if (prev && !cur) { if (prev) {
this.layout.getBox(prev)?.recreate(); this.layout.getBox(prev)?.attach();
}
if (cur) {
this.layout.getBox(cur)?.detach();
} }
section.set(cur); section.set(cur);
})); }));
@ -623,6 +626,11 @@ class CollapsedLeaf extends Leaf implements Draggable, Dropped {
// Helper to keeping track of the index of the leaf in the layout. // Helper to keeping track of the index of the leaf in the layout.
private _indexWhenDragged = 0; private _indexWhenDragged = 0;
// A helper variable that indicates that this section is in a popup, and we should
// make any attempt to grab it and attach to our dom. Note: this is not a computed variable.
private _detached = false;
constructor(protected model: LayoutTray, id: number) { constructor(protected model: LayoutTray, id: number) {
super(); super();
this.id.set(id); this.id.set(id);
@ -633,16 +641,21 @@ class CollapsedLeaf extends Leaf implements Draggable, Dropped {
const instance = use(view.viewInstance); const instance = use(view.viewInstance);
return instance; return instance;
}); });
this._hiddenViewInstance.set(cssHidden(dom.maybe(this._viewInstance, view => view.viewPane))); this._buildHidden();
this.onDispose(() => { this.onDispose(() => {
const instance = this._hiddenViewInstance.get(); const instance = this._hiddenViewInstance.get();
instance && dom.domDispose(instance); instance && dom.domDispose(instance);
}); });
} }
public recreate() { public detach() {
this._detached = true;
}
public attach() {
this._detached = false;
const previous = this._hiddenViewInstance.get(); const previous = this._hiddenViewInstance.get();
this._hiddenViewInstance.set(cssHidden(dom.maybe(this._viewInstance, view => view.viewPane))); this._buildHidden();
previous && dom.domDispose(previous); previous && dom.domDispose(previous);
} }
@ -725,6 +738,12 @@ class CollapsedLeaf extends Leaf implements Draggable, Dropped {
public leafId() { public leafId() {
return this.id.get(); return this.id.get();
} }
private _buildHidden() {
this._hiddenViewInstance.set(cssHidden(dom.maybe(this._viewInstance, view => {
return this._detached ? null : view.viewPane;
})));
}
} }
/** /**