[MM-50485] Migrate app to ServerManager, remove view names and replace with IDs (#2672)
* Migrate app to ServerManager, remove view names and replace with IDs * Fixed a test * Fixed a bug when adding the initial server * Merge'd * Bug fixes and PR feedback
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
|
||||
import {v4 as uuid} from 'uuid';
|
||||
|
||||
import {Team} from 'types/config';
|
||||
import {MattermostTeam, Team} from 'types/config';
|
||||
|
||||
import urlUtils from 'common/utils/url';
|
||||
|
||||
@@ -13,14 +13,13 @@ export class MattermostServer {
|
||||
url!: URL;
|
||||
isPredefined: boolean;
|
||||
|
||||
constructor(server: Team, isPredefined = false) {
|
||||
constructor(server: Team, isPredefined: boolean) {
|
||||
this.id = uuid();
|
||||
|
||||
this.name = server.name;
|
||||
this.updateURL(server.url);
|
||||
|
||||
this.isPredefined = isPredefined;
|
||||
if (!this.url) {
|
||||
throw new Error('Invalid url for creating a server');
|
||||
}
|
||||
}
|
||||
|
||||
updateURL = (url: string) => {
|
||||
@@ -29,4 +28,13 @@ export class MattermostServer {
|
||||
throw new Error('Invalid url for creating a server');
|
||||
}
|
||||
}
|
||||
|
||||
toMattermostTeam = (): MattermostTeam => {
|
||||
return {
|
||||
name: this.name,
|
||||
url: this.url.toString(),
|
||||
id: this.id,
|
||||
isPredefined: this.isPredefined,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@@ -32,9 +32,9 @@ describe('common/servers/serverManager', () => {
|
||||
};
|
||||
serverManager.servers = new Map([['server-1', server]]);
|
||||
serverManager.tabs = new Map([
|
||||
['tab-1', {id: 'tab-1', name: TAB_MESSAGING, isOpen: true, server}],
|
||||
['tab-2', {id: 'tab-2', name: TAB_PLAYBOOKS, server}],
|
||||
['tab-3', {id: 'tab-3', name: TAB_FOCALBOARD, server}],
|
||||
['tab-1', {id: 'tab-1', type: TAB_MESSAGING, isOpen: true, server}],
|
||||
['tab-2', {id: 'tab-2', type: TAB_PLAYBOOKS, server}],
|
||||
['tab-3', {id: 'tab-3', type: TAB_FOCALBOARD, server}],
|
||||
]);
|
||||
serverManager.tabOrder = new Map([['server-1', ['tab-1', 'tab-2', 'tab-3']]]);
|
||||
serverManager.persistServers = jest.fn();
|
||||
|
@@ -145,9 +145,9 @@ export class ServerManager extends EventEmitter {
|
||||
}
|
||||
const tabs = this.getOrderedTabsForServer(server.id);
|
||||
|
||||
let selectedTab = tabs.find((tab) => tab && tab.name === TAB_MESSAGING);
|
||||
let selectedTab = tabs.find((tab) => tab && tab.type === TAB_MESSAGING);
|
||||
tabs.
|
||||
filter((tab) => tab && tab.name !== TAB_MESSAGING).
|
||||
filter((tab) => tab && tab.type !== TAB_MESSAGING).
|
||||
forEach((tab) => {
|
||||
if (parsedURL.pathname.match(new RegExp(`^${tab.url.pathname}(/(.+))?`))) {
|
||||
selectedTab = tab;
|
||||
@@ -187,6 +187,10 @@ export class ServerManager extends EventEmitter {
|
||||
});
|
||||
this.tabOrder.set(newServer.id, tabOrder);
|
||||
|
||||
if (!this.currentServerId) {
|
||||
this.currentServerId = newServer.id;
|
||||
}
|
||||
|
||||
// Emit this event whenever we update a server URL to ensure remote info is fetched
|
||||
this.emit(SERVERS_URL_MODIFIED, [newServer.id]);
|
||||
this.persistServers();
|
||||
@@ -230,6 +234,10 @@ export class ServerManager extends EventEmitter {
|
||||
this.remoteInfo.delete(serverId);
|
||||
this.servers.delete(serverId);
|
||||
|
||||
if (this.currentServerId === serverId && this.hasServers()) {
|
||||
this.currentServerId = this.serverOrder[0];
|
||||
}
|
||||
|
||||
this.persistServers();
|
||||
}
|
||||
|
||||
@@ -274,7 +282,7 @@ export class ServerManager extends EventEmitter {
|
||||
}
|
||||
this.filterOutDuplicateTeams();
|
||||
this.serverOrder = serverOrder;
|
||||
if (Config.lastActiveTeam) {
|
||||
if (Config.lastActiveTeam && this.serverOrder[Config.lastActiveTeam]) {
|
||||
this.currentServerId = this.serverOrder[Config.lastActiveTeam];
|
||||
} else {
|
||||
this.currentServerId = this.serverOrder[0];
|
||||
@@ -417,13 +425,13 @@ export class ServerManager extends EventEmitter {
|
||||
tabOrder.forEach((tabId) => {
|
||||
const tab = this.tabs.get(tabId);
|
||||
if (tab) {
|
||||
if (tab.name === TAB_PLAYBOOKS && remoteInfo.hasPlaybooks && typeof tab.isOpen === 'undefined') {
|
||||
if (tab.type === TAB_PLAYBOOKS && remoteInfo.hasPlaybooks && typeof tab.isOpen === 'undefined') {
|
||||
log.withPrefix(tab.id).verbose('opening Playbooks');
|
||||
tab.isOpen = true;
|
||||
this.tabs.set(tabId, tab);
|
||||
hasUpdates = true;
|
||||
}
|
||||
if (tab.name === TAB_FOCALBOARD && remoteInfo.hasFocalboard && typeof tab.isOpen === 'undefined') {
|
||||
if (tab.type === TAB_FOCALBOARD && remoteInfo.hasFocalboard && typeof tab.isOpen === 'undefined') {
|
||||
log.withPrefix(tab.id).verbose('opening Boards');
|
||||
tab.isOpen = true;
|
||||
this.tabs.set(tabId, tab);
|
||||
@@ -453,7 +461,7 @@ export class ServerManager extends EventEmitter {
|
||||
if (!view) {
|
||||
return new Logger(viewId);
|
||||
}
|
||||
return new Logger(...additionalPrefixes, ...this.includeId(viewId, view.server.name, view.name));
|
||||
return new Logger(...additionalPrefixes, ...this.includeId(viewId, view.server.name, view.type));
|
||||
};
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user