Skip to content

Instantly share code, notes, and snippets.

@pindamonhangaba
Created July 19, 2017 19:00
Show Gist options
  • Select an option

  • Save pindamonhangaba/00f1d865d86d57ab929d2ad3c9dd54c7 to your computer and use it in GitHub Desktop.

Select an option

Save pindamonhangaba/00f1d865d86d57ab929d2ad3c9dd54c7 to your computer and use it in GitHub Desktop.
Handsontable key-value renderer and editor
import React from 'react';
import Handsontable, {DropdownEditor} from 'handsontable';
import extend from 'lodash/extend';
const AutocompleteEditor = Handsontable.editors.DropdownEditor;
export function enhancerRenderer(func) {
return (...args) => {
args[1].innerHTML = ReactDOMServer.renderToString(func.apply(null, args));
return args[1]
}
}
const renderer = enhancerRenderer((instance, td, row, col, prop, value, cellProperties) => {
return <span>
{cellProperties.kvmap[value] || value}
<span className="htAutocompleteArrow">▼</span>
</span>
});
export default ({options}) => {
let vkmap = {};
let kvmap = {};
const source = options.map(o => {
const opt = `${o.key} ${o.value}`;
vkmap[opt] = o.key;
kvmap[o.key] = o.value;
return opt;
});
return {
type: 'dropdown',
renderer: renderer,
editor: KVDropdownEditor,
source,
vkmap,
kvmap,
}
};
export const KVDropdownEditor = AutocompleteEditor.prototype.extend();
extend(KVDropdownEditor.prototype, {
setValue (newValue) {
const key = this.cellProperties.vkmap[newValue];
const val = key || newValue;
AutocompleteEditor.prototype.setValue.apply(this, [val]);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment