UNPKG

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
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;