mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-07-02 03:02:19 +08:00
feat: improve useAssociationFieldContext (#5642)
This commit is contained in:
parent
4394f72b6d
commit
3c812362b2
@ -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>
|
||||
);
|
||||
});
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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';
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user