module copy, move
This commit is contained in:
parent
3767186f6a
commit
860ddec138
@ -5,20 +5,22 @@ import { usePopup } from '@/hooks/usePopup'
|
||||
import { useMessage } from '@/hooks/useMessage'
|
||||
import { useState } from 'react'
|
||||
import Image from 'next/image'
|
||||
import { MODULE_INSERT_TYPE, useModule } from '@/hooks/module/useModule'
|
||||
|
||||
export default function ColumnInsert(props) {
|
||||
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
|
||||
const { id, pos = contextPopupPosition, apply } = props
|
||||
const { closePopup } = usePopup()
|
||||
const [selectedType, setSelectedType] = useState(1)
|
||||
const [selectedType, setSelectedType] = useState(MODULE_INSERT_TYPE.LEFT)
|
||||
const { getMessage } = useMessage()
|
||||
const { moduleColumnInsert } = useModule()
|
||||
const handleApply = () => {
|
||||
if (apply) apply()
|
||||
moduleColumnInsert(selectedType)
|
||||
closePopup(id)
|
||||
}
|
||||
|
||||
const HandleRadioChange = (e) => {
|
||||
setSelectedType(Number(e.target.value))
|
||||
const handleRadioChange = (e) => {
|
||||
setSelectedType(e.target.value)
|
||||
}
|
||||
|
||||
return (
|
||||
@ -36,16 +38,30 @@ export default function ColumnInsert(props) {
|
||||
<div className="additional-wrap">
|
||||
<div className="additional-radio-wrap">
|
||||
<div className="d-check-radio pop">
|
||||
<input type="radio" name="radio01" id="ra01" onChange={HandleRadioChange} value={1} checked={selectedType === 1} />
|
||||
<input
|
||||
type="radio"
|
||||
name="radio01"
|
||||
id="ra01"
|
||||
onChange={handleRadioChange}
|
||||
value={MODULE_INSERT_TYPE.LEFT}
|
||||
checked={selectedType === MODULE_INSERT_TYPE.LEFT}
|
||||
/>
|
||||
<label htmlFor="ra01">{getMessage('modal.panel.column.insert.type.left')}</label>
|
||||
</div>
|
||||
<div className="d-check-radio pop">
|
||||
<input type="radio" name="radio01" id="ra02" onChange={HandleRadioChange} value={2} checked={selectedType === 2} />
|
||||
<input
|
||||
type="radio"
|
||||
name="radio01"
|
||||
id="ra02"
|
||||
onChange={handleRadioChange}
|
||||
value={MODULE_INSERT_TYPE.RIGHT}
|
||||
checked={selectedType === MODULE_INSERT_TYPE.RIGHT}
|
||||
/>
|
||||
<label htmlFor="ra02">{getMessage('modal.panel.column.insert.type.right')}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div className="additional-img-wrap">
|
||||
{selectedType === 1 && (
|
||||
{selectedType === MODULE_INSERT_TYPE.LEFT && (
|
||||
<Image
|
||||
src="/static/images/canvas/additional-edit01.svg"
|
||||
alt="react"
|
||||
@ -54,7 +70,7 @@ export default function ColumnInsert(props) {
|
||||
style={{ width: 'auto', height: 'auto' }}
|
||||
/>
|
||||
)}
|
||||
{selectedType === 2 && (
|
||||
{selectedType === MODULE_INSERT_TYPE.RIGHT && (
|
||||
<Image
|
||||
src="/static/images/canvas/additional-edit02.svg"
|
||||
alt="react"
|
||||
|
||||
@ -18,6 +18,13 @@ export const MODULE_REMOVE_TYPE = {
|
||||
NONE: 'none',
|
||||
}
|
||||
|
||||
export const MODULE_INSERT_TYPE = {
|
||||
LEFT: 'left',
|
||||
RIGHT: 'right',
|
||||
TOP: 'top',
|
||||
BOTTOM: 'bottom',
|
||||
}
|
||||
|
||||
export function useModule() {
|
||||
const canvas = useRecoilValue(canvasState)
|
||||
const { swalFire } = useSwal()
|
||||
@ -256,9 +263,18 @@ export function useModule() {
|
||||
.getObjects()
|
||||
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
|
||||
let [isOverlapOtherModules, isOverlapObjects, isOutsideSurface] = [[], [], []]
|
||||
let moduleLength = 0
|
||||
if (type === 'column') {
|
||||
moduleLength = Number(modules[modules.length - 1].top) + Number(modules[modules.length - 1].height) - Number(modules[0].top)
|
||||
} else if (type === 'row') {
|
||||
moduleLength = Number(modules[modules.length - 1].left) + Number(modules[modules.length - 1].width) - Number(modules[0].left)
|
||||
}
|
||||
console.log('🚀 ~ moduleMultiCopy ~ modules:', modules)
|
||||
console.log('🚀 ~ moduleMultiCopy ~ moduleLength:', moduleLength)
|
||||
|
||||
modules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, direction, length, false)
|
||||
const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), false)
|
||||
console.log('🚀 ~ modules.forEach ~ top:', top)
|
||||
const moduleOptions = { ...module, left, top, id: uuidv4() }
|
||||
const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
|
||||
canvas.add(rect)
|
||||
@ -529,13 +545,55 @@ export function useModule() {
|
||||
}
|
||||
canvas.renderAll()
|
||||
}
|
||||
// 좌우 열 옮기고 current Column 복사하기.
|
||||
const moduleColumnInsert = (type) => {
|
||||
const activeModule = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0]
|
||||
const columnModules = getColumnModules(activeModule)
|
||||
const otherModules = getOtherModules(columnModules)
|
||||
const targetModules =
|
||||
type === MODULE_INSERT_TYPE.LEFT
|
||||
? otherModules.filter((module) => module.left < activeModule.left).sort((a, b) => a.left - b.left)
|
||||
: otherModules.filter((module) => module.left > activeModule.left).sort((a, b) => b.left - a.left)
|
||||
const objects = getObjects()
|
||||
const copyRects = []
|
||||
const moduleSetupSurface = canvas
|
||||
.getObjects()
|
||||
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === activeModule.surfaceId)[0]
|
||||
let width = -1
|
||||
let [isOverlapOtherModules, isOverlapObjects, isOutsideSurface] = [[], [], []]
|
||||
|
||||
targetModules.forEach((module) => {
|
||||
if (width === -1) width = type === MODULE_INSERT_TYPE.LEFT ? module.left - activeModule.left : activeModule.left - module.left
|
||||
const { left } = getPosotion(module, type, width, false)
|
||||
const moduleOptions = { ...module, left, top, id: uuidv4() }
|
||||
module.set({ left })
|
||||
// const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
|
||||
// canvas.add(rect)
|
||||
// copyRects.push(rect)
|
||||
module.setCoords()
|
||||
})
|
||||
// columnModules.forEach((module) => {
|
||||
// const { top, left } = getPosotion(module, MODULE_INSERT_TYPE.LEFT, module.width, false)
|
||||
// const moduleOptions = { ...module, left, top, id: uuidv4() }
|
||||
// const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
|
||||
// canvas.add(rect)
|
||||
// copyRects.push(rect)
|
||||
// module.setCoords()
|
||||
// })
|
||||
}
|
||||
|
||||
const getRowModules = (target) => {
|
||||
return canvas.getObjects().filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.top === target.top)
|
||||
return canvas
|
||||
.getObjects()
|
||||
.filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.top === target.top)
|
||||
.sort((a, b) => a.left - b.left)
|
||||
}
|
||||
|
||||
const getColumnModules = (target) => {
|
||||
return canvas.getObjects().filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.left === target.left)
|
||||
return canvas
|
||||
.getObjects()
|
||||
.filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.left === target.left)
|
||||
.sort((a, b) => a.top - b.top)
|
||||
}
|
||||
|
||||
const getPosotion = (target, direction, length, hasMargin = false) => {
|
||||
@ -601,5 +659,6 @@ export function useModule() {
|
||||
moduleMultiCopy,
|
||||
moduleColumnRemove,
|
||||
moduleRowRemove,
|
||||
moduleColumnInsert,
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user