+
);
diff --git a/packages/client/src/schema-component/antd/grid/index.tsx b/packages/client/src/schema-component/antd/grid/index.tsx
index 107601a52..762542e7c 100644
--- a/packages/client/src/schema-component/antd/grid/index.tsx
+++ b/packages/client/src/schema-component/antd/grid/index.tsx
@@ -1,176 +1 @@
-import { useDndMonitor, useDroppable } from '@dnd-kit/core';
-import { css } from '@emotion/css';
-import { observer, RecursionField, Schema, useField, useFieldSchema } from '@formily/react';
-import { uid } from '@formily/shared';
-import cls from 'classnames';
-import React, { useState } from 'react';
-import { useComponent } from '../..';
-import { DndContext } from '../../common/dnd-context';
-
-const ColDivider = (props) => {
- const { isOver, setNodeRef } = useDroppable({
- id: props.id,
- data: props.data,
- });
-
- const droppableStyle = {
- backgroundColor: isOver ? 'green' : undefined,
- };
-
- return ;
-};
-
-const RowDivider = (props) => {
- const { isOver, setNodeRef } = useDroppable({
- id: props.id,
- data: props.data,
- });
-
- const droppableStyle = {};
-
- if (isOver) {
- droppableStyle['backgroundColor'] = 'green';
- }
-
- const [active, setActive] = useState(false);
-
- useDndMonitor({
- onDragStart(event) {
- setActive(true);
- },
- onDragMove(event) {},
- onDragOver(event) {},
- onDragEnd(event) {
- setActive(false);
- },
- onDragCancel(event) {
- setActive(false);
- },
- });
-
- return (
-
- );
-};
-
-export const Grid: any = observer((props) => {
- const field = useField();
- const fieldSchema = useFieldSchema();
- const ItemInitializer = useComponent(fieldSchema['x-item-initializer']);
- const addr = field.address.toString();
- const wrapSchema = (schema: Schema) => {
- const row = new Schema({
- type: 'void',
- name: `row_${uid()}`,
- 'x-uid': uid(),
- 'x-component': 'Grid.Row',
- });
- const col = row.addProperty(uid(), {
- type: 'void',
- 'x-uid': uid(),
- 'x-component': 'Grid.Col',
- });
- if (Schema.isSchemaInstance(schema)) {
- schema.parent = col;
- }
- col.addProperty(schema.name, schema);
- return row;
- };
- return (
-
-
-
- {fieldSchema.mapProperties((schema, key, index) => {
- return (
-
-
-
-
- );
- })}
-
-
{ItemInitializer && }
-
- );
-});
-
-Grid.Row = observer((props) => {
- const field = useField();
- const fieldSchema = useFieldSchema();
- const addr = field.address.toString();
- const wrapSchema = (schema: Schema) => {
- const s = new Schema({
- type: 'void',
- name: `col_${uid()}`,
- 'x-uid': uid(),
- 'x-component': 'Grid.Col',
- });
- // parent 更新了,需要重新指定
- if (Schema.isSchemaInstance(schema)) {
- schema.parent = s;
- }
- s.addProperty(schema.name, schema);
- return s;
- };
- const onInsertAdjacent = ({ dn, draggedSchema }) => {
- dn.remove(draggedSchema, {
- removeEmptyParents: true,
- });
- };
- console.log('fieldSchema', fieldSchema.toJSON());
- return (
-
-
- {fieldSchema.mapProperties((schema, key, index) => {
- return (
-
-
-
-
- );
- })}
-
- );
-});
-
-Grid.Col = observer((props) => {
- return (
-
- {props.children}
-
- );
-});
+export * from './Grid';
diff --git a/packages/client/src/schema-component/core/RemoteSchemaComponent.tsx b/packages/client/src/schema-component/core/RemoteSchemaComponent.tsx
index 5741073fd..718cc203b 100644
--- a/packages/client/src/schema-component/core/RemoteSchemaComponent.tsx
+++ b/packages/client/src/schema-component/core/RemoteSchemaComponent.tsx
@@ -38,7 +38,7 @@ const RequestSchemaComponent: React.FC = (props) =>
if (hidden) {
return ;
}
- return ;
+ return ;
};
export const RemoteSchemaComponent: React.FC = (props) => {
diff --git a/packages/client/src/schema-component/hooks/useDesignable.tsx b/packages/client/src/schema-component/hooks/useDesignable.tsx
index ff5659070..a26ffcb9d 100644
--- a/packages/client/src/schema-component/hooks/useDesignable.tsx
+++ b/packages/client/src/schema-component/hooks/useDesignable.tsx
@@ -23,6 +23,11 @@ interface InsertAdjacentOptions {
removeEmptyParents?: boolean;
}
+interface RemoveOptions {
+ removeEmptyParents?: boolean;
+ breakComponent?: string;
+}
+
const generateUid = (s: ISchema) => {
if (!s['x-uid']) {
s['x-uid'] = uid();
@@ -108,8 +113,8 @@ export class Designable {
}
}
- remove(schema?: Schema, options: { removeEmptyParents?: boolean } = {}) {
- const { removeEmptyParents } = options;
+ remove(schema?: Schema, options: RemoveOptions = {}) {
+ const { removeEmptyParents, breakComponent } = options;
let s = schema || this.current;
let removed;
while (s.parent) {
@@ -117,6 +122,9 @@ export class Designable {
if (!removeEmptyParents) {
break;
}
+ if (s?.parent?.['x-component'] === breakComponent) {
+ break;
+ }
const count = Object.keys(s.parent.properties || {}).length;
if (count > 0) {
break;
@@ -332,10 +340,10 @@ export function useDesignable() {
update(key);
refresh();
},
- remove(schema: any, options?: any) {
+ remove(schema: any, options?: RemoveOptions) {
dn.remove(schema, options);
},
- insertAdjacent(position: Position, schema: ISchema, options: InsertAdjacentOptions = {}) {
+ insertAdjacent(position: Position, schema: ISchema, options?: InsertAdjacentOptions) {
dn.insertAdjacent(position, schema, options);
},
insertBeforeBegin(schema: ISchema) {