feat: improve useAssociationFieldContext (#5642)

This commit is contained in:
chenos 2024-11-12 23:43:31 +08:00 committed by GitHub
parent 4394f72b6d
commit 3c812362b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 15 additions and 14 deletions

View File

@ -18,7 +18,7 @@ import { useFormBlockContext } from '../../block-provider/FormBlockProvider';
import { useDynamicComponentProps } from '../../hoc/withDynamicSchemaProps';
import { ErrorFallback, useCompile, useComponent } from '../../schema-component';
import { useIsAllowToSetDefaultValue } from '../../schema-settings/hooks/useIsAllowToSetDefaultValue';
import { CollectionFieldOriginalContext, CollectionFieldProvider, useCollectionField } from './CollectionFieldProvider';
import { CollectionFieldProvider, useCollectionField } from './CollectionFieldProvider';
type Props = {
component: any;
@ -96,11 +96,9 @@ export const CollectionField = connect((props) => {
const field = useField<Field>();
return (
<ErrorBoundary FallbackComponent={ErrorFallback.Modal} onError={(err) => console.log(err)}>
<CollectionFieldOriginalContext.Provider value={{ fieldSchema, field }}>
<CollectionFieldProvider name={fieldSchema.name}>
<CollectionFieldInternalField {...props} />
</CollectionFieldProvider>
</CollectionFieldOriginalContext.Provider>
<CollectionFieldProvider name={fieldSchema.name}>
<CollectionFieldInternalField {...props} />
</CollectionFieldProvider>
</ErrorBoundary>
);
});

View File

@ -18,9 +18,6 @@ import { CollectionDeletedPlaceholder } from '../components/CollectionDeletedPla
export const CollectionFieldContext = createContext<CollectionFieldOptions>(null);
CollectionFieldContext.displayName = 'CollectionFieldContext';
export const CollectionFieldOriginalContext = createContext<any>(null);
CollectionFieldOriginalContext.displayName = 'CollectionFieldOriginalContext';
export type CollectionFieldProviderProps = {
name?: SchemaKey;
children?: ReactNode;

View File

@ -99,7 +99,7 @@ export const AssociationFieldProvider = observer(
return collectionField ? (
<AssociationFieldContext.Provider
value={{ options: collectionField, field, allowMultiple, allowDissociate, currentMode }}
value={{ options: collectionField, field, fieldSchema, allowMultiple, allowDissociate, currentMode }}
>
{props.children}
</AssociationFieldContext.Provider>

View File

@ -8,11 +8,13 @@
*/
import { GeneralField } from '@formily/core';
import { Schema } from '@formily/react';
import { createContext } from 'react';
export interface AssociationFieldContextProps {
options?: any;
field?: GeneralField;
fieldSchema?: Schema;
currentMode?: string;
allowMultiple?: boolean;
allowDissociate?: boolean;

View File

@ -46,6 +46,7 @@ export function useAssociationFieldContext<F extends GeneralField>() {
return useContext(AssociationFieldContext) as {
options: any;
field: F;
fieldSchema?: Schema;
currentMode: AssociationFieldMode;
allowMultiple?: boolean;
allowDissociate?: boolean;

View File

@ -10,16 +10,18 @@
import { connect, mapReadPretty } from '@formily/react';
import { Action } from '../action';
import { Editable } from './Editable';
import { FileSelector } from './FileManager';
import { InternalPicker } from './InternalPicker';
import { Nester } from './Nester';
import { ReadPretty } from './ReadPretty';
import { SubTable } from './SubTable';
import { FileSelector } from './FileManager';
export {
AssociationFieldMode,
AssociationFieldModeProvider,
useAssociationFieldModeContext,
} from './AssociationFieldModeProvider';
export const AssociationField: any = connect(Editable, mapReadPretty(ReadPretty));
AssociationField.SubTable = SubTable;
@ -30,3 +32,5 @@ AssociationField.Viewer = Action.Container;
AssociationField.InternalSelect = InternalPicker;
AssociationField.ReadPretty = ReadPretty;
AssociationField.FileSelector = FileSelector;
export { useAssociationFieldContext } from './hooks';

View File

@ -26,7 +26,6 @@ import { useTranslation } from 'react-i18next';
import { useInView } from 'react-intersection-observer';
import { DndContext, useDesignable, useTableSize } from '../..';
import {
CollectionFieldOriginalContext,
RecordIndexProvider,
RecordProvider,
useCollection,
@ -43,7 +42,7 @@ import { isNewRecord } from '../../../data-source/collection-record/isNewRecord'
import { withDynamicSchemaProps } from '../../../hoc/withDynamicSchemaProps';
import { useSatisfiedActionValues } from '../../../schema-settings/LinkageRules/useActionValues';
import { useToken } from '../__builtins__';
import { SubFormProvider } from '../association-field/hooks';
import { SubFormProvider, useAssociationFieldContext } from '../association-field/hooks';
import { ColumnFieldProvider } from './components/ColumnFieldProvider';
import { extractIndex, isCollectionFieldComponent, isColumnComponent } from './utils';
@ -324,7 +323,7 @@ const usePaginationProps = (pagination1, pagination2) => {
);
const { total: totalCount, current, pageSize } = pagination || {};
const blockProps = useDataBlockProps();
const original = useContext(CollectionFieldOriginalContext);
const original = useAssociationFieldContext();
const { components } = useContext(SchemaOptionsContext);
const C = original?.fieldSchema?.['x-component-props']?.summary?.Component || blockProps?.summary?.Component;
const showTotal = useCallback(