diff --git a/front/package.json b/front/package.json index 8cb599ff1..25d9f2712 100644 --- a/front/package.json +++ b/front/package.json @@ -34,6 +34,7 @@ "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", "luxon": "^3.3.0", "react": "^18.2.0", "react-data-grid": "7.0.0-beta.13", @@ -138,6 +139,7 @@ "@types/lodash.camelcase": "^4.3.7", "@types/lodash.debounce": "^4.0.7", "@types/lodash.kebabcase": "^4.1.7", + "@types/lodash.snakecase": "^4.1.9", "@types/luxon": "^3.3.0", "@types/react-datepicker": "^4.11.2", "@types/scroll-into-view": "^1.16.0", diff --git a/front/src/generated-metadata/gql.ts b/front/src/generated-metadata/gql.ts index b0589583f..443e815a3 100644 --- a/front/src/generated-metadata/gql.ts +++ b/front/src/generated-metadata/gql.ts @@ -14,13 +14,13 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ const documents = { "\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n }\n }\n": types.CreateOneObjectMetadataItemDocument, - "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.CreateOneFieldMetadataItemDocument, + "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n": types.CreateOneFieldMetadataItemDocument, "\n mutation CreateOneRelationMetadata($input: CreateOneRelationInput!) {\n createOneRelation(input: $input) {\n id\n relationType\n fromObjectMetadataId\n toObjectMetadataId\n fromFieldMetadataId\n toFieldMetadataId\n createdAt\n updatedAt\n }\n }\n": types.CreateOneRelationMetadataDocument, - "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.UpdateOneFieldMetadataItemDocument, + "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.UpdateOneFieldMetadataItemDocument, "\n mutation UpdateOneObjectMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateObjectInput!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n }\n }\n": types.UpdateOneObjectMetadataItemDocument, "\n mutation DeleteOneObjectMetadataItem($idToDelete: ID!) {\n deleteOneObject(input: { id: $idToDelete }) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n }\n }\n": types.DeleteOneObjectMetadataItemDocument, - "\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.DeleteOneFieldMetadataItemDocument, - "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n": types.ObjectMetadataItemsDocument, + "\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.DeleteOneFieldMetadataItemDocument, + "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n": types.ObjectMetadataItemsDocument, }; /** @@ -44,7 +44,7 @@ export function graphql(source: "\n mutation CreateOneObjectMetadataItem($input /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; +export function graphql(source: "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n"): (typeof documents)["\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -52,7 +52,7 @@ export function graphql(source: "\n mutation CreateOneRelationMetadata($input: /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; +export function graphql(source: "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: ID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -64,11 +64,11 @@ export function graphql(source: "\n mutation DeleteOneObjectMetadataItem($idToD /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n placeholder\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; +export function graphql(source: "\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation DeleteOneFieldMetadataItem($idToDelete: ID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n"]; +export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n isSystem\n createdAt\n updatedAt\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n fromRelationMetadata {\n id\n relationType\n toObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n toFieldMetadataId\n }\n toRelationMetadata {\n id\n relationType\n fromObjectMetadata {\n id\n dataSourceId\n nameSingular\n namePlural\n }\n fromFieldMetadataId\n }\n defaultValue\n options\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n totalCount\n }\n }\n"]; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/front/src/generated-metadata/graphql.ts b/front/src/generated-metadata/graphql.ts index 1a342a85a..88b397c8d 100644 --- a/front/src/generated-metadata/graphql.ts +++ b/front/src/generated-metadata/graphql.ts @@ -50,10 +50,14 @@ export type CreateFieldInput = { defaultValue?: InputMaybe; description?: InputMaybe; icon?: InputMaybe; + isActive?: InputMaybe; + isCustom?: InputMaybe; isNullable?: InputMaybe; + isSystem?: InputMaybe; label: Scalars['String']['input']; name: Scalars['String']['input']; objectMetadataId: Scalars['String']['input']; + options?: InputMaybe; type: FieldMetadataType; }; @@ -66,7 +70,7 @@ export type CreateObjectInput = { nameSingular: Scalars['String']['input']; }; -export type CreateOneFieldInput = { +export type CreateOneFieldMetadataInput = { /** The record to create */ field: CreateFieldInput; }; @@ -135,6 +139,7 @@ export type FieldConnection = { export type FieldDeleteResponse = { __typename?: 'FieldDeleteResponse'; createdAt?: Maybe; + defaultValue?: Maybe; description?: Maybe; icon?: Maybe; id?: Maybe; @@ -144,8 +149,7 @@ export type FieldDeleteResponse = { isSystem?: Maybe; label?: Maybe; name?: Maybe; - /** @deprecated Use label name instead */ - placeholder?: Maybe; + options?: Maybe; type?: Maybe; updatedAt?: Maybe; }; @@ -156,14 +160,16 @@ export enum FieldMetadataType { Currency = 'CURRENCY', DateTime = 'DATE_TIME', Email = 'EMAIL', - Enum = 'ENUM', FullName = 'FULL_NAME', Link = 'LINK', + MultiSelect = 'MULTI_SELECT', Number = 'NUMBER', Numeric = 'NUMERIC', Phone = 'PHONE', Probability = 'PROBABILITY', + Rating = 'RATING', Relation = 'RELATION', + Select = 'SELECT', Text = 'TEXT', Uuid = 'UUID' } @@ -199,7 +205,7 @@ export type Mutation = { export type MutationCreateOneFieldArgs = { - input: CreateOneFieldInput; + input: CreateOneFieldMetadataInput; }; @@ -229,7 +235,7 @@ export type MutationDeleteOneRelationArgs = { export type MutationUpdateOneFieldArgs = { - input: UpdateOneFieldInput; + input: UpdateOneFieldMetadataInput; }; @@ -386,11 +392,16 @@ export type Telemetry = { }; export type UpdateFieldInput = { + defaultValue?: InputMaybe; description?: InputMaybe; icon?: InputMaybe; isActive?: InputMaybe; + isCustom?: InputMaybe; + isNullable?: InputMaybe; + isSystem?: InputMaybe; label?: InputMaybe; name?: InputMaybe; + options?: InputMaybe; }; export type UpdateObjectInput = { @@ -405,10 +416,10 @@ export type UpdateObjectInput = { nameSingular?: InputMaybe; }; -export type UpdateOneFieldInput = { +export type UpdateOneFieldMetadataInput = { /** The id of the record to update */ id: Scalars['ID']['input']; - /** The update to apply. */ + /** The record to update */ update: UpdateFieldInput; }; @@ -483,18 +494,18 @@ export type WorkspaceEdge = { export type Field = { __typename?: 'field'; createdAt: Scalars['DateTime']['output']; + defaultValue?: Maybe; description?: Maybe; fromRelationMetadata?: Maybe; icon?: Maybe; id: Scalars['ID']['output']; - isActive: Scalars['Boolean']['output']; - isCustom: Scalars['Boolean']['output']; - isNullable: Scalars['Boolean']['output']; - isSystem: Scalars['Boolean']['output']; + isActive?: Maybe; + isCustom?: Maybe; + isNullable?: Maybe; + isSystem?: Maybe; label: Scalars['String']['output']; name: Scalars['String']['output']; - /** @deprecated Use label name instead */ - placeholder?: Maybe; + options?: Maybe; toRelationMetadata?: Maybe; type: FieldMetadataType; updatedAt: Scalars['DateTime']['output']; @@ -588,11 +599,11 @@ export type CreateOneObjectMetadataItemMutationVariables = Exact<{ export type CreateOneObjectMetadataItemMutation = { __typename?: 'Mutation', createOneObject: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, createdAt: any, updatedAt: any } }; export type CreateOneFieldMetadataItemMutationVariables = Exact<{ - input: CreateOneFieldInput; + input: CreateOneFieldMetadataInput; }>; -export type CreateOneFieldMetadataItemMutation = { __typename?: 'Mutation', createOneField: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } }; +export type CreateOneFieldMetadataItemMutation = { __typename?: 'Mutation', createOneField: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null } }; export type CreateOneRelationMetadataMutationVariables = Exact<{ input: CreateOneRelationInput; @@ -607,7 +618,7 @@ export type UpdateOneFieldMetadataItemMutationVariables = Exact<{ }>; -export type UpdateOneFieldMetadataItemMutation = { __typename?: 'Mutation', updateOneField: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom: boolean, isActive: boolean, isNullable: boolean, createdAt: any, updatedAt: any } }; +export type UpdateOneFieldMetadataItemMutation = { __typename?: 'Mutation', updateOneField: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any } }; export type UpdateOneObjectMetadataItemMutationVariables = Exact<{ idToUpdate: Scalars['ID']['input']; @@ -629,7 +640,7 @@ export type DeleteOneFieldMetadataItemMutationVariables = Exact<{ }>; -export type DeleteOneFieldMetadataItemMutation = { __typename?: 'Mutation', deleteOneField: { __typename?: 'FieldDeleteResponse', id?: string | null, type?: FieldMetadataType | null, name?: string | null, label?: string | null, description?: string | null, icon?: string | null, placeholder?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isNullable?: boolean | null, createdAt?: any | null, updatedAt?: any | null } }; +export type DeleteOneFieldMetadataItemMutation = { __typename?: 'Mutation', deleteOneField: { __typename?: 'FieldDeleteResponse', id?: string | null, type?: FieldMetadataType | null, name?: string | null, label?: string | null, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isNullable?: boolean | null, createdAt?: any | null, updatedAt?: any | null } }; export type ObjectMetadataItemsQueryVariables = Exact<{ objectFilter?: InputMaybe; @@ -637,14 +648,14 @@ export type ObjectMetadataItemsQueryVariables = Exact<{ }>; -export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', totalCount: number, edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, isSystem: boolean, createdAt: any, updatedAt: any, fields: { __typename?: 'ObjectFieldsConnection', totalCount: number, edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, isSystem: boolean, isNullable: boolean, createdAt: any, updatedAt: any, fromRelationMetadata?: { __typename?: 'relation', id: string, relationType: RelationMetadataType, toFieldMetadataId: string, toObjectMetadata: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string } } | null, toRelationMetadata?: { __typename?: 'relation', id: string, relationType: RelationMetadataType, fromFieldMetadataId: string, fromObjectMetadata: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string } } | null } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } }; +export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __typename?: 'ObjectConnection', totalCount: number, edges: Array<{ __typename?: 'objectEdge', node: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, description?: string | null, icon?: string | null, isCustom: boolean, isActive: boolean, isSystem: boolean, createdAt: any, updatedAt: any, fields: { __typename?: 'ObjectFieldsConnection', totalCount: number, edges: Array<{ __typename?: 'fieldEdge', node: { __typename?: 'field', id: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isNullable?: boolean | null, createdAt: any, updatedAt: any, defaultValue?: any | null, options?: any | null, fromRelationMetadata?: { __typename?: 'relation', id: string, relationType: RelationMetadataType, toFieldMetadataId: string, toObjectMetadata: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string } } | null, toRelationMetadata?: { __typename?: 'relation', id: string, relationType: RelationMetadataType, fromFieldMetadataId: string, fromObjectMetadata: { __typename?: 'object', id: string, dataSourceId: string, nameSingular: string, namePlural: string } } | null } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage?: boolean | null, hasPreviousPage?: boolean | null, startCursor?: any | null, endCursor?: any | null } } }; export const CreateOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneObjectMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneObjectInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; -export const CreateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const CreateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneFieldMetadataInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}}]}}]}}]} as unknown as DocumentNode; export const CreateOneRelationMetadataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneRelationMetadata"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateOneRelationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneRelation"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; -export const UpdateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"update"},"value":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const UpdateOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateFieldInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"update"},"value":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const UpdateOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateOneObjectMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateObjectInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToUpdate"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"update"},"value":{"kind":"Variable","name":{"kind":"Name","value":"updatePayload"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; export const DeleteOneObjectMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneObjectMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneObject"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; -export const DeleteOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"placeholder"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; -export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"objectFilter"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fromRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const DeleteOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]} as unknown as DocumentNode; +export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"objectFilter"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"fromRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"toObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"toRelationMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"relationType"}},{"kind":"Field","name":{"kind":"Name","value":"fromObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"fromFieldMetadataId"}}]}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}},{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/front/src/generated/graphql.tsx b/front/src/generated/graphql.tsx index 903594dea..fe70f6743 100644 --- a/front/src/generated/graphql.tsx +++ b/front/src/generated/graphql.tsx @@ -125,6 +125,7 @@ export type FieldConnection = { export type FieldDeleteResponse = { __typename?: 'FieldDeleteResponse'; createdAt?: Maybe; + defaultValue?: Maybe; description?: Maybe; icon?: Maybe; id?: Maybe; @@ -134,8 +135,7 @@ export type FieldDeleteResponse = { isSystem?: Maybe; label?: Maybe; name?: Maybe; - /** @deprecated Use label name instead */ - placeholder?: Maybe; + options?: Maybe; type?: Maybe; updatedAt?: Maybe; }; @@ -146,14 +146,16 @@ export enum FieldMetadataType { Currency = 'CURRENCY', DateTime = 'DATE_TIME', Email = 'EMAIL', - Enum = 'ENUM', FullName = 'FULL_NAME', Link = 'LINK', + MultiSelect = 'MULTI_SELECT', Number = 'NUMBER', Numeric = 'NUMERIC', Phone = 'PHONE', Probability = 'PROBABILITY', + Rating = 'RATING', Relation = 'RELATION', + Select = 'SELECT', Text = 'TEXT', Uuid = 'UUID' } @@ -191,20 +193,15 @@ export type Mutation = { __typename?: 'Mutation'; challenge: LoginToken; createEvent: Analytics; - createOneField: Field; createOneObject: Object; createOneRefreshToken: RefreshToken; - createOneRelation: Relation; deleteCurrentWorkspace: Workspace; - deleteOneField: FieldDeleteResponse; deleteOneObject: ObjectDeleteResponse; - deleteOneRelation: RelationDeleteResponse; deleteUser: User; generateApiKeyToken: ApiKeyToken; impersonate: Verify; renewToken: AuthTokens; signUp: LoginToken; - updateOneField: Field; updateOneObject: Object; updateWorkspace: Workspace; uploadFile: Scalars['String']; @@ -342,13 +339,9 @@ export type Query = { clientConfig: ClientConfig; currentUser: User; currentWorkspace: Workspace; - field: Field; - fields: FieldConnection; findWorkspaceFromInviteHash: Workspace; object: Object; objects: ObjectConnection; - relation: Relation; - relations: RelationConnection; }; @@ -531,18 +524,18 @@ export type WorkspaceInviteHashValid = { export type Field = { __typename?: 'field'; createdAt: Scalars['DateTime']; + defaultValue?: Maybe; description?: Maybe; fromRelationMetadata?: Maybe; icon?: Maybe; id: Scalars['ID']; - isActive: Scalars['Boolean']; - isCustom: Scalars['Boolean']; - isNullable: Scalars['Boolean']; - isSystem: Scalars['Boolean']; + isActive?: Maybe; + isCustom?: Maybe; + isNullable?: Maybe; + isSystem?: Maybe; label: Scalars['String']; name: Scalars['String']; - /** @deprecated Use label name instead */ - placeholder?: Maybe; + options?: Maybe; toRelationMetadata?: Maybe; type: FieldMetadataType; updatedAt: Scalars['DateTime']; diff --git a/front/src/modules/object-metadata/graphql/mutations.ts b/front/src/modules/object-metadata/graphql/mutations.ts index ce8b27152..09f26f0ea 100644 --- a/front/src/modules/object-metadata/graphql/mutations.ts +++ b/front/src/modules/object-metadata/graphql/mutations.ts @@ -20,7 +20,7 @@ export const CREATE_ONE_OBJECT_METADATA_ITEM = gql` `; export const CREATE_ONE_FIELD_METADATA_ITEM = gql` - mutation CreateOneFieldMetadataItem($input: CreateOneFieldInput!) { + mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) { createOneField(input: $input) { id type @@ -28,12 +28,13 @@ export const CREATE_ONE_FIELD_METADATA_ITEM = gql` label description icon - placeholder isCustom isActive isNullable createdAt updatedAt + defaultValue + options } } `; @@ -65,7 +66,6 @@ export const UPDATE_ONE_FIELD_METADATA_ITEM = gql` label description icon - placeholder isCustom isActive isNullable @@ -125,7 +125,6 @@ export const DELETE_ONE_FIELD_METADATA_ITEM = gql` label description icon - placeholder isCustom isActive isNullable diff --git a/front/src/modules/object-metadata/graphql/queries.ts b/front/src/modules/object-metadata/graphql/queries.ts index fc7453917..164d639a1 100644 --- a/front/src/modules/object-metadata/graphql/queries.ts +++ b/front/src/modules/object-metadata/graphql/queries.ts @@ -58,6 +58,8 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql` } fromFieldMetadataId } + defaultValue + options } } pageInfo { diff --git a/front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts b/front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts index eaa969f45..7aacb031f 100644 --- a/front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts +++ b/front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts @@ -1,8 +1,11 @@ +import { v4 } from 'uuid'; + import { FieldType } from '@/object-record/field/types/FieldType'; import { Field } from '~/generated/graphql'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldMetadataItem } from '../types/FieldMetadataItem'; +import { FieldMetadataOption } from '../types/FieldMetadataOption'; import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput'; import { useCreateOneFieldMetadataItem } from './useCreateOneFieldMetadataItem'; @@ -17,6 +20,7 @@ export const useFieldMetadataItem = () => { const createMetadataField = ( input: Pick & { objectMetadataId: string; + options?: Omit[]; type: FieldMetadataType; }, ) => @@ -27,11 +31,20 @@ export const useFieldMetadataItem = () => { }); const editMetadataField = ( - input: Pick, + input: Pick & { + options?: FieldMetadataOption[]; + }, ) => updateOneFieldMetadataItem({ fieldMetadataIdToUpdate: input.id, - updatePayload: formatFieldMetadataItemInput(input), + updatePayload: formatFieldMetadataItemInput({ + ...input, + // In Edit mode, all options need an id, + // so we generate an id for newly created options. + options: input.options?.map((option) => + option.id ? option : { ...option, id: v4() }, + ), + }), }); const activateMetadataField = (metadataField: FieldMetadataItem) => diff --git a/front/src/modules/object-metadata/types/FieldMetadataItem.ts b/front/src/modules/object-metadata/types/FieldMetadataItem.ts index 978d2dcd9..f03050981 100644 --- a/front/src/modules/object-metadata/types/FieldMetadataItem.ts +++ b/front/src/modules/object-metadata/types/FieldMetadataItem.ts @@ -1,8 +1,9 @@ +import { ThemeColor } from '@/ui/theme/constants/colors'; import { Field, Relation } from '~/generated-metadata/graphql'; export type FieldMetadataItem = Omit< Field, - 'fromRelationMetadata' | 'toRelationMetadata' + 'fromRelationMetadata' | 'toRelationMetadata' | 'defaultValue' | 'options' > & { fromRelationMetadata?: | (Pick & { @@ -20,4 +21,12 @@ export type FieldMetadataItem = Omit< >; }) | null; + defaultValue?: string; + options?: { + color: ThemeColor; + id: string; + label: string; + position: number; + value: string; + }[]; }; diff --git a/front/src/modules/object-metadata/types/FieldMetadataOption.ts b/front/src/modules/object-metadata/types/FieldMetadataOption.ts new file mode 100644 index 000000000..bcdd1a012 --- /dev/null +++ b/front/src/modules/object-metadata/types/FieldMetadataOption.ts @@ -0,0 +1,8 @@ +import { ThemeColor } from '@/ui/theme/constants/colors'; + +export type FieldMetadataOption = { + color?: ThemeColor; + id?: string; + isDefault?: boolean; + label: string; +}; diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts index 08468db99..f96247193 100644 --- a/front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts +++ b/front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts @@ -1,12 +1,34 @@ import toCamelCase from 'lodash.camelcase'; +import toSnakeCase from 'lodash.snakecase'; import { Field } from '~/generated-metadata/graphql'; +import { FieldMetadataOption } from '../types/FieldMetadataOption'; + +const getOptionValueFromLabel = (label: string) => + toSnakeCase(label.trim()).toUpperCase(); + export const formatFieldMetadataItemInput = ( - input: Pick, -) => ({ - description: input.description?.trim() ?? null, - icon: input.icon, - label: input.label.trim(), - name: toCamelCase(input.label.trim()), -}); + input: Pick & { + options?: FieldMetadataOption[]; + }, +) => { + const defaultOption = input.options?.find((option) => option.isDefault); + + return { + defaultValue: defaultOption + ? getOptionValueFromLabel(defaultOption.label) + : undefined, + description: input.description?.trim() ?? null, + icon: input.icon, + label: input.label.trim(), + name: toCamelCase(input.label.trim()), + options: input.options?.map((option, index) => ({ + color: option.color, + id: option.id, + label: option.label.trim(), + position: index, + value: getOptionValueFromLabel(option.label), + })), + }; +}; diff --git a/front/src/modules/object-record/field/meta-types/hooks/useRatingField.ts b/front/src/modules/object-record/field/meta-types/hooks/useRatingField.ts index 4c9e681c2..81fdf46b8 100644 --- a/front/src/modules/object-record/field/meta-types/hooks/useRatingField.ts +++ b/front/src/modules/object-record/field/meta-types/hooks/useRatingField.ts @@ -12,11 +12,7 @@ import { isFieldRating } from '../../types/guards/isFieldRating'; export const useRatingField = () => { const { entityId, fieldDefinition, hotkeyScope } = useContext(FieldContext); - assertFieldMetadata( - FieldMetadataType.Probability, - isFieldRating, - fieldDefinition, - ); + assertFieldMetadata(FieldMetadataType.Rating, isFieldRating, fieldDefinition); const fieldName = fieldDefinition.metadata.fieldName; diff --git a/front/src/modules/object-record/field/meta-types/hooks/useSelectField.ts b/front/src/modules/object-record/field/meta-types/hooks/useSelectField.ts index edfe9daee..ef0862ceb 100644 --- a/front/src/modules/object-record/field/meta-types/hooks/useSelectField.ts +++ b/front/src/modules/object-record/field/meta-types/hooks/useSelectField.ts @@ -2,6 +2,7 @@ import { useContext } from 'react'; import { useRecoilState } from 'recoil'; import { ThemeColor } from '@/ui/theme/constants/colors'; +import { FieldMetadataType } from '~/generated/graphql'; import { FieldContext } from '../../contexts/FieldContext'; import { useFieldInitialValue } from '../../hooks/useFieldInitialValue'; @@ -14,7 +15,7 @@ import { isFieldSelectValue } from '../../types/guards/isFieldSelectValue'; export const useSelectField = () => { const { entityId, fieldDefinition, hotkeyScope } = useContext(FieldContext); - assertFieldMetadata('ENUM', isFieldSelect, fieldDefinition); + assertFieldMetadata(FieldMetadataType.Select, isFieldSelect, fieldDefinition); const { fieldName } = fieldDefinition.metadata; diff --git a/front/src/modules/object-record/field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx b/front/src/modules/object-record/field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx index 2a23ea05d..d1b97763e 100644 --- a/front/src/modules/object-record/field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx +++ b/front/src/modules/object-record/field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx @@ -46,7 +46,7 @@ const RatingFieldInputWithContext = ({ fieldDefinition={{ fieldMetadataId: 'rating', label: 'Rating', - type: FieldMetadataType.Probability, + type: FieldMetadataType.Rating, iconName: 'Icon123', metadata: { fieldName: 'Rating', diff --git a/front/src/modules/object-record/field/states/selectors/isEntityFieldEmptyFamilySelector.ts b/front/src/modules/object-record/field/states/selectors/isEntityFieldEmptyFamilySelector.ts index df806a36e..739fdfdd4 100644 --- a/front/src/modules/object-record/field/states/selectors/isEntityFieldEmptyFamilySelector.ts +++ b/front/src/modules/object-record/field/states/selectors/isEntityFieldEmptyFamilySelector.ts @@ -2,6 +2,7 @@ import { selectorFamily } from 'recoil'; import { isFieldFullName } from '@/object-record/field/types/guards/isFieldFullName'; import { isFieldFullNameValue } from '@/object-record/field/types/guards/isFieldFullNameValue'; +import { isFieldSelect } from '@/object-record/field/types/guards/isFieldSelect'; import { isFieldUuid } from '@/object-record/field/types/guards/isFieldUuid'; import { assertNotNull } from '~/utils/assert'; @@ -42,7 +43,8 @@ export const isEntityFieldEmptyFamilySelector = selectorFamily({ isFieldNumber(fieldDefinition) || isFieldRating(fieldDefinition) || isFieldEmail(fieldDefinition) || - isFieldBoolean(fieldDefinition) + isFieldBoolean(fieldDefinition) || + isFieldSelect(fieldDefinition) //|| isFieldPhone(fieldDefinition) ) { const fieldValue = get(entityFieldsFamilyState(entityId))?.[ diff --git a/front/src/modules/object-record/field/types/FieldType.ts b/front/src/modules/object-record/field/types/FieldType.ts index b63793874..1c734a526 100644 --- a/front/src/modules/object-record/field/types/FieldType.ts +++ b/front/src/modules/object-record/field/types/FieldType.ts @@ -1,18 +1,18 @@ export type FieldType = | 'BOOLEAN' - | 'UUID' - | 'TEXT' - | 'RELATION' | 'CHIP' + | 'CURRENCY' | 'DATE_TIME' | 'DOUBLE_TEXT_CHIP' | 'DOUBLE_TEXT' | 'EMAIL' - | 'ENUM' + | 'FULL_NAME' + | 'LINK' | 'NUMBER' | 'PHONE' - | 'PROBABILITY' + | 'RATING' + | 'RELATION' + | 'SELECT' + | 'TEXT' | 'URL' - | 'LINK' - | 'CURRENCY' - | 'FULL_NAME'; + | 'UUID'; diff --git a/front/src/modules/object-record/field/types/guards/assertFieldMetadata.ts b/front/src/modules/object-record/field/types/guards/assertFieldMetadata.ts index 44ca2a495..7286ccf9c 100644 --- a/front/src/modules/object-record/field/types/guards/assertFieldMetadata.ts +++ b/front/src/modules/object-record/field/types/guards/assertFieldMetadata.ts @@ -29,7 +29,7 @@ type AssertFieldMetadataFunction = < ? FieldDateTimeMetadata : E extends 'EMAIL' ? FieldEmailMetadata - : E extends 'ENUM' + : E extends 'SELECT' ? FieldSelectMetadata : E extends 'LINK' ? FieldLinkMetadata @@ -37,7 +37,7 @@ type AssertFieldMetadataFunction = < ? FieldNumberMetadata : E extends 'PHONE' ? FieldPhoneMetadata - : E extends 'PROBABILITY' + : E extends 'RATING' ? FieldRatingMetadata : E extends 'RELATION' ? FieldRelationMetadata diff --git a/front/src/modules/object-record/field/types/guards/isFieldRating.ts b/front/src/modules/object-record/field/types/guards/isFieldRating.ts index 1490150ea..543945983 100644 --- a/front/src/modules/object-record/field/types/guards/isFieldRating.ts +++ b/front/src/modules/object-record/field/types/guards/isFieldRating.ts @@ -6,4 +6,4 @@ import { FieldMetadata, FieldRatingMetadata } from '../FieldMetadata'; export const isFieldRating = ( field: Pick, 'type'>, ): field is FieldDefinition => - field.type === FieldMetadataType.Probability; + field.type === FieldMetadataType.Rating; diff --git a/front/src/modules/object-record/field/types/guards/isFieldSelect.ts b/front/src/modules/object-record/field/types/guards/isFieldSelect.ts index f4ab515f0..0528512e5 100644 --- a/front/src/modules/object-record/field/types/guards/isFieldSelect.ts +++ b/front/src/modules/object-record/field/types/guards/isFieldSelect.ts @@ -1,6 +1,9 @@ +import { FieldMetadataType } from '~/generated/graphql'; + import { FieldDefinition } from '../FieldDefinition'; import { FieldMetadata, FieldSelectMetadata } from '../FieldMetadata'; export const isFieldSelect = ( - field: FieldDefinition, -): field is FieldDefinition => field.type === 'ENUM'; + field: Pick, 'type'>, +): field is FieldDefinition => + field.type === FieldMetadataType.Select; diff --git a/front/src/modules/settings/data-model/components/SettingsObjectFieldPreview.tsx b/front/src/modules/settings/data-model/components/SettingsObjectFieldPreview.tsx index be3cc1867..823e5ebf9 100644 --- a/front/src/modules/settings/data-model/components/SettingsObjectFieldPreview.tsx +++ b/front/src/modules/settings/data-model/components/SettingsObjectFieldPreview.tsx @@ -148,7 +148,7 @@ export const SettingsObjectFieldPreview = ({ > {fieldMetadata.type === FieldMetadataType.Boolean ? ( - ) : fieldMetadata.type === FieldMetadataType.Probability ? ( + ) : fieldMetadata.type === FieldMetadataType.Rating ? ( ) : ( diff --git a/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx b/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx index 722b5f109..cfe5c5f8d 100644 --- a/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx +++ b/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx @@ -88,10 +88,10 @@ export const SettingsObjectFieldTypeSelectSection = ({ FieldMetadataType.Boolean, FieldMetadataType.Currency, FieldMetadataType.DateTime, - FieldMetadataType.Enum, + FieldMetadataType.Select, FieldMetadataType.Link, FieldMetadataType.Number, - FieldMetadataType.Probability, + FieldMetadataType.Rating, FieldMetadataType.Relation, FieldMetadataType.Text, ].includes(values.type) && ( @@ -151,7 +151,7 @@ export const SettingsObjectFieldTypeSelectSection = ({ }) } /> - ) : values.type === FieldMetadataType.Enum ? ( + ) : values.type === FieldMetadataType.Select ? ( onChange({ select: nextValues })} diff --git a/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldPreview.stories.tsx b/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldPreview.stories.tsx index 2962cfbcc..f2bae91d2 100644 --- a/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldPreview.stories.tsx +++ b/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldPreview.stories.tsx @@ -95,7 +95,7 @@ export const Rating: Story = { fieldMetadata: { icon: 'IconHandClick', label: 'Engagement', - type: FieldMetadataType.Probability, + type: FieldMetadataType.Rating, }, }, }; diff --git a/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldTypeSelectSection.stories.tsx b/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldTypeSelectSection.stories.tsx index 5b36d30df..33de59307 100644 --- a/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldTypeSelectSection.stories.tsx +++ b/front/src/modules/settings/data-model/components/__stories__/SettingsObjectFieldTypeSelectSection.stories.tsx @@ -108,7 +108,7 @@ export const WithSelectForm: Story = { fieldMetadata: { label: 'Industry', icon: 'IconBuildingFactory2' }, values: { ...fieldMetadataFormDefaultValues, - type: FieldMetadataType.Enum, + type: FieldMetadataType.Select, select: [ { color: 'pink', diff --git a/front/src/modules/settings/data-model/constants/settingsFieldMetadataTypes.ts b/front/src/modules/settings/data-model/constants/settingsFieldMetadataTypes.ts index 1aa96cd59..662e47524 100644 --- a/front/src/modules/settings/data-model/constants/settingsFieldMetadataTypes.ts +++ b/front/src/modules/settings/data-model/constants/settingsFieldMetadataTypes.ts @@ -59,10 +59,14 @@ export const settingsFieldMetadataTypes: Record< Icon: IconCalendarEvent, defaultValue: defaultDateValue.toISOString(), }, - [FieldMetadataType.Enum]: { + [FieldMetadataType.Select]: { label: 'Select', Icon: IconTag, }, + [FieldMetadataType.MultiSelect]: { + label: 'Multi-Select', + Icon: IconTag, + }, [FieldMetadataType.Currency]: { label: 'Currency', Icon: IconCoins, @@ -79,5 +83,10 @@ export const settingsFieldMetadataTypes: Record< Icon: IconTwentyStar, defaultValue: '3', }, + [FieldMetadataType.Rating]: { + label: 'Rating', + Icon: IconTwentyStar, + defaultValue: '3', + }, [FieldMetadataType.FullName]: { label: 'Full Name', Icon: IconUser }, }; diff --git a/front/src/modules/settings/data-model/hooks/useFieldMetadataForm.ts b/front/src/modules/settings/data-model/hooks/useFieldMetadataForm.ts index 0d350f3f5..fcec45a85 100644 --- a/front/src/modules/settings/data-model/hooks/useFieldMetadataForm.ts +++ b/front/src/modules/settings/data-model/hooks/useFieldMetadataForm.ts @@ -56,11 +56,12 @@ const relationSchema = fieldSchema.merge( const selectSchema = fieldSchema.merge( z.object({ - type: z.literal(FieldMetadataType.Enum), + type: z.literal(FieldMetadataType.Select), select: z .array( z.object({ color: themeColorSchema, + id: z.string().optional(), isDefault: z.boolean().optional(), label: z.string().min(1), }), @@ -70,18 +71,20 @@ const selectSchema = fieldSchema.merge( ); const { - Enum: _Enum, + Select: _Select, Relation: _Relation, ...otherFieldTypes } = FieldMetadataType; +type OtherFieldType = Exclude< + FieldMetadataType, + FieldMetadataType.Relation | FieldMetadataType.Select +>; + const otherFieldTypesSchema = fieldSchema.merge( z.object({ type: z.enum( - Object.values(otherFieldTypes) as [ - Exclude, - ...Exclude[], - ], + Object.values(otherFieldTypes) as [OtherFieldType, ...OtherFieldType[]], ), }), ); @@ -165,7 +168,7 @@ export const useFieldMetadataForm = () => { !isDeeplyEqual(initialRelationFormValues, nextRelationFormValues), ); setHasSelectFormChanged( - nextFieldFormValues.type === FieldMetadataType.Enum && + nextFieldFormValues.type === FieldMetadataType.Select && !isDeeplyEqual(initialSelectFormValues, nextSelectFormValues), ); }; @@ -177,6 +180,7 @@ export const useFieldMetadataForm = () => { hasFormChanged: hasFieldFormChanged || hasRelationFormChanged || hasSelectFormChanged, hasRelationFormChanged, + hasSelectFormChanged, initForm, isInitialized, isValid: validationResult.success, diff --git a/front/src/modules/settings/data-model/hooks/useFieldPreview.ts b/front/src/modules/settings/data-model/hooks/useFieldPreview.ts index 799383f9a..850fba642 100644 --- a/front/src/modules/settings/data-model/hooks/useFieldPreview.ts +++ b/front/src/modules/settings/data-model/hooks/useFieldPreview.ts @@ -48,7 +48,7 @@ export const useFieldPreview = ({ const defaultSelectValue = selectOptions?.[0]; const selectValue = - fieldMetadata.type === FieldMetadataType.Enum && + fieldMetadata.type === FieldMetadataType.Select && typeof firstRecordFieldValue === 'string' ? selectOptions?.find( (selectOption) => selectOption.value === firstRecordFieldValue, @@ -65,7 +65,7 @@ export const useFieldPreview = ({ value: fieldMetadata.type === FieldMetadataType.Relation ? relationValue - : fieldMetadata.type === FieldMetadataType.Enum + : fieldMetadata.type === FieldMetadataType.Select ? selectValue || defaultSelectValue : firstRecordFieldValue || defaultValue, }; diff --git a/front/src/pages/settings/data-model/SettingsObjectDetail.tsx b/front/src/pages/settings/data-model/SettingsObjectDetail.tsx index 0e6cc5f80..3ad5e8173 100644 --- a/front/src/pages/settings/data-model/SettingsObjectDetail.tsx +++ b/front/src/pages/settings/data-model/SettingsObjectDetail.tsx @@ -97,7 +97,7 @@ export const SettingsObjectDetail = () => { fieldMetadataItem={activeMetadataField} ActionIcon={ navigate(`./${getFieldSlug(activeMetadataField)}`) @@ -119,7 +119,7 @@ export const SettingsObjectDetail = () => { fieldMetadataItem={disabledMetadataField} ActionIcon={ activateMetadataField(disabledMetadataField) diff --git a/front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx b/front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx index 930e91fc3..c120c319c 100644 --- a/front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx +++ b/front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx @@ -53,6 +53,7 @@ export const SettingsObjectFieldEdit = () => { hasFieldFormChanged, hasFormChanged, hasRelationFormChanged, + hasSelectFormChanged, initForm, isInitialized, isValid, @@ -65,6 +66,14 @@ export const SettingsObjectFieldEdit = () => { return; } + const selectOptions = activeMetadataField.options?.map((option) => ({ + ...option, + isDefault: activeMetadataField.defaultValue === option.value, + })); + selectOptions?.sort( + (optionA, optionB) => optionA.position - optionB.position, + ); + initForm({ icon: activeMetadataField.icon ?? undefined, label: activeMetadataField.label, @@ -78,6 +87,7 @@ export const SettingsObjectFieldEdit = () => { objectMetadataId: relationObjectMetadataItem?.id || '', type: relationType || RelationMetadataType.OneToMany, }, + ...(selectOptions?.length ? { select: selectOptions } : {}), }); }, [ activeMetadataField, @@ -111,12 +121,16 @@ export const SettingsObjectFieldEdit = () => { }); } - if (hasFieldFormChanged) { + if (hasFieldFormChanged || hasSelectFormChanged) { await editMetadataField({ description: validatedFormValues.description, icon: validatedFormValues.icon, id: activeMetadataField.id, label: validatedFormValues.label, + options: + validatedFormValues.type === FieldMetadataType.Select + ? validatedFormValues.select + : undefined, }); } diff --git a/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx b/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx index 29e0b94af..632a3e9f8 100644 --- a/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx +++ b/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx @@ -171,6 +171,10 @@ export const SettingsObjectNewFieldStep2 = () => { label: validatedFormValues.label, objectMetadataId: activeObjectMetadataItem.id, type: validatedFormValues.type, + options: + validatedFormValues.type === FieldMetadataType.Select + ? validatedFormValues.select + : undefined, }); } @@ -185,12 +189,14 @@ export const SettingsObjectNewFieldStep2 = () => { const excludedFieldTypes = [ FieldMetadataType.Currency, FieldMetadataType.Email, - FieldMetadataType.Enum, - FieldMetadataType.Numeric, FieldMetadataType.FullName, FieldMetadataType.Link, + FieldMetadataType.MultiSelect, + FieldMetadataType.Numeric, FieldMetadataType.Phone, FieldMetadataType.Probability, + FieldMetadataType.Rating, + FieldMetadataType.Select, FieldMetadataType.Uuid, ]; diff --git a/front/yarn.lock b/front/yarn.lock index 53db88d4a..fe80d18a2 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -5654,6 +5654,13 @@ dependencies: "@types/lodash" "*" +"@types/lodash.snakecase@^4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/lodash.snakecase/-/lodash.snakecase-4.1.9.tgz#2d2b3313a44500cb6d8a1c598e0353778d4420d2" + integrity sha512-emBZJUiNlo+QPXr1junMKXwzHJK9zbFvTVdyAoorFcm1YRsbzkZCYPTVMM9AW+dlnA6utG7vpfvOs8alxv/TMw== + dependencies: + "@types/lodash" "*" + "@types/lodash@*", "@types/lodash@^4.14.167": version "4.14.202" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" @@ -13725,6 +13732,11 @@ lodash.mergewith@4.6.2: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"