import { ArrayItems } from '@formily/antd'; import { ISchema, useField, useFieldSchema } from '@formily/react'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useTableBlockContext } from '../../../block-provider'; import { useCollection } from '../../../collection-manager'; import { useCollectionFilterOptions, useSortFields } from '../../../collection-manager/action-hooks'; import { GeneralSchemaDesigner, SchemaSettings } from '../../../schema-settings'; import { useSchemaTemplate } from '../../../schema-templates'; import { useDesignable } from '../../hooks'; export const TableBlockDesigner = () => { const { name, title, sortable } = useCollection(); const field = useField(); const fieldSchema = useFieldSchema(); const dataSource = useCollectionFilterOptions(name); const sortFields = useSortFields(name); const { service } = useTableBlockContext(); const { t } = useTranslation(); const { dn } = useDesignable(); const defaultFilter = fieldSchema?.['x-decorator-props']?.params?.filter || {}; const defaultSort = fieldSchema?.['x-decorator-props']?.params?.sort || []; const sort = defaultSort?.map((item: string) => { return item.startsWith('-') ? { field: item.substring(1), direction: 'desc', } : { field: item, direction: 'asc', }; }); const template = useSchemaTemplate(); const { dragSort } = field.decoratorProps; return ( { field.decoratorProps.dragSort = dragSort; fieldSchema['x-decorator-props'].dragSort = dragSort; service.run({ ...service.params?.[0], sort: 'sort' }); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': fieldSchema['x-decorator-props'], }, }); }} /> { const params = field.decoratorProps.params || {}; params.filter = filter; field.decoratorProps.params = params; fieldSchema['x-decorator-props']['params'] = params; service.run({ ...service.params?.[0], filter }); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': fieldSchema['x-decorator-props'], }, }); }} /> {!dragSort && ( { const sortArr = sort.map((item) => { return item.direction === 'desc' ? `-${item.field}` : item.field; }); const params = field.decoratorProps.params || {}; params.sort = sortArr; field.decoratorProps.params = params; fieldSchema['x-decorator-props']['params'] = params; dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': fieldSchema['x-decorator-props'], }, }); service.run({ ...service.params?.[0], sort: sortArr }); }} /> )} { const params = field.decoratorProps.params || {}; params.pageSize = pageSize; field.decoratorProps.params = params; fieldSchema['x-decorator-props']['params'] = params; service.run({ ...service.params?.[0], pageSize }); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': fieldSchema['x-decorator-props'], }, }); }} /> ); };