UNPKG

@tdb/util

Version:
108 lines 3.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var dummy = function () { return null; }; function fromProps(props, args) { if (args === void 0) { args = {}; } var _a = args.force, force = _a === void 0 ? [] : _a; var prep = function (type, handler) { return handler ? handler : force.includes(type) ? dummy : undefined; }; return handlers(props.onMouse, { onClick: prep('CLICK', props.onClick), onDoubleClick: prep('DOUBLE_CLICK', props.onDoubleClick), onMouseDown: prep('DOWN', props.onMouseDown), onMouseUp: prep('UP', props.onMouseUp), onMouseEnter: prep('ENTER', props.onMouseEnter), onMouseLeave: prep('LEAVE', props.onMouseLeave), }); } exports.fromProps = fromProps; function handlers(handler, args) { if (args === void 0) { args = {}; } var isActive = Boolean(handler) || Object.keys(args).some(function (key) { return typeof args[key] === 'function'; }); var getSingleHandler = function (type) { switch (type) { case 'CLICK': return args.onClick; case 'DOUBLE_CLICK': return args.onDoubleClick; case 'DOWN': return args.onMouseDown; case 'UP': return args.onMouseUp; case 'ENTER': return args.onMouseEnter; case 'LEAVE': return args.onMouseLeave; default: throw new Error("Mouse event type '" + type + "' not supported."); } }; var next$ = new rxjs_1.Subject(); var fireNext = function (e) { next$.next(e); var singular = getSingleHandler(e.type); if (singular) { singular(e._react); } }; var get = function (type) { var hasSingularEvent = Boolean(getSingleHandler(type)); var handlers = handler || hasSingularEvent ? [fireNext, handler] : []; return handler || hasSingularEvent ? exports.handle.apply(void 0, [type].concat(handlers)) : undefined; }; return { isActive: isActive, events$: next$.pipe(operators_1.share()), events: { onClick: get('CLICK'), onDoubleClick: get('DOUBLE_CLICK'), onMouseDown: get('DOWN'), onMouseUp: get('UP'), onMouseEnter: get('ENTER'), onMouseLeave: get('LEAVE'), }, }; } exports.handlers = handlers; exports.handle = function (type) { var handler = []; for (var _i = 1; _i < arguments.length; _i++) { handler[_i - 1] = arguments[_i]; } var handlers = (handler === undefined ? [] : Array.isArray(handler) ? handler : [handler]).filter(function (h) { return Boolean(h); }); if (handlers.length === 0) { return undefined; } return function (e) { handlers.forEach(function (handler) { var args = { type: type, button: toButton(e), cancel: function () { e.preventDefault(); e.stopPropagation(); }, _react: e, }; handler(args); }); }; }; var toButton = function (e) { var button = e.button; switch (button) { case 2: return 'RIGHT'; default: return 'LEFT'; } }; //# sourceMappingURL=mouse.js.map