UNPKG

13.9 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _propTypes = _interopRequireDefault(require("prop-types"));
11
12var _function = _interopRequireDefault(require("react-pure-render/function"));
13
14var themes = _interopRequireWildcard(require("redux-devtools-themes"));
15
16var _reduxDevtools = require("redux-devtools");
17
18var _actions = require("./actions");
19
20var _reducers = _interopRequireDefault(require("./reducers"));
21
22var _LogMonitorButtonBar = _interopRequireDefault(require("./LogMonitorButtonBar"));
23
24var _LogMonitorEntryList = _interopRequireDefault(require("./LogMonitorEntryList"));
25
26var _lodash = _interopRequireDefault(require("lodash.debounce"));
27
28function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
30function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
31
32function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
34function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
35
36function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
37
38function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
40function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
41
42function _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); } }
43
44function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
45
46function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
47
48function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
49
50function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
51
52function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
53
54function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
55
56function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
57
58function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
59
60function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
61
62var toggleAction = _reduxDevtools.ActionCreators.toggleAction,
63 setActionsActive = _reduxDevtools.ActionCreators.setActionsActive;
64var styles = {
65 container: {
66 fontFamily: 'monaco, Consolas, Lucida Console, monospace',
67 position: 'relative',
68 overflowY: 'hidden',
69 width: '100%',
70 height: '100%',
71 minWidth: 300,
72 direction: 'ltr'
73 },
74 elements: {
75 position: 'absolute',
76 left: 0,
77 right: 0,
78 top: 0,
79 bottom: 0,
80 overflowX: 'hidden',
81 overflowY: 'auto'
82 }
83};
84
85var LogMonitor = /*#__PURE__*/function (_Component) {
86 _inherits(LogMonitor, _Component);
87
88 var _super = _createSuper(LogMonitor);
89
90 function LogMonitor(props) {
91 var _this;
92
93 _classCallCheck(this, LogMonitor);
94
95 _this = _super.call(this, props);
96
97 _defineProperty(_assertThisInitialized(_this), "shouldComponentUpdate", _function["default"]);
98
99 _defineProperty(_assertThisInitialized(_this), "updateScrollTop", (0, _lodash["default"])(function () {
100 var node = _this.node;
101
102 _this.props.dispatch((0, _actions.updateScrollTop)(node ? node.scrollTop : 0));
103 }, 500));
104
105 _this.handleToggleAction = _this.handleToggleAction.bind(_assertThisInitialized(_this));
106 _this.handleToggleConsecutiveAction = _this.handleToggleConsecutiveAction.bind(_assertThisInitialized(_this));
107 _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));
108 return _this;
109 }
110
111 _createClass(LogMonitor, [{
112 key: "scroll",
113 value: function scroll() {
114 var node = this.node;
115
116 if (!node) {
117 return;
118 }
119
120 if (this.scrollDown) {
121 var offsetHeight = node.offsetHeight,
122 scrollHeight = node.scrollHeight;
123 node.scrollTop = scrollHeight - offsetHeight;
124 this.scrollDown = false;
125 }
126 }
127 }, {
128 key: "componentDidMount",
129 value: function componentDidMount() {
130 var node = this.node;
131
132 if (!node || !this.props.monitorState) {
133 return;
134 }
135
136 if (this.props.preserveScrollTop) {
137 node.scrollTop = this.props.monitorState.initialScrollTop;
138 node.addEventListener('scroll', this.updateScrollTop);
139 } else {
140 this.scrollDown = true;
141 this.scroll();
142 }
143 }
144 }, {
145 key: "componentWillUnmount",
146 value: function componentWillUnmount() {
147 var node = this.node;
148
149 if (node && this.props.preserveScrollTop) {
150 node.removeEventListener('scroll', this.updateScrollTop);
151 }
152 }
153 }, {
154 key: "UNSAFE_componentWillReceiveProps",
155 value: function UNSAFE_componentWillReceiveProps(nextProps) {
156 var node = this.node;
157
158 if (!node) {
159 this.scrollDown = true;
160 } else if (this.props.stagedActionIds.length < nextProps.stagedActionIds.length) {
161 var scrollTop = node.scrollTop,
162 offsetHeight = node.offsetHeight,
163 scrollHeight = node.scrollHeight;
164 this.scrollDown = Math.abs(scrollHeight - (scrollTop + offsetHeight)) < 20;
165 } else {
166 this.scrollDown = false;
167 }
168 }
169 }, {
170 key: "componentDidUpdate",
171 value: function componentDidUpdate() {
172 this.scroll();
173 }
174 }, {
175 key: "handleToggleAction",
176 value: function handleToggleAction(id) {
177 this.props.dispatch(toggleAction(id));
178 }
179 }, {
180 key: "handleToggleConsecutiveAction",
181 value: function handleToggleConsecutiveAction(id) {
182 var _this$props = this.props,
183 monitorState = _this$props.monitorState,
184 actionsById = _this$props.actionsById;
185 var consecutiveToggleStartId = monitorState.consecutiveToggleStartId;
186
187 if (consecutiveToggleStartId && actionsById[consecutiveToggleStartId]) {
188 var skippedActionIds = this.props.skippedActionIds;
189 var start = Math.min(consecutiveToggleStartId, id);
190 var end = Math.max(consecutiveToggleStartId, id);
191 var active = skippedActionIds.indexOf(consecutiveToggleStartId) > -1;
192 this.props.dispatch(setActionsActive(start, end + 1, active));
193 this.props.dispatch((0, _actions.startConsecutiveToggle)(null));
194 } else if (id > 0) {
195 this.props.dispatch((0, _actions.startConsecutiveToggle)(id));
196 }
197 }
198 }, {
199 key: "getTheme",
200 value: function getTheme() {
201 var theme = this.props.theme;
202
203 if (typeof theme !== 'string') {
204 return theme;
205 }
206
207 if (typeof themes[theme] !== 'undefined') {
208 return themes[theme];
209 } // eslint-disable-next-line no-console
210
211
212 console.warn('DevTools theme ' + theme + ' not found, defaulting to nicinabox');
213 return themes.nicinabox;
214 }
215 }, {
216 key: "getRef",
217 value: function getRef(node) {
218 this.node = node;
219 }
220 }, {
221 key: "render",
222 value: function render() {
223 var theme = this.getTheme();
224 var consecutiveToggleStartId = this.props.monitorState.consecutiveToggleStartId;
225 var _this$props2 = this.props,
226 dispatch = _this$props2.dispatch,
227 actionsById = _this$props2.actionsById,
228 skippedActionIds = _this$props2.skippedActionIds,
229 stagedActionIds = _this$props2.stagedActionIds,
230 computedStates = _this$props2.computedStates,
231 currentStateIndex = _this$props2.currentStateIndex,
232 select = _this$props2.select,
233 expandActionRoot = _this$props2.expandActionRoot,
234 expandStateRoot = _this$props2.expandStateRoot,
235 markStateDiff = _this$props2.markStateDiff;
236 var entryListProps = {
237 theme: theme,
238 actionsById: actionsById,
239 skippedActionIds: skippedActionIds,
240 stagedActionIds: stagedActionIds,
241 computedStates: computedStates,
242 currentStateIndex: currentStateIndex,
243 consecutiveToggleStartId: consecutiveToggleStartId,
244 select: select,
245 expandActionRoot: expandActionRoot,
246 expandStateRoot: expandStateRoot,
247 markStateDiff: markStateDiff,
248 onActionClick: this.handleToggleAction,
249 onActionShiftClick: this.handleToggleConsecutiveAction
250 };
251 return /*#__PURE__*/_react["default"].createElement("div", {
252 style: _objectSpread(_objectSpread({}, styles.container), {}, {
253 backgroundColor: theme.base00
254 })
255 }, !this.props.hideMainButtons && /*#__PURE__*/_react["default"].createElement(_LogMonitorButtonBar["default"], {
256 theme: theme,
257 dispatch: dispatch,
258 hasStates: computedStates.length > 1,
259 hasSkippedActions: skippedActionIds.length > 0
260 }), /*#__PURE__*/_react["default"].createElement("div", {
261 style: this.props.hideMainButtons ? styles.elements : _objectSpread(_objectSpread({}, styles.elements), {}, {
262 top: 30
263 }),
264 ref: this.getRef
265 }, /*#__PURE__*/_react["default"].createElement(_LogMonitorEntryList["default"], entryListProps)));
266 }
267 }]);
268
269 return LogMonitor;
270}(_react.Component);
271
272exports["default"] = LogMonitor;
273
274_defineProperty(LogMonitor, "update", _reducers["default"]);
275
276_defineProperty(LogMonitor, "propTypes", {
277 dispatch: _propTypes["default"].func,
278 computedStates: _propTypes["default"].array,
279 actionsById: _propTypes["default"].object,
280 stagedActionIds: _propTypes["default"].array,
281 skippedActionIds: _propTypes["default"].array,
282 monitorState: _propTypes["default"].shape({
283 initialScrollTop: _propTypes["default"].number,
284 consecutiveToggleStartId: _propTypes["default"].number
285 }),
286 preserveScrollTop: _propTypes["default"].bool,
287 select: _propTypes["default"].func,
288 theme: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].string]),
289 expandActionRoot: _propTypes["default"].bool,
290 expandStateRoot: _propTypes["default"].bool,
291 markStateDiff: _propTypes["default"].bool,
292 hideMainButtons: _propTypes["default"].bool
293});
294
295_defineProperty(LogMonitor, "defaultProps", {
296 select: function select(state) {
297 return state;
298 },
299 theme: 'nicinabox',
300 preserveScrollTop: true,
301 expandActionRoot: true,
302 expandStateRoot: true,
303 markStateDiff: false
304});
\No newline at end of file