Skip to content

Commit

Permalink
Reduce Transform: sort order is preserved as entered by user (#24494)
Browse files Browse the repository at this point in the history
  • Loading branch information
hugohaggmark committed May 11, 2020
1 parent c3b6ee1 commit e341d4b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 4 deletions.
31 changes: 31 additions & 0 deletions packages/grafana-data/src/utils/Registry.test.ts
@@ -0,0 +1,31 @@
import { Registry } from './Registry';
import { FieldReducerInfo, fieldReducers, ReducerID } from '../transformations';

describe('Registry', () => {
describe('selectOptions', () => {
describe('when called with current', () => {
it('then order in select.current should be same as current', () => {
const list = fieldReducers.list();
const registry = new Registry<FieldReducerInfo>(() => list);
const current = [ReducerID.step, ReducerID.mean, ReducerID.allIsZero, ReducerID.first, ReducerID.delta];
const select = registry.selectOptions(current);
expect(select.current).toEqual([
{ description: 'Minimum interval between values', label: 'Step', value: 'step' },
{ description: 'Average Value', label: 'Mean', value: 'mean' },
{ description: 'All values are zero', label: 'All Zeros', value: 'allIsZero' },
{ description: 'First Value', label: 'First', value: 'first' },
{ description: 'Cumulative change in value', label: 'Delta', value: 'delta' },
]);
});

describe('when called without current', () => {
it('then it should return an empty array', () => {
const list = fieldReducers.list();
const registry = new Registry<FieldReducerInfo>(() => list);
const select = registry.selectOptions();
expect(select.current).toEqual([]);
});
});
});
});
});
14 changes: 10 additions & 4 deletions packages/grafana-data/src/utils/Registry.ts
Expand Up @@ -84,10 +84,10 @@ export class Registry<T extends RegistryItem> {
current: [],
} as RegistrySelectInfo;

const currentIds: any = {};
const currentOptions: Record<string, SelectableValue<string>> = {};
if (current) {
for (const id of current) {
currentIds[id] = true;
currentOptions[id] = {};
}
}

Expand All @@ -106,10 +106,16 @@ export class Registry<T extends RegistryItem> {
};

select.options.push(option);
if (currentIds[ext.id]) {
select.current.push(option);
if (currentOptions[ext.id]) {
currentOptions[ext.id] = option;
}
}

if (current) {
// this makes sure we preserve the order of ids
select.current = Object.values(currentOptions);
}

return select;
}

Expand Down

0 comments on commit e341d4b

Please sign in to comment.