feat(client): adjust toolbar for Table Actions (#4538)

* feat(client): adjust toolbar for Table Actions

* chore: ensure backward compatibility

* chore: update e2e tests

* chore: fix fialed unit tests

* Revert "chore: update e2e tests"

This reverts commit 0a701716877cd732db2ece8f2bdb6325a8e6179e.

* chore: update e2e tests

* chore: update e2e tests

* chore: don't forget to revert me

* chore: update e2e tests

* chore: update e2e tests

* Revert "chore: don't forget to revert me"

This reverts commit 29a51dff28f917fae99d4a88b908aad12c69f5c2.

* chore: update timeout and retries in defineConfig

* chore: make e2e tests more stable

* chore: make e2e tests more stable
This commit is contained in:
Zeke Zhang 2024-06-02 17:42:09 +08:00 committed by GitHub
parent 6bc3f7a540
commit 773f05dcd2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 220 additions and 178 deletions

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { test, expect } from '@nocobase/test/e2e';
import { expect, test } from '@nocobase/test/e2e';
import { disassociatePage } from './templatesOfPage';
test('basic', async ({ page, mockPage, mockRecord }) => {
@ -35,7 +35,7 @@ test('basic', async ({ page, mockPage, mockRecord }) => {
.hover();
await page
.getByTestId('drawer-Action.Container-collection1-Edit record')
.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-collection2')
.getByLabel('designer-schema-initializer-TableV2.Column-fieldSettings:TableColumn-collection2')
.hover();
await page.getByRole('menuitem', { name: 'Disassociate' }).click();

View File

@ -88,7 +88,7 @@ test.describe('configure actions column', () => {
await expectActionsColumnWidth(200);
await page.getByText('Actions', { exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-users').hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-fieldSettings:TableColumn-users').hover();
await page.getByRole('menuitem', { name: 'Column width' }).click();
await expect(page.getByRole('dialog').getByText('Column width')).toBeVisible();
@ -96,7 +96,7 @@ test.describe('configure actions column', () => {
// 修改列宽度为 400
await page.getByRole('dialog').getByRole('spinbutton').click();
await page.getByRole('dialog').getByRole('spinbutton').fill('400');
await page.getByTestId('modal-Action.Modal-users-Column width').getByRole('button', { name: 'Submit' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click();
await expectActionsColumnWidth(400);
});

View File

@ -7,9 +7,9 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { expectSettingsMenu, test, expect } from '@nocobase/test/e2e';
import { createTable } from './utils';
import { expect, expectSettingsMenu, test } from '@nocobase/test/e2e';
import { tableSelectorDataScopeVariable } from './templatesOfBug';
import { createTable } from './utils';
test.describe('table data selector schema settings', () => {
test('supported options', async ({ page, mockPage }) => {
@ -126,7 +126,10 @@ test.describe('table data selector schema settings', () => {
await page.getByRole('button', { name: 'OK', exact: true }).click();
// Table 中显示 singleLineText 字段
await page.getByLabel('schema-initializer-TableV2.').hover();
await page
.getByTestId('drawer-AssociationField.Selector-table-selector-data-scope-variable-Select record')
.getByLabel('schema-initializer-TableV2.')
.hover();
await page.getByRole('menuitem', { name: 'singleLineText' }).click();
await page.mouse.move(300, 0);

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { MenuOutlined } from '@ant-design/icons';
import { PlusOutlined } from '@ant-design/icons';
import { ISchema, useField, useFieldSchema } from '@formily/react';
import _ from 'lodash';
import React from 'react';
@ -145,147 +145,121 @@ const commonOptions = {
Component: (props: any) => {
const { getAriaLabel } = useGetAriaLabelOfDesigner();
return (
<MenuOutlined
<PlusOutlined
{...props}
role="button"
aria-label={getAriaLabel('schema-settings')}
aria-label={getAriaLabel('schema-initializer')}
style={{ cursor: 'pointer' }}
/>
);
},
items: [
{
type: 'itemGroup',
name: 'actions',
title: '{{t("Configure actions")}}',
children: [
{
type: 'item',
title: '{{t("View")}}',
name: 'view',
Component: 'ViewActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'view',
'x-decorator': 'ACLActionProvider',
},
},
{
type: 'item',
name: 'edit',
title: '{{t("Edit")}}',
Component: 'UpdateActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'update',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
type: 'item',
title: '{{t("Delete")}}',
name: 'delete',
Component: 'DestroyActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'destroy',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
type: 'item',
title: '{{t("Disassociate")}}',
name: 'disassociate',
Component: 'DisassociateActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'disassociate',
'x-acl-action': 'destroy',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const props = useDataBlockProps();
const collection = useCollection_deprecated();
return (
!!props?.association &&
(collection.template !== 'view' || collection?.writableView) &&
collection.template !== 'sql'
);
},
},
{
type: 'item',
title: '{{t("Add child")}}',
name: 'addChildren',
Component: 'CreateChildInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'create',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const fieldSchema = useFieldSchema();
const collection = useCollection_deprecated();
const { treeTable } = fieldSchema?.parent?.parent['x-decorator-props'] || {};
return collection.tree && treeTable;
},
},
{
type: 'item',
title: '{{t("Popup")}}',
name: 'popup',
Component: 'PopupActionInitializer',
},
{
type: 'item',
title: '{{t("Update record")}}',
name: 'updateRecord',
Component: 'UpdateRecordActionInitializer',
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
name: 'customRequest',
title: '{{t("Custom request")}}',
Component: 'CustomRequestInitializer',
schema: {
'x-action': 'customize:table:request',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
],
},
{
name: 'divider',
type: 'divider',
sort: 100,
},
{
name: 'fixed',
title: 't("Fixed")',
type: 'item',
Component: SchemaSettingsFixed,
sort: 100,
title: '{{t("View")}}',
name: 'view',
Component: 'ViewActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'view',
'x-decorator': 'ACLActionProvider',
},
},
{
type: 'item',
name: 'columnWidth',
title: 't("Column width")',
Component: Resizable,
sort: 100,
name: 'edit',
title: '{{t("Edit")}}',
Component: 'UpdateActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'update',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
type: 'item',
title: '{{t("Delete")}}',
name: 'delete',
Component: 'DestroyActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'destroy',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
type: 'item',
title: '{{t("Disassociate")}}',
name: 'disassociate',
Component: 'DisassociateActionInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'disassociate',
'x-acl-action': 'destroy',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const props = useDataBlockProps();
const collection = useCollection_deprecated();
return (
!!props?.association &&
(collection.template !== 'view' || collection?.writableView) &&
collection.template !== 'sql'
);
},
},
{
type: 'item',
title: '{{t("Add child")}}',
name: 'addChildren',
Component: 'CreateChildInitializer',
schema: {
'x-component': 'Action.Link',
'x-action': 'create',
'x-decorator': 'ACLActionProvider',
},
useVisible() {
const fieldSchema = useFieldSchema();
const collection = useCollection_deprecated();
const { treeTable } = fieldSchema?.parent?.parent['x-decorator-props'] || {};
return collection.tree && treeTable;
},
},
{
type: 'item',
title: '{{t("Popup")}}',
name: 'popup',
Component: 'PopupActionInitializer',
},
{
type: 'item',
title: '{{t("Update record")}}',
name: 'updateRecord',
Component: 'UpdateRecordActionInitializer',
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
{
name: 'customRequest',
title: '{{t("Custom request")}}',
Component: 'CustomRequestInitializer',
schema: {
'x-action': 'customize:table:request',
},
useVisible() {
const collection = useCollection_deprecated();
return (collection.template !== 'view' || collection?.writableView) && collection.template !== 'sql';
},
},
],
};

View File

@ -7,9 +7,17 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import _ from 'lodash';
import React from 'react';
import { SchemaToolbar } from '../../../../schema-settings';
export const TableColumnSchemaToolbar = (props) => {
return <SchemaToolbar initializer={false} showBorder={false} showBackground {...props} />;
return (
<SchemaToolbar
initializer={props.initializer || false}
showBorder={false}
showBackground
{..._.omit(props, 'initializer')}
/>
);
};

View File

@ -136,7 +136,7 @@ test.describe('configure actions column', () => {
// add view & Edit & Delete & Duplicate ------------------------------------------------------------
await page.getByText('Actions', { exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-t_unp4scqamw9').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'View' }).click();
await page.getByRole('menuitem', { name: 'Edit' }).click();
await page.getByRole('menuitem', { name: 'Delete' }).click();
@ -162,7 +162,7 @@ test.describe('configure actions column', () => {
// add custom action ------------------------------------------------------------
await page.getByText('Actions', { exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-t_unp4scqamw9').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Popup' }).click();
// 此时二级菜单,不应该关闭,可以继续点击?
@ -182,14 +182,14 @@ test.describe('configure actions column', () => {
await expect(page.getByRole('columnheader', { name: 'Actions', exact: true })).toHaveJSProperty('offsetWidth', 200);
await page.getByText('Actions', { exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-t_unp4scqamw9').hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Column width' }).click();
await expect(page.getByRole('dialog').getByText('Column width')).toBeVisible();
await page.getByRole('dialog').getByRole('spinbutton').click();
await page.getByRole('dialog').getByRole('spinbutton').fill('400');
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByRole('columnheader', { name: 'Actions', exact: true })).toHaveJSProperty('offsetWidth', 400);
});

View File

@ -35,7 +35,7 @@ const addSomeCustomActions = async (page: Page) => {
// 再增加两个自定义的 actions
await page.getByRole('button', { name: 'Actions', exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-general').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-general').hover();
await page.getByRole('menuitem', { name: 'Popup' }).click();
await page.getByRole('menuitem', { name: 'Update record' }).click();
};
@ -393,7 +393,9 @@ test.describe('actions schema settings', () => {
const openPopup = async () => {
if (!(await page.getByLabel('action-Action.Link-Update record-customize:update-users2-table-0').isVisible())) {
await page.getByRole('button', { name: 'Actions', exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-users2').hover();
await page
.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-users2')
.hover();
await page.getByRole('menuitem', { name: 'Update record' }).click();
}
@ -476,7 +478,7 @@ test.describe('actions schema settings', () => {
// 添加 add child 按钮
await page.getByRole('button', { name: 'Actions', exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-tree').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-tree').hover();
await page.getByRole('menuitem', { name: 'Add child' }).click();
await expectSettingsMenu({

View File

@ -52,8 +52,12 @@ describe('createTableBLockSchemaV2', () => {
"x-action-column": "actions",
"x-component": "TableV2.Column",
"x-decorator": "TableV2.Column.ActionBar",
"x-designer": "TableV2.ActionColumnDesigner",
"x-initializer": "table:configureItemActions",
"x-settings": "fieldSettings:TableColumn",
"x-toolbar": "TableColumnSchemaToolbar",
"x-toolbar-props": {
"initializer": "table:configureItemActions",
},
},
},
"type": "array",

View File

@ -73,8 +73,12 @@ export const createTableBlockUISchema = (options: {
'x-action-column': 'actions',
'x-decorator': 'TableV2.Column.ActionBar',
'x-component': 'TableV2.Column',
'x-designer': 'TableV2.ActionColumnDesigner',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-initializer': 'table:configureItemActions',
'x-settings': 'fieldSettings:TableColumn',
'x-toolbar-props': {
initializer: 'table:configureItemActions',
},
properties: {
[uid()]: {
type: 'void',

View File

@ -13,13 +13,13 @@ import { useTranslation } from 'react-i18next';
import { useApp } from '../../../../application';
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
import { useCollectionManager_deprecated } from '../../../../collection-manager';
import { useCollection } from '../../../../data-source';
import { useDesignable } from '../../../../schema-component';
import { useAssociationFieldContext } from '../../../../schema-component/antd/association-field/hooks';
import { useColumnSchema } from '../../../../schema-component/antd/table-v2/Table.Column.Decorator';
import { SchemaSettingsDefaultValue } from '../../../../schema-settings/SchemaSettingsDefaultValue';
import { useFieldComponentName } from './utils';
import { isPatternDisabled } from '../../../../schema-settings/isPatternDisabled';
import { useCollection } from '../../../../data-source';
import { useFieldComponentName } from './utils';
export const tableColumnSettings = new SchemaSettings({
name: 'fieldSettings:TableColumn',
@ -164,7 +164,12 @@ export const tableColumnSettings = new SchemaSettings({
name: 'setDefaultValue',
useVisible() {
const { fieldSchema } = useColumnSchema();
return !fieldSchema['x-read-pretty'];
if (!fieldSchema) {
return false;
}
return !fieldSchema?.['x-read-pretty'];
},
Component: SchemaSettingsDefaultValue as any,
useComponentProps() {
@ -180,6 +185,11 @@ export const tableColumnSettings = new SchemaSettings({
useVisible() {
const { uiSchema, fieldSchema } = useColumnSchema();
const field: any = useField();
if (!fieldSchema) {
return false;
}
const isSubTableColumn = ['QuickEdit', 'FormItem'].includes(fieldSchema['x-decorator']);
return isSubTableColumn && !field.readPretty && !uiSchema?.['x-read-pretty'];
},
@ -192,8 +202,12 @@ export const tableColumnSettings = new SchemaSettings({
return {
key: 'required',
title: t('Required'),
checked: fieldSchema.required as boolean,
checked: fieldSchema?.required as boolean,
onChange: (required) => {
if (!fieldSchema) {
return console.error('fieldSchema is required');
}
const schema = {
['x-uid']: fieldSchema['x-uid'],
};
@ -217,6 +231,11 @@ export const tableColumnSettings = new SchemaSettings({
useVisible() {
const { fieldSchema, collectionField } = useColumnSchema();
const field: any = useField();
if (!fieldSchema) {
return false;
}
const isSubTableColumn = ['QuickEdit', 'FormItem'].includes(fieldSchema['x-decorator']);
return (
isSubTableColumn &&
@ -231,6 +250,11 @@ export const tableColumnSettings = new SchemaSettings({
const { t } = useTranslation();
const { dn } = useDesignable();
let readOnlyMode = 'editable';
if (!fieldSchema) {
return console.error('fieldSchema is required') as any;
}
if (fieldSchema['x-disabled'] === true) {
readOnlyMode = 'readonly';
}

View File

@ -11,13 +11,17 @@ import { DragOutlined } from '@ant-design/icons';
import { useFieldSchema } from '@formily/react';
import { Space } from 'antd';
import React from 'react';
import { useSchemaInitializerRender } from '../../../application';
import { useSchemaInitializerRender, useSchemaSettingsRender } from '../../../application';
import { DragHandler } from '../../../schema-component';
import { useGetAriaLabelOfDesigner } from '../../../schema-settings/hooks/useGetAriaLabelOfDesigner';
export const TableActionColumnDesigner = (props: any) => {
const fieldSchema = useFieldSchema();
const { render } = useSchemaInitializerRender(fieldSchema['x-initializer'], fieldSchema['x-initializer-props']);
const { render: renderInitializers } = useSchemaInitializerRender(
fieldSchema['x-initializer'],
fieldSchema['x-initializer-props'],
);
const { render: renderSettings } = useSchemaSettingsRender('fieldSettings:TableColumn');
const { getAriaLabel } = useGetAriaLabelOfDesigner();
return (
<div className={'general-schema-designer'}>
@ -26,7 +30,8 @@ export const TableActionColumnDesigner = (props: any) => {
<DragHandler>
<DragOutlined role="button" aria-label={getAriaLabel('drag-handler')} />
</DragHandler>
{render()}
{renderInitializers()}
{renderSettings()}
</Space>
</div>
</div>

View File

@ -7,8 +7,8 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import React from 'react';
import { uid } from '@formily/shared';
import React from 'react';
import { useSchemaInitializerItem } from '../../application';
import { InitializerWithSwitch } from './InitializerWithSwitch';
@ -18,8 +18,12 @@ export const TableActionColumnInitializer = () => {
title: '{{ t("Actions") }}',
'x-decorator': 'TableV2.Column.ActionBar',
'x-component': 'TableV2.Column',
'x-designer': 'TableV2.ActionColumnDesigner',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-initializer': 'table:configureItemActions',
'x-settings': 'fieldSettings:TableColumn',
'x-toolbar-props': {
initializer: 'table:configureItemActions',
},
'x-action-column': 'actions',
properties: {
[uid()]: {

View File

@ -255,6 +255,9 @@ const InternalSchemaToolbar: FC<SchemaToolbarProps> = (props) => {
const initializerElement = useMemo(() => {
if (initializer === false) return null;
if (schemaInitializerExists) {
return schemaInitializerRender(initializerProps);
}
if (gridContext?.InitializerComponent || gridContext?.renderSchemaInitializer) {
return gridContext?.InitializerComponent ? (
<gridContext.InitializerComponent {...initializerProps} />
@ -262,8 +265,6 @@ const InternalSchemaToolbar: FC<SchemaToolbarProps> = (props) => {
gridContext.renderSchemaInitializer?.(initializerProps)
);
}
if (!schemaInitializerExists) return null;
return schemaInitializerRender(initializerProps);
}, [gridContext, initializer, initializerProps, schemaInitializerExists, schemaInitializerRender]);
const settingsElement = useMemo(() => {

View File

@ -17,7 +17,7 @@ test.describe('custom request action', () => {
// 新建一个 custom request action
await page.getByRole('button', { name: 'Actions', exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Custom request' }).click();
// 打开编辑按钮弹窗

View File

@ -7,13 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import {
expect,
oneEmptyDetailsBlock,
oneEmptyTableBlockWithActions,
oneEmptyTableBlockWithCustomizeActions,
test,
} from '@nocobase/test/e2e';
import { expect, oneEmptyTableBlockWithCustomizeActions, test } from '@nocobase/test/e2e';
test.describe('TableActionColumnInitializers & DetailsActionInitializers & ReadPrettyFormActionInitializers should add duplication action', () => {
test('duplication action in TableActionColumnInitializers', async ({ page, mockPage, mockRecords }) => {
@ -21,7 +15,7 @@ test.describe('TableActionColumnInitializers & DetailsActionInitializers & ReadP
await mockRecords('general', 3);
await nocoPage.goto();
await page.getByRole('button', { name: 'Actions', exact: true }).hover();
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-general').hover();
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-general').hover();
await page.getByRole('menuitem', { name: 'Duplicate' }).click();
await expect(page.getByLabel('action-Action.Link-Duplicate-duplicate-general-table-0')).toBeVisible();
});

View File

@ -179,8 +179,12 @@ export const AuditLogs: any = () => {
'x-action-column': 'actions',
'x-decorator': 'TableV2.Column.ActionBar',
'x-component': 'TableV2.Column',
'x-designer': 'TableV2.ActionColumnDesigner',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-initializer': 'table:configureItemActions',
'x-settings': 'fieldSettings:TableColumn',
'x-toolbar-props': {
initializer: 'table:configureItemActions',
},
properties: {
actions: {
type: 'void',

View File

@ -88,8 +88,12 @@ describe('createGanttBlockSchema', () => {
"x-action-column": "actions",
"x-component": "TableV2.Column",
"x-decorator": "TableV2.Column.ActionBar",
"x-designer": "TableV2.ActionColumnDesigner",
"x-initializer": "table:configureItemActions",
"x-settings": "fieldSettings:TableColumn",
"x-toolbar": "TableColumnSchemaToolbar",
"x-toolbar-props": {
"initializer": "table:configureItemActions",
},
},
},
"type": "array",

View File

@ -79,8 +79,12 @@ export const createGanttBlockUISchema = (options: {
'x-action-column': 'actions',
'x-decorator': 'TableV2.Column.ActionBar',
'x-component': 'TableV2.Column',
'x-designer': 'TableV2.ActionColumnDesigner',
'x-toolbar': 'TableColumnSchemaToolbar',
'x-initializer': 'table:configureItemActions',
'x-settings': 'fieldSettings:TableColumn',
'x-toolbar-props': {
initializer: 'table:configureItemActions',
},
properties: {
actions: {
type: 'void',

View File

@ -81,8 +81,11 @@ test('Collection event Add Data Trigger, determines that the trigger node single
await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click();
await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click();
const conditionalRightConstant = faker.lorem.words();
await page.waitForTimeout(500);
await page.keyboard.type(`=='${conditionalRightConstant}'`, { delay: 50 });
await page
.getByLabel('block-item-WorkflowVariableTextArea-workflows-Condition expression')
.getByLabel('textbox')
.press('ControlOrMeta+ArrowRight');
await page.keyboard.type(`=='${conditionalRightConstant}'`, { delay: 100 });
await expect(conditionNode.conditionExpressionEditBox).toHaveText(
`Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}=='${conditionalRightConstant}'`,
);
@ -315,8 +318,11 @@ test('Collection event Add Data Trigger, determines that the trigger node single
await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click();
await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click();
const conditionalRightConstant = faker.lorem.words();
await page.waitForTimeout(500);
await page.keyboard.type(`!='${conditionalRightConstant}'`, { delay: 50 });
await page
.getByLabel('block-item-WorkflowVariableTextArea-workflows-Condition expression')
.getByLabel('textbox')
.press('ControlOrMeta+ArrowRight');
await page.keyboard.type(`!='${conditionalRightConstant}'`, { delay: 100 });
await expect(conditionNode.conditionExpressionEditBox).toHaveText(
`Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}!='${conditionalRightConstant}'`,
);

View File

@ -9,9 +9,7 @@
import { faker } from '@faker-js/faker';
import {
CalculationNode,
CollectionTriggerNode,
ConditionBranchNode,
ConditionYesNode,
QueryRecordNode,
apiCreateWorkflow,
@ -164,8 +162,11 @@ test('Collection event Add Data Trigger, Formula engine, determines that the tri
await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click();
await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click();
const conditionalRightConstant = faker.string.alphanumeric(10);
await page.waitForTimeout(500);
await page.keyboard.type(`=='${conditionalRightConstant}'`, { delay: 50 });
await page
.getByLabel('block-item-WorkflowVariableTextArea-workflows-Condition expression')
.getByLabel('textbox')
.press('ControlOrMeta+ArrowRight');
await page.keyboard.type(`=='${conditionalRightConstant}'`, { delay: 100 });
await expect(conditionNode.conditionExpressionEditBox).toHaveText(
`Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}=='${conditionalRightConstant}'`,
);