Commit f18182dc authored by Hannah Stepanek's avatar Hannah Stepanek

Add sortGroups to maintain old group menu order

parent 5f478ff4
...@@ -16,6 +16,7 @@ const DEFAULT_ORGANIZATION = { ...@@ -16,6 +16,7 @@ const DEFAULT_ORGANIZATION = {
const events = require('../events'); const events = require('../events');
const { awaitStateChange } = require('../util/state-util'); const { awaitStateChange } = require('../util/state-util');
const { combineGroups } = require('../util/groups'); const { combineGroups } = require('../util/groups');
const memoize = require('../util/memoize');
const serviceConfig = require('../service-config'); const serviceConfig = require('../service-config');
// @ngInject // @ngInject
...@@ -190,11 +191,25 @@ function groups( ...@@ -190,11 +191,25 @@ function groups(
}); });
} }
const sortGroups = memoize(groups => {
// Sort in the following order: scoped, public, private.
// This is for maintaining the order of the old groups menu so when
// the old groups menu is removed this can be removed.
const worldGroups = groups.filter(g => g.id === '__world__');
const nonWorldScopedGroups = groups.filter(
g => g.id !== '__world__' && ['open', 'restricted'].includes(g.type)
);
const remainingGroups = groups.filter(
g => !worldGroups.includes(g) && !nonWorldScopedGroups.includes(g)
);
return nonWorldScopedGroups.concat(worldGroups).concat(remainingGroups);
});
function all() { function all() {
if (features.flagEnabled('community_groups')) { if (features.flagEnabled('community_groups')) {
return store.allGroups(); return store.allGroups();
} }
return store.getInScopeGroups(); return sortGroups(store.getInScopeGroups());
} }
// Return the full object for the group with the given id. // Return the full object for the group with the given id.
......
...@@ -163,6 +163,22 @@ describe('groups', function() { ...@@ -163,6 +163,22 @@ describe('groups', function() {
assert.deepEqual(svc.all(), dummyGroups); assert.deepEqual(svc.all(), dummyGroups);
assert.called(fakeStore.getInScopeGroups); assert.called(fakeStore.getInScopeGroups);
}); });
[[0, 1, 2, 3], [2, 0, 1, 3], [0, 3, 1, 2]].forEach(groupInputOrder => {
it('sorts the groups in the following order: scoped, public, private maintaining order within each category.', () => {
const groups = [
{ id: 0, type: 'open' },
{ id: 1, type: 'restricted' },
{ id: '__world__', type: 'open' },
{ id: 3, type: 'private' },
];
const svc = service();
fakeStore.getInScopeGroups = sinon
.stub()
.returns(groupInputOrder.map(id => groups[id]));
assert.deepEqual(svc.all(), groups);
});
});
}); });
describe('#load', function() { describe('#load', function() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment