Created
July 19, 2017 19:00
-
-
Save pindamonhangaba/00f1d865d86d57ab929d2ad3c9dd54c7 to your computer and use it in GitHub Desktop.
Handsontable key-value renderer and editor
This file contains hidden or 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
| 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