@tdb/util
Version:
Shared helpers and utilities.
108 lines • 3.56 kB
JavaScript
;
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