Merge branch 'next' into develop

This commit is contained in:
nocobase[bot] 2025-02-26 06:50:19 +00:00
commit 06edd7fc78
3 changed files with 453 additions and 1 deletions

View File

@ -416,7 +416,9 @@ export async function replaceVariables(
}
const waitForParsing = value.match(REGEX_OF_VARIABLE_IN_EXPRESSION)?.map(async (item) => {
const { value: parsedValue } = await variables.parseVariable(item, localVariables);
const { value: parsedValue } = await variables.parseVariable(item, localVariables, {
doNotRequest: item.includes('$nForm'),
});
// 在开头加 `_` 是为了保证 id 不能以数字开头,否则在解析表达式的时候(不是解析变量)会报错
const id = `_${uid()}`;

View File

@ -10,6 +10,7 @@
import { expect, test } from '@nocobase/test/e2e';
import {
formFieldDependsOnSubtableFieldsWithLinkageRules,
whenClearingARelationshipFieldTheValueOfTheAssociatedFieldShouldBeCleared,
whenSetToHideRetainedValueItShouldNotImpactTheFieldSDefaultValueVariables,
} from './template';
@ -81,6 +82,25 @@ test.describe('linkage rules', () => {
page.getByRole('button', { name: 'block-item-CardItem-roles-' }).getByRole('row', { name: '123456789' }),
).toBeVisible();
});
test('When clearing a relationship field, the value of the associated field should be cleared', async ({
page,
mockPage,
}) => {
await mockPage(whenClearingARelationshipFieldTheValueOfTheAssociatedFieldShouldBeCleared).goto();
// 1. 点击 Edit 按钮打开编辑表单弹窗
await page.getByLabel('action-Action.Link-Edit-').click();
// 2. 清空 roles 字段的值nickname 字段的值应该被清空
await page.getByTestId('select-object-multiple').hover();
await page.getByLabel('icon-close-select').click();
await expect(
page
.getByRole('button', { name: 'block-item-CollectionField-users-form-users.nickname-Nickname' })
.getByRole('textbox'),
).toBeEmpty();
});
});
function calcResult(record) {

View File

@ -1534,3 +1534,433 @@ export const whenSetToHideRetainedValueItShouldNotImpactTheFieldSDefaultValueVar
'x-async': true,
},
};
export const whenClearingARelationshipFieldTheValueOfTheAssociatedFieldShouldBeCleared = {
pageSchema: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Page',
'x-app-version': '1.5.16',
properties: {
'3fiy31f6txn': {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid',
'x-initializer': 'page:addBlock',
'x-app-version': '1.5.16',
properties: {
'0rcyz4b3efw': {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Row',
'x-app-version': '1.5.16',
properties: {
u3mg5s9lzv6: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Col',
'x-app-version': '1.5.16',
properties: {
ezm6z8plx83: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-decorator': 'TableBlockProvider',
'x-acl-action': 'users:list',
'x-use-decorator-props': 'useTableBlockDecoratorProps',
'x-decorator-props': {
collection: 'users',
dataSource: 'main',
action: 'list',
params: {
pageSize: 20,
},
rowKey: 'id',
showIndex: true,
dragSort: false,
},
'x-toolbar': 'BlockSchemaToolbar',
'x-settings': 'blockSettings:table',
'x-component': 'CardItem',
'x-filter-targets': [],
'x-app-version': '1.5.16',
properties: {
actions: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-initializer': 'table:configureActions',
'x-component': 'ActionBar',
'x-component-props': {
style: {
marginBottom: 'var(--nb-spacing)',
},
},
'x-app-version': '1.5.16',
'x-uid': 'tt6xllenhim',
'x-async': false,
'x-index': 1,
},
jv0ofysjinb: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'array',
'x-initializer': 'table:configureColumns',
'x-component': 'TableV2',
'x-use-component-props': 'useTableBlockProps',
'x-component-props': {
rowKey: 'id',
rowSelection: {
type: 'checkbox',
},
},
'x-app-version': '1.5.16',
properties: {
actions: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
title: '{{ t("Actions") }}',
'x-action-column': 'actions',
'x-decorator': 'TableV2.Column.ActionBar',
'x-component': 'TableV2.Column',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-initializer': 'table:configureItemActions',
'x-settings': 'fieldSettings:TableColumn',
'x-toolbar-props': {
initializer: 'table:configureItemActions',
},
'x-app-version': '1.5.16',
properties: {
bngzha8iw7k: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-decorator': 'DndContext',
'x-component': 'Space',
'x-component-props': {
split: '|',
},
'x-app-version': '1.5.16',
properties: {
tkzbokuc018: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
title: '{{ t("Edit") }}',
'x-action': 'update',
'x-toolbar': 'ActionSchemaToolbar',
'x-settings': 'actionSettings:edit',
'x-component': 'Action.Link',
'x-component-props': {
openMode: 'drawer',
icon: 'EditOutlined',
},
'x-action-context': {
dataSource: 'main',
collection: 'users',
},
'x-decorator': 'ACLActionProvider',
'x-designer-props': {
linkageAction: true,
},
properties: {
drawer: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
title: '{{ t("Edit record") }}',
'x-component': 'Action.Container',
'x-component-props': {
className: 'nb-action-popup',
},
properties: {
tabs: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Tabs',
'x-component-props': {},
'x-initializer': 'popup:addTab',
properties: {
tab1: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
title: '{{t("Edit")}}',
'x-component': 'Tabs.TabPane',
'x-designer': 'Tabs.Designer',
'x-component-props': {},
properties: {
grid: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid',
'x-initializer': 'popup:common:addBlock',
properties: {
q2nw699fdes: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Row',
'x-app-version': '1.5.16',
properties: {
'8rf37n96jy1': {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Col',
'x-app-version': '1.5.16',
properties: {
'83f2yyxkgew': {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-acl-action-props': {
skipScopeCheck: false,
},
'x-acl-action': 'users:update',
'x-decorator': 'FormBlockProvider',
'x-use-decorator-props':
'useEditFormBlockDecoratorProps',
'x-decorator-props': {
action: 'get',
dataSource: 'main',
collection: 'users',
},
'x-toolbar': 'BlockSchemaToolbar',
'x-settings': 'blockSettings:editForm',
'x-component': 'CardItem',
'x-app-version': '1.5.16',
properties: {
ztcsjl3kutq: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'FormV2',
'x-use-component-props': 'useEditFormBlockProps',
'x-app-version': '1.5.16',
properties: {
grid: {
'x-uid': 'jk5os75m30w',
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid',
'x-initializer': 'form:configureFields',
'x-app-version': '1.5.16',
'x-linkage-rules': [
{
condition: {
$and: [],
},
actions: [
{
targetFields: ['nickname'],
operator: 'value',
value: {
mode: 'express',
value: '{{$nForm.roles.title}}',
result: '{{$nForm.roles.title}}',
},
},
],
},
],
properties: {
al791aryfpm: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Row',
'x-app-version': '1.5.16',
properties: {
s2o1ubyy97y: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Col',
'x-app-version': '1.5.16',
properties: {
roles: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'string',
'x-toolbar':
'FormItemSchemaToolbar',
'x-settings':
'fieldSettings:FormItem',
'x-component': 'CollectionField',
'x-decorator': 'FormItem',
'x-collection-field': 'users.roles',
'x-component-props': {
fieldNames: {
label: 'name',
value: 'name',
},
},
'x-app-version': '1.5.16',
'x-uid': 'y5r3pw94du5',
'x-async': false,
'x-index': 1,
},
},
'x-uid': '1mlc7m6h27k',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'l5bz655ppju',
'x-async': false,
'x-index': 1,
},
jsl0ebbnp4x: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Row',
'x-app-version': '1.5.16',
properties: {
e19ihogekwg: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-component': 'Grid.Col',
'x-app-version': '1.5.16',
properties: {
nickname: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'string',
'x-toolbar':
'FormItemSchemaToolbar',
'x-settings':
'fieldSettings:FormItem',
'x-component': 'CollectionField',
'x-decorator': 'FormItem',
'x-collection-field':
'users.nickname',
'x-component-props': {},
'x-app-version': '1.5.16',
'x-uid': 'nr2wsugko9w',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'vmsrhpme9qo',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'b7v16npd5y2',
'x-async': false,
'x-index': 2,
},
},
'x-async': false,
'x-index': 1,
},
p3zp9livz6w: {
_isJSONSchemaObject: true,
version: '2.0',
type: 'void',
'x-initializer': 'editForm:configureActions',
'x-component': 'ActionBar',
'x-component-props': {
layout: 'one-column',
},
'x-app-version': '1.5.16',
'x-uid': 'd3qzyf73gu6',
'x-async': false,
'x-index': 2,
},
},
'x-uid': 'j4j1fy7tkmh',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 't4mmnie8cll',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'bnugjy38s7u',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'tb4c9r9s844',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'dlbfog0xc8b',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'nvl54jerwsi',
'x-async': false,
'x-index': 1,
},
},
'x-uid': '8d1h9bm3lnb',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'f7xutqb1iyw',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'kquc4rim0g2',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'sb10ua8lfsl',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'wa210opt4kb',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'sumvmy4epmf',
'x-async': false,
'x-index': 2,
},
},
'x-uid': 'jyssn2zrfs6',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'n1iy8cfg2nj',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'q9we7w410nr',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'hajsh396zq6',
'x-async': false,
'x-index': 1,
},
},
'x-uid': 'utv8yv0hu55',
'x-async': true,
'x-index': 1,
},
};