mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 07:15:36 +00:00
fix: required not applied when changing field from hidden to visible and setting it as required (#4927)
This commit is contained in:
parent
00a7a52611
commit
0a9f5c7d94
@ -13,7 +13,7 @@ import {
|
|||||||
oneTableBlockWithAddNewAndViewAndEditAndBasicFields,
|
oneTableBlockWithAddNewAndViewAndEditAndBasicFields,
|
||||||
test,
|
test,
|
||||||
} from '@nocobase/test/e2e';
|
} from '@nocobase/test/e2e';
|
||||||
import { T2165, T3251, T3806, T3815, expressionTemplateInLinkageRules } from './templatesOfBug';
|
import { T2165, T3251, T3806, T3815, expressionTemplateInLinkageRules, T4891 } from './templatesOfBug';
|
||||||
|
|
||||||
test.describe('linkage rules', () => {
|
test.describe('linkage rules', () => {
|
||||||
test('basic usage', async ({ page, mockPage }) => {
|
test('basic usage', async ({ page, mockPage }) => {
|
||||||
@ -323,4 +323,35 @@ test.describe('linkage rules', () => {
|
|||||||
page.getByLabel('block-item-CollectionField-general1-form-general1.number1-number1').getByRole('spinbutton'),
|
page.getByLabel('block-item-CollectionField-general1-form-general1.number1-number1').getByRole('spinbutton'),
|
||||||
).toHaveValue('3');
|
).toHaveValue('3');
|
||||||
});
|
});
|
||||||
|
test('field are set from not displayed to displayed and required', async ({ page, mockPage }) => {
|
||||||
|
await mockPage(T4891).goto();
|
||||||
|
|
||||||
|
await expect(page.getByLabel('block-item-CardItem-general-')).toBeVisible();
|
||||||
|
|
||||||
|
// 初始化时select没有值,name 必填
|
||||||
|
await expect(
|
||||||
|
page.getByLabel('block-item-CollectionField-general-form-general.name-name').locator('.ant-formily-item-label'),
|
||||||
|
).toContainText('*name');
|
||||||
|
|
||||||
|
//select 为111,name 隐藏
|
||||||
|
await page.getByLabel('block-item-CollectionField-general-form-general.select-select').click();
|
||||||
|
await page.getByText('111').click();
|
||||||
|
|
||||||
|
await expect(page.getByLabel('block-item-CollectionField-general-form-general.name-name')).not.toBeVisible();
|
||||||
|
|
||||||
|
//select 为333,name 显示且必填
|
||||||
|
await page.getByTestId('select-single').click();
|
||||||
|
await page.getByText('333').click();
|
||||||
|
await expect(
|
||||||
|
page.getByLabel('block-item-CollectionField-general-form-general.name-name').locator('.ant-formily-item-label'),
|
||||||
|
).toContainText('*name');
|
||||||
|
|
||||||
|
//select 为222,name 显示且非必填
|
||||||
|
await page.getByLabel('block-item-CollectionField-general-form-general.select-select').click();
|
||||||
|
await page.getByText('222').click();
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
page.getByLabel('block-item-CollectionField-general-form-general.name-name').locator('.ant-formily-item-label'),
|
||||||
|
).not.toContainText('*name');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -10875,3 +10875,311 @@ export const oneTableWithNestPopups = {
|
|||||||
'x-async': true,
|
'x-async': true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const T4891 = {
|
||||||
|
pageSchema: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Page',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
p7ec8csgn5m: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid',
|
||||||
|
'x-initializer': 'page:addBlock',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
fipjk1s5va8: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Row',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
zlf19lb14hs: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Col',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
fjwbk9k41tb: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-acl-action-props': {
|
||||||
|
skipScopeCheck: true,
|
||||||
|
},
|
||||||
|
'x-acl-action': 'general:create',
|
||||||
|
'x-decorator': 'FormBlockProvider',
|
||||||
|
'x-use-decorator-props': 'useCreateFormBlockDecoratorProps',
|
||||||
|
'x-decorator-props': {
|
||||||
|
dataSource: 'main',
|
||||||
|
collection: 'general',
|
||||||
|
},
|
||||||
|
'x-toolbar': 'BlockSchemaToolbar',
|
||||||
|
'x-settings': 'blockSettings:createForm',
|
||||||
|
'x-component': 'CardItem',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
xmabwei8v51: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'FormV2',
|
||||||
|
'x-use-component-props': 'useCreateFormBlockProps',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
grid: {
|
||||||
|
'x-uid': 'thwwiietx3c',
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid',
|
||||||
|
'x-initializer': 'form:configureFields',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
'x-linkage-rules': [
|
||||||
|
{
|
||||||
|
condition: {
|
||||||
|
$and: [
|
||||||
|
{
|
||||||
|
select: {
|
||||||
|
$eq: '111',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
targetFields: ['name'],
|
||||||
|
operator: 'none',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
condition: {
|
||||||
|
$and: [
|
||||||
|
{
|
||||||
|
select: {
|
||||||
|
$ne: '222',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
targetFields: ['name'],
|
||||||
|
operator: 'required',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
properties: {
|
||||||
|
qz37m7j8p50: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Row',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
gfj2a86vjfz: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Col',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
select: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'string',
|
||||||
|
'x-toolbar': 'FormItemSchemaToolbar',
|
||||||
|
'x-settings': 'fieldSettings:FormItem',
|
||||||
|
'x-component': 'CollectionField',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-collection-field': 'general.select',
|
||||||
|
'x-component-props': {
|
||||||
|
style: {
|
||||||
|
width: '100%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
'x-uid': '4oktgb0hzag',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'wf3382k9190',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'zuvyztf2kr1',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
'0oy12yg7t7s': {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Row',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
d4payxmuozs: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-component': 'Grid.Col',
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
properties: {
|
||||||
|
name: {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'string',
|
||||||
|
'x-toolbar': 'FormItemSchemaToolbar',
|
||||||
|
'x-settings': 'fieldSettings:FormItem',
|
||||||
|
'x-component': 'CollectionField',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
'x-collection-field': 'general.name',
|
||||||
|
'x-component-props': {},
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
'x-uid': '36csihfic5y',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'iploqplmdrj',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': '6efired3279',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
'0fcw5zex0ft': {
|
||||||
|
_isJSONSchemaObject: true,
|
||||||
|
version: '2.0',
|
||||||
|
type: 'void',
|
||||||
|
'x-initializer': 'createForm:configureActions',
|
||||||
|
'x-component': 'ActionBar',
|
||||||
|
'x-component-props': {
|
||||||
|
layout: 'one-column',
|
||||||
|
},
|
||||||
|
'x-app-version': '1.2.22-alpha',
|
||||||
|
'x-uid': 'qyuqi649spr',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 't4pse8uqnvk',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': '0xlj9rl4vyk',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'w87k52l39o8',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'dit5svq4m9w',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': '1zwnhhnthf2',
|
||||||
|
'x-async': false,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'x-uid': 'fydci6wpqyj',
|
||||||
|
'x-async': true,
|
||||||
|
'x-index': 1,
|
||||||
|
},
|
||||||
|
collections: [
|
||||||
|
{
|
||||||
|
name: 'general',
|
||||||
|
title: 'general',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
key: 'liht1h04a4d',
|
||||||
|
name: 'id',
|
||||||
|
type: 'bigInt',
|
||||||
|
interface: 'integer',
|
||||||
|
description: null,
|
||||||
|
collectionName: 'general',
|
||||||
|
parentKey: null,
|
||||||
|
reverseKey: null,
|
||||||
|
autoIncrement: true,
|
||||||
|
primaryKey: true,
|
||||||
|
allowNull: false,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'number',
|
||||||
|
title: '{{t("ID")}}',
|
||||||
|
'x-component': 'InputNumber',
|
||||||
|
'x-read-pretty': true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'q0ciuu05rdr',
|
||||||
|
name: 'name',
|
||||||
|
type: 'string',
|
||||||
|
interface: 'input',
|
||||||
|
description: null,
|
||||||
|
collectionName: 'general',
|
||||||
|
parentKey: null,
|
||||||
|
reverseKey: null,
|
||||||
|
uiSchema: {
|
||||||
|
type: 'string',
|
||||||
|
'x-component': 'Input',
|
||||||
|
title: 'name',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'rfjxi2cwyjl',
|
||||||
|
name: 'select',
|
||||||
|
type: 'string',
|
||||||
|
interface: 'select',
|
||||||
|
description: null,
|
||||||
|
collectionName: 'general',
|
||||||
|
parentKey: null,
|
||||||
|
reverseKey: null,
|
||||||
|
uiSchema: {
|
||||||
|
enum: [
|
||||||
|
{
|
||||||
|
value: '111',
|
||||||
|
label: '111',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '222',
|
||||||
|
label: '222',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '333',
|
||||||
|
label: '333',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
type: 'string',
|
||||||
|
'x-component': 'Select',
|
||||||
|
title: 'select',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
logging: true,
|
||||||
|
autoGenId: true,
|
||||||
|
filterTargetKey: 'id',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
@ -312,12 +312,16 @@ function getSubscriber(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
field[fieldName] = lastState?.value;
|
field[fieldName] = lastState?.value;
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
field.setState((state) => {
|
||||||
|
state[fieldName] = lastState?.value;
|
||||||
|
});
|
||||||
|
});
|
||||||
//字段隐藏时清空数据
|
//字段隐藏时清空数据
|
||||||
if (fieldName === 'display' && lastState?.value === 'none') {
|
if (fieldName === 'display' && lastState?.value === 'none') {
|
||||||
field.value = null;
|
field.value = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在这里清空 field.stateOfLinkageRules,就可以保证:当条件再次改变时,如果该字段没有和任何条件匹配,则需要把对应的值恢复到初始值;
|
// 在这里清空 field.stateOfLinkageRules,就可以保证:当条件再次改变时,如果该字段没有和任何条件匹配,则需要把对应的值恢复到初始值;
|
||||||
field.stateOfLinkageRules[fieldName] = null;
|
field.stateOfLinkageRules[fieldName] = null;
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user