Remove deprecated EMAIL, PHONE, LINK (#7551)

In this PR:
- remove deprecated EMAIL, PHONE, LINK field types (except for Zapier
package as there is another work ongoing)
- remove composite currency filter on currencyCode, actor filter on name
and workspaceMember as the UX is not great yet
This commit is contained in:
Charles Bochet
2024-10-10 14:14:58 +02:00
committed by GitHub
parent a7d5aa933d
commit a58236e6da
87 changed files with 75 additions and 2746 deletions

View File

@ -104,20 +104,6 @@ const fieldUuidMock = {
defaultValue: null,
};
const fieldPhoneMock = {
name: 'fieldPhone',
type: FieldMetadataType.PHONE,
isNullable: true,
defaultValue: null,
};
const fieldEmailMock = {
name: 'fieldEmail',
type: FieldMetadataType.EMAIL,
isNullable: true,
defaultValue: null,
};
const fieldDateTimeMock = {
name: 'fieldDateTime',
type: FieldMetadataType.DATE_TIME,
@ -253,9 +239,7 @@ const fieldPhonesMock = {
export const fields = [
fieldUuidMock,
fieldTextMock,
fieldPhoneMock,
fieldPhonesMock,
fieldEmailMock,
fieldEmailsMock,
fieldDateTimeMock,
fieldDateMock,

View File

@ -61,8 +61,6 @@ export class TypeMapperService {
const typeScalarMapping = new Map<FieldMetadataType, GraphQLScalarType>([
[FieldMetadataType.UUID, UUIDScalarType],
[FieldMetadataType.TEXT, GraphQLString],
[FieldMetadataType.PHONE, GraphQLString],
[FieldMetadataType.EMAIL, GraphQLString],
[FieldMetadataType.DATE_TIME, GraphQLISODateTime],
[FieldMetadataType.DATE, GraphQLISODateTime],
[FieldMetadataType.BOOLEAN, GraphQLBoolean],
@ -101,8 +99,6 @@ export class TypeMapperService {
>([
[FieldMetadataType.UUID, IDFilterType],
[FieldMetadataType.TEXT, StringFilterType],
[FieldMetadataType.PHONE, StringFilterType],
[FieldMetadataType.EMAIL, StringFilterType],
[FieldMetadataType.DATE_TIME, DateFilterType],
[FieldMetadataType.DATE, DateFilterType],
[FieldMetadataType.BOOLEAN, BooleanFilterType],
@ -129,8 +125,6 @@ export class TypeMapperService {
const typeOrderByMapping = new Map<FieldMetadataType, GraphQLEnumType>([
[FieldMetadataType.UUID, OrderByDirectionType],
[FieldMetadataType.TEXT, OrderByDirectionType],
[FieldMetadataType.PHONE, OrderByDirectionType],
[FieldMetadataType.EMAIL, OrderByDirectionType],
[FieldMetadataType.DATE_TIME, OrderByDirectionType],
[FieldMetadataType.DATE, OrderByDirectionType],
[FieldMetadataType.BOOLEAN, OrderByDirectionType],

View File

@ -18,8 +18,6 @@ export const mapFieldMetadataToGraphqlQuery = (
const fieldIsSimpleValue = [
FieldMetadataType.UUID,
FieldMetadataType.TEXT,
FieldMetadataType.PHONE,
FieldMetadataType.EMAIL,
FieldMetadataType.DATE_TIME,
FieldMetadataType.DATE,
FieldMetadataType.BOOLEAN,
@ -89,14 +87,6 @@ export const mapFieldMetadataToGraphqlQuery = (
}
}
}`;
} else if (fieldType === FieldMetadataType.LINK) {
return `
${field.name}
{
label
url
}
`;
} else if (fieldType === FieldMetadataType.LINKS) {
return `
${field.name}

View File

@ -1,20 +1,8 @@
import {
fields,
objectMetadataItemMock,
} from 'src/engine/api/__mocks__/object-metadata-item.mock';
import { objectMetadataItemMock } from 'src/engine/api/__mocks__/object-metadata-item.mock';
import { computeSchemaComponents } from 'src/engine/core-modules/open-api/utils/components.utils';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
describe('computeSchemaComponents', () => {
it('should test all non-deprecated field types', () => {
expect(fields.map((field) => field.type)).toEqual(
Object.keys(FieldMetadataType).filter(
(key) =>
key !== FieldMetadataType.LINK && key !== FieldMetadataType.TS_VECTOR,
),
);
});
it('should compute schema components', () => {
expect(
computeSchemaComponents([
@ -32,9 +20,6 @@ describe('computeSchemaComponents', () => {
fieldText: {
type: 'string',
},
fieldPhone: {
type: 'string',
},
fieldPhones: {
properties: {
additionalPhones: {
@ -49,10 +34,6 @@ describe('computeSchemaComponents', () => {
},
type: 'object',
},
fieldEmail: {
type: 'string',
format: 'email',
},
fieldEmails: {
type: 'object',
properties: {
@ -216,9 +197,6 @@ describe('computeSchemaComponents', () => {
fieldText: {
type: 'string',
},
fieldPhone: {
type: 'string',
},
fieldPhones: {
properties: {
additionalPhones: {
@ -233,10 +211,6 @@ describe('computeSchemaComponents', () => {
},
type: 'object',
},
fieldEmail: {
type: 'string',
format: 'email',
},
fieldEmails: {
type: 'object',
properties: {
@ -399,9 +373,6 @@ describe('computeSchemaComponents', () => {
fieldText: {
type: 'string',
},
fieldPhone: {
type: 'string',
},
fieldPhones: {
properties: {
additionalPhones: {
@ -416,10 +387,6 @@ describe('computeSchemaComponents', () => {
},
type: 'object',
},
fieldEmail: {
type: 'string',
format: 'email',
},
fieldEmails: {
type: 'object',
properties: {

View File

@ -56,11 +56,8 @@ const getFieldProperties = (
case FieldMetadataType.UUID:
return { type: 'string', format: 'uuid' };
case FieldMetadataType.TEXT:
case FieldMetadataType.PHONE:
case FieldMetadataType.RICH_TEXT:
return { type: 'string' };
case FieldMetadataType.EMAIL:
return { type: 'string', format: 'email' };
case FieldMetadataType.DATE_TIME:
return { type: 'string', format: 'date-time' };
case FieldMetadataType.DATE:
@ -139,7 +136,6 @@ const getSchemaComponentsProperties = ({
enum: field.options.map((option: { value: string }) => option.value),
};
break;
case FieldMetadataType.LINK:
case FieldMetadataType.LINKS:
case FieldMetadataType.CURRENCY:
case FieldMetadataType.FULL_NAME:

View File

@ -5,7 +5,6 @@ import { addressCompositeType } from 'src/engine/metadata-modules/field-metadata
import { currencyCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/currency.composite-type';
import { emailsCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/emails.composite-type';
import { fullNameCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/full-name.composite-type';
import { linkCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/link.composite-type';
import { linksCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/links.composite-type';
import { phonesCompositeType } from 'src/engine/metadata-modules/field-metadata/composite-types/phones.composite-type';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
@ -14,7 +13,6 @@ export const compositeTypeDefinitions = new Map<
FieldMetadataType,
CompositeType
>([
[FieldMetadataType.LINK, linkCompositeType],
[FieldMetadataType.LINKS, linksCompositeType],
[FieldMetadataType.CURRENCY, currencyCompositeType],
[FieldMetadataType.FULL_NAME, fullNameCompositeType],

View File

@ -1,26 +0,0 @@
import { CompositeType } from 'src/engine/metadata-modules/field-metadata/interfaces/composite-type.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export const linkCompositeType: CompositeType = {
type: FieldMetadataType.LINK,
properties: [
{
name: 'label',
type: FieldMetadataType.TEXT,
hidden: false,
isRequired: false,
},
{
name: 'url',
type: FieldMetadataType.TEXT,
hidden: false,
isRequired: false,
},
],
};
export type LinkMetadata = {
label: string;
url: string;
};

View File

@ -71,16 +71,6 @@ export class FieldMetadataDefaultValueDate {
value: Date | null;
}
export class FieldMetadataDefaultValueLink {
@ValidateIf((object, value) => value !== null)
@IsQuotedString()
label: string | null;
@ValidateIf((object, value) => value !== null)
@IsQuotedString()
url: string | null;
}
export class FieldMetadataDefaultValueCurrency {
@ValidateIf((object, value) => value !== null)
@IsNumberString()

View File

@ -24,16 +24,13 @@ import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-met
export enum FieldMetadataType {
UUID = 'UUID',
TEXT = 'TEXT',
PHONE = 'PHONE',
PHONES = 'PHONES',
EMAIL = 'EMAIL',
EMAILS = 'EMAILS',
DATE_TIME = 'DATE_TIME',
DATE = 'DATE',
BOOLEAN = 'BOOLEAN',
NUMBER = 'NUMBER',
NUMERIC = 'NUMERIC',
LINK = 'LINK',
LINKS = 'LINKS',
CURRENCY = 'CURRENCY',
FULL_NAME = 'FULL_NAME',

View File

@ -145,20 +145,6 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
fieldMetadataInput.options = generateRatingOptions();
}
if (fieldMetadataInput.type === FieldMetadataType.LINK) {
throw new FieldMetadataException(
'"Link" field types are being deprecated, please use Links type instead',
FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
);
}
if (fieldMetadataInput.type === FieldMetadataType.EMAIL) {
throw new FieldMetadataException(
'"Email" field types are being deprecated, please use Emails type instead',
FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
);
}
const fieldMetadataForCreate = {
id: v4(),
createdAt: new Date(),

View File

@ -6,7 +6,6 @@ import {
FieldMetadataDefaultValueDateTime,
FieldMetadataDefaultValueEmails,
FieldMetadataDefaultValueFullName,
FieldMetadataDefaultValueLink,
FieldMetadataDefaultValueLinks,
FieldMetadataDefaultValueNowFunction,
FieldMetadataDefaultValueNumber,
@ -27,9 +26,7 @@ type FieldMetadataDefaultValueMapping = {
| FieldMetadataDefaultValueString
| FieldMetadataDefaultValueUuidFunction;
[FieldMetadataType.TEXT]: FieldMetadataDefaultValueString;
[FieldMetadataType.PHONE]: FieldMetadataDefaultValueString;
[FieldMetadataType.PHONES]: FieldMetadataDefaultValuePhones;
[FieldMetadataType.EMAIL]: FieldMetadataDefaultValueString;
[FieldMetadataType.EMAILS]: FieldMetadataDefaultValueEmails;
[FieldMetadataType.DATE_TIME]:
| FieldMetadataDefaultValueDateTime
@ -41,7 +38,6 @@ type FieldMetadataDefaultValueMapping = {
[FieldMetadataType.NUMBER]: FieldMetadataDefaultValueNumber;
[FieldMetadataType.POSITION]: FieldMetadataDefaultValueNumber;
[FieldMetadataType.NUMERIC]: FieldMetadataDefaultValueString;
[FieldMetadataType.LINK]: FieldMetadataDefaultValueLink;
[FieldMetadataType.LINKS]: FieldMetadataDefaultValueLinks;
[FieldMetadataType.CURRENCY]: FieldMetadataDefaultValueCurrency;
[FieldMetadataType.FULL_NAME]: FieldMetadataDefaultValueFullName;

View File

@ -4,16 +4,10 @@ import { generateNullable } from 'src/engine/metadata-modules/field-metadata/uti
describe('generateNullable', () => {
it('should generate a nullable value false for TEXT, EMAIL, PHONE no matter what the input is', () => {
expect(generateNullable(FieldMetadataType.TEXT, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.TEXT, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.TEXT)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL)).toEqual(false);
});
it('should should return true if no input is given', () => {

View File

@ -40,32 +40,6 @@ describe('validateDefaultValueForType', () => {
).toBe(false);
});
it('should validate string default value for PHONE type', () => {
expect(
validateDefaultValueForType(FieldMetadataType.PHONE, "'+123456789'")
.isValid,
).toBe(true);
});
it('should return false for invalid string default value for PHONE type', () => {
expect(
validateDefaultValueForType(FieldMetadataType.PHONE, 123).isValid,
).toBe(false);
});
it('should validate string default value for EMAIL type', () => {
expect(
validateDefaultValueForType(FieldMetadataType.EMAIL, "'test@example.com'")
.isValid,
).toBe(true);
});
it('should return false for invalid string default value for EMAIL type', () => {
expect(
validateDefaultValueForType(FieldMetadataType.EMAIL, 123).isValid,
).toBe(false);
});
it('should validate number default value for NUMBER type', () => {
expect(
validateDefaultValueForType(FieldMetadataType.NUMBER, 100).isValid,
@ -90,27 +64,6 @@ describe('validateDefaultValueForType', () => {
).toBe(false);
});
// LINK type
it('should validate LINK default value', () => {
expect(
validateDefaultValueForType(FieldMetadataType.LINK, {
label: "'http://example.com'",
url: "'Example'",
}).isValid,
).toBe(true);
});
it('should return false for invalid LINK default value', () => {
expect(
validateDefaultValueForType(
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error Just for testing purposes
{ label: 123, url: {} },
FieldMetadataType.LINK,
).isValid,
).toBe(false);
});
// CURRENCY type
it('should validate CURRENCY default value', () => {
expect(

View File

@ -7,8 +7,6 @@ export function generateDefaultValue(
): FieldMetadataDefaultValue {
switch (type) {
case FieldMetadataType.TEXT:
case FieldMetadataType.PHONE:
case FieldMetadataType.EMAIL:
return "''";
case FieldMetadataType.EMAILS:
return {
@ -31,11 +29,6 @@ export function generateDefaultValue(
addressLat: null,
addressLng: null,
};
case FieldMetadataType.LINK:
return {
url: "''",
label: "''",
};
case FieldMetadataType.CURRENCY:
return {
amountMicros: null,

View File

@ -11,8 +11,6 @@ export function generateNullable(
switch (type) {
case FieldMetadataType.TEXT:
case FieldMetadataType.PHONE:
case FieldMetadataType.EMAIL:
return false;
default:
return inputNullableValue ?? true;

View File

@ -3,7 +3,6 @@ import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/fi
export const isCompositeFieldMetadataType = (
type: FieldMetadataType,
): type is
| FieldMetadataType.LINK
| FieldMetadataType.CURRENCY
| FieldMetadataType.FULL_NAME
| FieldMetadataType.ADDRESS
@ -12,7 +11,6 @@ export const isCompositeFieldMetadataType = (
| FieldMetadataType.EMAILS
| FieldMetadataType.PHONES => {
return [
FieldMetadataType.LINK,
FieldMetadataType.CURRENCY,
FieldMetadataType.FULL_NAME,
FieldMetadataType.ADDRESS,

View File

@ -15,7 +15,6 @@ import {
FieldMetadataDefaultValueDateTime,
FieldMetadataDefaultValueEmails,
FieldMetadataDefaultValueFullName,
FieldMetadataDefaultValueLink,
FieldMetadataDefaultValueLinks,
FieldMetadataDefaultValueNowFunction,
FieldMetadataDefaultValueNumber,
@ -34,8 +33,6 @@ export const defaultValueValidatorsMap = {
FieldMetadataDefaultValueUuidFunction,
],
[FieldMetadataType.TEXT]: [FieldMetadataDefaultValueString],
[FieldMetadataType.PHONE]: [FieldMetadataDefaultValueString],
[FieldMetadataType.EMAIL]: [FieldMetadataDefaultValueString],
[FieldMetadataType.DATE_TIME]: [
FieldMetadataDefaultValueDateTime,
FieldMetadataDefaultValueNowFunction,
@ -44,7 +41,6 @@ export const defaultValueValidatorsMap = {
[FieldMetadataType.BOOLEAN]: [FieldMetadataDefaultValueBoolean],
[FieldMetadataType.NUMBER]: [FieldMetadataDefaultValueNumber],
[FieldMetadataType.NUMERIC]: [FieldMetadataDefaultValueString],
[FieldMetadataType.LINK]: [FieldMetadataDefaultValueLink],
[FieldMetadataType.CURRENCY]: [FieldMetadataDefaultValueCurrency],
[FieldMetadataType.FULL_NAME]: [FieldMetadataDefaultValueFullName],
[FieldMetadataType.RATING]: [FieldMetadataDefaultValueString],

View File

@ -21,8 +21,6 @@ import {
export type BasicFieldMetadataType =
| FieldMetadataType.UUID
| FieldMetadataType.TEXT
| FieldMetadataType.PHONE
| FieldMetadataType.EMAIL
| FieldMetadataType.NUMERIC
| FieldMetadataType.NUMBER
| FieldMetadataType.BOOLEAN

View File

@ -23,7 +23,6 @@ export type CompositeFieldMetadataType =
| FieldMetadataType.ADDRESS
| FieldMetadataType.CURRENCY
| FieldMetadataType.FULL_NAME
| FieldMetadataType.LINK
| FieldMetadataType.LINKS
| FieldMetadataType.EMAILS
| FieldMetadataType.PHONES;

View File

@ -18,9 +18,6 @@ export const fieldMetadataTypeToColumnType = <Type extends FieldMetadataType>(
case FieldMetadataType.RICH_TEXT:
case FieldMetadataType.ARRAY:
return 'text';
case FieldMetadataType.PHONE:
case FieldMetadataType.EMAIL:
return 'varchar';
case FieldMetadataType.NUMERIC:
return 'numeric';
case FieldMetadataType.NUMBER:

View File

@ -52,24 +52,6 @@ export class WorkspaceMigrationFactory {
},
},
],
[
FieldMetadataType.PHONE,
{
factory: this.basicColumnActionFactory,
options: {
defaultValue: '',
},
},
],
[
FieldMetadataType.EMAIL,
{
factory: this.basicColumnActionFactory,
options: {
defaultValue: '',
},
},
],
[FieldMetadataType.NUMERIC, { factory: this.basicColumnActionFactory }],
[FieldMetadataType.NUMBER, { factory: this.basicColumnActionFactory }],
[FieldMetadataType.POSITION, { factory: this.basicColumnActionFactory }],
@ -84,7 +66,6 @@ export class WorkspaceMigrationFactory {
FieldMetadataType.MULTI_SELECT,
{ factory: this.enumColumnActionFactory },
],
[FieldMetadataType.LINK, { factory: this.compositeColumnActionFactory }],
[
FieldMetadataType.CURRENCY,
{ factory: this.compositeColumnActionFactory },