mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 06:15:11 +00:00
fix: add table block
This commit is contained in:
parent
19a91383b5
commit
0696b8092c
@ -0,0 +1,85 @@
|
|||||||
|
/**
|
||||||
|
* This file is part of the NocoBase (R) project.
|
||||||
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
||||||
|
* Authors: NocoBase Team.
|
||||||
|
*
|
||||||
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
||||||
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
import { TableProps } from 'antd';
|
||||||
|
import { ISchema } from '@formily/json-schema';
|
||||||
|
|
||||||
|
import { AllDataBlockProps } from '../../data-source';
|
||||||
|
import { useTableBlockProps } from '../../modules/blocks/data-blocks/table';
|
||||||
|
import { SchemaComponent } from '../../schema-component';
|
||||||
|
|
||||||
|
interface CreateTableBlockOptions {
|
||||||
|
collectionName: string;
|
||||||
|
columns: Record<string, Record<string, any>>;
|
||||||
|
tableProps?: TableProps<any>;
|
||||||
|
tableBlockProps?: Partial<AllDataBlockProps>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createTableBlock = (options: CreateTableBlockOptions) => {
|
||||||
|
const { collectionName, columns, tableProps = {}, tableBlockProps = {} } = options;
|
||||||
|
|
||||||
|
const getTableColumns = (columns: CreateTableBlockOptions['columns']) => {
|
||||||
|
return Object.keys(columns).reduce((acc, fieldName) => {
|
||||||
|
acc[fieldName] = {
|
||||||
|
type: 'void',
|
||||||
|
'x-decorator': 'TableV2.Column.Decorator',
|
||||||
|
'x-component': 'TableV2.Column',
|
||||||
|
properties: {
|
||||||
|
[fieldName]: {
|
||||||
|
type: 'string',
|
||||||
|
'x-component': 'CollectionField',
|
||||||
|
'x-pattern': 'readPretty',
|
||||||
|
'x-component-props': columns[fieldName],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
};
|
||||||
|
|
||||||
|
const schema: ISchema = {
|
||||||
|
type: 'void',
|
||||||
|
name: 'root',
|
||||||
|
properties: {
|
||||||
|
test: {
|
||||||
|
type: 'void',
|
||||||
|
'x-decorator': 'TableBlockProvider',
|
||||||
|
'x-decorator-props': {
|
||||||
|
collection: collectionName,
|
||||||
|
action: 'list',
|
||||||
|
showIndex: true,
|
||||||
|
dragSort: false,
|
||||||
|
...tableBlockProps,
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
table: {
|
||||||
|
type: 'array',
|
||||||
|
'x-component': 'TableV2',
|
||||||
|
'x-use-component-props': useTableBlockProps, // 自动注入 Table 所需的 props
|
||||||
|
'x-component-props': {
|
||||||
|
rowKey: 'id',
|
||||||
|
rowSelection: {
|
||||||
|
type: 'checkbox',
|
||||||
|
},
|
||||||
|
...tableProps,
|
||||||
|
},
|
||||||
|
properties: getTableColumns(columns),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const TableBlockComponent = () => {
|
||||||
|
return <SchemaComponent schema={schema} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
return TableBlockComponent;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user