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 MainSearch = asyncComponent(() => import('@/mob/components/search/single-search'))
|
const AntvPie = asyncComponent(() => import('@/menu/components/chart/antv-pie'))
|
const AntvDashboard = asyncComponent(() => import('@/menu/components/chart/antv-dashboard'))
|
const AntvScatter = asyncComponent(() => import('@/menu/components/chart/antv-scatter'))
|
const AntvTabs = asyncComponent(() => import('@/mob/components/tabs/antv-tabs'))
|
const DataCard = asyncComponent(() => import('@/menu/components/card/data-card'))
|
const PropCard = asyncComponent(() => import('@/menu/components/card/prop-card'))
|
const CarouselDataCard = asyncComponent(() => import('@/menu/components/carousel/data-card'))
|
const CarouselPropCard = asyncComponent(() => import('@/menu/components/carousel/prop-card'))
|
const TableCard = asyncComponent(() => import('@/menu/components/card/table-card'))
|
const NormalTable = asyncComponent(() => import('@/menu/components/table/normal-table'))
|
const SimpleForm = asyncComponent(() => import('@/menu/components/form/simple-form'))
|
const StepForm = asyncComponent(() => import('@/menu/components/form/step-form'))
|
const TabForm = asyncComponent(() => import('@/menu/components/form/tab-form'))
|
const NormalGroup = asyncComponent(() => import('@/menu/components/group/normal-group'))
|
const CodeSandbox = asyncComponent(() => import('@/menu/components/code/sandbox'))
|
const BraftEditor = asyncComponent(() => import('@/menu/components/editor/braft-editor'))
|
const NormalLogin = asyncComponent(() => import('@/pc/components/login/normal-login'))
|
const NormalNavbar = asyncComponent(() => import('@/mob/components/navbar/normal-navbar'))
|
const NormalTopbar = asyncComponent(() => import('@/mob/components/topbar/normal-navbar'))
|
const NormalMenuBar = asyncComponent(() => import('@/mob/components/menubar/normal-menubar'))
|
const CommonMenuBar = asyncComponent(() => import('@/mob/components/menubar/common-menubar'))
|
const Balcony = asyncComponent(() => import('@/menu/components/card/balcony'))
|
const Timeline = asyncComponent(() => import('@/menu/components/timeline/normal-timeline'))
|
const OfficialAccount = asyncComponent(() => import('@/mob/components/official'))
|
const Iframe = asyncComponent(() => import('@/menu/components/iframe'))
|
|
const Card = ({ id, card, moveCard, findCard, delCard, updateConfig }) => {
|
const originalIndex = findCard(id).index
|
const [{ isDragging }, drag] = useDrag({
|
item: { type: 'menu', id, originalIndex },
|
collect: monitor => ({
|
isDragging: monitor.isDragging(),
|
}),
|
})
|
const [, drop] = useDrop({
|
accept: 'menu',
|
canDrop: () => true,
|
drop: (item) => {
|
const { id: draggedId, originalIndex } = item
|
|
if (originalIndex === undefined) {
|
item.dropTargetId = id
|
} else if (draggedId) {
|
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}
|
}
|
|
if (card.style && card.style.clear === 'left') {
|
style.clear = 'left'
|
}
|
|
let col = 'ant-col-' + (card.width || 24)
|
if (card.type === 'login') {
|
let height = ''
|
if (card.wrap && card.wrap.height) {
|
// scaleview
|
height = card.wrap.height.replace(/\d+vw/ig, (word) => {
|
return parseFloat(word) * (window.GLOB.winWidth || 420) / 100 + 'px'
|
// return parseFloat(word) * 350 / 100 + 'px'
|
}).replace(/\d+vh/ig, (word) => {
|
return parseFloat(word) * (window.GLOB.winHeight || 738) / 100 + 'px'
|
// return parseFloat(word) * 615 / 100 + 'px'
|
})
|
}
|
|
style.minHeight = height
|
}
|
|
const getCardComponent = () => {
|
if (card.type === 'bar' || card.type === 'line') {
|
return (<AntvBar card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'search') {
|
return (<MainSearch 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 === 'scatter') {
|
return (<AntvScatter card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'form' && card.subtype === 'simpleform') {
|
return (<SimpleForm card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'form' && card.subtype === 'stepform') {
|
return (<StepForm 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 === 'tabs') {
|
return (<AntvTabs tabs={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 === '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 === 'card' && 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 === 'group' && card.subtype === 'normalgroup') {
|
return (<NormalGroup group={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'code') {
|
return (<CodeSandbox card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'editor') {
|
return (<BraftEditor card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'login') {
|
return (<NormalLogin card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'navbar') {
|
return (<NormalNavbar card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'topbar') {
|
return (<NormalTopbar card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'menubar' && card.subtype === 'menubar') {
|
return (<NormalMenuBar card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'menubar' && card.subtype === 'commonbar') {
|
return (<CommonMenuBar card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'balcony') {
|
return (<Balcony card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'timeline') {
|
return (<Timeline card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'officialAccount') {
|
return (<OfficialAccount card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
} else if (card.type === 'iframe') {
|
return (<Iframe card={card} updateConfig={updateConfig} deletecomponent={delCard}/>)
|
}
|
}
|
|
if (card.type === 'navbar' || card.type === 'topbar') {
|
return getCardComponent()
|
} else {
|
return (
|
<div className={'ant-col mk-component-card ' + col} ref={node => drag(drop(node))} style={style}>
|
{getCardComponent()}
|
</div>
|
)
|
}
|
}
|
export default Card
|