codogo-react-widgets
Version:
Provides a unified way to access the styling of commonly used widgets across different apps
67 lines (61 loc) • 1.97 kB
JavaScript
import React from "react";
import { compose, withState, withHandlers, withPropsOnChange } from "recompose";
import _ContextMenu from "../components/contextMenu";
// --------------------------------------------------
var defaultOpts = [{
label: "noop",
fn: function fn() {}
}];
var withContextMenu = compose(withState("contextMeta", "setContextMeta", {
x: 0,
y: 0,
isOpen: false
}), withHandlers({
onContextMenu: function onContextMenu(_ref) {
var setContextMeta = _ref.setContextMeta;
return function (e) {
var x = e.clientX,
y = e.clientY;
setContextMeta(function () {
return {
x: x,
y: y,
isOpen: true
};
});
e.stopPropagation();
e.preventDefault();
};
},
closeContextMenu: function closeContextMenu(_ref2) {
var setContextMeta = _ref2.setContextMeta;
return function () {
return setContextMeta(R.assoc("isOpen", false));
};
}
}),
// options are set through props rather than as an arg of withContextMenu
// to let you do your own memoizing using withPropsOnChange, instead of calling
// a function on every single render (eg, if it were: "options = { createOptions(props) }")
withPropsOnChange(["children", "contextMeta", "contextMenuOptions", "cmOptions"], function (props) {
return {
children: props.contextMeta.isOpen ? React.Children.toArray(props.children).concat(React.createElement(_ContextMenu, {
x: props.contextMeta.x,
y: props.contextMeta.y,
options: props.contextMenuOptions || props.cmOptions || defaultOpts,
close: props.closeContextMenu,
key: "context-menu"
})) : props.children,
ContextMenu: function ContextMenu() {
return props.contextMeta.isOpen ? React.createElement(_ContextMenu, {
x: props.contextMeta.x,
y: props.contextMeta.y,
options: props.contextMenuOptions || props.cmOptions || defaultOpts,
close: props.closeContextMenu,
key: "context-menu"
}) : null;
},
wtf: "why?"
};
}));
export default withContextMenu;