fix: non UI configured states should only display corresponding inhreited collection block (#2879)
This commit is contained in:
parent
b587560a10
commit
bc758e6846
@ -81,13 +81,9 @@ export const useFormBlockType = () => {
|
||||
return { type: ctx.type } as { type: 'update' | 'create' };
|
||||
};
|
||||
|
||||
export const useIsEmptyRecord = () => {
|
||||
const record = useRecord();
|
||||
const keys = Object.keys(record);
|
||||
if (keys.includes('__parent')) {
|
||||
return keys.length > 1;
|
||||
}
|
||||
return keys.length > 0;
|
||||
export const useIsDetailBlock = () => {
|
||||
const ctx = useActionContext();
|
||||
return !(ctx?.fieldSchema?.['x-acl-action'] === 'create' || ctx?.fieldSchema?.['x-action'] === 'create');
|
||||
};
|
||||
|
||||
export const FormBlockProvider = (props) => {
|
||||
@ -96,16 +92,17 @@ export const FormBlockProvider = (props) => {
|
||||
const { __collection } = record;
|
||||
const currentCollection = useCollection();
|
||||
const { designable } = useDesignable();
|
||||
const isEmptyRecord = useIsEmptyRecord();
|
||||
const isDetailBlock = useIsDetailBlock();
|
||||
let detailFlag = false;
|
||||
if (isEmptyRecord) {
|
||||
if (isDetailBlock) {
|
||||
detailFlag = true;
|
||||
if (!designable && __collection) {
|
||||
console.log(__collection === collection);
|
||||
detailFlag = __collection === collection;
|
||||
}
|
||||
}
|
||||
const createFlag =
|
||||
(currentCollection.name === (collection?.name || collection) && !isEmptyRecord) || !currentCollection.name;
|
||||
(currentCollection.name === (collection?.name || collection) && !isDetailBlock) || !currentCollection.name;
|
||||
return (
|
||||
(detailFlag || createFlag || isCusomeizeCreate) && (
|
||||
<BlockProvider data-testid={props['data-testid'] || 'form-block'} {...props} block={'form'}>
|
||||
|
@ -2,7 +2,7 @@ import { useFieldSchema, useForm } from '@formily/react';
|
||||
import { App } from 'antd';
|
||||
import { useContext } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useIsEmptyRecord } from '../../../block-provider/FormBlockProvider';
|
||||
import { useIsDetailBlock } from '../../../block-provider/FormBlockProvider';
|
||||
import { ActionContext } from './context';
|
||||
|
||||
export const useA = () => {
|
||||
@ -56,7 +56,7 @@ export const useCloseAction = () => {
|
||||
|
||||
export const useLinkageAction = () => {
|
||||
const fieldSchema = useFieldSchema();
|
||||
const isRecordAction = useIsEmptyRecord();
|
||||
const isRecordAction = useIsDetailBlock();
|
||||
const isAction = ['Action.Link', 'Action'].includes(fieldSchema['x-component']);
|
||||
return isAction && isRecordAction;
|
||||
};
|
||||
|
@ -438,6 +438,7 @@ FormItem.Designer = function Designer() {
|
||||
if (!hasAddNew) {
|
||||
const addNewActionschema = {
|
||||
'x-action': 'create',
|
||||
'x-acl-action': 'create',
|
||||
title: "{{t('Add new')}}",
|
||||
'x-designer': 'Action.Designer',
|
||||
'x-component': 'Action',
|
||||
@ -485,6 +486,7 @@ FormItem.Designer = function Designer() {
|
||||
if (!hasAddNew) {
|
||||
const addNewActionschema = {
|
||||
'x-action': 'create',
|
||||
'x-acl-action': 'create',
|
||||
title: "{{t('Add new')}}",
|
||||
'x-designer': 'Action.Designer',
|
||||
'x-component': 'Action',
|
||||
|
@ -5,6 +5,7 @@ export const CreateActionInitializer = (props) => {
|
||||
const schema = {
|
||||
type: 'void',
|
||||
'x-action': 'create',
|
||||
'x-acl-action': 'create',
|
||||
title: "{{t('Add new')}}",
|
||||
'x-designer': 'Action.Designer',
|
||||
'x-component': 'Action',
|
||||
|
Loading…
Reference in New Issue
Block a user