UNPKG

2.86 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = update;
7
8var _lodash = require('lodash');
9
10var _lodash2 = _interopRequireDefault(_lodash);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14var RAW_ATTRIBUTES = new Set([
15
16// Alignment, Orientation & Presentation
17'align', 'valign', 'orientation', 'shrink', 'padding', 'tags', 'shadow',
18
19// Font-related
20'font', 'fontBold', 'fch', 'ch', 'bold', 'underline',
21
22// Flags
23'clickable', 'input', 'keyable', 'hidden', 'visible', 'scrollable', 'draggable', 'interactive',
24
25// Position
26'left', 'right', 'top', 'bottom', 'aleft', 'aright', 'atop', 'abottom',
27
28// Size
29'width', 'height',
30
31// Checkbox
32'checked',
33
34// Misc
35'name']);
36
37/**
38 * Updates the given blessed node.
39 *
40 * @param {BlessedNode} node - Node to update.
41 * @param {object} options - Props of the component without children.
42 */
43/**
44 * React Blessed Update Schemes
45 * =============================
46 *
47 * Applying updates to blessed nodes correctly.
48 */
49function update(node, options) {
50
51 // TODO: enforce some kind of shallow equality?
52 // TODO: handle position
53
54 var selectQue = [];
55
56 for (var key in options) {
57 var value = options[key];
58
59 if (key === 'selected' && node.select) selectQue.push({
60 node: node,
61 value: typeof value === 'string' ? +value : value
62 });
63
64 // Setting label
65 else if (key === 'label') node.setLabel(value);
66
67 // Removing hoverText
68 else if (key === 'hoverText' && !value) node.removeHover();
69
70 // Setting hoverText
71 else if (key === 'hoverText' && value) node.setHover(value);
72
73 // Setting content
74 else if (key === 'content') node.setContent(value);
75
76 // Updating style
77 else if (key === 'style') node.style = _lodash2.default.merge({}, node.style, value);
78
79 // Updating items
80 else if (key === 'items') node.setItems(value);
81
82 // Border edge case
83 else if (key === 'border') node.border = _lodash2.default.merge({}, node.border, value);
84
85 // Textarea value
86 else if (key === 'value' && node.setValue) node.setValue(value);
87
88 // Progress bar
89 else if (key === 'filled' && node.filled !== value) node.setProgress(value);
90
91 // Table / ListTable rows / data
92 else if ((key === 'rows' || key === 'data') && node.setData) node.setData(value);else if (key === 'focused' && value && !node[key]) node.focus();
93
94 // Raw attributes
95 else if (RAW_ATTRIBUTES.has(key)) node[key] = value;
96 }
97
98 selectQue.forEach(function (_ref) {
99 var node = _ref.node,
100 value = _ref.value;
101 return node.select(value);
102 });
103}
\No newline at end of file