-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add RegistryWithDefaultKey class (#27)
* import main lodash instead of lodash/fp * add factory and unit test * more unit test to increase branch coverage * refactor color * update unit test and references
- Loading branch information
1 parent
99bd432
commit b250633
Showing
9 changed files
with
247 additions
and
140 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 7 additions & 43 deletions
50
...d/temporary_superset_ui/superset-ui/packages/superset-ui-color/src/ColorSchemeRegistry.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,10 @@ | ||
import { Registry } from '@superset-ui/core'; | ||
import { RegistryWithDefaultKey } from '@superset-ui/core'; | ||
|
||
class ColorSchemeRegistry extends Registry { | ||
clear() { | ||
super.clear(); | ||
this.defaultSchemeName = undefined; | ||
|
||
return this; | ||
} | ||
|
||
getDefaultSchemeName() { | ||
return this.defaultSchemeName; | ||
} | ||
|
||
setDefaultSchemeName(schemeName) { | ||
this.defaultSchemeName = schemeName; | ||
|
||
return this; | ||
} | ||
|
||
get(schemeName) { | ||
return super.get(schemeName || this.defaultSchemeName); | ||
} | ||
|
||
registerValue(schemeName, colors) { | ||
super.registerValue(schemeName, colors); | ||
// If there is no default, set as default | ||
if (!this.defaultSchemeName) { | ||
this.defaultSchemeName = schemeName; | ||
} | ||
|
||
return this; | ||
} | ||
|
||
registerLoader(schemeName, loader) { | ||
super.registerLoader(schemeName, loader); | ||
// If there is no default, set as default | ||
if (!this.defaultSchemeName) { | ||
this.defaultSchemeName = schemeName; | ||
} | ||
|
||
return this; | ||
export default class ColorSchemeRegistry extends RegistryWithDefaultKey { | ||
constructor() { | ||
super({ | ||
name: 'ColorScheme', | ||
setFirstItemAsDefault: true, | ||
}); | ||
} | ||
} | ||
|
||
export default ColorSchemeRegistry; |
95 changes: 3 additions & 92 deletions
95
...orary_superset_ui/superset-ui/packages/superset-ui-color/test/ColorSchemeRegistry.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,8 @@ | ||
import ColorSchemeRegistry from '../src/ColorSchemeRegistry'; | ||
import CategoricalScheme from '../src/CategoricalScheme'; | ||
|
||
describe('ColorSchemeRegistry', () => { | ||
const registry = new ColorSchemeRegistry(); | ||
const SCHEME1 = new CategoricalScheme({ | ||
name: 'test', | ||
colors: ['red', 'green', 'blue'], | ||
}); | ||
const SCHEME2 = new CategoricalScheme({ | ||
name: 'test2', | ||
colors: ['orange', 'yellow', 'pink'], | ||
}); | ||
const SCHEME3 = new CategoricalScheme({ | ||
name: 'test3', | ||
colors: ['cyan', 'magenta'], | ||
}); | ||
|
||
beforeEach(() => { | ||
registry.clear(); | ||
registry.registerValue('test', SCHEME1); | ||
registry.registerValue('test2', SCHEME2); | ||
registry.setDefaultSchemeName('test'); | ||
}); | ||
describe('.clear()', () => { | ||
it('clears the entries', () => { | ||
registry.clear(); | ||
expect(registry.has('test')).toBeFalsy(); | ||
}); | ||
it('clears default scheme name', () => { | ||
registry.clear(); | ||
expect(registry.getDefaultSchemeName()).toBeUndefined(); | ||
}); | ||
it('returns the ColorSchemeRegistry instance', () => { | ||
const instance = registry.clear(); | ||
expect(instance).toBe(registry); | ||
}); | ||
}); | ||
describe('.get()', () => { | ||
it('.get() returns default color scheme', () => { | ||
const scheme = registry.get(); | ||
expect(scheme).toEqual(SCHEME1); | ||
}); | ||
it('.get(name) returns color scheme with specified name', () => { | ||
const scheme = registry.get('test2'); | ||
expect(scheme).toEqual(SCHEME2); | ||
}); | ||
}); | ||
describe('.getDefaultSchemeName()', () => { | ||
it('returns default scheme name', () => { | ||
const name = registry.getDefaultSchemeName(); | ||
expect(name).toBe('test'); | ||
}); | ||
}); | ||
describe('.setDefaultSchemeName()', () => { | ||
it('set default scheme name', () => { | ||
registry.setDefaultSchemeName('test2'); | ||
const name = registry.getDefaultSchemeName(); | ||
expect(name).toBe('test2'); | ||
registry.setDefaultSchemeName('test'); | ||
}); | ||
it('returns the ColorSchemeRegistry instance', () => { | ||
const instance = registry.setDefaultSchemeName('test'); | ||
expect(instance).toBe(registry); | ||
}); | ||
}); | ||
describe('.registerValue(name, colors)', () => { | ||
it('sets schemename and color', () => { | ||
registry.registerValue('test3', SCHEME3); | ||
const scheme = registry.get('test3'); | ||
expect(scheme).toEqual(SCHEME3); | ||
}); | ||
it('registers this scheme name as default if there is no default scheme', () => { | ||
registry.clear().registerValue('test3', SCHEME3); | ||
expect(registry.getDefaultSchemeName()).toEqual('test3'); | ||
}); | ||
it('returns the ColorSchemeRegistry instance', () => { | ||
const instance = registry.registerValue('test3', SCHEME3); | ||
expect(instance).toBe(registry); | ||
}); | ||
}); | ||
describe('.registerLoader(name, colorsLoader)', () => { | ||
it('sets schemename and color', () => { | ||
registry.registerLoader('test3', () => SCHEME3); | ||
const scheme = registry.get('test3'); | ||
expect(scheme).toEqual(SCHEME3); | ||
}); | ||
it('registers this scheme name as default if there is no default scheme', () => { | ||
registry.clear().registerLoader('test3', () => SCHEME3); | ||
expect(registry.getDefaultSchemeName()).toEqual('test3'); | ||
}); | ||
it('returns the ColorSchemeRegistry instance', () => { | ||
const instance = registry.registerLoader('test3', () => SCHEME3); | ||
expect(instance).toBe(registry); | ||
}); | ||
it('exists', () => { | ||
expect(ColorSchemeRegistry).toBeDefined(); | ||
expect(ColorSchemeRegistry).toBeInstanceOf(Function); | ||
}); | ||
}); |
1 change: 1 addition & 0 deletions
1
superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/index.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
...ry_superset_ui/superset-ui/packages/superset-ui-core/src/models/RegistryWithDefaultKey.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import Registry from './Registry'; | ||
|
||
export default class RegistryWithDefaultKey extends Registry { | ||
constructor({ name, initialDefaultKey = undefined, setFirstItemAsDefault = false } = {}) { | ||
super(name); | ||
this.initialDefaultKey = initialDefaultKey; | ||
this.defaultKey = initialDefaultKey; | ||
this.setFirstItemAsDefault = setFirstItemAsDefault; | ||
} | ||
|
||
clear() { | ||
super.clear(); | ||
this.defaultKey = this.initialDefaultKey; | ||
|
||
return this; | ||
} | ||
|
||
get(key) { | ||
return super.get(key || this.defaultKey); | ||
} | ||
|
||
registerValue(key, value) { | ||
super.registerValue(key, value); | ||
// If there is no default, set as default | ||
if (this.setFirstItemAsDefault && !this.defaultKey) { | ||
this.defaultKey = key; | ||
} | ||
|
||
return this; | ||
} | ||
|
||
registerLoader(key, loader) { | ||
super.registerLoader(key, loader); | ||
// If there is no default, set as default | ||
if (this.setFirstItemAsDefault && !this.defaultKey) { | ||
this.defaultKey = key; | ||
} | ||
|
||
return this; | ||
} | ||
|
||
getDefaultKey() { | ||
return this.defaultKey; | ||
} | ||
|
||
setDefaultKey(key) { | ||
this.defaultKey = key; | ||
|
||
return this; | ||
} | ||
} |
8 changes: 4 additions & 4 deletions
8
...ary_superset_ui/superset-ui/packages/superset-ui-core/src/utils/convertKeysToCamelCase.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,13 @@ | ||
import camelCase from 'lodash/fp/camelCase'; | ||
import isPlainObject from 'lodash/fp/isPlainObject'; | ||
import mapKeys from 'lodash/fp/mapKeys'; | ||
import camelCase from 'lodash/camelCase'; | ||
import isPlainObject from 'lodash/isPlainObject'; | ||
import mapKeys from 'lodash/mapKeys'; | ||
|
||
export default function convertKeysToCamelCase(object) { | ||
if (object === null || object === undefined) { | ||
return object; | ||
} | ||
if (isPlainObject(object)) { | ||
return mapKeys(k => camelCase(k), object); | ||
return mapKeys(object, (_, k) => camelCase(k)); | ||
} | ||
throw new Error(`Cannot convert input that is not a plain object: ${object}`); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.