import React, { useContext } from 'react'; import classNames from 'classnames'; import { useDispatch, ReactReduxContext } from 'react-redux'; /* !- React Actions */ import { tooltip, close } from '../layer/actions'; /* !- React Elements */ import IconPlus from '../icon/mui/content/add'; /* !- Constants */ /** * Predefined Markers Aligns */ export const MARKER_ALIGNS = { heading: [0, -100], tooltip: [-50, -50], }; /** * InfoBox Marker * @example * * Hello * */ export const MarkerInfoBox = ({ children }) => { const { store } = useContext(ReactReduxContext); const dispatch = useDispatch(); const onMouseHandler = (event) => { dispatch(tooltip(children, event)); }; const onClickHandler = (event) => { event.preventDefault(); event.stopPropagation(); const layer = store.getState().layer; if ( layer.active === true && children.props.id !== undefined && children.props.id === ((layer.element || {}).props || {}).id ) { dispatch(close()); } else { dispatch(tooltip(children, event)); } }; return (
); }; /** * Predefined Markers: Heading, Tooltip */ export const MARKER_ELEMENTS = { heading: settings => (
{settings}
), tooltip: settings => ( {settings} ), }; /** * Extend create marker elements * @param {object} elements Ex. MARKER_ELEMENTS * @param {object} aligns Ex. MARKER_ALIGNS * @return {function} createMarkers */ export const createMarkersHelper = ({ elements, aligns }) => markers => markers .filter(({ category }) => elements[category]) .map(({ position, category, settings, draggable }, n) => ( {elements[category](settings)} )); /** * Create Predefined markers [MARKER_ELEMENTS] from JSON * @param {Array} markers [{ position, category, settings }] */ export const createMarkers = createMarkersHelper({ elements: MARKER_ELEMENTS, aligns: MARKER_ALIGNS }); /** * Wrapper to align and position to markers * @example * * Hello * */ export const Marker = ({ index, children, position, align, onClick, draggable, }) => { const classes = classNames({ absolute: true, pointer: typeof onClick === 'function', }); return (
{children}
); }; export default Marker;