import React from 'react'
|
import { useDrag, useDrop } from 'react-dnd'
|
|
import asyncComponent from '@/utils/asyncComponent'
|
import './index.scss'
|
|
const AntvBar = asyncComponent(() => import('@/menu/components/chart/antv-bar'))
|
const AntvPie = asyncComponent(() => import('@/menu/components/chart/antv-pie'))
|
const DataCard = asyncComponent(() => import('@/menu/components/card/data-card'))
|
const PropCard = asyncComponent(() => import('@/menu/components/card/prop-card'))
|
const TableCard = asyncComponent(() => import('@/menu/components/card/table-card'))
|
const NormalTree = asyncComponent(() => import('@/menu/components/tree/antd-tree'))
|
const NormalTable = asyncComponent(() => import('@/menu/components/table/normal-table'))
|
const EditTable = asyncComponent(() => import('@/menu/components/table/edit-table'))
|
const BraftEditor = asyncComponent(() => import('@/menu/components/editor/braft-editor'))
|
const AntvScatter = asyncComponent(() => import('@/menu/components/chart/antv-scatter'))
|
const NormalForm = asyncComponent(() => import('@/menu/components/form/normal-form'))
|
const TabForm = asyncComponent(() => import('@/menu/components/form/tab-form'))
|
const AntvDashboard = asyncComponent(() => import('@/menu/components/chart/antv-dashboard'))
|
const CarouselDataCard = asyncComponent(() => import('@/menu/components/carousel/data-card'))
|
const CarouselPropCard = asyncComponent(() => import('@/menu/components/carousel/prop-card'))
|
const Balcony = asyncComponent(() => import('@/menu/components/card/balcony'))
|
const CodeSandbox = asyncComponent(() => import('@/menu/components/code/sandbox'))
|
|
const Card = ({ id, card, moveCard, findCard, delCard, updateConfig }) => {
|
const originalIndex = findCard(id).index
|
const [{ isDragging }, drag] = useDrag({
|
item: { type: 'menu', id, originalIndex, floor: card.floor },
|
collect: monitor => ({
|
isDragging: monitor.isDragging(),
|
}),
|
})
|
const [, drop] = useDrop({
|
accept: 'menu',
|
canDrop: () => true,
|
drop: (item) => {
|
const { id: draggedId, originalIndex, floor } = item
|
if (originalIndex === undefined) {
|
item.dropTargetId = id
|
} else if (draggedId && floor === card.floor) {
|
if (draggedId === id) return
|
const { index: originIndex } = findCard(draggedId)
|
|
if (originIndex === -1) return
|
|
const { index: overIndex } = findCard(id)
|
|
moveCard(draggedId, overIndex)
|
}
|
}
|
})
|
|
let style = { opacity: 1}
|
if (isDragging) {
|
style = { opacity: 0.3}
|
}
|
|
const getCardComponent = () => {
|
if (card.type === 'bar' || card.type === 'line') {
|
return (<AntvBar card={card} updateConfig={updateConfig} deletecomponent={delCard} />)
|
} else if (card.type === 'pie') {
|
return (<AntvPie card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'dashboard') {
|
return (<AntvDashboard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'tree') {
|
return (<NormalTree card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'scatter') {
|
return (<AntvScatter card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'form' && card.subtype === 'stepform') {
|
return (<NormalForm card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'form' && card.subtype === 'tabform') {
|
return (<TabForm card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'card' && card.subtype === 'datacard') {
|
return (<DataCard card={card} updateConfig={updateConfig} deletecomponent={delCard} />)
|
} else if (card.type === 'card' && card.subtype === 'propcard') {
|
return (<PropCard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'table' && card.subtype === 'tablecard') {
|
return (<TableCard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'table' && card.subtype === 'normaltable') {
|
return (<NormalTable card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'table' && card.subtype === 'editable') {
|
return (<EditTable card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'carousel' && card.subtype === 'datacard') {
|
return (<CarouselDataCard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'carousel' && card.subtype === 'propcard') {
|
return (<CarouselPropCard card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'editor') {
|
return (<BraftEditor card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'code') {
|
return (<CodeSandbox card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'balcony') {
|
return (<Balcony card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
}
|
}
|
|
return (
|
<div className={'ant-col mk-component-card ant-col-' + (card.width || 24)} ref={node => drag(drop(node))} style={style}>
|
{getCardComponent()}
|
</div>
|
)
|
}
|
export default Card
|