From 69fac1120446ac554d4b94bb2f1923b0bdbf527f Mon Sep 17 00:00:00 2001 From: Katherine Date: Tue, 1 Apr 2025 11:38:15 +0800 Subject: [PATCH 1/2] fix: oneToMa ny e2e test (#6601) --- .../antd/association-field/AssociationSelect.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx b/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx index 7858174d37..ed9969a523 100644 --- a/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx @@ -33,7 +33,7 @@ import { RemoteSelect, RemoteSelectProps } from '../remote-select'; import useServiceOptions, { useAssociationFieldContext } from './hooks'; const removeIfKeyEmpty = (obj, filterTargetKey) => { - if (!obj || typeof obj !== 'object' || !filterTargetKey) return obj; + if (!obj || typeof obj !== 'object' || !filterTargetKey || Array.isArray(obj)) return obj; return !obj[filterTargetKey] ? null : obj; }; From 4c3255d455bfce66b398da4b413f17a13b2cae89 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 1 Apr 2025 13:25:08 +0800 Subject: [PATCH 2/2] feat(database): add trim option for string field (#6565) * feat(database): add trim option for string field * refactor(database): change to setDataValue instead of hooks * fix(database): fix test case of view collection --- .../src/collection-manager/interfaces/input.ts | 6 ++++++ packages/core/client/src/locale/zh-CN.json | 1 + .../src/__tests__/fields/string-field.test.ts | 14 ++++++++++++++ packages/core/database/src/fields/string-field.ts | 13 ++++++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/core/client/src/collection-manager/interfaces/input.ts b/packages/core/client/src/collection-manager/interfaces/input.ts index ac5897adb7..40d131e5be 100644 --- a/packages/core/client/src/collection-manager/interfaces/input.ts +++ b/packages/core/client/src/collection-manager/interfaces/input.ts @@ -62,6 +62,12 @@ export class InputFieldInterface extends CollectionFieldInterface { hasDefaultValue = true; properties = { ...defaultProps, + trim: { + type: 'boolean', + 'x-content': '{{t("Automatically remove heading and tailing spaces")}}', + 'x-decorator': 'FormItem', + 'x-component': 'Checkbox', + }, layout: { type: 'void', title: '{{t("Index")}}', diff --git a/packages/core/client/src/locale/zh-CN.json b/packages/core/client/src/locale/zh-CN.json index ee7937d066..6c245aecf1 100644 --- a/packages/core/client/src/locale/zh-CN.json +++ b/packages/core/client/src/locale/zh-CN.json @@ -258,6 +258,7 @@ "Parent collection fields": "父表字段", "Basic": "基本类型", "Single line text": "单行文本", + "Automatically remove heading and tailing spaces": "自动去除首尾空白字符", "Long text": "多行文本", "Phone": "手机号码", "Email": "电子邮箱", diff --git a/packages/core/database/src/__tests__/fields/string-field.test.ts b/packages/core/database/src/__tests__/fields/string-field.test.ts index ee4f3e631d..ff095bc862 100644 --- a/packages/core/database/src/__tests__/fields/string-field.test.ts +++ b/packages/core/database/src/__tests__/fields/string-field.test.ts @@ -105,4 +105,18 @@ describe('string field', () => { name2: 'n2111', }); }); + + it('trim', async () => { + const collection = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name', trim: true }], + }); + await db.sync(); + const model = await collection.model.create({ + name: ' n1\n ', + }); + expect(model.toJSON()).toMatchObject({ + name: 'n1', + }); + }); }); diff --git a/packages/core/database/src/fields/string-field.ts b/packages/core/database/src/fields/string-field.ts index 50431f0565..627768beeb 100644 --- a/packages/core/database/src/fields/string-field.ts +++ b/packages/core/database/src/fields/string-field.ts @@ -8,7 +8,7 @@ */ import { DataTypes } from 'sequelize'; -import { BaseColumnFieldOptions, Field } from './field'; +import { BaseColumnFieldOptions, Field, FieldContext } from './field'; export class StringField extends Field { get dataType() { @@ -18,9 +18,20 @@ export class StringField extends Field { return DataTypes.STRING; } + + additionalSequelizeOptions() { + const { name, trim } = this.options; + + return { + set(value) { + this.setDataValue(name, trim ? value?.trim() : value); + }, + }; + } } export interface StringFieldOptions extends BaseColumnFieldOptions { type: 'string'; length?: number; + trim?: boolean; }