import React, {Fragment} from 'react'; import ControlBar, {ControlBarButton} from './ControlBar'; import connect from 'ui/connect'; import Fa from 'ui/components/Fa'; import {TOKENS as UI_TOKENS} from '../uiEntryPointsPlugin'; import {TOKENS as ACTION_TOKENS} from '../../actions/actionSystemPlugin'; import {toIdAndOverrides} from "../../actions/actionRef"; import {mapActionBehavior} from "../../actions/actionButtonBehavior"; export default function PlugableControlBar() { return } right={}/>; } function ButtonGroup({actions}) { return actions.map(actionRef => { let [id, overrides] = toIdAndOverrides(actionRef); let Comp = connect(ActionButton, [ACTION_TOKENS.actionAppearance(id), ACTION_TOKENS.actionState(id)], { staticProps: {actionId: id}, mapProps: ([appearance, state]) => Object.assign({}, appearance, state, overrides), mapActions: mapActionBehavior(id) } ); return ; }); } function isMenuAction(actionId) { return actionId.startsWith('menu.'); } class ActionButton extends React.Component { render() { let {label, cssIcons, enabled, visible, actionId, ...props} = this.props; if (!visible) { return null; } if (isMenuAction(actionId)) { let onClick = props.onClick; props.onClick = e => onClick(getMenuData(this.el)); } return this.el = el} {...props} > {cssIcons && } {label} ; } } const BUTTON_CONNECTOR = { mapProps: ([actions]) => ({actions}) }; const LeftGroup = connect(ButtonGroup, UI_TOKENS.CONTROL_BAR_LEFT, BUTTON_CONNECTOR); const RightGroup = connect(ButtonGroup, UI_TOKENS.CONTROL_BAR_RIGHT, BUTTON_CONNECTOR); function getMenuData(el) { //TODO: make more generic return { orientationUp: true, flatBottom: true, x: el.offsetParent.offsetParent.offsetLeft + el.offsetLeft, y: el.offsetParent.offsetHeight - el.offsetTop }; }