import React from 'react'; import Menu, {MenuItem, MenuSeparator} from 'ui/components/Menu'; import Filler from 'ui/components/Filler'; import Fa from 'ui/components/Fa'; import {ActionButtonBehavior} from '../../actions/ActionButtonBehavior'; import connect from 'ui/connect'; import {combine, merger} from 'lstream'; import {useStream} from "ui/effects"; import {NonExistentAppearance, NonExistentState} from "cad/dom/components/PlugableToolbar"; function MenuHolder({menus}) { return menus.map(({id, actions}) => ); } function ActionMenu({actions, keymap, ...menuState}) { if (!Array.isArray(actions)) { actions = actions(); } return {actions.map((action, index) => { if (action === '-') { return } return ; })} ; } function ActionMenuItem({label, cssIcons, icon, icon32, icon96, enabled, hotKey, visible, actionId, ...props}) { if (!visible) { return null; } let renderedIcon, style; if (icon) { const Icon = icon; renderedIcon = ; } else { if (icon32 || icon96) { let size = 16; renderedIcon = ; style = { backgroundImage: `url(${icon32 || icon96})`, backgroundRepeat: 'no-repeat', backgroundSize: `${size}px ${size}px`, backgroundPositionX: 5, backgroundPositionY: 4, }; if (!enabled) { style.filter = 'grayscale(90%)'; } } else if (cssIcons) { renderedIcon = ; } } return ; } const ConnectedActionMenu = connect((streams, props) => combine( streams.ui.menu.states[props.menuId], streams.ui.keymap) .map(([s, keymap]) => ({...s, keymap}))) (ActionMenu); export function ConnectedMenuItem(props) { const actionId = props.actionId; const actionAppearance = useStream(ctx => (ctx.streams.action.appearance[actionId] || NonExistentAppearance(actionId))); const actionState = useStream(ctx => ctx.streams.action.state[actionId] || NonExistentState); if (!actionAppearance || !actionState) { return null; } return {behaviourProps => } ; } export default connect(streams => streams.ui.menu.all.map(menus => ({menus})))(MenuHolder);