import { CompressOutlined, DeleteOutlined, FullscreenExitOutlined, FullscreenOutlined, GatewayOutlined, MenuOutlined, SyncOutlined, UnorderedListOutlined, } from '@ant-design/icons'; import { Button, Divider, Form, Input, List, Modal, Popconfirm, Popover } from 'antd'; import React, { CSSProperties, PropsWithChildren, useState } from 'react'; import { UserConfig } from '..'; import { IBlockType, IStoreData } from '../core/store/storetype'; import { deepCopy, arrayMove, changeItem, changeLayer, focusEle } from '../core/utils'; import { SortEnd, SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc'; import { wrapperMoveState } from './wrapperMove/event'; export interface ControlProps { config: UserConfig; style?: CSSProperties; } const DragHandle = SortableHandle(() => ); const SortableItem = SortableElement( ({ value }: { value: { value: IBlockType; config: UserConfig } }) => (
{value.config.getComponentRegister().getMap()[value.value.name].display}
{value.value.id.slice(-6)}
{value.value.position}
{ changeItem(value.config.getStore(), value.value.id, 'position', 'absolute'); }} > { changeItem(value.config.getStore(), value.value.id, 'position', 'static'); }} > { changeLayer(value.config.getStore(), value.value.id, 'delete'); }} >
) ); const SortableList = SortableContainer( ({ items }: { items: { data: IBlockType[]; config: UserConfig } }) => { return (
{items.data.map((value, index: number) => ( ))}
); } ); export function Control(props: PropsWithChildren) { const { style } = props; const [visible, setVisible] = useState(false); const [configVisible, setConfigVisible] = useState(false); const [form] = Form.useForm(); const data = props.config.getStore().getData().block; const onSortEnd = (sort: SortEnd) => { const { oldIndex, newIndex } = sort; const newblocks: IBlockType[] = arrayMove(data, oldIndex, newIndex); // 这里要判断是否edit ,如果edit时,只要看第一个是不是container,不是则不移动 const isEdit = props.config.getStoreChanger().isEdit(); if (isEdit) { const firstType = newblocks[0].name; if (firstType !== 'modalMask') { return; } } const store = props.config.getStore(); const cloneData: IStoreData = deepCopy(store.getData()); cloneData.block = newblocks; store.setData(cloneData); }; const content = data.length === 0 ? (
暂时没有组件
) : (
); return ( <>
{/* */}
} > setConfigVisible(false)} onCancel={() => setConfigVisible(false)} footer={null} > {props.config.getStoreChanger().getState().modalEditName !== '' && (
请退出编辑弹窗后再打开该配置
)} {props.config.getStoreChanger().getState().modalEditName === '' && Object.keys(props.config.getStore().getData().modalMap).map((v) => { return ( { props.config.getStoreChanger().updateModal(props.config.getStore(), v); setConfigVisible(false); }} okText={'是'} cancelText={'否'} > , { props.config.getStoreChanger().removeModal(props.config.getStore(), v); setConfigVisible(false); }} okText={'是'} cancelText={'否'} > , ]} > {v} ); })} {props.config.getStoreChanger().getState().modalEditName === '' && Object.keys(props.config.getStore().getData().modalMap).length === 0 && (
暂时没有弹窗
)}
{ form .validateFields() .then((values) => { form.resetFields(); const modalName = values.modalName; props.config.getStoreChanger().newModalMap(props.config.getStore(), modalName); setVisible(false); }) .catch((info) => { console.log('Validate Failed:', info); }); }} title="新增弹窗" onCancel={() => setVisible(false)} visible={visible} >
); } export default Control;