/* * This file is part of ORY Editor. * * ORY Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ORY Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with ORY Editor. If not, see . * * @license LGPL-3.0 * @copyright 2016-2018 Aeneas Rekkas * @author Aeneas Rekkas * */ import * as React from 'react'; import { shouldPureComponentUpdate } from 'ory-editor-core/lib/helper/shouldComponentUpdate'; import { DragSource as dragSource } from 'react-dnd'; import { source, collect } from './helper/index'; import classNames from 'classnames'; import { connect } from 'react-redux'; import { clearHover } from 'ory-editor-core/lib/actions/cell/drag'; import { insertMode, editMode, layoutMode } from 'ory-editor-core/lib/actions/display'; const instances = {}; export interface DraggableProps { isDragging: boolean; className: string; // tslint:disable-next-line:no-any insert: any; connectDragSource(element: T): T; connectDragPreview(element: T): T; layoutMode(): void; } class Draggable extends React.Component { shouldComponentUpdate = shouldPureComponentUpdate; componentDidMount() { const img = new Image(); img.onload = () => this.props.connectDragPreview(img); img.src = // tslint:disable-next-line:max-line-length 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAhCAYAAACbffiEAAAA6UlEQVRYhe2ZQQ6CMBBFX0njHg7ESXTp1p3uvIBewc3Em3AfdelSFwRDCAm01JRO+pa0lP8zzc9kMCKyAa7AFqhIixdwB44WuACHuHq8KWm1vwtgF1lMCPaWkevUNE3Qr9R17XTu1P5uvUdV+IpbG2qMGBH5xBYRAjUVUWPEjj10SS3XRFry3kha/VBTETVGcmqtDTVGFqdWn7k9ku96f88QNRVRYySn1tpQY8QptXz7qinmnpt7rZTIqbU21BgJ2mv1+XfCDVFTETVGjIg8SG8KP+RZ0I7lU+dmgRNgaKfyZVw9znT/R85fOHJJE77U6UcAAAAASUVORK5CYII='; } render() { const { connectDragSource, isDragging, children, className } = this.props; const classes = classNames( className, { 'ory-toolbar-draggable-is-dragged': isDragging }, 'ory-toolbar-draggable' ); return connectDragSource(
{children}
); } } const mapStateToProps = null; const mapDispatchToProps = { insertMode, editMode, layoutMode, clearHover }; export default (dragType: string = 'CELL') => { if (!instances[dragType]) { instances[dragType] = connect( mapStateToProps, mapDispatchToProps )(dragSource(dragType, source, collect)(Draggable)); } return instances[dragType]; };