Fix issue with changing servers and tabs (#2126)
This commit is contained in:
parent
581e1fd2e0
commit
37fe523e8c
|
@ -17,7 +17,7 @@ export default abstract class BaseTabView implements TabView {
|
||||||
return getTabViewName(this.server.name, this.type);
|
return getTabViewName(this.server.name, this.type);
|
||||||
}
|
}
|
||||||
get urlTypeTuple(): TabTuple {
|
get urlTypeTuple(): TabTuple {
|
||||||
return tuple(this.url.href, this.type) as TabTuple;
|
return tuple(this.server.url.href, this.type) as TabTuple;
|
||||||
}
|
}
|
||||||
get url(): URL {
|
get url(): URL {
|
||||||
throw new Error('Not implemented');
|
throw new Error('Not implemented');
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {
|
||||||
SET_VIEW_OPTIONS,
|
SET_VIEW_OPTIONS,
|
||||||
LOADSCREEN_END,
|
LOADSCREEN_END,
|
||||||
} from 'common/communication';
|
} from 'common/communication';
|
||||||
|
import {MattermostServer} from 'common/servers/MattermostServer';
|
||||||
import {TabView, TabTuple} from 'common/tabs/TabView';
|
import {TabView, TabTuple} from 'common/tabs/TabView';
|
||||||
|
|
||||||
import {ServerInfo} from 'main/server/serverInfo';
|
import {ServerInfo} from 'main/server/serverInfo';
|
||||||
|
@ -140,6 +140,12 @@ export class MattermostView extends EventEmitter {
|
||||||
return this.tab.urlTypeTuple;
|
return this.tab.urlTypeTuple;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateServerInfo = (srv: MattermostServer) => {
|
||||||
|
this.tab.server = srv;
|
||||||
|
this.serverInfo = new ServerInfo(srv);
|
||||||
|
this.view.webContents.send(SET_VIEW_OPTIONS, this.tab.name, this.tab.shouldNotify);
|
||||||
|
}
|
||||||
|
|
||||||
resetLoadingStatus = () => {
|
resetLoadingStatus = () => {
|
||||||
if (this.status !== Status.LOADING) { // if it's already loading, don't touch anything
|
if (this.status !== Status.LOADING) { // if it's already loading, don't touch anything
|
||||||
delete this.retryLoad;
|
delete this.retryLoad;
|
||||||
|
|
|
@ -199,6 +199,7 @@ describe('main/views/viewManager', () => {
|
||||||
destroy: destroyFn,
|
destroy: destroyFn,
|
||||||
name: tab.name,
|
name: tab.name,
|
||||||
urlTypeTuple: tab.urlTypeTuple,
|
urlTypeTuple: tab.urlTypeTuple,
|
||||||
|
updateServerInfo: jest.fn(),
|
||||||
tab,
|
tab,
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
@ -288,11 +289,15 @@ describe('main/views/viewManager', () => {
|
||||||
const view = {
|
const view = {
|
||||||
name: 'server1-tab1',
|
name: 'server1-tab1',
|
||||||
tab: {
|
tab: {
|
||||||
|
server: {
|
||||||
|
name: 'server-1',
|
||||||
|
},
|
||||||
name: 'server1-tab1',
|
name: 'server1-tab1',
|
||||||
url: new URL('http://server1.com'),
|
url: new URL('http://server1.com'),
|
||||||
},
|
},
|
||||||
urlTypeTuple: tuple('http://server1.com/', 'tab1'),
|
urlTypeTuple: tuple('http://server1.com/', 'tab1'),
|
||||||
destroy: jest.fn(),
|
destroy: jest.fn(),
|
||||||
|
updateServerInfo: jest.fn(),
|
||||||
};
|
};
|
||||||
viewManager.currentView = 'server1-tab1';
|
viewManager.currentView = 'server1-tab1';
|
||||||
viewManager.views.set('server1-tab1', view);
|
viewManager.views.set('server1-tab1', view);
|
||||||
|
@ -310,7 +315,6 @@ describe('main/views/viewManager', () => {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(viewManager.showByName).toHaveBeenCalledWith('server1-tab1');
|
expect(viewManager.showByName).toHaveBeenCalledWith('server1-tab1');
|
||||||
expect(viewManager.mainWindow.webContents.send).not.toHaveBeenCalled();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show initial if currentView has been removed', () => {
|
it('should show initial if currentView has been removed', () => {
|
||||||
|
@ -322,6 +326,7 @@ describe('main/views/viewManager', () => {
|
||||||
},
|
},
|
||||||
urlTypeTuple: ['http://server.com/', 'tab1'],
|
urlTypeTuple: ['http://server.com/', 'tab1'],
|
||||||
destroy: jest.fn(),
|
destroy: jest.fn(),
|
||||||
|
updateServerInfo: jest.fn(),
|
||||||
};
|
};
|
||||||
viewManager.currentView = 'server1-tab1';
|
viewManager.currentView = 'server1-tab1';
|
||||||
viewManager.views.set('server1-tab1', view);
|
viewManager.views.set('server1-tab1', view);
|
||||||
|
@ -338,7 +343,6 @@ describe('main/views/viewManager', () => {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(viewManager.currentView).toBeUndefined();
|
|
||||||
expect(viewManager.showInitial).toBeCalled();
|
expect(viewManager.showInitial).toBeCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -150,8 +150,7 @@ export class ViewManager {
|
||||||
if (!tab.isOpen) {
|
if (!tab.isOpen) {
|
||||||
closed.set(tabTuple, {srv, tab, name: view.name});
|
closed.set(tabTuple, {srv, tab, name: view.name});
|
||||||
} else if (recycle) {
|
} else if (recycle) {
|
||||||
recycle.serverInfo = info;
|
recycle.updateServerInfo(srv);
|
||||||
recycle.tab.server = srv;
|
|
||||||
views.set(tabTuple, recycle);
|
views.set(tabTuple, recycle);
|
||||||
} else {
|
} else {
|
||||||
views.set(tabTuple, this.makeView(srv, info, tab, tabTuple[0]));
|
views.set(tabTuple, this.makeView(srv, info, tab, tabTuple[0]));
|
||||||
|
@ -177,7 +176,7 @@ export class ViewManager {
|
||||||
this.closedViews.set(x.name, {srv: x.srv, tab: x.tab});
|
this.closedViews.set(x.name, {srv: x.srv, tab: x.tab});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (focusedTuple && (current.has(focusedTuple) || closed.has(focusedTuple))) {
|
if ((focusedTuple && closed.has(focusedTuple)) || (this.currentView && this.closedViews.has(this.currentView))) {
|
||||||
if (configServers.length) {
|
if (configServers.length) {
|
||||||
delete this.currentView;
|
delete this.currentView;
|
||||||
this.showInitial();
|
this.showInitial();
|
||||||
|
@ -189,8 +188,11 @@ export class ViewManager {
|
||||||
// show the focused tab (or initial)
|
// show the focused tab (or initial)
|
||||||
if (focusedTuple && views.has(focusedTuple)) {
|
if (focusedTuple && views.has(focusedTuple)) {
|
||||||
const view = views.get(focusedTuple);
|
const view = views.get(focusedTuple);
|
||||||
this.currentView = view!.name;
|
if (view) {
|
||||||
this.showByName(view!.name);
|
this.currentView = view.name;
|
||||||
|
this.showByName(view.name);
|
||||||
|
this.mainWindow.webContents.send(SET_ACTIVE_VIEW, view.tab.server.name, view.tab.type);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.showInitial();
|
this.showInitial();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue