UNPKG

@platform/react

Version:

React refs and helpers.

106 lines (105 loc) 3.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handle = exports.handlers = exports.fromProps = void 0; var tslib_1 = require("tslib"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var EVENT_TYPES = ['CLICK', 'DOUBLE_CLICK', 'UP', 'DOWN', 'ENTER', 'LEAVE']; var dummy = function () { return null; }; exports.fromProps = function (props, args) { if (args === void 0) { args = {}; } var getEnabled = args.getEnabled; var force = args.force === true ? EVENT_TYPES : Array.isArray(args.force) ? args.force : []; var prep = function (type, handler) { return handler ? handler : force.includes(type) ? dummy : undefined; }; return exports.handlers(props.onMouse, { getEnabled: getEnabled, 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.handlers = function (handler, args) { if (args === void 0) { args = {}; } var getEnabled = args.getEnabled; 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 (args) { var hasSingularEvent = Boolean(getSingleHandler(args.type)); var handlers = handler || hasSingularEvent ? [fireNext, handler] : []; return handler || hasSingularEvent ? exports.handle(tslib_1.__assign(tslib_1.__assign({}, args), { getEnabled: getEnabled, handlers: handlers })) : undefined; }; return { isActive: isActive, events$: next$.pipe(operators_1.share()), events: { onClick: get({ type: 'CLICK' }), onDoubleClick: get({ type: 'DOUBLE_CLICK' }), onMouseDown: get({ type: 'DOWN' }), onMouseUp: get({ type: 'UP' }), onMouseEnter: get({ type: 'ENTER' }), onMouseLeave: get({ type: 'LEAVE' }), }, }; }; exports.handle = function (args) { var type = args.type, getEnabled = args.getEnabled; var handlers = (args.handlers || []).filter(function (e) { return Boolean(e); }); if (handlers.length === 0) { return undefined; } return function (e) { if (getEnabled && !getEnabled()) { return; } 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) { switch (e.button) { case 2: return 'RIGHT'; default: return 'LEFT'; } };