UNPKG

6.5 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _justReduceObject = require('just-reduce-object');
10
11var _justReduceObject2 = _interopRequireDefault(_justReduceObject);
12
13var _invariant = require('invariant');
14
15var _invariant2 = _interopRequireDefault(_invariant);
16
17var _events = require('events');
18
19var _helpers = require('./helpers');
20
21var _helpers2 = _interopRequireDefault(_helpers);
22
23var _utils = require('./utils');
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
28
29function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
30
31function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
32
33var warning = function warning(text) {
34 if (process && process.env.NODE_ENV !== 'production') {
35 console.warn(text);
36 }
37};
38
39var ShortcutManager = function (_EventEmitter) {
40 _inherits(ShortcutManager, _EventEmitter);
41
42 function ShortcutManager() {
43 var keymap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
44
45 _classCallCheck(this, ShortcutManager);
46
47 var _this = _possibleConstructorReturn(this, (ShortcutManager.__proto__ || Object.getPrototypeOf(ShortcutManager)).call(this));
48
49 _this._platformName = _helpers2.default.getPlatformName();
50
51 _this._parseShortcutDescriptor = function (item) {
52 if ((0, _utils.isPlainObject)(item)) {
53 return item[_this._platformName];
54 }
55 return item;
56 };
57
58 _this._keymap = keymap;
59 return _this;
60 }
61
62 _createClass(ShortcutManager, [{
63 key: 'addUpdateListener',
64 value: function addUpdateListener(callback) {
65 (0, _invariant2.default)(callback, 'addUpdateListener: callback argument is not defined or falsy');
66 this.on(ShortcutManager.CHANGE_EVENT, callback);
67 }
68 }, {
69 key: 'removeUpdateListener',
70 value: function removeUpdateListener(callback) {
71 this.removeListener(ShortcutManager.CHANGE_EVENT, callback);
72 }
73 }, {
74 key: 'setKeymap',
75 value: function setKeymap(keymap) {
76 (0, _invariant2.default)(keymap, 'setKeymap: keymap argument is not defined or falsy.');
77 this._keymap = keymap;
78 this.emit(ShortcutManager.CHANGE_EVENT);
79 }
80 }, {
81 key: 'extendKeymap',
82 value: function extendKeymap(keymap) {
83 (0, _invariant2.default)(keymap, 'extendKeymap: keymap argument is not defined or falsy.');
84 this._keymap = Object.assign({}, this._keymap, keymap);
85 this.emit(ShortcutManager.CHANGE_EVENT);
86 }
87 }, {
88 key: 'getAllShortcuts',
89 value: function getAllShortcuts() {
90 return this._keymap;
91 }
92 }, {
93 key: 'getAllShortcutsForPlatform',
94 value: function getAllShortcutsForPlatform(platformName) {
95 var _transformShortcuts = function _transformShortcuts(shortcuts) {
96 return (0, _justReduceObject2.default)(shortcuts, function (result, keyName, keyValue) {
97 if ((0, _utils.isPlainObject)(keyValue)) {
98 if (keyValue[platformName]) {
99 keyValue = keyValue[platformName];
100 } else {
101 result[keyName] = _transformShortcuts(keyValue);
102 return result;
103 }
104 }
105
106 result[keyName] = keyValue;
107 return result;
108 }, {});
109 };
110
111 return _transformShortcuts(this._keymap);
112 }
113 }, {
114 key: 'getAllShortcutsForCurrentPlatform',
115 value: function getAllShortcutsForCurrentPlatform() {
116 return this.getAllShortcutsForPlatform(this._platformName);
117 }
118 }, {
119 key: 'getShortcuts',
120 value: function getShortcuts(componentName) {
121 (0, _invariant2.default)(componentName, 'getShortcuts: name argument is not defined or falsy.');
122
123 var cursor = this._keymap[componentName];
124 if (!cursor) {
125 warning('getShortcuts: There are no shortcuts with name ' + componentName + '.');
126 return;
127 }
128
129 var shortcuts = (0, _utils.compact)((0, _utils.flatten)((0, _utils.map)(cursor, this._parseShortcutDescriptor)));
130
131 return shortcuts;
132 }
133 }, {
134 key: '_parseShortcutKeyName',
135 value: function _parseShortcutKeyName(obj, keyName) {
136 var _this2 = this;
137
138 var result = (0, _utils.findKey)(obj, function (item) {
139 if ((0, _utils.isPlainObject)(item)) {
140 item = item[_this2._platformName];
141 }
142 if ((0, _utils.isArray)(item)) {
143 var index = item.indexOf(keyName);
144 if (index >= 0) {
145 item = item[index];
146 }
147 }
148 return item === keyName;
149 });
150
151 return result;
152 }
153 }, {
154 key: 'findShortcutName',
155 value: function findShortcutName(keyName, componentName) {
156 (0, _invariant2.default)(keyName, 'findShortcutName: keyName argument is not defined or falsy.');
157 (0, _invariant2.default)(componentName, 'findShortcutName: componentName argument is not defined or falsy.');
158
159 var cursor = this._keymap[componentName];
160 var result = this._parseShortcutKeyName(cursor, keyName);
161
162 return result;
163 }
164 }]);
165
166 return ShortcutManager;
167}(_events.EventEmitter);
168
169ShortcutManager.CHANGE_EVENT = 'shortcuts:update';
170exports.default = ShortcutManager;
171module.exports = exports['default'];
\No newline at end of file