@platform/react
Version:
React refs and helpers.
106 lines (105 loc) • 3.82 kB
JavaScript
;
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';
}
};