fix:解决组件循环依赖
This commit is contained in:
parent
5eca164c4d
commit
7faacd123d
|
|
@ -1,15 +1,17 @@
|
||||||
import {Dropdown, MenuProps, Space} from "antd";
|
import {Dropdown, MenuProps, Space} from "antd";
|
||||||
import style from "@/component/layout/css/header.module.less";
|
import style from "@/component/layout/css/header.module.less";
|
||||||
import {DownOutlined} from "@ant-design/icons";
|
import {DownOutlined} from "@ant-design/icons";
|
||||||
import {menus, stepList, stepMap} from "@/component/step";
|
import {stepMap} from "@/component/step";
|
||||||
import drapStore from "@/mobx/DrapStore";
|
import drapStore from "@/mobx/DrapStore";
|
||||||
|
import Menus from "@/component/step/menus";
|
||||||
|
|
||||||
console.log(stepList)
|
// console.log(stepList)
|
||||||
const items: MenuProps['items'] = [...menus];
|
const items: MenuProps['items'] = [...Menus];
|
||||||
|
|
||||||
const onClick: MenuProps['onClick'] = ({ key }) => {
|
const onClick: MenuProps['onClick'] = ({ key }) => {
|
||||||
// 给容器添加组件
|
// 给容器添加组件
|
||||||
// message.info(`Click on item ${key}`);
|
// message.info(`Click on item ${key}`);
|
||||||
|
console.log(stepMap)
|
||||||
const component = stepMap[key];
|
const component = stepMap[key];
|
||||||
console.log(key,component)
|
console.log(key,component)
|
||||||
drapStore.addChildren(null,component.defaultDataFunc())
|
drapStore.addChildren(null,component.defaultDataFunc())
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import {stepMap} from "@/component/step";
|
||||||
import lodash from "lodash"
|
import lodash from "lodash"
|
||||||
// import AddStep from "./AddStep";
|
// import AddStep from "./AddStep";
|
||||||
import {DownOutlined} from "@ant-design/icons";
|
import {DownOutlined} from "@ant-design/icons";
|
||||||
|
import AddStep from "@/component/AddStep";
|
||||||
let id = 0
|
let id = 0
|
||||||
export const getDropStoreId = (type?:string) =>{
|
export const getDropStoreId = (type?:string) =>{
|
||||||
const DropStore = {
|
const DropStore = {
|
||||||
|
|
@ -174,19 +175,20 @@ const CardItem = memo((props:CardItemProps) => {
|
||||||
}),
|
}),
|
||||||
}),[data])
|
}),[data])
|
||||||
const step = stepMap[data.mold]
|
const step = stepMap[data.mold]
|
||||||
const StepComponent = step&&step.Menu.component;
|
const StepComponent = step&&step.component;
|
||||||
|
|
||||||
const updateData = (data:string) =>{
|
const updateData = (data:string) =>{
|
||||||
props.data.data.content = data
|
props.data.data.content = data
|
||||||
drapStore.updateState()
|
drapStore.updateState()
|
||||||
|
|
||||||
}
|
}
|
||||||
// const addStepDom = ()=>{
|
const addStepDom = ()=>{
|
||||||
// return <AddStep >
|
return<AddStep >
|
||||||
// <span>新增步骤</span>
|
<span>新增步骤</span>
|
||||||
// <DownOutlined />
|
<DownOutlined />
|
||||||
// </AddStep>
|
</AddStep>
|
||||||
// }
|
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<div className={style.woodExampleBody}>
|
<div className={style.woodExampleBody}>
|
||||||
<div ref={(node) => drag(drop(node))} >
|
<div ref={(node) => drag(drop(node))} >
|
||||||
|
|
@ -206,7 +208,7 @@ const CardItem = memo((props:CardItemProps) => {
|
||||||
{props.children}
|
{props.children}
|
||||||
{props.data.type===StepDragEnum.CONTAINER&&(<div ref={(node)=>childrenDrop(node)} className={style.woodExampleChildren}>
|
{props.data.type===StepDragEnum.CONTAINER&&(<div ref={(node)=>childrenDrop(node)} className={style.woodExampleChildren}>
|
||||||
拖动到此处或者
|
拖动到此处或者
|
||||||
{/*{addStepDom()}*/}
|
{addStepDom()}
|
||||||
</div>)}
|
</div>)}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ class HttpEditComponent extends Component<stepProps, State> {
|
||||||
const content = Object.assign({
|
const content = Object.assign({
|
||||||
url:urlDefaultData
|
url:urlDefaultData
|
||||||
},props.data)
|
},props.data)
|
||||||
|
console.log(1)
|
||||||
this.state = {
|
this.state = {
|
||||||
data:content
|
data:content
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import {Content, StepDragEnum, StepDragType} from "@/component/type";
|
||||||
import {getDropStoreId} from "@/component/CardItem";
|
import {getDropStoreId} from "@/component/CardItem";
|
||||||
import HttpEditComponent from "./Edit"
|
import HttpEditComponent from "./Edit"
|
||||||
import {StepComponentExport} from "@/component/step";
|
import {StepComponentExport} from "@/component/step";
|
||||||
const name = "HttpStepComponent"
|
const name = "HTTP"
|
||||||
const tagStore = getDropStoreId("http")
|
const tagStore = getDropStoreId("http")
|
||||||
interface HttpInterface extends Content{
|
interface HttpInterface extends Content{
|
||||||
|
|
||||||
|
|
@ -32,6 +32,7 @@ const defaultDataFunc = () =>{
|
||||||
originalIndex:store.id,
|
originalIndex:store.id,
|
||||||
children:[],
|
children:[],
|
||||||
parent:null,
|
parent:null,
|
||||||
|
destruction:()=>{},
|
||||||
data:data
|
data:data
|
||||||
}
|
}
|
||||||
return defaultData
|
return defaultData
|
||||||
|
|
@ -40,16 +41,11 @@ const defaultDataFunc = () =>{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const headerStepOption = {
|
|
||||||
|
|
||||||
}
|
|
||||||
const exportData:StepComponentExport = {
|
const exportData:StepComponentExport = {
|
||||||
Menu:{
|
|
||||||
label:"HTTP",
|
key:"HTTP",
|
||||||
key:name,
|
component:HttpEditComponent,
|
||||||
options:headerStepOption,
|
|
||||||
component:HttpEditComponent
|
|
||||||
},
|
|
||||||
defaultDataFunc
|
defaultDataFunc
|
||||||
}
|
}
|
||||||
export default exportData
|
export default exportData
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
import {MenuItem} from "@/component/step";
|
||||||
|
const name = "HTTP"
|
||||||
|
const headerStepOption = {
|
||||||
|
|
||||||
|
}
|
||||||
|
const menu:MenuItem = {
|
||||||
|
label:"HTTP",
|
||||||
|
key:name,
|
||||||
|
options:headerStepOption
|
||||||
|
}
|
||||||
|
export default menu
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
import HttpStepComponent from "./http"
|
import Http from "./http"
|
||||||
import LoopEditComponent from "./loop"
|
import Loop from "./loop"
|
||||||
import {ComponentClass} from "react"
|
import {ComponentClass} from "react"
|
||||||
import {Content, StepDragType} from "@/component/type";
|
import {Content, StepDragType} from "@/component/type";
|
||||||
import {stepProps} from "@/component/step/type";
|
import {stepProps} from "@/component/step/type";
|
||||||
|
|
||||||
|
|
||||||
interface Menu {
|
export interface MenuItem {
|
||||||
label: string
|
label: string
|
||||||
key: string
|
key: string
|
||||||
options: {}
|
options: {}
|
||||||
component: ComponentClass<stepProps,any>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface StepComponentExport {
|
export interface StepComponentExport {
|
||||||
Menu: Menu
|
key: string
|
||||||
|
component: ComponentClass<stepProps,any>
|
||||||
defaultDataFunc: () => StepDragType<Content>
|
defaultDataFunc: () => StepDragType<Content>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -23,15 +22,16 @@ interface stepMapType {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const stepList = [
|
export const stepList = [
|
||||||
HttpStepComponent,
|
Http,
|
||||||
LoopEditComponent
|
Loop
|
||||||
]
|
]
|
||||||
export const menus:Menu[] = stepList.map(step=>step.Menu)
|
// export const menus:Menu[] = stepList.map(step=>step.Menu)
|
||||||
|
|
||||||
export const stepMap: stepMapType = {}
|
export const stepMap: stepMapType = {}
|
||||||
stepList.forEach(step => {
|
stepList.forEach(step => {
|
||||||
stepMap[step.Menu.key] = step
|
stepMap[step.key] = step
|
||||||
})
|
})
|
||||||
|
console.log(stepMap)
|
||||||
export default {
|
export default {
|
||||||
stepList,
|
stepList,
|
||||||
stepMap
|
stepMap
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import {StepComponentExport} from "@/component/step";
|
||||||
import HttpEditComponent from "@/component/step/http/Edit";
|
import HttpEditComponent from "@/component/step/http/Edit";
|
||||||
import LoopEditComponent from "@/component/step/loop/Edit";
|
import LoopEditComponent from "@/component/step/loop/Edit";
|
||||||
const tagStore = getDropStoreId("loop")
|
const tagStore = getDropStoreId("loop")
|
||||||
const name = "LoopStepComponent"
|
const name = "Loop"
|
||||||
const LoopData:LoopInterface = {
|
const LoopData:LoopInterface = {
|
||||||
content: "",
|
content: "",
|
||||||
id:0,
|
id:0,
|
||||||
|
|
@ -36,16 +36,10 @@ const defaultDataFunc = () =>{
|
||||||
}
|
}
|
||||||
return defaultData
|
return defaultData
|
||||||
}
|
}
|
||||||
const LoopStepOption = {
|
|
||||||
|
|
||||||
}
|
|
||||||
const exportData:StepComponentExport = {
|
const exportData:StepComponentExport = {
|
||||||
Menu:{
|
key:"LOOP",
|
||||||
label:"LOOP",
|
component:LoopEditComponent,
|
||||||
key:name,
|
|
||||||
options:LoopStepOption,
|
|
||||||
component:LoopEditComponent
|
|
||||||
},
|
|
||||||
defaultDataFunc
|
defaultDataFunc
|
||||||
}
|
}
|
||||||
export default exportData
|
export default exportData
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
const name = "LOOP"
|
||||||
|
const LoopStepOption = {}
|
||||||
|
const menu = {
|
||||||
|
label: "LOOP",
|
||||||
|
key: name,
|
||||||
|
options: LoopStepOption
|
||||||
|
|
||||||
|
}
|
||||||
|
export default menu
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
import loopMenu from "@/component/step/loop/menu";
|
||||||
|
import httpMenu from "@/component/step/http/menu";
|
||||||
|
|
||||||
|
const Menus = [
|
||||||
|
loopMenu,
|
||||||
|
httpMenu
|
||||||
|
]
|
||||||
|
|
||||||
|
export default Menus
|
||||||
|
|
@ -65,7 +65,7 @@ class DrapStore {
|
||||||
}
|
}
|
||||||
@action
|
@action
|
||||||
addChildren(drop: StepDragType<Content>|null, dropNew: StepDragType<Content>) {
|
addChildren(drop: StepDragType<Content>|null, dropNew: StepDragType<Content>) {
|
||||||
console.log(drop)
|
console.log(drop,dropNew)
|
||||||
if(drop===null){
|
if(drop===null){
|
||||||
this.state.push(dropNew)
|
this.state.push(dropNew)
|
||||||
this.updateState()
|
this.updateState()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue