diff --git a/packages/core/client/src/block-provider/TableSelectorProvider.tsx b/packages/core/client/src/block-provider/TableSelectorProvider.tsx index 4076fbce30..671613cd43 100644 --- a/packages/core/client/src/block-provider/TableSelectorProvider.tsx +++ b/packages/core/client/src/block-provider/TableSelectorProvider.tsx @@ -1,11 +1,10 @@ import { ArrayField } from '@formily/core'; import { Schema, useField, useFieldSchema } from '@formily/react'; import uniq from 'lodash/uniq'; -import React, { createContext, useContext, useEffect } from 'react'; +import React, { createContext, useContext, useEffect, useState } from 'react'; import { useCollectionManager } from '../collection-manager'; import { RecordProvider, useRecord } from '../record-provider'; import { BlockProvider, RenderChildrenWithAssociationFilter, useBlockRequestContext } from './BlockProvider'; -import { useFormBlockContext } from './FormBlockProvider'; export const TableSelectorContext = createContext({}); @@ -13,6 +12,7 @@ const InternalTableSelectorProvider = (props) => { const { params, rowKey, extraFilter } = props; const field = useField(); const { resource, service } = useBlockRequestContext(); + const [expandFlag, setExpandFlag] = useState(false); // if (service.loading) { // return ; // } @@ -26,6 +26,10 @@ const InternalTableSelectorProvider = (props) => { params, extraFilter, rowKey, + expandFlag, + setExpandFlag: () => { + setExpandFlag(!expandFlag); + }, }} > diff --git a/packages/core/client/src/schema-component/antd/table-v2/Table.tsx b/packages/core/client/src/schema-component/antd/table-v2/Table.tsx index 6f4f3c35ec..159b7c4a4a 100644 --- a/packages/core/client/src/schema-component/antd/table-v2/Table.tsx +++ b/packages/core/client/src/schema-component/antd/table-v2/Table.tsx @@ -10,7 +10,13 @@ import { default as classNames, default as cls } from 'classnames'; import React, { RefCallback, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { DndContext, useDesignable } from '../..'; -import { RecordIndexProvider, RecordProvider, useSchemaInitializer, useTableBlockContext } from '../../../'; +import { + RecordIndexProvider, + RecordProvider, + useSchemaInitializer, + useTableBlockContext, + useTableSelectorContext, +} from '../../../'; import { useACLFieldWhitelist } from '../../../acl/ACLProvider'; import { isCollectionFieldComponent, isColumnComponent, extractIndex, getIdsWithChildren } from './utils'; @@ -162,12 +168,14 @@ export const Table: any = observer((props: any) => { required, ...others } = { ...others1, ...others2 } as any; - const { expandFlag } = useTableBlockContext(); + const schema = useFieldSchema(); + const isTableSelector = schema?.parent?.['x-decorator'] === 'TableSelectorProvider'; + const ctx = isTableSelector ? useTableSelectorContext() : useTableBlockContext(); + const { expandFlag } = ctx; const onRowDragEnd = useMemoizedFn(others.onRowDragEnd || (() => {})); const paginationProps = usePaginationProps(pagination1, pagination2); const requiredValidator = field.required || required; - const schema = useFieldSchema(); - const { treeTable } = schema?.parent?.['x-decorator-props']||{}; + const { treeTable } = schema?.parent?.['x-decorator-props'] || {}; const [expandedKeys, setExpandesKeys] = useState([]); const [allIncludesChildren, setAllIncludesChildren] = useState([]); useEffect(() => { diff --git a/packages/core/client/src/schema-initializer/items/ExpandActionInitializer.tsx b/packages/core/client/src/schema-initializer/items/ExpandActionInitializer.tsx index 6844df1d68..7180d2f7f5 100644 --- a/packages/core/client/src/schema-initializer/items/ExpandActionInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/ExpandActionInitializer.tsx @@ -2,8 +2,9 @@ import React from 'react'; import { Button } from 'antd'; import { css } from '@emotion/css'; import { useTranslation } from 'react-i18next'; +import { useFieldSchema } from '@formily/react'; import { ActionInitializer } from './ActionInitializer'; -import { useTableBlockContext } from '../../'; +import { useTableBlockContext, useTableSelectorContext } from '../../'; import { NodeCollapseOutlined, NodeExpandOutlined } from '@ant-design/icons'; export const ExpandActionInitializer = (props) => { @@ -66,7 +67,9 @@ const actionDesignerCss = css` export const ExpandActionComponent = (props) => { const { t } = useTranslation(); - const ctx = useTableBlockContext(); + const schema = useFieldSchema(); + const isTableSelector = schema.parent?.parent?.['x-decorator'] === 'TableSelectorProvider'; + const ctx = isTableSelector ? useTableSelectorContext() : useTableBlockContext(); return (
{ctx.params['tree'] && (