Skip to content

Commit

Permalink
feat(palette): allow to remove and update entries
Browse files Browse the repository at this point in the history
  • Loading branch information
barmac authored and fake-join[bot] committed Nov 11, 2019
1 parent 9c1ad7b commit c189016
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 7 deletions.
14 changes: 9 additions & 5 deletions lib/features/palette/Palette.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {
isFunction,
isArray,
isFunction,
forEach
} from 'min-dash';

Expand Down Expand Up @@ -95,11 +95,15 @@ Palette.prototype.getEntries = function() {
// loop through all providers and their entries.
// group entries by id so that overriding an entry is possible
forEach(this._providers, function(provider) {
var e = provider.getPaletteEntries();
var entriesOrUpdater = provider.getPaletteEntries();

forEach(e, function(entry, id) {
entries[id] = entry;
});
if (isFunction(entriesOrUpdater)) {
entries = entriesOrUpdater(entries);
} else {
forEach(entriesOrUpdater, function(entry, id) {
entries[id] = entry;
});
}
});

return entries;
Expand Down
76 changes: 74 additions & 2 deletions test/spec/features/palette/PaletteSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import {
classes as domClasses
} from 'min-dom';

import {
assign
} from 'min-dash';

var spy = sinon.spy;


Expand Down Expand Up @@ -184,6 +188,74 @@ describe('features/palette', function() {
}));


describe('with updater', function() {

it('should allow to add entries', inject(function(palette) {

// given
function updater(entries) {
return assign(entries, { entryB: {} });
}

var plainProvider = new Provider({ entryA: { action: function() {} } }),
updatingProvider = new Provider(updater);

palette.registerProvider(plainProvider);
palette.registerProvider(updatingProvider);

// when
var entries = palette.getEntries();

// then
expect(entries.entryA).to.exist;
expect(entries.entryB).to.exist;
}));


it('should allow to update entries', inject(function(palette) {

// given
function updater(entries) {
return assign(entries, { entryA: { alt: 'text' } });
}

var plainProvider = new Provider({ entryA: { action: function() {} } }),
updatingProvider = new Provider(updater);

palette.registerProvider(plainProvider);
palette.registerProvider(updatingProvider);

// when
var entries = palette.getEntries();

// then
expect(entries.entryA).to.exist;
expect(entries.entryA).to.have.property('alt');
}));


it('should allow to remove entries', inject(function(palette) {

// given
function updater(entries) {
return {};
}

var plainProvider = new Provider({ entryA: { action: function() {} } }),
updatingProvider = new Provider(updater);

palette.registerProvider(plainProvider);
palette.registerProvider(updatingProvider);

// when
var entries = palette.getEntries();

// then
expect(entries.entryA).to.not.exist;
}));
});


describe('entry className', function() {

function testClassName(options) {
Expand Down Expand Up @@ -423,9 +495,9 @@ describe('features/palette', function() {

// helpers //////////////////////

function Provider(entries) {
function Provider(entriesOrUpdater) {
this.getPaletteEntries = function() {
return entries || {};
return entriesOrUpdater || {};
};
}

Expand Down

0 comments on commit c189016

Please sign in to comment.