diff --git a/modules/ui/components/Menu.jsx b/modules/ui/components/Menu.jsx
index dcb51f2c..74d1210e 100644
--- a/modules/ui/components/Menu.jsx
+++ b/modules/ui/components/Menu.jsx
@@ -23,7 +23,7 @@ export function MenuSeparator() {
}
-export function MenuItem({icon, label, hotKey, style, disabled, onClick}, {closeAllUpPopups}) {
+export function MenuItem({icon, label, hotKey, style, disabled, onClick, ...props}, {closeAllUpPopups}) {
if (hotKey) {
hotKey = hotKey.replace(/\s/g, '');
@@ -36,7 +36,7 @@ export function MenuItem({icon, label, hotKey, style, disabled, onClick}, {close
onClick();
};
return
e.stopPropagation()} style={style} onClick={clickHandler}>
+ onMouseDown={e => e.stopPropagation()} style={style} onClick={clickHandler} {...props}>
{icon}
{label}
{hotKey && {hotKey}}
diff --git a/web/app/cad/actions/actionButtonBehavior.js b/web/app/cad/actions/actionButtonBehavior.js
index f40abd49..04fcad6d 100644
--- a/web/app/cad/actions/actionButtonBehavior.js
+++ b/web/app/cad/actions/actionButtonBehavior.js
@@ -1,8 +1,8 @@
import {TOKENS as ACTION_TOKENS} from "./actionSystemPlugin";
-export function mapActionBehavior(actionIdProp) {
+export function mapActionBehavior(actionIdGetter) {
return ({dispatch}, props) => {
- const actionId = props[actionIdProp];
+ const actionId = actionIdGetter(props);
const actionRunToken = ACTION_TOKENS.actionRun(actionId);
let request = {actionId, x:0, y:0};
diff --git a/web/app/cad/dom/components/PlugableControlBar.jsx b/web/app/cad/dom/components/PlugableControlBar.jsx
index e081b210..a6b6367f 100644
--- a/web/app/cad/dom/components/PlugableControlBar.jsx
+++ b/web/app/cad/dom/components/PlugableControlBar.jsx
@@ -52,7 +52,7 @@ const ConnectedActionButton = connect(ActionButton,
ACTION_TOKENS.actionState(props.actionId)],
{
mapProps: (state, props) => Object.assign(DEFAULT_MAPPER(state), props),
- mapActions: mapActionBehavior('actionId'),
+ mapActions: mapActionBehavior(props => props.actionId),
}
);
diff --git a/web/app/cad/dom/components/PlugableToolbar.jsx b/web/app/cad/dom/components/PlugableToolbar.jsx
index 4e14c8b2..72282a25 100644
--- a/web/app/cad/dom/components/PlugableToolbar.jsx
+++ b/web/app/cad/dom/components/PlugableToolbar.jsx
@@ -37,7 +37,7 @@ function ActionButton({label, icon96, cssIcons, small, enabled, visible, actionI
const ConnectedActionButton = connect(ActionButton,
({actionId}) => [ACTION_TOKENS.actionAppearance(actionId), ACTION_TOKENS.actionState(actionId)], {
mapProps: (state, props) => Object.assign(DEFAULT_MAPPER(state), props),
- mapActions: mapActionBehavior('actionId'),
+ mapActions: mapActionBehavior(props => props.actionId),
});
export function createPlugableToolbar(configToken, small) {
diff --git a/web/app/cad/dom/menu/MenuHolder.jsx b/web/app/cad/dom/menu/MenuHolder.jsx
index dde80a01..801c155e 100644
--- a/web/app/cad/dom/menu/MenuHolder.jsx
+++ b/web/app/cad/dom/menu/MenuHolder.jsx
@@ -7,6 +7,7 @@ import Fa from "../../../../../modules/ui/components/Fa";
import Filler from "../../../../../modules/ui/components/Filler";
import {TOKENS as KeyboardTokens} from "../../keyboard/keyboardPlugin";
import {DEFAULT_MAPPER} from "../../../../../modules/ui/connect";
+import {mapActionBehavior} from "../../actions/actionButtonBehavior";
function MenuHolder({menus}) {
return menus.map(({id, actions}) => );
@@ -23,7 +24,7 @@ function ActionMenu({actions, keymap, ...menuState}) {
;
}
-function ActionMenuItem({label, cssIcons, icon32, icon96, onClick, enabled, hotKey, visible}) {
+function ActionMenuItem({label, cssIcons, icon32, icon96, enabled, hotKey, visible, ...props}) {
if (!visible) {
return null;
}
@@ -45,7 +46,7 @@ function ActionMenuItem({label, cssIcons, icon32, icon96, onClick, enabled, hotK
icon = ;
}
- return ;
+ return ;
}
const ConnectedActionMenu = connect(ActionMenu,
@@ -58,9 +59,10 @@ const ConnectedActionMenu = connect(ActionMenu,
let ConnectedMenuItem = connect(ActionMenuItem,
({actionId}) => [ACTION_TOKENS.actionState(actionId), ACTION_TOKENS.actionAppearance(actionId)],
{
- mapActions: ({dispatch}, {actionId}) => ({
- onClick: () => dispatch(ACTION_TOKENS.actionRun(actionId))
+ mapProps: ([{enabled, visible}, {label, cssIcons, icon32, icon96}]) => ({
+ enabled, visible, label, cssIcons, icon32, icon96
}),
+ mapActions: mapActionBehavior(props => props.actionId),
mapSelfProps: ({hotKey}) => ({hotKey})
}
);