[MM-23082] Fixes whitescreen issue on app upgrade / GPO / whitelabeled app deployments (#1246)

* Fixes whitescreen issue on app upgrade / GPO push / whitelabeled app deployments.  If sort order was not present in buildConfig.js (or previous configuration), we will assume reasonable defaults

* Fixing eslint bugs - with my apologies

* Removing order flag from sample configuration, but leaving it in the documentation.
BUGFIX: Accidentally left my custom enableServerManagement flag in place.  Reverted to default

* Making a more educated guess as to the user's desired sort order.

* Update src/common/config/index.js

Use forEach's index instead of an external one.

Co-Authored-By: Guillermo Vayá <guivaya@gmail.com>

* Update src/common/config/index.js

Let me test this, I'm not sure I understand how this logic works.  :)

Co-Authored-By: Guillermo Vayá <guivaya@gmail.com>

* Removed optional field

* Fixed broken lint:js with my apologies

Co-authored-by: Guillermo Vayá <guivaya@gmail.com>
This commit is contained in:
Brian Ledbetter 2020-04-07 09:49:49 -04:00 committed by GitHub
parent b573e773d8
commit 93f7ae9b47
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 3 deletions

View file

@ -9,6 +9,7 @@
* @prop {Object[]} defaultTeams * @prop {Object[]} defaultTeams
* @prop {string} defaultTeams[].name - The tab name for default team. * @prop {string} defaultTeams[].name - The tab name for default team.
* @prop {string} defaultTeams[].url - The URL for default team. * @prop {string} defaultTeams[].url - The URL for default team.
* @prop {string} defaultTeams[].order - Sort order for team tabs (0, 1, 2)
* @prop {string} helpLink - The URL for "Help->Learn More..." menu item. * @prop {string} helpLink - The URL for "Help->Learn More..." menu item.
* If null is specified, the menu disappears. * If null is specified, the menu disappears.
* @prop {boolean} enableServerManagement - Whether users can edit servers configuration. * @prop {boolean} enableServerManagement - Whether users can edit servers configuration.
@ -20,8 +21,8 @@ const buildConfig = {
{ {
name: 'example', name: 'example',
url: 'https://example.com' url: 'https://example.com'
}*/ }
], */],
helpLink: 'https://about.mattermost.com/default-desktop-app-documentation/', helpLink: 'https://about.mattermost.com/default-desktop-app-documentation/',
enableServerManagement: true, enableServerManagement: true,
enableAutoUpdater: true, enableAutoUpdater: true,

View file

@ -272,7 +272,7 @@ export default class Config extends EventEmitter {
delete this.combinedData.defaultTeams; delete this.combinedData.defaultTeams;
// IMPORTANT: properly combine teams from all sources // IMPORTANT: properly combine teams from all sources
const combinedTeams = []; let combinedTeams = [];
// - start by adding default teams from buildConfig, if any // - start by adding default teams from buildConfig, if any
if (this.buildConfigData.defaultTeams && this.buildConfigData.defaultTeams.length) { if (this.buildConfigData.defaultTeams && this.buildConfigData.defaultTeams.length) {
@ -289,6 +289,9 @@ export default class Config extends EventEmitter {
combinedTeams.push(...this.localConfigData.teams); combinedTeams.push(...this.localConfigData.teams);
} }
combinedTeams = this.filterOutDuplicateTeams(combinedTeams);
combinedTeams = this.sortUnorderedTeams(combinedTeams);
this.combinedData.teams = combinedTeams; this.combinedData.teams = combinedTeams;
this.combinedData.localTeams = this.localConfigData.teams; this.combinedData.localTeams = this.localConfigData.teams;
this.combinedData.buildTeams = this.buildConfigData.defaultTeams; this.combinedData.buildTeams = this.buildConfigData.defaultTeams;
@ -324,6 +327,35 @@ export default class Config extends EventEmitter {
return newTeams; return newTeams;
} }
/**
* Apply a default sort order to the team list, if no order is specified.
* @param {array} teams to sort
*/
sortUnorderedTeams(teams) {
// Make a best pass at interpreting sort order. If an order is not specified, assume it is 0.
//
const newTeams = teams.sort((x, y) => {
if (x.order == null) {
x.order = 0;
}
if (y.order == null) {
y.order = 0;
}
// once we ensured `order` exists, we can sort numerically
return x.order - y.order;
});
// Now re-number all items from 0 to (max), ensuring user's sort order is preserved. The
// new tabbed interface requires an item with order:0 in order to raise the first tab.
//
newTeams.forEach((team, i) => {
team.order = i;
});
return newTeams;
}
// helper functions // helper functions
readFileSync(filePath) { readFileSync(filePath) {