[GQL_VIEW_FILTER_API_BREAKING_CHANGE][WHEN_RELEASED_REQUIRES_CACHE_FLUSH] ViewFilter migration to workspace migration v2 (#15010)
# Introduction Migrating `viewFilter` to v2 in order to migrate later the field update side effect on view to v2 too ## What's done - Created flat-view-filter - flat view filter runner - flat view filter builder - create view filter service v2 and input transpilers - refactor the existing view filter resolver to fix standard ( BREAKING_CHANGE on graphql api update especially ) REST stays the same - refactored the front to consume the mutations autogenerated ## New generic tools ### Compare two flat entity Introducing a new util to compare two flat entity, it's strictly typed and will be added to the generic builder in a following PR This will ease flat entity addition as won't required to create a specific abstraction for comparison Generic builder will expect specific constant: properties to compare and properties to stringify ### Transform flat entity for comparison Forked and refactor the initial existing method for flat entity business scope and type safety ## Coverage Migrated existing integration tests to fit new contract API This PR does not add strong coverage on validation exceptions Deadlines are too short close https://github.com/twentyhq/core-team-issues/issues/1666
This commit is contained in:
@@ -1048,6 +1048,11 @@ export type DeleteViewFieldInput = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DeleteViewFilterInput = {
|
||||
/** The id of the view filter to delete. */
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DeleteWebhookDto = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
@@ -1073,6 +1078,11 @@ export type DestroyViewFieldInput = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DestroyViewFilterInput = {
|
||||
/** The id of the view filter to destroy. */
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
/** Schema update on a table */
|
||||
export enum DistantTableUpdate {
|
||||
COLUMNS_ADDED = 'COLUMNS_ADDED',
|
||||
@@ -1702,7 +1712,7 @@ export type Mutation = {
|
||||
deleteApprovedAccessDomain: Scalars['Boolean'];
|
||||
deleteCoreView: Scalars['Boolean'];
|
||||
deleteCoreViewField: CoreViewField;
|
||||
deleteCoreViewFilter: Scalars['Boolean'];
|
||||
deleteCoreViewFilter: CoreViewFilter;
|
||||
deleteCoreViewFilterGroup: Scalars['Boolean'];
|
||||
deleteCoreViewGroup: Scalars['Boolean'];
|
||||
deleteCoreViewSort: Scalars['Boolean'];
|
||||
@@ -1732,7 +1742,7 @@ export type Mutation = {
|
||||
deleteWorkspaceInvitation: Scalars['String'];
|
||||
destroyCoreView: Scalars['Boolean'];
|
||||
destroyCoreViewField: CoreViewField;
|
||||
destroyCoreViewFilter: Scalars['Boolean'];
|
||||
destroyCoreViewFilter: CoreViewFilter;
|
||||
destroyCoreViewFilterGroup: Scalars['Boolean'];
|
||||
destroyCoreViewGroup: Scalars['Boolean'];
|
||||
destroyCoreViewSort: Scalars['Boolean'];
|
||||
@@ -2083,7 +2093,7 @@ export type MutationDeleteCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationDeleteCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: DeleteViewFilterInput;
|
||||
};
|
||||
|
||||
|
||||
@@ -2223,7 +2233,7 @@ export type MutationDestroyCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationDestroyCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: DestroyViewFilterInput;
|
||||
};
|
||||
|
||||
|
||||
@@ -2496,7 +2506,6 @@ export type MutationUpdateCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationUpdateCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: UpdateViewFilterInput;
|
||||
};
|
||||
|
||||
@@ -4109,14 +4118,19 @@ export type UpdateViewFilterGroupInput = {
|
||||
};
|
||||
|
||||
export type UpdateViewFilterInput = {
|
||||
/** The id of the view filter to update */
|
||||
id: Scalars['UUID'];
|
||||
/** The view filter to update */
|
||||
update: UpdateViewFilterInputUpdates;
|
||||
};
|
||||
|
||||
export type UpdateViewFilterInputUpdates = {
|
||||
fieldMetadataId?: InputMaybe<Scalars['UUID']>;
|
||||
id?: InputMaybe<Scalars['UUID']>;
|
||||
operand?: InputMaybe<ViewFilterOperand>;
|
||||
positionInViewFilterGroup?: InputMaybe<Scalars['Float']>;
|
||||
subFieldName?: InputMaybe<Scalars['String']>;
|
||||
value?: InputMaybe<Scalars['JSON']>;
|
||||
viewFilterGroupId?: InputMaybe<Scalars['UUID']>;
|
||||
viewId?: InputMaybe<Scalars['UUID']>;
|
||||
};
|
||||
|
||||
export type UpdateViewGroupInput = {
|
||||
@@ -5586,11 +5600,11 @@ export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typen
|
||||
|
||||
export type ViewFieldFragmentFragment = { __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null };
|
||||
|
||||
export type ViewFilterFragmentFragment = { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string };
|
||||
export type ViewFilterFragmentFragment = { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null };
|
||||
|
||||
export type ViewFilterGroupFragmentFragment = { __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string };
|
||||
|
||||
export type ViewFragmentFragment = { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> };
|
||||
export type ViewFragmentFragment = { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> };
|
||||
|
||||
export type ViewGroupFragmentFragment = { __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string };
|
||||
|
||||
@@ -5601,7 +5615,7 @@ export type CreateCoreViewMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type CreateCoreViewMutation = { __typename?: 'Mutation', createCoreView: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } };
|
||||
export type CreateCoreViewMutation = { __typename?: 'Mutation', createCoreView: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } };
|
||||
|
||||
export type CreateCoreViewFieldMutationVariables = Exact<{
|
||||
input: CreateViewFieldInput;
|
||||
@@ -5615,7 +5629,7 @@ export type CreateCoreViewFilterMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type CreateCoreViewFilterMutation = { __typename?: 'Mutation', createCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string } };
|
||||
export type CreateCoreViewFilterMutation = { __typename?: 'Mutation', createCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type CreateCoreViewFilterGroupMutationVariables = Exact<{
|
||||
input: CreateViewFilterGroupInput;
|
||||
@@ -5653,11 +5667,11 @@ export type DeleteCoreViewFieldMutationVariables = Exact<{
|
||||
export type DeleteCoreViewFieldMutation = { __typename?: 'Mutation', deleteCoreViewField: { __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DeleteCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: DeleteViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type DeleteCoreViewFilterMutation = { __typename?: 'Mutation', deleteCoreViewFilter: boolean };
|
||||
export type DeleteCoreViewFilterMutation = { __typename?: 'Mutation', deleteCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DeleteCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -5695,11 +5709,11 @@ export type DestroyCoreViewFieldMutationVariables = Exact<{
|
||||
export type DestroyCoreViewFieldMutation = { __typename?: 'Mutation', destroyCoreViewField: { __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DestroyCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: DestroyViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type DestroyCoreViewFilterMutation = { __typename?: 'Mutation', destroyCoreViewFilter: boolean };
|
||||
export type DestroyCoreViewFilterMutation = { __typename?: 'Mutation', destroyCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DestroyCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -5728,7 +5742,7 @@ export type UpdateCoreViewMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type UpdateCoreViewMutation = { __typename?: 'Mutation', updateCoreView: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } };
|
||||
export type UpdateCoreViewMutation = { __typename?: 'Mutation', updateCoreView: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } };
|
||||
|
||||
export type UpdateCoreViewFieldMutationVariables = Exact<{
|
||||
input: UpdateViewFieldInput;
|
||||
@@ -5738,12 +5752,11 @@ export type UpdateCoreViewFieldMutationVariables = Exact<{
|
||||
export type UpdateCoreViewFieldMutation = { __typename?: 'Mutation', updateCoreViewField: { __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type UpdateCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: UpdateViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type UpdateCoreViewFilterMutation = { __typename?: 'Mutation', updateCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string } };
|
||||
export type UpdateCoreViewFilterMutation = { __typename?: 'Mutation', updateCoreViewFilter: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type UpdateCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -5772,7 +5785,7 @@ export type UpdateCoreViewSortMutation = { __typename?: 'Mutation', updateCoreVi
|
||||
export type FindAllCoreViewsQueryVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
export type FindAllCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> }> };
|
||||
export type FindAllCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> }> };
|
||||
|
||||
export type FindManyCoreViewFieldsQueryVariables = Exact<{
|
||||
viewId: Scalars['String'];
|
||||
@@ -5793,7 +5806,7 @@ export type FindManyCoreViewFiltersQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindManyCoreViewFiltersQuery = { __typename?: 'Query', getCoreViewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }> };
|
||||
export type FindManyCoreViewFiltersQuery = { __typename?: 'Query', getCoreViewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }> };
|
||||
|
||||
export type FindManyCoreViewGroupsQueryVariables = Exact<{
|
||||
viewId?: InputMaybe<Scalars['String']>;
|
||||
@@ -5814,14 +5827,14 @@ export type FindManyCoreViewsQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindManyCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> }> };
|
||||
export type FindManyCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> }> };
|
||||
|
||||
export type FindOneCoreViewQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
}>;
|
||||
|
||||
|
||||
export type FindOneCoreViewQuery = { __typename?: 'Query', getCoreView?: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } | null };
|
||||
export type FindOneCoreViewQuery = { __typename?: 'Query', getCoreView?: { __typename?: 'CoreView', id: string, name: string, objectMetadataId: string, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: string | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: string | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: string, fieldMetadataId: string, viewId: string, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: string, parentViewFilterGroupId?: string | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: string }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: string, fieldMetadataId: string, direction: ViewSortDirection, viewId: string }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: string, fieldMetadataId: string, isVisible: boolean, fieldValue: string, position: number, viewId: string }> } | null };
|
||||
|
||||
export type FindOneCoreViewFieldQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -5835,7 +5848,7 @@ export type FindOneCoreViewFilterQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindOneCoreViewFilterQuery = { __typename?: 'Query', getCoreViewFilter?: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string } | null };
|
||||
export type FindOneCoreViewFilterQuery = { __typename?: 'Query', getCoreViewFilter?: { __typename?: 'CoreViewFilter', id: string, fieldMetadataId: string, operand: ViewFilterOperand, value: any, viewFilterGroupId?: string | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: string, createdAt: string, updatedAt: string, deletedAt?: string | null } | null };
|
||||
|
||||
export type FindOneCoreViewFilterGroupQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -6441,6 +6454,9 @@ export const ViewFilterFragmentFragmentDoc = gql`
|
||||
positionInViewFilterGroup
|
||||
subFieldName
|
||||
viewId
|
||||
createdAt
|
||||
updatedAt
|
||||
deletedAt
|
||||
}
|
||||
`;
|
||||
export const ViewFilterGroupFragmentFragmentDoc = gql`
|
||||
@@ -11997,10 +12013,12 @@ export type DeleteCoreViewFieldMutationHookResult = ReturnType<typeof useDeleteC
|
||||
export type DeleteCoreViewFieldMutationResult = Apollo.MutationResult<DeleteCoreViewFieldMutation>;
|
||||
export type DeleteCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<DeleteCoreViewFieldMutation, DeleteCoreViewFieldMutationVariables>;
|
||||
export const DeleteCoreViewFilterDocument = gql`
|
||||
mutation DeleteCoreViewFilter($id: String!) {
|
||||
deleteCoreViewFilter(id: $id)
|
||||
mutation DeleteCoreViewFilter($input: DeleteViewFilterInput!) {
|
||||
deleteCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
${ViewFilterFragmentFragmentDoc}`;
|
||||
export type DeleteCoreViewFilterMutationFn = Apollo.MutationFunction<DeleteCoreViewFilterMutation, DeleteCoreViewFilterMutationVariables>;
|
||||
|
||||
/**
|
||||
@@ -12016,7 +12034,7 @@ export type DeleteCoreViewFilterMutationFn = Apollo.MutationFunction<DeleteCoreV
|
||||
* @example
|
||||
* const [deleteCoreViewFilterMutation, { data, loading, error }] = useDeleteCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
@@ -12185,10 +12203,12 @@ export type DestroyCoreViewFieldMutationHookResult = ReturnType<typeof useDestro
|
||||
export type DestroyCoreViewFieldMutationResult = Apollo.MutationResult<DestroyCoreViewFieldMutation>;
|
||||
export type DestroyCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<DestroyCoreViewFieldMutation, DestroyCoreViewFieldMutationVariables>;
|
||||
export const DestroyCoreViewFilterDocument = gql`
|
||||
mutation DestroyCoreViewFilter($id: String!) {
|
||||
destroyCoreViewFilter(id: $id)
|
||||
mutation DestroyCoreViewFilter($input: DestroyViewFilterInput!) {
|
||||
destroyCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
${ViewFilterFragmentFragmentDoc}`;
|
||||
export type DestroyCoreViewFilterMutationFn = Apollo.MutationFunction<DestroyCoreViewFilterMutation, DestroyCoreViewFilterMutationVariables>;
|
||||
|
||||
/**
|
||||
@@ -12204,7 +12224,7 @@ export type DestroyCoreViewFilterMutationFn = Apollo.MutationFunction<DestroyCor
|
||||
* @example
|
||||
* const [destroyCoreViewFilterMutation, { data, loading, error }] = useDestroyCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
@@ -12376,8 +12396,8 @@ export type UpdateCoreViewFieldMutationHookResult = ReturnType<typeof useUpdateC
|
||||
export type UpdateCoreViewFieldMutationResult = Apollo.MutationResult<UpdateCoreViewFieldMutation>;
|
||||
export type UpdateCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<UpdateCoreViewFieldMutation, UpdateCoreViewFieldMutationVariables>;
|
||||
export const UpdateCoreViewFilterDocument = gql`
|
||||
mutation UpdateCoreViewFilter($id: String!, $input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(id: $id, input: $input) {
|
||||
mutation UpdateCoreViewFilter($input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
@@ -12397,7 +12417,6 @@ export type UpdateCoreViewFilterMutationFn = Apollo.MutationFunction<UpdateCoreV
|
||||
* @example
|
||||
* const [updateCoreViewFilterMutation, { data, loading, error }] = useUpdateCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
|
||||
@@ -1012,6 +1012,11 @@ export type DeleteViewFieldInput = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DeleteViewFilterInput = {
|
||||
/** The id of the view filter to delete. */
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DeleteWebhookDto = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
@@ -1037,6 +1042,11 @@ export type DestroyViewFieldInput = {
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
export type DestroyViewFilterInput = {
|
||||
/** The id of the view filter to destroy. */
|
||||
id: Scalars['UUID'];
|
||||
};
|
||||
|
||||
/** Schema update on a table */
|
||||
export enum DistantTableUpdate {
|
||||
COLUMNS_ADDED = 'COLUMNS_ADDED',
|
||||
@@ -1658,7 +1668,7 @@ export type Mutation = {
|
||||
deleteApprovedAccessDomain: Scalars['Boolean'];
|
||||
deleteCoreView: Scalars['Boolean'];
|
||||
deleteCoreViewField: CoreViewField;
|
||||
deleteCoreViewFilter: Scalars['Boolean'];
|
||||
deleteCoreViewFilter: CoreViewFilter;
|
||||
deleteCoreViewFilterGroup: Scalars['Boolean'];
|
||||
deleteCoreViewGroup: Scalars['Boolean'];
|
||||
deleteCoreViewSort: Scalars['Boolean'];
|
||||
@@ -1687,7 +1697,7 @@ export type Mutation = {
|
||||
deleteWorkspaceInvitation: Scalars['String'];
|
||||
destroyCoreView: Scalars['Boolean'];
|
||||
destroyCoreViewField: CoreViewField;
|
||||
destroyCoreViewFilter: Scalars['Boolean'];
|
||||
destroyCoreViewFilter: CoreViewFilter;
|
||||
destroyCoreViewFilterGroup: Scalars['Boolean'];
|
||||
destroyCoreViewGroup: Scalars['Boolean'];
|
||||
destroyCoreViewSort: Scalars['Boolean'];
|
||||
@@ -2019,7 +2029,7 @@ export type MutationDeleteCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationDeleteCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: DeleteViewFilterInput;
|
||||
};
|
||||
|
||||
|
||||
@@ -2154,7 +2164,7 @@ export type MutationDestroyCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationDestroyCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: DestroyViewFilterInput;
|
||||
};
|
||||
|
||||
|
||||
@@ -2412,7 +2422,6 @@ export type MutationUpdateCoreViewFieldArgs = {
|
||||
|
||||
|
||||
export type MutationUpdateCoreViewFilterArgs = {
|
||||
id: Scalars['String'];
|
||||
input: UpdateViewFilterInput;
|
||||
};
|
||||
|
||||
@@ -3947,14 +3956,19 @@ export type UpdateViewFilterGroupInput = {
|
||||
};
|
||||
|
||||
export type UpdateViewFilterInput = {
|
||||
/** The id of the view filter to update */
|
||||
id: Scalars['UUID'];
|
||||
/** The view filter to update */
|
||||
update: UpdateViewFilterInputUpdates;
|
||||
};
|
||||
|
||||
export type UpdateViewFilterInputUpdates = {
|
||||
fieldMetadataId?: InputMaybe<Scalars['UUID']>;
|
||||
id?: InputMaybe<Scalars['UUID']>;
|
||||
operand?: InputMaybe<ViewFilterOperand>;
|
||||
positionInViewFilterGroup?: InputMaybe<Scalars['Float']>;
|
||||
subFieldName?: InputMaybe<Scalars['String']>;
|
||||
value?: InputMaybe<Scalars['JSON']>;
|
||||
viewFilterGroupId?: InputMaybe<Scalars['UUID']>;
|
||||
viewId?: InputMaybe<Scalars['UUID']>;
|
||||
};
|
||||
|
||||
export type UpdateViewGroupInput = {
|
||||
@@ -4450,11 +4464,11 @@ export type OnDbEventSubscription = { __typename?: 'Subscription', onDbEvent: {
|
||||
|
||||
export type ViewFieldFragmentFragment = { __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null };
|
||||
|
||||
export type ViewFilterFragmentFragment = { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any };
|
||||
export type ViewFilterFragmentFragment = { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null };
|
||||
|
||||
export type ViewFilterGroupFragmentFragment = { __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any };
|
||||
|
||||
export type ViewFragmentFragment = { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> };
|
||||
export type ViewFragmentFragment = { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> };
|
||||
|
||||
export type ViewGroupFragmentFragment = { __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any };
|
||||
|
||||
@@ -4465,7 +4479,7 @@ export type CreateCoreViewMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type CreateCoreViewMutation = { __typename?: 'Mutation', createCoreView: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } };
|
||||
export type CreateCoreViewMutation = { __typename?: 'Mutation', createCoreView: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } };
|
||||
|
||||
export type CreateCoreViewFieldMutationVariables = Exact<{
|
||||
input: CreateViewFieldInput;
|
||||
@@ -4479,7 +4493,7 @@ export type CreateCoreViewFilterMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type CreateCoreViewFilterMutation = { __typename?: 'Mutation', createCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any } };
|
||||
export type CreateCoreViewFilterMutation = { __typename?: 'Mutation', createCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type CreateCoreViewFilterGroupMutationVariables = Exact<{
|
||||
input: CreateViewFilterGroupInput;
|
||||
@@ -4517,11 +4531,11 @@ export type DeleteCoreViewFieldMutationVariables = Exact<{
|
||||
export type DeleteCoreViewFieldMutation = { __typename?: 'Mutation', deleteCoreViewField: { __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DeleteCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: DeleteViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type DeleteCoreViewFilterMutation = { __typename?: 'Mutation', deleteCoreViewFilter: boolean };
|
||||
export type DeleteCoreViewFilterMutation = { __typename?: 'Mutation', deleteCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DeleteCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -4559,11 +4573,11 @@ export type DestroyCoreViewFieldMutationVariables = Exact<{
|
||||
export type DestroyCoreViewFieldMutation = { __typename?: 'Mutation', destroyCoreViewField: { __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DestroyCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: DestroyViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type DestroyCoreViewFilterMutation = { __typename?: 'Mutation', destroyCoreViewFilter: boolean };
|
||||
export type DestroyCoreViewFilterMutation = { __typename?: 'Mutation', destroyCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type DestroyCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -4592,7 +4606,7 @@ export type UpdateCoreViewMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type UpdateCoreViewMutation = { __typename?: 'Mutation', updateCoreView: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } };
|
||||
export type UpdateCoreViewMutation = { __typename?: 'Mutation', updateCoreView: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } };
|
||||
|
||||
export type UpdateCoreViewFieldMutationVariables = Exact<{
|
||||
input: UpdateViewFieldInput;
|
||||
@@ -4602,12 +4616,11 @@ export type UpdateCoreViewFieldMutationVariables = Exact<{
|
||||
export type UpdateCoreViewFieldMutation = { __typename?: 'Mutation', updateCoreViewField: { __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type UpdateCoreViewFilterMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
input: UpdateViewFilterInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type UpdateCoreViewFilterMutation = { __typename?: 'Mutation', updateCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any } };
|
||||
export type UpdateCoreViewFilterMutation = { __typename?: 'Mutation', updateCoreViewFilter: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null } };
|
||||
|
||||
export type UpdateCoreViewFilterGroupMutationVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -4636,7 +4649,7 @@ export type UpdateCoreViewSortMutation = { __typename?: 'Mutation', updateCoreVi
|
||||
export type FindAllCoreViewsQueryVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
export type FindAllCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> }> };
|
||||
export type FindAllCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> }> };
|
||||
|
||||
export type FindManyCoreViewFieldsQueryVariables = Exact<{
|
||||
viewId: Scalars['String'];
|
||||
@@ -4657,7 +4670,7 @@ export type FindManyCoreViewFiltersQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindManyCoreViewFiltersQuery = { __typename?: 'Query', getCoreViewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }> };
|
||||
export type FindManyCoreViewFiltersQuery = { __typename?: 'Query', getCoreViewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }> };
|
||||
|
||||
export type FindManyCoreViewGroupsQueryVariables = Exact<{
|
||||
viewId?: InputMaybe<Scalars['String']>;
|
||||
@@ -4678,14 +4691,14 @@ export type FindManyCoreViewsQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindManyCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> }> };
|
||||
export type FindManyCoreViewsQuery = { __typename?: 'Query', getCoreViews: Array<{ __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> }> };
|
||||
|
||||
export type FindOneCoreViewQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
}>;
|
||||
|
||||
|
||||
export type FindOneCoreViewQuery = { __typename?: 'Query', getCoreView?: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } | null };
|
||||
export type FindOneCoreViewQuery = { __typename?: 'Query', getCoreView?: { __typename?: 'CoreView', id: any, name: string, objectMetadataId: any, type: ViewType, key?: ViewKey | null, icon: string, position: number, isCompact: boolean, openRecordIn: ViewOpenRecordIn, kanbanAggregateOperation?: AggregateOperations | null, kanbanAggregateOperationFieldMetadataId?: any | null, anyFieldFilterValue?: string | null, calendarFieldMetadataId?: any | null, calendarLayout?: ViewCalendarLayout | null, viewFields: Array<{ __typename?: 'CoreViewField', id: any, fieldMetadataId: any, viewId: any, isVisible: boolean, position: number, size: number, aggregateOperation?: AggregateOperations | null, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilters: Array<{ __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null }>, viewFilterGroups: Array<{ __typename?: 'CoreViewFilterGroup', id: any, parentViewFilterGroupId?: any | null, logicalOperator: ViewFilterGroupLogicalOperator, positionInViewFilterGroup?: number | null, viewId: any }>, viewSorts: Array<{ __typename?: 'CoreViewSort', id: any, fieldMetadataId: any, direction: ViewSortDirection, viewId: any }>, viewGroups: Array<{ __typename?: 'CoreViewGroup', id: any, fieldMetadataId: any, isVisible: boolean, fieldValue: string, position: number, viewId: any }> } | null };
|
||||
|
||||
export type FindOneCoreViewFieldQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -4699,7 +4712,7 @@ export type FindOneCoreViewFilterQueryVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type FindOneCoreViewFilterQuery = { __typename?: 'Query', getCoreViewFilter?: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any } | null };
|
||||
export type FindOneCoreViewFilterQuery = { __typename?: 'Query', getCoreViewFilter?: { __typename?: 'CoreViewFilter', id: any, fieldMetadataId: any, operand: ViewFilterOperand, value: any, viewFilterGroupId?: any | null, positionInViewFilterGroup?: number | null, subFieldName?: string | null, viewId: any, createdAt: string, updatedAt: string, deletedAt?: string | null } | null };
|
||||
|
||||
export type FindOneCoreViewFilterGroupQueryVariables = Exact<{
|
||||
id: Scalars['String'];
|
||||
@@ -4836,6 +4849,9 @@ export const ViewFilterFragmentFragmentDoc = gql`
|
||||
positionInViewFilterGroup
|
||||
subFieldName
|
||||
viewId
|
||||
createdAt
|
||||
updatedAt
|
||||
deletedAt
|
||||
}
|
||||
`;
|
||||
export const ViewFilterGroupFragmentFragmentDoc = gql`
|
||||
@@ -5311,10 +5327,12 @@ export type DeleteCoreViewFieldMutationHookResult = ReturnType<typeof useDeleteC
|
||||
export type DeleteCoreViewFieldMutationResult = Apollo.MutationResult<DeleteCoreViewFieldMutation>;
|
||||
export type DeleteCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<DeleteCoreViewFieldMutation, DeleteCoreViewFieldMutationVariables>;
|
||||
export const DeleteCoreViewFilterDocument = gql`
|
||||
mutation DeleteCoreViewFilter($id: String!) {
|
||||
deleteCoreViewFilter(id: $id)
|
||||
mutation DeleteCoreViewFilter($input: DeleteViewFilterInput!) {
|
||||
deleteCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
${ViewFilterFragmentFragmentDoc}`;
|
||||
export type DeleteCoreViewFilterMutationFn = Apollo.MutationFunction<DeleteCoreViewFilterMutation, DeleteCoreViewFilterMutationVariables>;
|
||||
|
||||
/**
|
||||
@@ -5330,7 +5348,7 @@ export type DeleteCoreViewFilterMutationFn = Apollo.MutationFunction<DeleteCoreV
|
||||
* @example
|
||||
* const [deleteCoreViewFilterMutation, { data, loading, error }] = useDeleteCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
@@ -5499,10 +5517,12 @@ export type DestroyCoreViewFieldMutationHookResult = ReturnType<typeof useDestro
|
||||
export type DestroyCoreViewFieldMutationResult = Apollo.MutationResult<DestroyCoreViewFieldMutation>;
|
||||
export type DestroyCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<DestroyCoreViewFieldMutation, DestroyCoreViewFieldMutationVariables>;
|
||||
export const DestroyCoreViewFilterDocument = gql`
|
||||
mutation DestroyCoreViewFilter($id: String!) {
|
||||
destroyCoreViewFilter(id: $id)
|
||||
mutation DestroyCoreViewFilter($input: DestroyViewFilterInput!) {
|
||||
destroyCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
${ViewFilterFragmentFragmentDoc}`;
|
||||
export type DestroyCoreViewFilterMutationFn = Apollo.MutationFunction<DestroyCoreViewFilterMutation, DestroyCoreViewFilterMutationVariables>;
|
||||
|
||||
/**
|
||||
@@ -5518,7 +5538,7 @@ export type DestroyCoreViewFilterMutationFn = Apollo.MutationFunction<DestroyCor
|
||||
* @example
|
||||
* const [destroyCoreViewFilterMutation, { data, loading, error }] = useDestroyCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
@@ -5690,8 +5710,8 @@ export type UpdateCoreViewFieldMutationHookResult = ReturnType<typeof useUpdateC
|
||||
export type UpdateCoreViewFieldMutationResult = Apollo.MutationResult<UpdateCoreViewFieldMutation>;
|
||||
export type UpdateCoreViewFieldMutationOptions = Apollo.BaseMutationOptions<UpdateCoreViewFieldMutation, UpdateCoreViewFieldMutationVariables>;
|
||||
export const UpdateCoreViewFilterDocument = gql`
|
||||
mutation UpdateCoreViewFilter($id: String!, $input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(id: $id, input: $input) {
|
||||
mutation UpdateCoreViewFilter($input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
@@ -5711,7 +5731,6 @@ export type UpdateCoreViewFilterMutationFn = Apollo.MutationFunction<UpdateCoreV
|
||||
* @example
|
||||
* const [updateCoreViewFilterMutation, { data, loading, error }] = useUpdateCoreViewFilterMutation({
|
||||
* variables: {
|
||||
* id: // value for 'id'
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
|
||||
@@ -10,5 +10,8 @@ export const VIEW_FILTER_FRAGMENT = gql`
|
||||
positionInViewFilterGroup
|
||||
subFieldName
|
||||
viewId
|
||||
createdAt
|
||||
updatedAt
|
||||
deletedAt
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import { VIEW_FILTER_FRAGMENT } from '@/views/graphql/fragments/viewFilterFragment';
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const DELETE_CORE_VIEW_FILTER = gql`
|
||||
mutation DeleteCoreViewFilter($id: String!) {
|
||||
deleteCoreViewFilter(id: $id)
|
||||
${VIEW_FILTER_FRAGMENT}
|
||||
mutation DeleteCoreViewFilter($input: DeleteViewFilterInput!) {
|
||||
deleteCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import { VIEW_FILTER_FRAGMENT } from '@/views/graphql/fragments/viewFilterFragment';
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const DESTROY_CORE_VIEW_FILTER = gql`
|
||||
mutation DestroyCoreViewFilter($id: String!) {
|
||||
destroyCoreViewFilter(id: $id)
|
||||
${VIEW_FILTER_FRAGMENT}
|
||||
mutation DestroyCoreViewFilter($input: DestroyViewFilterInput!) {
|
||||
destroyCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -3,8 +3,8 @@ import { gql } from '@apollo/client';
|
||||
|
||||
export const UPDATE_CORE_VIEW_FILTER = gql`
|
||||
${VIEW_FILTER_FRAGMENT}
|
||||
mutation UpdateCoreViewFilter($id: String!, $input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(id: $id, input: $input) {
|
||||
mutation UpdateCoreViewFilter($input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(input: $input) {
|
||||
...ViewFilterFragment
|
||||
}
|
||||
}
|
||||
|
||||
+82
-113
@@ -1,159 +1,128 @@
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import { triggerCreateRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect';
|
||||
import { triggerDestroyRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect';
|
||||
import { triggerUpdateRecordOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect';
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
||||
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
|
||||
import { CREATE_CORE_VIEW_FILTER } from '@/views/graphql/mutations/createCoreViewFilter';
|
||||
import { DESTROY_CORE_VIEW_FILTER } from '@/views/graphql/mutations/destroyCoreViewFilter';
|
||||
import { UPDATE_CORE_VIEW_FILTER } from '@/views/graphql/mutations/updateCoreViewFilter';
|
||||
import { type GraphQLView } from '@/views/types/GraphQLView';
|
||||
import { type ViewFilter } from '@/views/types/ViewFilter';
|
||||
import { useApolloClient } from '@apollo/client';
|
||||
import { isNull } from '@sniptt/guards';
|
||||
import { useTriggerViewFilterOptimisticEffect } from '@/views/optimistic-effects/hooks/useTriggerViewFilterOptimisticEffect';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type CoreViewFilter } from '~/generated/graphql';
|
||||
import {
|
||||
type CreateCoreViewFilterMutationVariables,
|
||||
type DeleteCoreViewFilterMutationVariables,
|
||||
type DestroyCoreViewFilterMutationVariables,
|
||||
type UpdateCoreViewFilterMutationVariables,
|
||||
useCreateCoreViewFilterMutation,
|
||||
useDeleteCoreViewFilterMutation,
|
||||
useDestroyCoreViewFilterMutation,
|
||||
useUpdateCoreViewFilterMutation,
|
||||
} from '~/generated/graphql';
|
||||
|
||||
export const usePersistViewFilterRecords = () => {
|
||||
const { objectMetadataItem } = useObjectMetadataItem({
|
||||
objectNameSingular: CoreObjectNameSingular.ViewFilter,
|
||||
});
|
||||
|
||||
const getRecordFromCache = useGetRecordFromCache({
|
||||
objectNameSingular: CoreObjectNameSingular.ViewFilter,
|
||||
});
|
||||
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
|
||||
const apolloClient = useApolloClient();
|
||||
const { triggerViewFilterOptimisticEffect } =
|
||||
useTriggerViewFilterOptimisticEffect();
|
||||
const [createCoreViewFilterMutation] = useCreateCoreViewFilterMutation();
|
||||
const [updateCoreViewFilterMutation] = useUpdateCoreViewFilterMutation();
|
||||
const [deleteCoreViewFilterMutation] = useDeleteCoreViewFilterMutation();
|
||||
const [destroyCoreViewFilterMutation] = useDestroyCoreViewFilterMutation();
|
||||
|
||||
const createCoreViewFilterRecords = useCallback(
|
||||
(viewFiltersToCreate: ViewFilter[], view: Pick<GraphQLView, 'id'>) => {
|
||||
if (viewFiltersToCreate.length === 0) return;
|
||||
(createCoreViewFilterInputs: CreateCoreViewFilterMutationVariables[]) => {
|
||||
if (createCoreViewFilterInputs.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
return Promise.all(
|
||||
viewFiltersToCreate.map((viewFilter) =>
|
||||
apolloClient.mutate({
|
||||
mutation: CREATE_CORE_VIEW_FILTER,
|
||||
variables: {
|
||||
input: {
|
||||
id: viewFilter.id,
|
||||
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||
viewId: view.id,
|
||||
value: viewFilter.value,
|
||||
operand: viewFilter.operand,
|
||||
viewFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
subFieldName: viewFilter.subFieldName ?? null,
|
||||
} satisfies Partial<CoreViewFilter>,
|
||||
},
|
||||
update: (cache, { data }) => {
|
||||
const record = data?.['createCoreViewFilter'];
|
||||
if (!isDefined(record)) return;
|
||||
createCoreViewFilterInputs.map((variables) =>
|
||||
createCoreViewFilterMutation({
|
||||
variables,
|
||||
update: (_cache, { data }) => {
|
||||
const createdViewFilter = data?.createCoreViewFilter;
|
||||
if (!isDefined(createdViewFilter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
triggerCreateRecordsOptimisticEffect({
|
||||
cache,
|
||||
objectMetadataItem,
|
||||
recordsToCreate: [record],
|
||||
objectMetadataItems,
|
||||
objectPermissionsByObjectMetadataId,
|
||||
triggerViewFilterOptimisticEffect({
|
||||
createdViewFilters: [createdViewFilter],
|
||||
});
|
||||
},
|
||||
}),
|
||||
),
|
||||
);
|
||||
},
|
||||
[
|
||||
apolloClient,
|
||||
objectMetadataItem,
|
||||
objectMetadataItems,
|
||||
objectPermissionsByObjectMetadataId,
|
||||
],
|
||||
[triggerViewFilterOptimisticEffect, createCoreViewFilterMutation],
|
||||
);
|
||||
|
||||
const updateCoreViewFilterRecords = useCallback(
|
||||
(viewFiltersToUpdate: ViewFilter[]) => {
|
||||
if (!viewFiltersToUpdate.length) return;
|
||||
(updateCoreViewFilterInputs: UpdateCoreViewFilterMutationVariables[]) => {
|
||||
if (updateCoreViewFilterInputs.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
return Promise.all(
|
||||
viewFiltersToUpdate.map((viewFilter) =>
|
||||
apolloClient.mutate({
|
||||
mutation: UPDATE_CORE_VIEW_FILTER,
|
||||
variables: {
|
||||
id: viewFilter.id,
|
||||
input: {
|
||||
value: viewFilter.value,
|
||||
operand: viewFilter.operand,
|
||||
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
viewFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
subFieldName: viewFilter.subFieldName ?? null,
|
||||
} satisfies Partial<CoreViewFilter>,
|
||||
},
|
||||
update: (cache, { data }) => {
|
||||
const record = data?.['updateCoreViewFilter'];
|
||||
if (!isDefined(record)) return;
|
||||
updateCoreViewFilterInputs.map((variables) =>
|
||||
updateCoreViewFilterMutation({
|
||||
variables,
|
||||
update: (_cache, { data }) => {
|
||||
const updatedViewFilter = data?.updateCoreViewFilter;
|
||||
if (!isDefined(updatedViewFilter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const cachedRecord = getRecordFromCache<ViewFilter>(
|
||||
record.id,
|
||||
cache,
|
||||
);
|
||||
if (isNull(cachedRecord)) return;
|
||||
|
||||
triggerUpdateRecordOptimisticEffect({
|
||||
cache,
|
||||
objectMetadataItem,
|
||||
currentRecord: cachedRecord,
|
||||
updatedRecord: record,
|
||||
objectMetadataItems,
|
||||
triggerViewFilterOptimisticEffect({
|
||||
updatedViewFilters: [updatedViewFilter],
|
||||
});
|
||||
},
|
||||
}),
|
||||
),
|
||||
);
|
||||
},
|
||||
[apolloClient, getRecordFromCache, objectMetadataItem, objectMetadataItems],
|
||||
[triggerViewFilterOptimisticEffect, updateCoreViewFilterMutation],
|
||||
);
|
||||
|
||||
const deleteCoreViewFilterRecords = useCallback(
|
||||
(viewFilterIdsToDelete: string[]) => {
|
||||
if (!viewFilterIdsToDelete.length) return;
|
||||
(deleteCoreViewFilterInputs: DeleteCoreViewFilterMutationVariables[]) => {
|
||||
if (deleteCoreViewFilterInputs.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
return Promise.all(
|
||||
viewFilterIdsToDelete.map((viewFilterId) =>
|
||||
apolloClient.mutate({
|
||||
mutation: DESTROY_CORE_VIEW_FILTER,
|
||||
variables: {
|
||||
id: viewFilterId,
|
||||
},
|
||||
update: (cache, { data }) => {
|
||||
const record = data?.['destroyCoreViewFilter'];
|
||||
if (!isDefined(record)) return;
|
||||
deleteCoreViewFilterInputs.map((variables) =>
|
||||
deleteCoreViewFilterMutation({
|
||||
variables,
|
||||
update: (_cache, { data }) => {
|
||||
const deletedViewFilter = data?.deleteCoreViewFilter;
|
||||
if (!isDefined(deletedViewFilter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const cachedRecord = getRecordFromCache<ViewFilter>(
|
||||
record.id,
|
||||
cache,
|
||||
);
|
||||
if (isNull(cachedRecord)) return;
|
||||
|
||||
triggerDestroyRecordsOptimisticEffect({
|
||||
cache,
|
||||
objectMetadataItem,
|
||||
recordsToDestroy: [cachedRecord],
|
||||
objectMetadataItems,
|
||||
triggerViewFilterOptimisticEffect({
|
||||
deletedViewFilters: [deletedViewFilter],
|
||||
});
|
||||
},
|
||||
}),
|
||||
),
|
||||
);
|
||||
},
|
||||
[apolloClient, getRecordFromCache, objectMetadataItem, objectMetadataItems],
|
||||
[triggerViewFilterOptimisticEffect, deleteCoreViewFilterMutation],
|
||||
);
|
||||
|
||||
const destroyCoreViewFilterRecords = useCallback(
|
||||
(destroyCoreViewFilterInputs: DestroyCoreViewFilterMutationVariables[]) => {
|
||||
if (destroyCoreViewFilterInputs.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
return Promise.all(
|
||||
destroyCoreViewFilterInputs.map((variables) =>
|
||||
destroyCoreViewFilterMutation({
|
||||
variables,
|
||||
}),
|
||||
),
|
||||
);
|
||||
},
|
||||
[destroyCoreViewFilterMutation],
|
||||
);
|
||||
|
||||
return {
|
||||
createViewFilterRecords: createCoreViewFilterRecords,
|
||||
updateViewFilterRecords: updateCoreViewFilterRecords,
|
||||
deleteViewFilterRecords: deleteCoreViewFilterRecords,
|
||||
destroyViewFilterRecords: destroyCoreViewFilterRecords,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -231,7 +231,21 @@ export const useCreateViewFromCurrentView = (viewBarComponentId?: string) => {
|
||||
await createViewFilterGroupRecords(viewFilterGroupsToCreate, {
|
||||
id: newViewId,
|
||||
});
|
||||
await createViewFilterRecords(viewFiltersToCreate, { id: newViewId });
|
||||
const createViewFilterInputs = viewFiltersToCreate.map(
|
||||
(viewFilter) => ({
|
||||
input: {
|
||||
id: viewFilter.id,
|
||||
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||
viewId: newViewId,
|
||||
value: viewFilter.value,
|
||||
operand: viewFilter.operand,
|
||||
viewFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
subFieldName: viewFilter.subFieldName ?? null,
|
||||
},
|
||||
}),
|
||||
);
|
||||
await createViewFilterRecords(createViewFilterInputs);
|
||||
await createViewSortRecords(viewSortsToCreate, { id: newViewId });
|
||||
}
|
||||
|
||||
|
||||
+11
-1
@@ -95,7 +95,17 @@ export const useRefreshCoreViewsByObjectMetadataId = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (!isDeeplyEqual(coreView.viewFilters, existingView.viewFilters)) {
|
||||
if (
|
||||
!isDeeplyEqual(
|
||||
coreView.viewFilters.map((viewFilter) =>
|
||||
removePropertiesFromRecord(viewFilter, [
|
||||
'createdAt',
|
||||
'updatedAt',
|
||||
]),
|
||||
),
|
||||
existingView.viewFilters,
|
||||
)
|
||||
) {
|
||||
const view = convertCoreViewToView(coreView);
|
||||
set(
|
||||
currentRecordFiltersComponentState.atomFamily({
|
||||
|
||||
@@ -56,13 +56,47 @@ export const useSaveRecordFiltersToViewFilters = () => {
|
||||
newViewFilters,
|
||||
);
|
||||
|
||||
const viewFilterIdsToDelete = viewFiltersToDelete.map(
|
||||
(viewFilter) => viewFilter.id,
|
||||
const createViewFilterInputs = viewFiltersToCreate.map(
|
||||
(viewFilter) => ({
|
||||
input: {
|
||||
id: viewFilter.id,
|
||||
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||
viewId: currentView.id,
|
||||
value: viewFilter.value,
|
||||
operand: viewFilter.operand,
|
||||
viewFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
subFieldName: viewFilter.subFieldName ?? null,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
await createViewFilterRecords(viewFiltersToCreate, currentView);
|
||||
await updateViewFilterRecords(viewFiltersToUpdate);
|
||||
await deleteViewFilterRecords(viewFilterIdsToDelete);
|
||||
const updateViewFilterInputs = viewFiltersToUpdate.map(
|
||||
(viewFilter) => ({
|
||||
input: {
|
||||
id: viewFilter.id,
|
||||
update: {
|
||||
value: viewFilter.value,
|
||||
operand: viewFilter.operand,
|
||||
positionInViewFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
viewFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
subFieldName: viewFilter.subFieldName ?? null,
|
||||
},
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const deleteViewFilterInputs = viewFiltersToDelete.map(
|
||||
(viewFilter) => ({
|
||||
input: {
|
||||
id: viewFilter.id,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
await createViewFilterRecords(createViewFilterInputs);
|
||||
await updateViewFilterRecords(updateViewFilterInputs);
|
||||
await deleteViewFilterRecords(deleteViewFilterInputs);
|
||||
},
|
||||
[
|
||||
currentView,
|
||||
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { type CoreViewWithRelations } from '@/views/types/CoreViewWithRelations';
|
||||
import { useApolloClient } from '@apollo/client';
|
||||
import { useRecoilCallback } from 'recoil';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type CoreViewFilter } from '~/generated/graphql';
|
||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||
type UpdatedDeletedCoreViewFilter = {
|
||||
createdViewFilters?: Omit<CoreViewFilter, 'workspaceId'>[];
|
||||
updatedViewFilters?: Omit<CoreViewFilter, 'workspaceId'>[];
|
||||
deletedViewFilters?: Pick<CoreViewFilter, 'id' | 'viewId'>[];
|
||||
};
|
||||
export const useTriggerViewFilterOptimisticEffect = () => {
|
||||
const apolloClient = useApolloClient();
|
||||
|
||||
const cache = apolloClient.cache;
|
||||
|
||||
const triggerViewFilterOptimisticEffect = useRecoilCallback(
|
||||
({ set, snapshot }) =>
|
||||
({
|
||||
createdViewFilters = [],
|
||||
updatedViewFilters = [],
|
||||
deletedViewFilters = [],
|
||||
}: UpdatedDeletedCoreViewFilter) => {
|
||||
const coreViews = getSnapshotValue(snapshot, coreViewsState);
|
||||
let newCoreViews = [...coreViews];
|
||||
|
||||
createdViewFilters.forEach((createdViewFilter) => {
|
||||
cache.modify<CoreViewWithRelations>({
|
||||
id: cache.identify({
|
||||
__typename: 'CoreView',
|
||||
id: createdViewFilter.viewId,
|
||||
}),
|
||||
fields: {
|
||||
viewFilters: (existingViewFilters, { toReference }) => [
|
||||
...(existingViewFilters ?? []),
|
||||
toReference(createdViewFilter),
|
||||
],
|
||||
},
|
||||
});
|
||||
const toBeModifiedCoreView = newCoreViews.find(
|
||||
(coreView) => coreView.id === createdViewFilter.viewId,
|
||||
);
|
||||
if (isDefined(toBeModifiedCoreView)) {
|
||||
newCoreViews = [
|
||||
...newCoreViews.filter(
|
||||
(coreView) => coreView.id !== createdViewFilter.viewId,
|
||||
),
|
||||
{
|
||||
...toBeModifiedCoreView,
|
||||
viewFilters: [
|
||||
...toBeModifiedCoreView.viewFilters,
|
||||
createdViewFilter,
|
||||
],
|
||||
},
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
updatedViewFilters.forEach((updatedViewFilter) => {
|
||||
cache.modify<CoreViewWithRelations>({
|
||||
id: cache.identify({
|
||||
__typename: 'CoreView',
|
||||
id: updatedViewFilter.viewId,
|
||||
}),
|
||||
fields: {
|
||||
viewFilters: (existingViewFilters, { readField, toReference }) =>
|
||||
existingViewFilters.map((viewFilter) => {
|
||||
const viewFilterId = readField<string>('id', viewFilter);
|
||||
if (viewFilterId === updatedViewFilter.id) {
|
||||
return toReference(updatedViewFilter);
|
||||
}
|
||||
return viewFilter;
|
||||
}),
|
||||
},
|
||||
});
|
||||
const toBeModifiedCoreView = newCoreViews.find(
|
||||
(coreView) => coreView.id === updatedViewFilter.viewId,
|
||||
);
|
||||
if (isDefined(toBeModifiedCoreView)) {
|
||||
newCoreViews = [
|
||||
...newCoreViews.filter(
|
||||
(coreView) => coreView.id !== updatedViewFilter.viewId,
|
||||
),
|
||||
{
|
||||
...toBeModifiedCoreView,
|
||||
viewFilters: [
|
||||
...toBeModifiedCoreView.viewFilters.filter(
|
||||
(viewFilter) => viewFilter.id !== updatedViewFilter.id,
|
||||
),
|
||||
updatedViewFilter,
|
||||
],
|
||||
},
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
deletedViewFilters.forEach(
|
||||
(deletedViewFilter: Pick<CoreViewFilter, 'id' | 'viewId'>) => {
|
||||
cache.modify<CoreViewWithRelations>({
|
||||
id: cache.identify({
|
||||
__typename: 'CoreView',
|
||||
id: deletedViewFilter.viewId,
|
||||
}),
|
||||
fields: {
|
||||
viewFilters: (existingViewFilters, { readField }) =>
|
||||
existingViewFilters.filter(
|
||||
(viewFilter) =>
|
||||
readField('id', viewFilter) !== deletedViewFilter.id,
|
||||
),
|
||||
},
|
||||
});
|
||||
const toBeModifiedCoreView = newCoreViews.find(
|
||||
(coreView) => coreView.id === deletedViewFilter.viewId,
|
||||
);
|
||||
|
||||
if (isDefined(toBeModifiedCoreView)) {
|
||||
newCoreViews = [
|
||||
...newCoreViews.filter(
|
||||
(coreView) => coreView.id !== deletedViewFilter.viewId,
|
||||
),
|
||||
{
|
||||
...toBeModifiedCoreView,
|
||||
viewFilters: toBeModifiedCoreView.viewFilters.filter(
|
||||
(viewFilter) => viewFilter.id !== deletedViewFilter.id,
|
||||
),
|
||||
},
|
||||
];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
if (!isDeeplyEqual(coreViews, newCoreViews)) {
|
||||
set(coreViewsState, newCoreViews);
|
||||
}
|
||||
},
|
||||
[cache],
|
||||
);
|
||||
|
||||
return {
|
||||
triggerViewFilterOptimisticEffect,
|
||||
};
|
||||
};
|
||||
+1
@@ -10,4 +10,5 @@ export const ALL_FLAT_ENTITY_MAPS_PROPERTIES = [
|
||||
'flatCronTriggerMaps',
|
||||
'flatRouteTriggerMaps',
|
||||
'flatFieldMetadataMaps',
|
||||
'flatViewFilterMaps',
|
||||
] as const satisfies (keyof AllFlatEntityMaps)[];
|
||||
|
||||
+1
@@ -11,4 +11,5 @@ export const EMPTY_ALL_FLAT_ENTITY_MAPS = {
|
||||
flatCronTriggerMaps: EMPTY_FLAT_ENTITY_MAPS,
|
||||
flatDatabaseEventTriggerMaps: EMPTY_FLAT_ENTITY_MAPS,
|
||||
flatRouteTriggerMaps: EMPTY_FLAT_ENTITY_MAPS,
|
||||
flatViewFilterMaps: EMPTY_FLAT_ENTITY_MAPS,
|
||||
} as const satisfies AllFlatEntityMaps;
|
||||
|
||||
+2
@@ -4,6 +4,7 @@ import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-m
|
||||
import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type';
|
||||
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type';
|
||||
import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type';
|
||||
import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type';
|
||||
@@ -18,4 +19,5 @@ export type AllFlatEntitiesByMetadataEngineName = {
|
||||
cronTrigger: FlatCronTrigger;
|
||||
databaseEventTrigger: FlatDatabaseEventTrigger;
|
||||
routeTrigger: FlatRouteTrigger;
|
||||
viewFilter: FlatViewFilter;
|
||||
};
|
||||
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
import diff from 'microdiff';
|
||||
import { type FromTo } from 'twenty-shared/types';
|
||||
import { parseJson } from 'twenty-shared/utils';
|
||||
|
||||
import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type';
|
||||
import { transformFlatEntityForComparison } from 'src/engine/core-modules/common/utils/transform-flat-entity-for-comparison.util';
|
||||
import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type';
|
||||
|
||||
export const compareTwoFlatEntity = <
|
||||
TFlatEntity extends AllFlatEntities,
|
||||
PToCompare extends keyof TFlatEntity,
|
||||
PJsonB extends keyof TFlatEntity,
|
||||
>({
|
||||
fromFlatEntity,
|
||||
toFlatEntity,
|
||||
propertiesToCompare,
|
||||
propertiesToStringify,
|
||||
}: {
|
||||
propertiesToCompare: PToCompare[];
|
||||
propertiesToStringify: PJsonB[];
|
||||
} & FromTo<TFlatEntity, 'flatEntity'>) => {
|
||||
const [transformedFromFlatEntity, transformedToFlatEntity] = [
|
||||
fromFlatEntity,
|
||||
toFlatEntity,
|
||||
].map((flatEntity) =>
|
||||
transformFlatEntityForComparison({
|
||||
flatEntity,
|
||||
options: {
|
||||
propertiesToCompare,
|
||||
propertiesToStringify,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const flatEntityDifferences = diff(
|
||||
transformedFromFlatEntity,
|
||||
transformedToFlatEntity,
|
||||
);
|
||||
|
||||
return flatEntityDifferences.flatMap<
|
||||
Array<
|
||||
{
|
||||
[P in PToCompare]: PropertyUpdate<TFlatEntity, P>;
|
||||
}[PToCompare]
|
||||
>[number]
|
||||
>((difference) => {
|
||||
switch (difference.type) {
|
||||
case 'CHANGE': {
|
||||
const { oldValue, path, value } = difference;
|
||||
const property = path[0] as PToCompare;
|
||||
const isJsonb = propertiesToStringify.includes(
|
||||
property as unknown as PJsonB,
|
||||
);
|
||||
|
||||
if (isJsonb) {
|
||||
return {
|
||||
from: parseJson(oldValue),
|
||||
to: parseJson(value),
|
||||
property,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
from: oldValue,
|
||||
to: value,
|
||||
property,
|
||||
};
|
||||
}
|
||||
case 'CREATE':
|
||||
case 'REMOVE':
|
||||
default: {
|
||||
// Should never occurs, we should only provide null never undefined and so on
|
||||
return [];
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type';
|
||||
import { orderObjectProperties } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/order-object-properties.util';
|
||||
|
||||
export function transformFlatEntityForComparison<
|
||||
TFlatEntity extends AllFlatEntities,
|
||||
PToCompare extends keyof TFlatEntity,
|
||||
PJsonB extends keyof TFlatEntity,
|
||||
>({
|
||||
flatEntity,
|
||||
options: { propertiesToCompare, propertiesToStringify },
|
||||
}: {
|
||||
flatEntity: TFlatEntity;
|
||||
options: {
|
||||
propertiesToCompare: PToCompare[];
|
||||
propertiesToStringify: PJsonB[];
|
||||
};
|
||||
}) {
|
||||
return propertiesToCompare.reduce(
|
||||
(flatEntityAccumulator, propertyToCompare) => {
|
||||
const currentValue = flatEntity[propertyToCompare];
|
||||
|
||||
if (
|
||||
propertiesToStringify.includes(propertyToCompare as unknown as PJsonB)
|
||||
) {
|
||||
const orderedValue = orderObjectProperties(currentValue);
|
||||
|
||||
return {
|
||||
...flatEntityAccumulator,
|
||||
[propertyToCompare]: JSON.stringify(orderedValue),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...flatEntityAccumulator,
|
||||
[propertyToCompare]: currentValue,
|
||||
};
|
||||
},
|
||||
{} as Pick<TFlatEntity, PToCompare>,
|
||||
);
|
||||
}
|
||||
+1
@@ -24,6 +24,7 @@ export const throwOnFieldInputTranspilationsError: ThrowOnFieldInputTranspilatio
|
||||
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||
{
|
||||
report: {
|
||||
viewFilter: [],
|
||||
fieldMetadata: [],
|
||||
index: [],
|
||||
view: [],
|
||||
|
||||
+5
-42
@@ -1,11 +1,8 @@
|
||||
import diff from 'microdiff';
|
||||
import { type FromTo } from 'twenty-shared/types';
|
||||
|
||||
import { compareTwoFlatEntity } from 'src/engine/core-modules/common/utils/compare-two-flat-entity.util';
|
||||
import { FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant';
|
||||
import { type FlatViewFieldPropertiesToCompare } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type';
|
||||
import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type';
|
||||
import { type UpdateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type';
|
||||
import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util';
|
||||
|
||||
type GetWorkspaceMigrationUpdateViewFieldActionArgs = FromTo<
|
||||
FlatViewField,
|
||||
@@ -16,44 +13,10 @@ export const compareTwoFlatViewField = ({
|
||||
fromFlatViewField,
|
||||
toFlatViewField,
|
||||
}: GetWorkspaceMigrationUpdateViewFieldActionArgs) => {
|
||||
const transformMetadataForComparisonParameters = {
|
||||
shouldIgnoreProperty: (property: string) =>
|
||||
!FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE.includes(
|
||||
property as FlatViewFieldPropertiesToCompare,
|
||||
),
|
||||
return compareTwoFlatEntity({
|
||||
fromFlatEntity: fromFlatViewField,
|
||||
toFlatEntity: toFlatViewField,
|
||||
propertiesToStringify: [],
|
||||
};
|
||||
const fromCompare = transformMetadataForComparison(
|
||||
fromFlatViewField,
|
||||
transformMetadataForComparisonParameters,
|
||||
);
|
||||
const toCompare = transformMetadataForComparison(
|
||||
toFlatViewField,
|
||||
transformMetadataForComparisonParameters,
|
||||
);
|
||||
|
||||
const flatViewFieldDifferences = diff(fromCompare, toCompare);
|
||||
|
||||
return flatViewFieldDifferences.flatMap<
|
||||
UpdateViewFieldAction['updates'][number]
|
||||
>((difference) => {
|
||||
switch (difference.type) {
|
||||
case 'CHANGE': {
|
||||
const { oldValue, path, value } = difference;
|
||||
const property = path[0] as FlatViewFieldPropertiesToCompare;
|
||||
|
||||
return {
|
||||
from: oldValue,
|
||||
to: value,
|
||||
property,
|
||||
};
|
||||
}
|
||||
case 'CREATE':
|
||||
case 'REMOVE':
|
||||
default: {
|
||||
// Should never occurs, we should only provide null never undefined and so on
|
||||
return [];
|
||||
}
|
||||
}
|
||||
propertiesToCompare: FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE,
|
||||
});
|
||||
};
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
export const FLAT_VIEW_FILTER_EDITABLE_PROPERTIES = [
|
||||
'fieldMetadataId',
|
||||
'operand',
|
||||
'value',
|
||||
'viewFilterGroupId',
|
||||
'positionInViewFilterGroup',
|
||||
'subFieldName',
|
||||
] as const satisfies (keyof FlatViewFilter)[];
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
export const FLAT_VIEW_FILTER_JSONB_PROPERTIES = [
|
||||
'value',
|
||||
] as const satisfies (keyof FlatViewFilter)[];
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import { FLAT_VIEW_FILTER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-editable-properties.constant';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
export const FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE = [
|
||||
'viewId',
|
||||
'deletedAt',
|
||||
...FLAT_VIEW_FILTER_EDITABLE_PROPERTIES,
|
||||
] as const satisfies (keyof FlatViewFilter)[];
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import { type ViewFilterEntityRelationProperties } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
export const VIEW_FILTER_ENTITY_RELATION_PROPERTIES = [
|
||||
'fieldMetadata',
|
||||
'view',
|
||||
'viewFilterGroup',
|
||||
'workspace',
|
||||
] as const satisfies ViewFilterEntityRelationProperties[];
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator';
|
||||
import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service';
|
||||
import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum';
|
||||
import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant';
|
||||
import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util';
|
||||
import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type';
|
||||
import { fromViewFilterEntityToFlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator';
|
||||
import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service';
|
||||
|
||||
@Injectable()
|
||||
@WorkspaceFlatMapCache('flatViewFilterMaps')
|
||||
export class WorkspaceFlatViewFilterMapCacheService extends WorkspaceFlatMapCacheService<FlatViewFilterMaps> {
|
||||
constructor(
|
||||
@InjectCacheStorage(CacheStorageNamespace.EngineWorkspace)
|
||||
cacheStorageService: CacheStorageService,
|
||||
@InjectRepository(ViewFilterEntity)
|
||||
private readonly viewFilterRepository: Repository<ViewFilterEntity>,
|
||||
) {
|
||||
super(cacheStorageService);
|
||||
}
|
||||
|
||||
protected async computeFlatMap({
|
||||
workspaceId,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
}): Promise<FlatViewFilterMaps> {
|
||||
const viewFilters = await this.viewFilterRepository.find({
|
||||
where: {
|
||||
workspaceId,
|
||||
},
|
||||
withDeleted: true,
|
||||
});
|
||||
|
||||
return viewFilters.reduce((flatViewFilterMaps, viewFilterEntity) => {
|
||||
const flatViewFilter =
|
||||
fromViewFilterEntityToFlatViewFilter(viewFilterEntity);
|
||||
|
||||
return addFlatEntityToFlatEntityMapsOrThrow({
|
||||
flatEntity: flatViewFilter,
|
||||
flatEntityMaps: flatViewFilterMaps,
|
||||
});
|
||||
}, EMPTY_FLAT_ENTITY_MAPS);
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
export type FlatViewFilterMaps = FlatEntityMaps<FlatViewFilter>;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
import { type FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant';
|
||||
|
||||
export type FlatViewFilterPropertiesToCompare =
|
||||
(typeof FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE)[number];
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
import { type Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity';
|
||||
import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
|
||||
import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type';
|
||||
|
||||
export type ViewFilterEntityRelationProperties =
|
||||
ExtractRecordTypeOrmRelationProperties<
|
||||
ViewFilterEntity,
|
||||
FieldMetadataEntity | ViewEntity | ViewFilterGroupEntity | Workspace
|
||||
>;
|
||||
|
||||
export type FlatViewFilter = Omit<
|
||||
ViewFilterEntity,
|
||||
ViewFilterEntityRelationProperties
|
||||
> & {
|
||||
universalIdentifier: string;
|
||||
};
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
import { type FromTo } from 'twenty-shared/types';
|
||||
|
||||
import { compareTwoFlatEntity } from 'src/engine/core-modules/common/utils/compare-two-flat-entity.util';
|
||||
import { FLAT_VIEW_FILTER_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant';
|
||||
import { FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
|
||||
type GetWorkspaceMigrationUpdateViewFilterActionArgs = FromTo<
|
||||
FlatViewFilter,
|
||||
'FlatViewFilter'
|
||||
>;
|
||||
|
||||
export const compareTwoFlatViewFilter = ({
|
||||
fromFlatViewFilter,
|
||||
toFlatViewFilter,
|
||||
}: GetWorkspaceMigrationUpdateViewFilterActionArgs) => {
|
||||
return compareTwoFlatEntity({
|
||||
fromFlatEntity: fromFlatViewFilter,
|
||||
toFlatEntity: toFlatViewFilter,
|
||||
propertiesToStringify: FLAT_VIEW_FILTER_JSONB_PROPERTIES,
|
||||
propertiesToCompare: FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE,
|
||||
});
|
||||
};
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties } from 'twenty-shared/utils';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input';
|
||||
|
||||
export const fromCreateViewFilterInputToFlatViewFilterToCreate = ({
|
||||
createViewFilterInput: rawCreateViewFilterInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
createViewFilterInput: CreateViewFilterInput;
|
||||
workspaceId: string;
|
||||
}): FlatViewFilter => {
|
||||
const { fieldMetadataId, viewId, value, ...createViewFilterInput } =
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties(
|
||||
rawCreateViewFilterInput,
|
||||
[
|
||||
'fieldMetadataId',
|
||||
'id',
|
||||
'viewId',
|
||||
'viewFilterGroupId',
|
||||
'operand',
|
||||
'subFieldName',
|
||||
],
|
||||
);
|
||||
|
||||
const createdAt = new Date();
|
||||
const viewFilterId = createViewFilterInput.id ?? v4();
|
||||
|
||||
return {
|
||||
id: viewFilterId,
|
||||
fieldMetadataId,
|
||||
viewId,
|
||||
workspaceId,
|
||||
createdAt: createdAt,
|
||||
updatedAt: createdAt,
|
||||
deletedAt: null,
|
||||
universalIdentifier: viewFilterId,
|
||||
operand: createViewFilterInput.operand ?? ViewFilterOperand.CONTAINS,
|
||||
value: value,
|
||||
viewFilterGroupId: createViewFilterInput.viewFilterGroupId ?? null,
|
||||
positionInViewFilterGroup:
|
||||
createViewFilterInput.positionInViewFilterGroup ?? null,
|
||||
subFieldName: createViewFilterInput.subFieldName ?? null,
|
||||
};
|
||||
};
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type DeleteViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/delete-view-filter.input';
|
||||
import {
|
||||
ViewFilterException,
|
||||
ViewFilterExceptionCode,
|
||||
} from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
|
||||
|
||||
export const fromDeleteViewFilterInputToFlatViewFilterOrThrow = ({
|
||||
deleteViewFilterInput: rawDeleteViewFilterInput,
|
||||
flatViewFilterMaps,
|
||||
}: {
|
||||
deleteViewFilterInput: DeleteViewFilterInput;
|
||||
flatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FlatViewFilter => {
|
||||
const { id: viewFilterId } = extractAndSanitizeObjectStringFields(
|
||||
rawDeleteViewFilterInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatViewFilterToDelete = flatViewFilterMaps.byId[viewFilterId];
|
||||
|
||||
if (!isDefined(existingFlatViewFilterToDelete)) {
|
||||
throw new ViewFilterException(
|
||||
t`View filter to delete not found`,
|
||||
ViewFilterExceptionCode.VIEW_FILTER_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
...existingFlatViewFilterToDelete,
|
||||
deletedAt: new Date(),
|
||||
};
|
||||
};
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/destroy-view-filter.input';
|
||||
import {
|
||||
ViewFilterException,
|
||||
ViewFilterExceptionCode,
|
||||
} from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
|
||||
|
||||
export const fromDestroyViewFilterInputToFlatViewFilterOrThrow = ({
|
||||
destroyViewFilterInput,
|
||||
flatViewFilterMaps,
|
||||
}: {
|
||||
destroyViewFilterInput: DestroyViewFilterInput;
|
||||
flatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FlatViewFilter => {
|
||||
const { id: viewFilterId } = extractAndSanitizeObjectStringFields(
|
||||
destroyViewFilterInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatViewFilterToDestroy = flatViewFilterMaps.byId[viewFilterId];
|
||||
|
||||
if (!isDefined(existingFlatViewFilterToDestroy)) {
|
||||
throw new ViewFilterException(
|
||||
t`View filter to destroy not found`,
|
||||
ViewFilterExceptionCode.VIEW_FILTER_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return existingFlatViewFilterToDestroy;
|
||||
};
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { FLAT_VIEW_FILTER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-editable-properties.constant';
|
||||
import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input';
|
||||
import {
|
||||
ViewFilterException,
|
||||
ViewFilterExceptionCode,
|
||||
} from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
|
||||
import { mergeUpdateInExistingRecord } from 'src/utils/merge-update-in-existing-record.util';
|
||||
|
||||
export const fromUpdateViewFilterInputToFlatViewFilterToUpdateOrThrow = ({
|
||||
updateViewFilterInput: rawUpdateViewFilterInput,
|
||||
flatViewFilterMaps,
|
||||
}: {
|
||||
updateViewFilterInput: UpdateViewFilterInput;
|
||||
flatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FlatViewFilter => {
|
||||
const { id: viewFilterToUpdateId } =
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties(
|
||||
rawUpdateViewFilterInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatViewFilterToUpdate =
|
||||
flatViewFilterMaps.byId[viewFilterToUpdateId];
|
||||
|
||||
if (!isDefined(existingFlatViewFilterToUpdate)) {
|
||||
throw new ViewFilterException(
|
||||
t`View filter to update not found`,
|
||||
ViewFilterExceptionCode.VIEW_FILTER_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
const updatedEditableFieldProperties = extractAndSanitizeObjectStringFields(
|
||||
rawUpdateViewFilterInput.update,
|
||||
FLAT_VIEW_FILTER_EDITABLE_PROPERTIES,
|
||||
);
|
||||
|
||||
return mergeUpdateInExistingRecord({
|
||||
existing: existingFlatViewFilterToUpdate,
|
||||
properties: FLAT_VIEW_FILTER_EDITABLE_PROPERTIES,
|
||||
update: updatedEditableFieldProperties,
|
||||
});
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import { removePropertiesFromRecord } from 'twenty-shared/utils';
|
||||
|
||||
import { VIEW_FILTER_ENTITY_RELATION_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/view-filter-entity-relation-properties.constant';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
|
||||
export const fromViewFilterEntityToFlatViewFilter = (
|
||||
viewFilterEntity: ViewFilterEntity,
|
||||
): FlatViewFilter => {
|
||||
const viewFilterEntityWithoutRelations = removePropertiesFromRecord(
|
||||
viewFilterEntity,
|
||||
VIEW_FILTER_ENTITY_RELATION_PROPERTIES,
|
||||
);
|
||||
|
||||
return {
|
||||
...viewFilterEntityWithoutRelations,
|
||||
universalIdentifier:
|
||||
viewFilterEntityWithoutRelations.universalIdentifier ??
|
||||
viewFilterEntityWithoutRelations.id,
|
||||
};
|
||||
};
|
||||
+4
-1
@@ -39,8 +39,11 @@ export class WorkspaceFlatViewMapCacheService extends WorkspaceFlatMapCacheServi
|
||||
viewFields: {
|
||||
id: true,
|
||||
},
|
||||
viewFilters: {
|
||||
id: true,
|
||||
},
|
||||
},
|
||||
relations: ['viewFields'],
|
||||
relations: ['viewFields', 'viewFilters'],
|
||||
withDeleted: true,
|
||||
});
|
||||
|
||||
|
||||
@@ -23,4 +23,5 @@ export type ViewEntityRelationProperties =
|
||||
export type FlatView = Omit<ViewEntity, ViewEntityRelationProperties> & {
|
||||
universalIdentifier: string;
|
||||
viewFieldIds: string[];
|
||||
viewFilterIds: string[];
|
||||
};
|
||||
|
||||
+1
@@ -44,5 +44,6 @@ export const fromCreateViewInputToFlatViewToCreate = ({
|
||||
type: createViewInput.type ?? ViewType.TABLE,
|
||||
universalIdentifier: v4(),
|
||||
viewFieldIds: [],
|
||||
viewFilterIds: [],
|
||||
};
|
||||
};
|
||||
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type';
|
||||
import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in';
|
||||
import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum';
|
||||
|
||||
export const fromPartialFlatViewToFlatViewWithDefault = (
|
||||
partialFlatView: Partial<FlatView>,
|
||||
): FlatView => {
|
||||
const createdAt = new Date();
|
||||
const viewId = partialFlatView.id ?? v4();
|
||||
|
||||
return {
|
||||
...partialFlatView,
|
||||
id: viewId,
|
||||
name: partialFlatView.name ?? '',
|
||||
objectMetadataId: partialFlatView.objectMetadataId ?? '',
|
||||
type: partialFlatView.type ?? ViewType.TABLE,
|
||||
key: partialFlatView.key ?? null,
|
||||
icon: partialFlatView.icon ?? '',
|
||||
position: partialFlatView.position ?? 0,
|
||||
isCompact: partialFlatView.isCompact ?? false,
|
||||
isCustom: partialFlatView.isCustom ?? false,
|
||||
openRecordIn: partialFlatView.openRecordIn ?? ViewOpenRecordIn.SIDE_PANEL,
|
||||
kanbanAggregateOperation: partialFlatView.kanbanAggregateOperation ?? null,
|
||||
kanbanAggregateOperationFieldMetadataId:
|
||||
partialFlatView.kanbanAggregateOperationFieldMetadataId ?? null,
|
||||
workspaceId: partialFlatView.workspaceId ?? '',
|
||||
createdAt: createdAt,
|
||||
updatedAt: createdAt,
|
||||
deletedAt: null,
|
||||
anyFieldFilterValue: partialFlatView.anyFieldFilterValue ?? null,
|
||||
universalIdentifier: partialFlatView.universalIdentifier ?? viewId,
|
||||
viewFieldIds: partialFlatView.viewFieldIds ?? [],
|
||||
calendarLayout: partialFlatView.calendarLayout ?? null,
|
||||
calendarFieldMetadataId: partialFlatView.calendarFieldMetadataId ?? null,
|
||||
};
|
||||
};
|
||||
+2
-1
@@ -15,6 +15,7 @@ export const fromViewEntityToFlatView = (viewEntity: ViewEntity): FlatView => {
|
||||
universalIdentifier:
|
||||
viewEntityWithoutRelations.universalIdentifier ??
|
||||
viewEntityWithoutRelations.id,
|
||||
viewFieldIds: viewEntity.viewFields.map((viewField) => viewField.id) ?? [],
|
||||
viewFieldIds: viewEntity.viewFields.map((viewField) => viewField.id),
|
||||
viewFilterIds: viewEntity.viewFilters.map((viewFilter) => viewFilter.id),
|
||||
};
|
||||
};
|
||||
|
||||
+7
-2
@@ -89,10 +89,15 @@ export class ViewFilterController {
|
||||
@Body() input: UpdateViewFilterInput,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
): Promise<ViewFilterDTO> {
|
||||
const updatedViewFilter = await this.viewFilterService.update(
|
||||
const updateInput: UpdateViewFilterInput = {
|
||||
id,
|
||||
update: input.update ?? input,
|
||||
};
|
||||
|
||||
const updatedViewFilter = await this.viewFilterService.update(
|
||||
updateInput.id,
|
||||
workspace.id,
|
||||
input,
|
||||
updateInput.update,
|
||||
);
|
||||
|
||||
return updatedViewFilter;
|
||||
|
||||
+21
@@ -2,33 +2,54 @@ import { Field, InputType } from '@nestjs/graphql';
|
||||
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import {
|
||||
IsDefined,
|
||||
IsEnum,
|
||||
IsNumber,
|
||||
IsOptional,
|
||||
IsString,
|
||||
IsUUID,
|
||||
} from 'class-validator';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type';
|
||||
|
||||
@InputType()
|
||||
export class CreateViewFilterInput {
|
||||
@IsOptional()
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: true })
|
||||
id?: string;
|
||||
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: false })
|
||||
fieldMetadataId: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsEnum(ViewFilterOperand)
|
||||
@Field({ nullable: true, defaultValue: ViewFilterOperand.CONTAINS })
|
||||
operand?: ViewFilterOperand;
|
||||
|
||||
@IsDefined()
|
||||
@Field(() => GraphQLJSON, { nullable: false })
|
||||
value: ViewFilterValue;
|
||||
|
||||
@IsOptional()
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: true })
|
||||
viewFilterGroupId?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
@Field({ nullable: true })
|
||||
positionInViewFilterGroup?: number;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
@Field({ nullable: true })
|
||||
subFieldName?: string;
|
||||
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: false })
|
||||
viewId: string;
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
|
||||
import { IDField } from '@ptc-org/nestjs-query-graphql';
|
||||
import { IsUUID } from 'class-validator';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
|
||||
@InputType()
|
||||
export class DeleteViewFilterInput {
|
||||
@IDField(() => UUIDScalarType, {
|
||||
description: 'The id of the view filter to delete.',
|
||||
})
|
||||
@IsUUID()
|
||||
id: string;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
|
||||
import { IDField } from '@ptc-org/nestjs-query-graphql';
|
||||
import { IsUUID } from 'class-validator';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
|
||||
@InputType()
|
||||
export class DestroyViewFilterInput {
|
||||
@IDField(() => UUIDScalarType, {
|
||||
description: 'The id of the view filter to destroy.',
|
||||
})
|
||||
@IsUUID()
|
||||
id: string;
|
||||
}
|
||||
+63
-3
@@ -1,6 +1,66 @@
|
||||
import { InputType, PartialType } from '@nestjs/graphql';
|
||||
import { Field, InputType } from '@nestjs/graphql';
|
||||
|
||||
import { CreateViewFilterInput } from './create-view-filter.input';
|
||||
import {
|
||||
IsEnum,
|
||||
IsNotEmpty,
|
||||
IsNumber,
|
||||
IsOptional,
|
||||
IsString,
|
||||
IsUUID,
|
||||
ValidateNested,
|
||||
} from 'class-validator';
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import { Type } from 'class-transformer';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { ViewFilterValue } from 'src/engine/metadata-modules/view-filter/types/view-filter-value.type';
|
||||
|
||||
@InputType()
|
||||
export class UpdateViewFilterInput extends PartialType(CreateViewFilterInput) {}
|
||||
class UpdateViewFilterInputUpdates {
|
||||
@IsOptional()
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: true })
|
||||
fieldMetadataId?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsEnum(ViewFilterOperand)
|
||||
@Field({ nullable: true })
|
||||
operand?: ViewFilterOperand;
|
||||
|
||||
@IsOptional()
|
||||
@Field(() => GraphQLJSON, { nullable: true })
|
||||
value?: ViewFilterValue;
|
||||
|
||||
@IsOptional()
|
||||
@IsUUID()
|
||||
@Field(() => UUIDScalarType, { nullable: true })
|
||||
viewFilterGroupId?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
@Field({ nullable: true })
|
||||
positionInViewFilterGroup?: number;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
@Field({ nullable: true })
|
||||
subFieldName?: string;
|
||||
}
|
||||
|
||||
@InputType()
|
||||
export class UpdateViewFilterInput {
|
||||
@IsUUID()
|
||||
@IsNotEmpty()
|
||||
@Field(() => UUIDScalarType, {
|
||||
description: 'The id of the view filter to update',
|
||||
})
|
||||
id: string;
|
||||
|
||||
@Type(() => UpdateViewFilterInputUpdates)
|
||||
@ValidateNested()
|
||||
@Field(() => UpdateViewFilterInputUpdates, {
|
||||
description: 'The view filter to update',
|
||||
})
|
||||
update: UpdateViewFilterInputUpdates;
|
||||
}
|
||||
|
||||
+7
-4
@@ -26,7 +26,10 @@ import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entit
|
||||
where: '"deletedAt" IS NULL',
|
||||
})
|
||||
@Index('IDX_VIEW_FILTER_FIELD_METADATA_ID', ['fieldMetadataId'])
|
||||
export class ViewFilterEntity extends SyncableEntity {
|
||||
export class ViewFilterEntity
|
||||
extends SyncableEntity
|
||||
implements Required<ViewFilterEntity>
|
||||
{
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@@ -51,13 +54,13 @@ export class ViewFilterEntity extends SyncableEntity {
|
||||
value: ViewFilterValue;
|
||||
|
||||
@Column({ nullable: true, type: 'uuid' })
|
||||
viewFilterGroupId?: string | null;
|
||||
viewFilterGroupId: string | null;
|
||||
|
||||
@Column({ nullable: true, type: 'double precision' })
|
||||
positionInViewFilterGroup: number | null;
|
||||
|
||||
@Column({ nullable: true, type: 'text', default: null })
|
||||
subFieldName?: string | null;
|
||||
subFieldName: string | null;
|
||||
|
||||
@Column({ nullable: false, type: 'uuid' })
|
||||
viewId: string;
|
||||
@@ -72,7 +75,7 @@ export class ViewFilterEntity extends SyncableEntity {
|
||||
updatedAt: Date;
|
||||
|
||||
@DeleteDateColumn({ type: 'timestamptz' })
|
||||
deletedAt?: Date | null;
|
||||
deletedAt: Date | null;
|
||||
|
||||
@ManyToOne(() => Workspace, {
|
||||
onDelete: 'CASCADE',
|
||||
|
||||
+90
-26
@@ -1,14 +1,17 @@
|
||||
import { UseFilters, UseGuards } from '@nestjs/common';
|
||||
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
|
||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input';
|
||||
import { DeleteViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/delete-view-filter.input';
|
||||
import { DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/destroy-view-filter.input';
|
||||
import { UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input';
|
||||
import { ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
import { ViewFilterV2Service } from 'src/engine/metadata-modules/view-filter/services/view-filter-v2.service';
|
||||
import { ViewFilterService } from 'src/engine/metadata-modules/view-filter/services/view-filter.service';
|
||||
import { ViewGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/view/utils/view-graphql-api-exception.filter';
|
||||
|
||||
@@ -16,7 +19,11 @@ import { ViewGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/view/
|
||||
@UseFilters(ViewGraphqlApiExceptionFilter)
|
||||
@UseGuards(WorkspaceAuthGuard)
|
||||
export class ViewFilterResolver {
|
||||
constructor(private readonly viewFilterService: ViewFilterService) {}
|
||||
constructor(
|
||||
private readonly viewFilterService: ViewFilterService,
|
||||
private readonly featureFlagService: FeatureFlagService,
|
||||
private readonly viewFilterV2Service: ViewFilterV2Service,
|
||||
) {}
|
||||
|
||||
@Query(() => [ViewFilterDTO])
|
||||
async getCoreViewFilters(
|
||||
@@ -41,47 +48,104 @@ export class ViewFilterResolver {
|
||||
|
||||
@Mutation(() => ViewFilterDTO)
|
||||
async createCoreViewFilter(
|
||||
@Args('input') input: CreateViewFilterInput,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
@Args('input') createViewFilterInput: CreateViewFilterInput,
|
||||
@AuthWorkspace() { id: workspaceId }: Workspace,
|
||||
): Promise<ViewFilterDTO> {
|
||||
const isWorkspaceMigrationV2Enabled =
|
||||
await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IS_WORKSPACE_MIGRATION_V2_ENABLED,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
if (isWorkspaceMigrationV2Enabled) {
|
||||
return await this.viewFilterV2Service.createOne({
|
||||
createViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
return this.viewFilterService.create({
|
||||
...input,
|
||||
workspaceId: workspace.id,
|
||||
...createViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
@Mutation(() => ViewFilterDTO)
|
||||
async updateCoreViewFilter(
|
||||
@Args('id', { type: () => String }) id: string,
|
||||
@Args('input') input: UpdateViewFilterInput,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
@Args('input') updateViewFilterInput: UpdateViewFilterInput,
|
||||
@AuthWorkspace() { id: workspaceId }: Workspace,
|
||||
): Promise<ViewFilterDTO> {
|
||||
return this.viewFilterService.update(id, workspace.id, input);
|
||||
const isWorkspaceMigrationV2Enabled =
|
||||
await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IS_WORKSPACE_MIGRATION_V2_ENABLED,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
if (isWorkspaceMigrationV2Enabled) {
|
||||
return await this.viewFilterV2Service.updateOne({
|
||||
updateViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
return this.viewFilterService.update(
|
||||
updateViewFilterInput.id,
|
||||
workspaceId,
|
||||
updateViewFilterInput.update,
|
||||
);
|
||||
}
|
||||
|
||||
@Mutation(() => Boolean)
|
||||
@Mutation(() => ViewFilterDTO)
|
||||
async deleteCoreViewFilter(
|
||||
@Args('id', { type: () => String }) id: string,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
): Promise<boolean> {
|
||||
@Args('input') deleteViewFilterInput: DeleteViewFilterInput,
|
||||
@AuthWorkspace() { id: workspaceId }: Workspace,
|
||||
): Promise<ViewFilterDTO> {
|
||||
const isWorkspaceMigrationV2Enabled =
|
||||
await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IS_WORKSPACE_MIGRATION_V2_ENABLED,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
if (isWorkspaceMigrationV2Enabled) {
|
||||
return await this.viewFilterV2Service.deleteOne({
|
||||
deleteViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
const deletedViewFilter = await this.viewFilterService.delete(
|
||||
id,
|
||||
workspace.id,
|
||||
deleteViewFilterInput.id,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
return isDefined(deletedViewFilter);
|
||||
return deletedViewFilter;
|
||||
}
|
||||
|
||||
@Mutation(() => Boolean)
|
||||
@Mutation(() => ViewFilterDTO)
|
||||
async destroyCoreViewFilter(
|
||||
@Args('id', { type: () => String }) id: string,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
): Promise<boolean> {
|
||||
const deletedViewFilter = await this.viewFilterService.destroy(
|
||||
id,
|
||||
workspace.id,
|
||||
@Args('input') destroyViewFilterInput: DestroyViewFilterInput,
|
||||
@AuthWorkspace() { id: workspaceId }: Workspace,
|
||||
): Promise<ViewFilterDTO> {
|
||||
const isWorkspaceMigrationV2Enabled =
|
||||
await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IS_WORKSPACE_MIGRATION_V2_ENABLED,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
if (isWorkspaceMigrationV2Enabled) {
|
||||
const destroyedViewFilter = await this.viewFilterV2Service.destroyOne({
|
||||
destroyViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
return destroyedViewFilter;
|
||||
}
|
||||
|
||||
const destroyedViewFilter = await this.viewFilterService.destroy(
|
||||
destroyViewFilterInput.id,
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
return isDefined(deletedViewFilter);
|
||||
return destroyedViewFilter;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -333,7 +333,7 @@ describe('ViewFilterService', () => {
|
||||
|
||||
expect(viewFilterService.findById).toHaveBeenCalledWith(id, workspaceId);
|
||||
expect(viewFilterRepository.delete).toHaveBeenCalledWith(id);
|
||||
expect(result).toEqual(true);
|
||||
expect(result).toEqual(mockViewFilter);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+326
@@ -0,0 +1,326 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util';
|
||||
import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util';
|
||||
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||
import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util';
|
||||
import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util';
|
||||
import { fromCreateViewFilterInputToFlatViewFilterToCreate } from 'src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util';
|
||||
import { fromDeleteViewFilterInputToFlatViewFilterOrThrow } from 'src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util';
|
||||
import { fromDestroyViewFilterInputToFlatViewFilterOrThrow } from 'src/engine/metadata-modules/flat-view-filter/utils/from-destroy-view-filter-input-to-flat-view-filter-or-throw.util';
|
||||
import { fromUpdateViewFilterInputToFlatViewFilterToUpdateOrThrow } from 'src/engine/metadata-modules/flat-view-filter/utils/from-update-view-filter-input-to-flat-view-filter-to-update-or-throw.util';
|
||||
import { CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input';
|
||||
import { DeleteViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/delete-view-filter.input';
|
||||
import { DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/destroy-view-filter.input';
|
||||
import { UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input';
|
||||
import { ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2';
|
||||
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service';
|
||||
|
||||
@Injectable()
|
||||
export class ViewFilterV2Service {
|
||||
constructor(
|
||||
private readonly workspaceMigrationValidateBuildAndRunService: WorkspaceMigrationValidateBuildAndRunService,
|
||||
private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService,
|
||||
) {}
|
||||
|
||||
async createOne({
|
||||
createViewFilterInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
createViewFilterInput: CreateViewFilterInput;
|
||||
workspaceId: string;
|
||||
}): Promise<ViewFilterDTO> {
|
||||
const {
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
flatViewMaps,
|
||||
flatFieldMetadataMaps,
|
||||
flatObjectMetadataMaps,
|
||||
} = await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: [
|
||||
'flatViewFilterMaps',
|
||||
'flatViewMaps',
|
||||
'flatFieldMetadataMaps',
|
||||
'flatObjectMetadataMaps',
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
const flatViewFilterToCreate =
|
||||
fromCreateViewFilterInputToFlatViewFilterToCreate({
|
||||
createViewFilterInput,
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
const toFlatViewFilterMaps = addFlatEntityToFlatEntityMapsOrThrow({
|
||||
flatEntity: flatViewFilterToCreate,
|
||||
flatEntityMaps: existingFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
const validateAndBuildResult =
|
||||
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
||||
{
|
||||
fromToAllFlatEntityMaps: {
|
||||
flatViewFilterMaps: {
|
||||
from: existingFlatViewFilterMaps,
|
||||
to: toFlatViewFilterMaps,
|
||||
},
|
||||
},
|
||||
dependencyAllFlatEntityMaps: {
|
||||
flatFieldMetadataMaps,
|
||||
flatViewMaps,
|
||||
flatObjectMetadataMaps,
|
||||
},
|
||||
buildOptions: {
|
||||
isSystemBuild: false,
|
||||
inferDeletionFromMissingEntities: false,
|
||||
},
|
||||
workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
if (isDefined(validateAndBuildResult)) {
|
||||
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||
validateAndBuildResult,
|
||||
'Multiple validation errors occurred while creating view filter',
|
||||
);
|
||||
}
|
||||
|
||||
const { flatViewFilterMaps: recomputedExistingFlatViewFilterMaps } =
|
||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: ['flatViewFilterMaps'],
|
||||
},
|
||||
);
|
||||
|
||||
return findFlatEntityByIdInFlatEntityMapsOrThrow({
|
||||
flatEntityId: flatViewFilterToCreate.id,
|
||||
flatEntityMaps: recomputedExistingFlatViewFilterMaps,
|
||||
});
|
||||
}
|
||||
|
||||
async updateOne({
|
||||
updateViewFilterInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
workspaceId: string;
|
||||
updateViewFilterInput: UpdateViewFilterInput;
|
||||
}): Promise<ViewFilterDTO> {
|
||||
const {
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
flatViewMaps,
|
||||
flatFieldMetadataMaps,
|
||||
} = await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: [
|
||||
'flatViewFilterMaps',
|
||||
'flatViewMaps',
|
||||
'flatFieldMetadataMaps',
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
const optimisticallyUpdatedFlatViewFilter =
|
||||
fromUpdateViewFilterInputToFlatViewFilterToUpdateOrThrow({
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
updateViewFilterInput,
|
||||
});
|
||||
|
||||
const toFlatViewFilterMaps = addFlatEntityToFlatEntityMapsOrThrow({
|
||||
flatEntity: optimisticallyUpdatedFlatViewFilter,
|
||||
flatEntityMaps: EMPTY_FLAT_ENTITY_MAPS,
|
||||
});
|
||||
|
||||
const validateAndBuildResult =
|
||||
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
||||
{
|
||||
fromToAllFlatEntityMaps: {
|
||||
flatViewFilterMaps: {
|
||||
from: existingFlatViewFilterMaps,
|
||||
to: toFlatViewFilterMaps,
|
||||
},
|
||||
},
|
||||
dependencyAllFlatEntityMaps: {
|
||||
flatViewMaps,
|
||||
flatFieldMetadataMaps,
|
||||
},
|
||||
buildOptions: {
|
||||
isSystemBuild: false,
|
||||
inferDeletionFromMissingEntities: false,
|
||||
},
|
||||
workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
if (isDefined(validateAndBuildResult)) {
|
||||
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||
validateAndBuildResult,
|
||||
'Multiple validation errors occurred while updating view filter',
|
||||
);
|
||||
}
|
||||
|
||||
const { flatViewFilterMaps: recomputedExistingFlatViewFilterMaps } =
|
||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: ['flatViewFilterMaps'],
|
||||
},
|
||||
);
|
||||
|
||||
return findFlatEntityByIdInFlatEntityMapsOrThrow({
|
||||
flatEntityId: optimisticallyUpdatedFlatViewFilter.id,
|
||||
flatEntityMaps: recomputedExistingFlatViewFilterMaps,
|
||||
});
|
||||
}
|
||||
|
||||
async deleteOne({
|
||||
deleteViewFilterInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
deleteViewFilterInput: DeleteViewFilterInput;
|
||||
workspaceId: string;
|
||||
}): Promise<ViewFilterDTO> {
|
||||
const {
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
flatViewMaps,
|
||||
flatFieldMetadataMaps,
|
||||
} = await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: [
|
||||
'flatViewFilterMaps',
|
||||
'flatViewMaps',
|
||||
'flatFieldMetadataMaps',
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
const optimisticallyUpdatedFlatViewFilterWithDeletedAt =
|
||||
fromDeleteViewFilterInputToFlatViewFilterOrThrow({
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
deleteViewFilterInput,
|
||||
});
|
||||
|
||||
const toFlatViewFilterMaps = replaceFlatEntityInFlatEntityMapsOrThrow({
|
||||
flatEntity: optimisticallyUpdatedFlatViewFilterWithDeletedAt,
|
||||
flatEntityMaps: existingFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
const validateAndBuildResult =
|
||||
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
||||
{
|
||||
fromToAllFlatEntityMaps: {
|
||||
flatViewFilterMaps: {
|
||||
from: existingFlatViewFilterMaps,
|
||||
to: toFlatViewFilterMaps,
|
||||
},
|
||||
},
|
||||
dependencyAllFlatEntityMaps: {
|
||||
flatFieldMetadataMaps,
|
||||
flatViewMaps,
|
||||
},
|
||||
buildOptions: {
|
||||
isSystemBuild: false,
|
||||
inferDeletionFromMissingEntities: false,
|
||||
},
|
||||
workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
if (isDefined(validateAndBuildResult)) {
|
||||
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||
validateAndBuildResult,
|
||||
'Multiple validation errors occurred while deleting view filter',
|
||||
);
|
||||
}
|
||||
|
||||
const { flatViewFilterMaps: recomputedExistingFlatViewFilterMaps } =
|
||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: ['flatViewFilterMaps'],
|
||||
},
|
||||
);
|
||||
|
||||
return findFlatEntityByIdInFlatEntityMapsOrThrow({
|
||||
flatEntityId: optimisticallyUpdatedFlatViewFilterWithDeletedAt.id,
|
||||
flatEntityMaps: recomputedExistingFlatViewFilterMaps,
|
||||
});
|
||||
}
|
||||
|
||||
async destroyOne({
|
||||
destroyViewFilterInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
destroyViewFilterInput: DestroyViewFilterInput;
|
||||
workspaceId: string;
|
||||
}): Promise<ViewFilterDTO> {
|
||||
const {
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
flatViewMaps: existingFlatViewMaps,
|
||||
flatFieldMetadataMaps: existingFlatFieldMetadataMaps,
|
||||
} = await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
workspaceId,
|
||||
flatMapsKeys: [
|
||||
'flatViewFilterMaps',
|
||||
'flatViewMaps',
|
||||
'flatFieldMetadataMaps',
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
const existingViewFilterToDelete =
|
||||
fromDestroyViewFilterInputToFlatViewFilterOrThrow({
|
||||
destroyViewFilterInput,
|
||||
flatViewFilterMaps: existingFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
const fromFlatViewFilterMaps = getSubFlatEntityMapsOrThrow({
|
||||
flatEntityIds: [existingViewFilterToDelete.id],
|
||||
flatEntityMaps: existingFlatViewFilterMaps,
|
||||
});
|
||||
const toFlatViewFilterMaps = deleteFlatEntityFromFlatEntityMapsOrThrow({
|
||||
flatEntityMaps: fromFlatViewFilterMaps,
|
||||
entityToDeleteId: existingViewFilterToDelete.id,
|
||||
});
|
||||
|
||||
const validateAndBuildResult =
|
||||
await this.workspaceMigrationValidateBuildAndRunService.validateBuildAndRunWorkspaceMigration(
|
||||
{
|
||||
fromToAllFlatEntityMaps: {
|
||||
flatViewFilterMaps: {
|
||||
from: fromFlatViewFilterMaps,
|
||||
to: toFlatViewFilterMaps,
|
||||
},
|
||||
},
|
||||
dependencyAllFlatEntityMaps: {
|
||||
flatViewMaps: existingFlatViewMaps,
|
||||
flatFieldMetadataMaps: existingFlatFieldMetadataMaps,
|
||||
},
|
||||
buildOptions: {
|
||||
isSystemBuild: false,
|
||||
inferDeletionFromMissingEntities: true,
|
||||
},
|
||||
workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
if (isDefined(validateAndBuildResult)) {
|
||||
throw new WorkspaceMigrationBuilderExceptionV2(
|
||||
validateAndBuildResult,
|
||||
'Multiple validation errors occurred while destroying view filter',
|
||||
);
|
||||
}
|
||||
|
||||
return existingViewFilterToDelete;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -168,7 +168,7 @@ export class ViewFilterService {
|
||||
return viewFilter;
|
||||
}
|
||||
|
||||
async destroy(id: string, workspaceId: string): Promise<boolean> {
|
||||
async destroy(id: string, workspaceId: string): Promise<ViewFilterEntity> {
|
||||
const viewFilter = await this.findById(id, workspaceId);
|
||||
|
||||
if (!isDefined(viewFilter)) {
|
||||
@@ -185,7 +185,7 @@ export class ViewFilterService {
|
||||
|
||||
await this.flushGraphQLCache(workspaceId);
|
||||
|
||||
return true;
|
||||
return viewFilter;
|
||||
}
|
||||
|
||||
private async flushGraphQLCache(workspaceId: string): Promise<void> {
|
||||
|
||||
+11
-3
@@ -1,19 +1,27 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module';
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { ViewFilterController } from 'src/engine/metadata-modules/view-filter/controllers/view-filter.controller';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { ViewFilterResolver } from 'src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver';
|
||||
import { ViewFilterV2Service } from 'src/engine/metadata-modules/view-filter/services/view-filter-v2.service';
|
||||
import { ViewFilterService } from 'src/engine/metadata-modules/view-filter/services/view-filter.service';
|
||||
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
|
||||
import { WorkspaceCacheStorageModule } from 'src/engine/workspace-cache-storage/workspace-cache-storage.module';
|
||||
import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([ViewFilterEntity]),
|
||||
TypeOrmModule.forFeature([ViewFilterEntity, ViewEntity]),
|
||||
WorkspaceCacheStorageModule,
|
||||
FeatureFlagModule,
|
||||
WorkspaceMigrationV2Module,
|
||||
WorkspaceManyOrAllFlatEntityMapsCacheModule,
|
||||
],
|
||||
controllers: [ViewFilterController],
|
||||
providers: [ViewFilterService, ViewFilterResolver],
|
||||
exports: [ViewFilterService],
|
||||
providers: [ViewFilterService, ViewFilterResolver, ViewFilterV2Service],
|
||||
exports: [ViewFilterService, ViewFilterV2Service],
|
||||
})
|
||||
export class ViewFilterModule {}
|
||||
|
||||
+5
@@ -7,10 +7,12 @@ import { WorkspaceFlatFieldMetadataMapCacheService } from 'src/engine/metadata-m
|
||||
import { WorkspaceFlatIndexMapCacheService } from 'src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service';
|
||||
import { WorkspaceFlatObjectMetadataMapCacheService } from 'src/engine/metadata-modules/flat-object-metadata/services/workspace-flat-object-metadata-map-cache.service';
|
||||
import { WorkspaceFlatViewFieldMapCacheService } from 'src/engine/metadata-modules/flat-view-field/services/workspace-flat-view-field-map-cache.service';
|
||||
import { WorkspaceFlatViewFilterMapCacheService } from 'src/engine/metadata-modules/flat-view-filter/services/workspace-flat-view-filter-map-cache.service';
|
||||
import { WorkspaceFlatViewMapCacheService } from 'src/engine/metadata-modules/flat-view/services/workspace-flat-view-map-cache.service';
|
||||
import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
|
||||
import { WorkspaceMetadataCacheModule } from 'src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module';
|
||||
import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module';
|
||||
@@ -26,6 +28,7 @@ import { WorkspaceFlatMapCacheRegistryService } from 'src/engine/workspace-flat-
|
||||
TypeOrmModule.forFeature([
|
||||
ViewEntity,
|
||||
ViewFieldEntity,
|
||||
ViewFilterEntity,
|
||||
IndexMetadataEntity,
|
||||
FieldMetadataEntity,
|
||||
ObjectMetadataEntity,
|
||||
@@ -36,6 +39,7 @@ import { WorkspaceFlatMapCacheRegistryService } from 'src/engine/workspace-flat-
|
||||
WorkspaceFlatObjectMetadataMapCacheService,
|
||||
WorkspaceFlatViewMapCacheService,
|
||||
WorkspaceFlatViewFieldMapCacheService,
|
||||
WorkspaceFlatViewFilterMapCacheService,
|
||||
WorkspaceFlatIndexMapCacheService,
|
||||
WorkspaceFlatFieldMetadataMapCacheService,
|
||||
],
|
||||
@@ -44,6 +48,7 @@ import { WorkspaceFlatMapCacheRegistryService } from 'src/engine/workspace-flat-
|
||||
WorkspaceFlatObjectMetadataMapCacheService,
|
||||
WorkspaceFlatViewMapCacheService,
|
||||
WorkspaceFlatViewFieldMapCacheService,
|
||||
WorkspaceFlatViewFilterMapCacheService,
|
||||
WorkspaceFlatIndexMapCacheService,
|
||||
WorkspaceFlatFieldMetadataMapCacheService,
|
||||
],
|
||||
|
||||
+1
@@ -19,4 +19,5 @@ export const EMPTY_ORCHESTRATOR_ACTIONS_REPORT = {
|
||||
databaseEventTrigger: emptyCreatedDeletedUpdated,
|
||||
cronTrigger: emptyCreatedDeletedUpdated,
|
||||
routeTrigger: emptyCreatedDeletedUpdated,
|
||||
viewFilter: emptyCreatedDeletedUpdated,
|
||||
} as const satisfies OrchestratorActionsReport;
|
||||
|
||||
+2
@@ -10,6 +10,7 @@ export const fromWorkspaceMigrationBuilderExceptionToValidationResponseError = (
|
||||
): ValidationErrorResponse => {
|
||||
const emptyResponseError: ValidationErrorResponse = {
|
||||
summary: {
|
||||
invalidViewFilter: 0,
|
||||
invalidObjectMetadata: 0,
|
||||
invalidView: 0,
|
||||
invalidViewField: 0,
|
||||
@@ -31,6 +32,7 @@ export const fromWorkspaceMigrationBuilderExceptionToValidationResponseError = (
|
||||
databaseEventTrigger: [],
|
||||
cronTrigger: [],
|
||||
routeTrigger: [],
|
||||
viewFilter: [],
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
+37
@@ -20,6 +20,7 @@ import { WorkspaceMigrationV2ObjectActionsBuilderService } from 'src/engine/work
|
||||
import { WorkspaceMigrationV2RouteTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ServerlessFunctionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewFilterActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service';
|
||||
@Injectable()
|
||||
export class WorkspaceMigrationBuildOrchestratorService {
|
||||
@@ -28,6 +29,7 @@ export class WorkspaceMigrationBuildOrchestratorService {
|
||||
private readonly workspaceMigrationV2IndexActionsBuilderService: WorkspaceMigrationV2IndexActionsBuilderService,
|
||||
private readonly workspaceMigrationV2ViewActionsBuilderService: WorkspaceMigrationV2ViewActionsBuilderService,
|
||||
private readonly workspaceMigrationV2ViewFieldActionsBuilderService: WorkspaceMigrationV2ViewFieldActionsBuilderService,
|
||||
private readonly workspaceMigrationV2ViewFilterActionsBuilderService: WorkspaceMigrationV2ViewFilterActionsBuilderService,
|
||||
private readonly workspaceMigrationV2ServerlessFunctionActionsBuilderService: WorkspaceMigrationV2ServerlessFunctionActionsBuilderService,
|
||||
private readonly workspaceMigrationV2DatabaseEventTriggerActionsBuilderService: WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService,
|
||||
private readonly workspaceMigrationV2CronTriggerActionsBuilderService: WorkspaceMigrationV2CronTriggerActionsBuilderService,
|
||||
@@ -88,6 +90,7 @@ export class WorkspaceMigrationBuildOrchestratorService {
|
||||
cronTrigger: [],
|
||||
routeTrigger: [],
|
||||
fieldMetadata: [],
|
||||
viewFilter: [],
|
||||
};
|
||||
|
||||
const optimisticAllFlatEntityMaps = this.setupOptimisticCache({
|
||||
@@ -104,6 +107,7 @@ export class WorkspaceMigrationBuildOrchestratorService {
|
||||
flatCronTriggerMaps,
|
||||
flatRouteTriggerMaps,
|
||||
flatFieldMetadataMaps,
|
||||
flatViewFilterMaps,
|
||||
} = fromToAllFlatEntityMaps;
|
||||
|
||||
if (isDefined(flatObjectMetadataMaps)) {
|
||||
@@ -268,6 +272,36 @@ export class WorkspaceMigrationBuildOrchestratorService {
|
||||
}
|
||||
}
|
||||
|
||||
if (isDefined(flatViewFilterMaps)) {
|
||||
const { from: fromFlatViewFilterMaps, to: toFlatViewFilterMaps } =
|
||||
flatViewFilterMaps;
|
||||
const viewFilterResult =
|
||||
await this.workspaceMigrationV2ViewFilterActionsBuilderService.validateAndBuild(
|
||||
{
|
||||
from: fromFlatViewFilterMaps,
|
||||
to: toFlatViewFilterMaps,
|
||||
buildOptions,
|
||||
dependencyOptimisticFlatEntityMaps: {
|
||||
flatFieldMetadataMaps:
|
||||
optimisticAllFlatEntityMaps.flatFieldMetadataMaps,
|
||||
flatViewMaps: optimisticAllFlatEntityMaps.flatViewMaps,
|
||||
},
|
||||
workspaceId,
|
||||
},
|
||||
);
|
||||
|
||||
optimisticAllFlatEntityMaps.flatViewFilterMaps =
|
||||
viewFilterResult.optimisticFlatEntityMaps;
|
||||
optimisticAllFlatEntityMaps.flatViewMaps =
|
||||
viewFilterResult.dependencyOptimisticFlatEntityMaps.flatViewMaps;
|
||||
|
||||
if (viewFilterResult.status === 'fail') {
|
||||
orchestratorFailureReport.viewFilter.push(...viewFilterResult.errors);
|
||||
} else {
|
||||
orchestratorActionsReport.viewFilter = viewFilterResult.actions;
|
||||
}
|
||||
}
|
||||
|
||||
if (isDefined(flatServerlessFunctionMaps)) {
|
||||
const {
|
||||
from: fromFlatServerlessFunctionMaps,
|
||||
@@ -434,6 +468,9 @@ export class WorkspaceMigrationBuildOrchestratorService {
|
||||
...aggregatedOrchestratorActionsReport.viewField.deleted,
|
||||
...aggregatedOrchestratorActionsReport.viewField.created,
|
||||
...aggregatedOrchestratorActionsReport.viewField.updated,
|
||||
...aggregatedOrchestratorActionsReport.viewFilter.deleted,
|
||||
...aggregatedOrchestratorActionsReport.viewFilter.created,
|
||||
...aggregatedOrchestratorActionsReport.viewFilter.updated,
|
||||
///
|
||||
|
||||
// Serverless functions
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type';
|
||||
|
||||
export type ViewFilterRelatedFlatEntityMaps = Pick<
|
||||
AllFlatEntityMaps,
|
||||
'flatViewMaps' | 'flatFieldMetadataMaps'
|
||||
>;
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util';
|
||||
import { FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { compareTwoFlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util';
|
||||
import { ViewFilterRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type';
|
||||
import {
|
||||
FlatEntityUpdateValidationArgs,
|
||||
FlatEntityValidationArgs,
|
||||
FlatEntityValidationReturnType,
|
||||
WorkspaceEntityMigrationBuilderV2Service,
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service';
|
||||
import {
|
||||
UpdateViewFilterAction,
|
||||
WorkspaceMigrationViewFilterActionV2,
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type';
|
||||
import { FlatViewFilterValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service';
|
||||
|
||||
@Injectable()
|
||||
export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service<
|
||||
'viewFilter',
|
||||
FlatViewFilter,
|
||||
WorkspaceMigrationViewFilterActionV2,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
> {
|
||||
constructor(
|
||||
private readonly flatViewFilterValidatorService: FlatViewFilterValidatorService,
|
||||
) {
|
||||
super('viewFilter');
|
||||
}
|
||||
|
||||
protected async validateFlatEntityCreation({
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
flatEntityToValidate: flatViewFilterToValidate,
|
||||
optimisticFlatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
}: FlatEntityValidationArgs<
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>): Promise<
|
||||
FlatEntityValidationReturnType<
|
||||
WorkspaceMigrationViewFilterActionV2,
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>
|
||||
> {
|
||||
const validationResult =
|
||||
this.flatViewFilterValidatorService.validateFlatViewFilterCreation({
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
flatViewFilterToValidate,
|
||||
optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (validationResult.errors.length > 0) {
|
||||
return {
|
||||
status: 'fail',
|
||||
...validationResult,
|
||||
};
|
||||
}
|
||||
|
||||
const flatView = findFlatEntityByIdInFlatEntityMapsOrThrow({
|
||||
flatEntityId: flatViewFilterToValidate.viewId,
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps,
|
||||
});
|
||||
|
||||
const updatedFlatViewMaps = replaceFlatEntityInFlatEntityMapsOrThrow({
|
||||
flatEntity: {
|
||||
...flatView,
|
||||
viewFilterIds: [...flatView.viewFilterIds, flatViewFilterToValidate.id],
|
||||
},
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps,
|
||||
});
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
action: {
|
||||
type: 'create_view_filter',
|
||||
viewFilter: flatViewFilterToValidate,
|
||||
},
|
||||
dependencyOptimisticFlatEntityMaps: {
|
||||
...dependencyOptimisticFlatEntityMaps,
|
||||
flatViewMaps: updatedFlatViewMaps,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
protected async validateFlatEntityDeletion({
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
flatEntityToValidate: flatViewFilterToValidate,
|
||||
optimisticFlatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
}: FlatEntityValidationArgs<
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>): Promise<
|
||||
FlatEntityValidationReturnType<
|
||||
WorkspaceMigrationViewFilterActionV2,
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>
|
||||
> {
|
||||
const validationResult =
|
||||
this.flatViewFilterValidatorService.validateFlatViewFilterDeletion({
|
||||
flatViewFilterToValidate,
|
||||
optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (validationResult.errors.length > 0) {
|
||||
return {
|
||||
status: 'fail',
|
||||
...validationResult,
|
||||
};
|
||||
}
|
||||
|
||||
const flatView = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.viewId,
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps,
|
||||
});
|
||||
|
||||
const updatedFlatViewMaps = isDefined(flatView)
|
||||
? replaceFlatEntityInFlatEntityMapsOrThrow({
|
||||
flatEntity: {
|
||||
...flatView,
|
||||
viewFilterIds: flatView.viewFilterIds.filter(
|
||||
(id) => id !== flatViewFilterToValidate.id,
|
||||
),
|
||||
},
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps,
|
||||
})
|
||||
: dependencyOptimisticFlatEntityMaps.flatViewMaps;
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
action: {
|
||||
type: 'delete_view_filter',
|
||||
viewFilterId: flatViewFilterToValidate.id,
|
||||
},
|
||||
dependencyOptimisticFlatEntityMaps: {
|
||||
...dependencyOptimisticFlatEntityMaps,
|
||||
flatViewMaps: updatedFlatViewMaps,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
protected async validateFlatEntityUpdate({
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
flatEntityUpdate: { from: fromFlatViewFilter, to: toFlatViewFilter },
|
||||
optimisticFlatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
}: FlatEntityUpdateValidationArgs<
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>): Promise<
|
||||
| FlatEntityValidationReturnType<
|
||||
WorkspaceMigrationViewFilterActionV2,
|
||||
FlatViewFilter,
|
||||
ViewFilterRelatedFlatEntityMaps
|
||||
>
|
||||
| undefined
|
||||
> {
|
||||
const viewFilterUpdatedProperties = compareTwoFlatViewFilter({
|
||||
fromFlatViewFilter,
|
||||
toFlatViewFilter,
|
||||
});
|
||||
|
||||
if (viewFilterUpdatedProperties.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const validationResult =
|
||||
this.flatViewFilterValidatorService.validateFlatViewFilterUpdate({
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
flatViewFilterToValidate: toFlatViewFilter,
|
||||
optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (validationResult.errors.length > 0) {
|
||||
return {
|
||||
status: 'fail',
|
||||
...validationResult,
|
||||
};
|
||||
}
|
||||
|
||||
const updateViewFilterAction: UpdateViewFilterAction = {
|
||||
type: 'update_view_filter',
|
||||
viewFilterId: toFlatViewFilter.id,
|
||||
updates: viewFilterUpdatedProperties,
|
||||
};
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
action: updateViewFilterAction,
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
};
|
||||
}
|
||||
}
|
||||
+2
@@ -7,6 +7,7 @@ import { type WorkspaceMigrationRouteTriggerActionV2 } from 'src/engine/workspac
|
||||
import { type WorkspaceMigrationServerlessFunctionActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type';
|
||||
import { type WorkspaceMigrationViewActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type';
|
||||
import { type WorkspaceMigrationViewFieldActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type';
|
||||
import { type WorkspaceMigrationViewFilterActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type';
|
||||
|
||||
export type WorkspaceMigrationActionV2 =
|
||||
| WorkspaceMigrationObjectActionV2
|
||||
@@ -14,6 +15,7 @@ export type WorkspaceMigrationActionV2 =
|
||||
| WorkspaceMigrationIndexActionV2
|
||||
| WorkspaceMigrationViewActionV2
|
||||
| WorkspaceMigrationViewFieldActionV2
|
||||
| WorkspaceMigrationViewFilterActionV2
|
||||
| WorkspaceMigrationServerlessFunctionActionV2
|
||||
| WorkspaceMigrationDatabaseEventTriggerActionV2
|
||||
| WorkspaceMigrationCronTriggerActionV2
|
||||
|
||||
+6
-16
@@ -1,30 +1,20 @@
|
||||
import { type FromTo } from 'twenty-shared/types';
|
||||
|
||||
import { type FlatViewFieldPropertiesToCompare } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type';
|
||||
import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type';
|
||||
import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
|
||||
|
||||
export type FlatViewFieldPropertyUpdate<
|
||||
P extends FlatViewFieldPropertiesToCompare,
|
||||
> = {
|
||||
property: P;
|
||||
} & FromTo<ViewFieldEntity[P]>;
|
||||
import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type';
|
||||
|
||||
export type CreateViewFieldAction = {
|
||||
type: 'create_view_field';
|
||||
viewField: FlatViewField;
|
||||
};
|
||||
|
||||
export type FlatViewFieldPropertiesUpdates = Array<
|
||||
{
|
||||
[P in FlatViewFieldPropertiesToCompare]: FlatViewFieldPropertyUpdate<P>;
|
||||
}[FlatViewFieldPropertiesToCompare]
|
||||
>;
|
||||
|
||||
export type UpdateViewFieldAction = {
|
||||
type: 'update_view_field';
|
||||
viewFieldId: string;
|
||||
updates: FlatViewFieldPropertiesUpdates;
|
||||
updates: Array<
|
||||
{
|
||||
[P in FlatViewFieldPropertiesToCompare]: PropertyUpdate<FlatViewField, P>;
|
||||
}[FlatViewFieldPropertiesToCompare]
|
||||
>;
|
||||
};
|
||||
|
||||
export type DeleteViewFieldAction = {
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
import { type FlatViewFilterPropertiesToCompare } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type';
|
||||
|
||||
export type CreateViewFilterAction = {
|
||||
type: 'create_view_filter';
|
||||
viewFilter: FlatViewFilter;
|
||||
};
|
||||
|
||||
export type UpdateViewFilterAction = {
|
||||
type: 'update_view_filter';
|
||||
viewFilterId: string;
|
||||
updates: Array<
|
||||
{
|
||||
[P in FlatViewFilterPropertiesToCompare]: PropertyUpdate<
|
||||
FlatViewFilter,
|
||||
P
|
||||
>;
|
||||
}[FlatViewFilterPropertiesToCompare]
|
||||
>;
|
||||
};
|
||||
|
||||
export type DeleteViewFilterAction = {
|
||||
type: 'delete_view_filter';
|
||||
viewFilterId: string;
|
||||
};
|
||||
|
||||
export type WorkspaceMigrationViewFilterActionV2 =
|
||||
| CreateViewFilterAction
|
||||
| UpdateViewFilterAction
|
||||
| DeleteViewFilterAction;
|
||||
|
||||
export type WorkspaceMigrationViewFilterActionTypeV2 =
|
||||
WorkspaceMigrationViewFilterActionV2['type'];
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { msg, t } from '@lingui/core/macro';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type';
|
||||
import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type';
|
||||
import { ViewFilterExceptionCode } from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
|
||||
import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type';
|
||||
import { ViewFilterRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type';
|
||||
|
||||
@Injectable()
|
||||
export class FlatViewFilterValidatorService {
|
||||
constructor() {}
|
||||
|
||||
validateFlatViewFilterCreation({
|
||||
flatViewFilterToValidate,
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
optimisticFlatViewFilterMaps,
|
||||
}: {
|
||||
flatViewFilterToValidate: FlatViewFilter;
|
||||
dependencyOptimisticFlatEntityMaps: ViewFilterRelatedFlatEntityMaps;
|
||||
optimisticFlatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FailedFlatEntityValidation<FlatViewFilter> {
|
||||
const validationResult: FailedFlatEntityValidation<FlatViewFilter> = {
|
||||
type: 'create_view_filter',
|
||||
errors: [],
|
||||
flatEntityMinimalInformation: {
|
||||
id: flatViewFilterToValidate.id,
|
||||
},
|
||||
};
|
||||
|
||||
const existingViewFilter = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.id,
|
||||
flatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (isDefined(existingViewFilter)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.INVALID_VIEW_FILTER_DATA,
|
||||
message: t`View filter with this id already exists`,
|
||||
userFriendlyMessage: msg`View filter with this id already exists`,
|
||||
});
|
||||
}
|
||||
|
||||
const referencedView = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.viewId,
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps,
|
||||
});
|
||||
|
||||
if (!isDefined(referencedView)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.INVALID_VIEW_FILTER_DATA,
|
||||
message: t`View not found`,
|
||||
userFriendlyMessage: msg`View not found`,
|
||||
});
|
||||
}
|
||||
|
||||
const referencedFieldMetadata = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.fieldMetadataId,
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps,
|
||||
});
|
||||
|
||||
if (!isDefined(referencedFieldMetadata)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.INVALID_VIEW_FILTER_DATA,
|
||||
message: t`Field metadata not found`,
|
||||
userFriendlyMessage: msg`Field metadata not found`,
|
||||
});
|
||||
}
|
||||
|
||||
return validationResult;
|
||||
}
|
||||
|
||||
validateFlatViewFilterDeletion({
|
||||
flatViewFilterToValidate,
|
||||
optimisticFlatViewFilterMaps,
|
||||
}: {
|
||||
flatViewFilterToValidate: FlatViewFilter;
|
||||
optimisticFlatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FailedFlatEntityValidation<FlatViewFilter> {
|
||||
const validationResult: FailedFlatEntityValidation<FlatViewFilter> = {
|
||||
type: 'delete_view_filter',
|
||||
errors: [],
|
||||
flatEntityMinimalInformation: {
|
||||
id: flatViewFilterToValidate.id,
|
||||
},
|
||||
};
|
||||
|
||||
const existingViewFilter = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.id,
|
||||
flatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (!isDefined(existingViewFilter)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.VIEW_FILTER_NOT_FOUND,
|
||||
message: t`View filter not found`,
|
||||
userFriendlyMessage: msg`View filter not found`,
|
||||
});
|
||||
} else if (!isDefined(existingViewFilter.deletedAt)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.INVALID_VIEW_FILTER_DATA,
|
||||
message: t`View filter has to be soft deleted first`,
|
||||
userFriendlyMessage: msg`View filter has to be soft deleted first`,
|
||||
});
|
||||
}
|
||||
|
||||
return validationResult;
|
||||
}
|
||||
|
||||
validateFlatViewFilterUpdate({
|
||||
flatViewFilterToValidate,
|
||||
dependencyOptimisticFlatEntityMaps,
|
||||
optimisticFlatViewFilterMaps,
|
||||
}: {
|
||||
flatViewFilterToValidate: FlatViewFilter;
|
||||
dependencyOptimisticFlatEntityMaps: ViewFilterRelatedFlatEntityMaps;
|
||||
optimisticFlatViewFilterMaps: FlatViewFilterMaps;
|
||||
}): FailedFlatEntityValidation<FlatViewFilter> {
|
||||
const validationResult: FailedFlatEntityValidation<FlatViewFilter> = {
|
||||
type: 'update_view_filter',
|
||||
errors: [],
|
||||
flatEntityMinimalInformation: {
|
||||
id: flatViewFilterToValidate.id,
|
||||
},
|
||||
};
|
||||
|
||||
const existingViewFilter = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.id,
|
||||
flatEntityMaps: optimisticFlatViewFilterMaps,
|
||||
});
|
||||
|
||||
if (!isDefined(existingViewFilter)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.VIEW_FILTER_NOT_FOUND,
|
||||
message: t`View filter not found`,
|
||||
userFriendlyMessage: msg`View filter not found`,
|
||||
});
|
||||
}
|
||||
|
||||
const referencedFieldMetadata = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: flatViewFilterToValidate.fieldMetadataId,
|
||||
flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps,
|
||||
});
|
||||
|
||||
if (!isDefined(referencedFieldMetadata)) {
|
||||
validationResult.errors.push({
|
||||
code: ViewFilterExceptionCode.INVALID_VIEW_FILTER_DATA,
|
||||
message: t`Field metadata not found`,
|
||||
userFriendlyMessage: msg`Field metadata not found`,
|
||||
});
|
||||
}
|
||||
|
||||
return validationResult;
|
||||
}
|
||||
}
|
||||
+3
@@ -10,6 +10,7 @@ import { FlatObjectMetadataValidatorService } from 'src/engine/workspace-manager
|
||||
import { FlatRouteTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service';
|
||||
import { FlatServerlessFunctionValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service';
|
||||
import { FlatViewFieldValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service';
|
||||
import { FlatViewFilterValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service';
|
||||
import { FlatViewValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service';
|
||||
|
||||
@Module({
|
||||
@@ -17,6 +18,7 @@ import { FlatViewValidatorService } from 'src/engine/workspace-manager/workspace
|
||||
providers: [
|
||||
FlatViewValidatorService,
|
||||
FlatViewFieldValidatorService,
|
||||
FlatViewFilterValidatorService,
|
||||
FlatIndexValidatorService,
|
||||
FlatFieldMetadataValidatorService,
|
||||
FlatObjectMetadataValidatorService,
|
||||
@@ -29,6 +31,7 @@ import { FlatViewValidatorService } from 'src/engine/workspace-manager/workspace
|
||||
exports: [
|
||||
FlatViewValidatorService,
|
||||
FlatViewFieldValidatorService,
|
||||
FlatViewFilterValidatorService,
|
||||
FlatIndexValidatorService,
|
||||
FlatFieldMetadataValidatorService,
|
||||
FlatObjectMetadataValidatorService,
|
||||
|
||||
+3
@@ -10,6 +10,7 @@ import { WorkspaceMigrationV2ObjectActionsBuilderService } from 'src/engine/work
|
||||
import { WorkspaceMigrationV2RouteTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ServerlessFunctionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewFilterActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service';
|
||||
import { WorkspaceMigrationV2ViewActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service';
|
||||
import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/workspace-migration-builder-validators.module';
|
||||
|
||||
@@ -20,6 +21,7 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace-
|
||||
WorkspaceMigrationV2ObjectActionsBuilderService,
|
||||
WorkspaceMigrationV2ViewActionsBuilderService,
|
||||
WorkspaceMigrationV2ViewFieldActionsBuilderService,
|
||||
WorkspaceMigrationV2ViewFilterActionsBuilderService,
|
||||
WorkspaceMigrationV2IndexActionsBuilderService,
|
||||
WorkspaceMigrationV2ServerlessFunctionActionsBuilderService,
|
||||
WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService,
|
||||
@@ -32,6 +34,7 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace-
|
||||
WorkspaceMigrationV2IndexActionsBuilderService,
|
||||
WorkspaceMigrationV2ObjectActionsBuilderService,
|
||||
WorkspaceMigrationV2ViewFieldActionsBuilderService,
|
||||
WorkspaceMigrationV2ViewFilterActionsBuilderService,
|
||||
WorkspaceMigrationV2FieldActionsBuilderService,
|
||||
WorkspaceMigrationV2ServerlessFunctionActionsBuilderService,
|
||||
WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService,
|
||||
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
OptimisticallyApplyActionOnAllFlatEntityMapsArgs,
|
||||
WorkspaceMigrationRunnerActionHandler,
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface';
|
||||
|
||||
import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type';
|
||||
import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { CreateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type';
|
||||
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type';
|
||||
|
||||
@Injectable()
|
||||
export class CreateViewFilterActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
|
||||
'create_view_filter',
|
||||
) {
|
||||
optimisticallyApplyActionOnAllFlatEntityMaps({
|
||||
action,
|
||||
allFlatEntityMaps,
|
||||
}: OptimisticallyApplyActionOnAllFlatEntityMapsArgs<CreateViewFilterAction>): Partial<AllFlatEntityMaps> {
|
||||
const { flatViewFilterMaps } = allFlatEntityMaps;
|
||||
const { viewFilter } = action;
|
||||
|
||||
const updatedFlatViewFilterMaps = addFlatEntityToFlatEntityMapsOrThrow({
|
||||
flatEntity: viewFilter,
|
||||
flatEntityMaps: flatViewFilterMaps,
|
||||
});
|
||||
|
||||
return {
|
||||
flatViewFilterMaps: updatedFlatViewFilterMaps,
|
||||
};
|
||||
}
|
||||
|
||||
async executeForMetadata(
|
||||
context: WorkspaceMigrationActionRunnerArgs<CreateViewFilterAction>,
|
||||
): Promise<void> {
|
||||
const { action, queryRunner, workspaceId } = context;
|
||||
const { viewFilter } = action;
|
||||
|
||||
const viewFilterRepository =
|
||||
queryRunner.manager.getRepository<ViewFilterEntity>(ViewFilterEntity);
|
||||
|
||||
await viewFilterRepository.insert({
|
||||
...viewFilter,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
async executeForWorkspaceSchema(
|
||||
_context: WorkspaceMigrationActionRunnerArgs<CreateViewFilterAction>,
|
||||
): Promise<void> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
OptimisticallyApplyActionOnAllFlatEntityMapsArgs,
|
||||
WorkspaceMigrationRunnerActionHandler,
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface';
|
||||
|
||||
import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type';
|
||||
import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { DeleteViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type';
|
||||
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type';
|
||||
|
||||
@Injectable()
|
||||
export class DeleteViewFilterActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
|
||||
'delete_view_filter',
|
||||
) {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
optimisticallyApplyActionOnAllFlatEntityMaps({
|
||||
action,
|
||||
allFlatEntityMaps,
|
||||
}: OptimisticallyApplyActionOnAllFlatEntityMapsArgs<DeleteViewFilterAction>): Partial<AllFlatEntityMaps> {
|
||||
const { flatViewFilterMaps } = allFlatEntityMaps;
|
||||
const { viewFilterId } = action;
|
||||
|
||||
const updatedFlatViewFilterMaps = deleteFlatEntityFromFlatEntityMapsOrThrow(
|
||||
{
|
||||
entityToDeleteId: viewFilterId,
|
||||
flatEntityMaps: flatViewFilterMaps,
|
||||
},
|
||||
);
|
||||
|
||||
return {
|
||||
flatViewFilterMaps: updatedFlatViewFilterMaps,
|
||||
};
|
||||
}
|
||||
|
||||
async executeForMetadata(
|
||||
context: WorkspaceMigrationActionRunnerArgs<DeleteViewFilterAction>,
|
||||
): Promise<void> {
|
||||
const { action, queryRunner, workspaceId } = context;
|
||||
const { viewFilterId } = action;
|
||||
|
||||
const viewFilterRepository =
|
||||
queryRunner.manager.getRepository<ViewFilterEntity>(ViewFilterEntity);
|
||||
|
||||
await viewFilterRepository.delete({
|
||||
id: viewFilterId,
|
||||
workspaceId,
|
||||
});
|
||||
}
|
||||
|
||||
async executeForWorkspaceSchema(
|
||||
_context: WorkspaceMigrationActionRunnerArgs<DeleteViewFilterAction>,
|
||||
): Promise<void> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
OptimisticallyApplyActionOnAllFlatEntityMapsArgs,
|
||||
WorkspaceMigrationRunnerActionHandler,
|
||||
} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface';
|
||||
|
||||
import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type';
|
||||
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||
import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util';
|
||||
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
import { UpdateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type';
|
||||
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type';
|
||||
import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util';
|
||||
|
||||
@Injectable()
|
||||
export class UpdateViewFilterActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
|
||||
'update_view_filter',
|
||||
) {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
optimisticallyApplyActionOnAllFlatEntityMaps({
|
||||
action,
|
||||
allFlatEntityMaps,
|
||||
}: OptimisticallyApplyActionOnAllFlatEntityMapsArgs<UpdateViewFilterAction>): Partial<AllFlatEntityMaps> {
|
||||
const { flatViewFilterMaps } = allFlatEntityMaps;
|
||||
const { viewFilterId } = action;
|
||||
|
||||
const existingViewFilter = findFlatEntityByIdInFlatEntityMapsOrThrow({
|
||||
flatEntityId: viewFilterId,
|
||||
flatEntityMaps: flatViewFilterMaps,
|
||||
});
|
||||
|
||||
const updatedViewFilter = {
|
||||
...existingViewFilter,
|
||||
...fromWorkspaceMigrationUpdateActionToPartialEntity(action),
|
||||
};
|
||||
|
||||
const updatedFlatViewFilterMaps = replaceFlatEntityInFlatEntityMapsOrThrow({
|
||||
flatEntity: updatedViewFilter,
|
||||
flatEntityMaps: flatViewFilterMaps,
|
||||
});
|
||||
|
||||
return {
|
||||
flatViewFilterMaps: updatedFlatViewFilterMaps,
|
||||
};
|
||||
}
|
||||
|
||||
async executeForMetadata(
|
||||
context: WorkspaceMigrationActionRunnerArgs<UpdateViewFilterAction>,
|
||||
): Promise<void> {
|
||||
const { action, queryRunner } = context;
|
||||
const { viewFilterId } = action;
|
||||
|
||||
const viewFilterRepository =
|
||||
queryRunner.manager.getRepository<ViewFilterEntity>(ViewFilterEntity);
|
||||
|
||||
const update = fromWorkspaceMigrationUpdateActionToPartialEntity(action);
|
||||
|
||||
await viewFilterRepository.update(viewFilterId, update);
|
||||
}
|
||||
|
||||
async executeForWorkspaceSchema(
|
||||
_context: WorkspaceMigrationActionRunnerArgs<UpdateViewFilterAction>,
|
||||
): Promise<void> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
+7
@@ -24,6 +24,9 @@ import { UpdateServerlessFunctionActionHandlerService } from 'src/engine/workspa
|
||||
import { CreateViewFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service';
|
||||
import { DeleteViewFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/delete-view-field-action-handler.service';
|
||||
import { UpdateViewFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/update-view-field-action-handler.service';
|
||||
import { CreateViewFilterActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/create-view-filter-action-handler.service';
|
||||
import { DeleteViewFilterActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/delete-view-filter-action-handler.service';
|
||||
import { UpdateViewFilterActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/update-view-filter-action-handler.service';
|
||||
import { CreateViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service';
|
||||
import { DeleteViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/delete-view-action-handler.service';
|
||||
import { UpdateViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/update-view-action-handler.service';
|
||||
@@ -50,6 +53,10 @@ import { UpdateViewActionHandlerService } from 'src/engine/workspace-manager/wor
|
||||
UpdateViewFieldActionHandlerService,
|
||||
DeleteViewFieldActionHandlerService,
|
||||
|
||||
CreateViewFilterActionHandlerService,
|
||||
UpdateViewFilterActionHandlerService,
|
||||
DeleteViewFilterActionHandlerService,
|
||||
|
||||
CreateServerlessFunctionActionHandlerService,
|
||||
DeleteServerlessFunctionActionHandlerService,
|
||||
UpdateServerlessFunctionActionHandlerService,
|
||||
|
||||
+1
-4
@@ -1,7 +1,4 @@
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function orderObjectProperties<T extends Array<any> | object>(
|
||||
data: T,
|
||||
): T {
|
||||
export function orderObjectProperties<T>(data: T): T {
|
||||
if (Array.isArray(data)) {
|
||||
return data.map(orderObjectProperties) as T;
|
||||
}
|
||||
|
||||
+14
-13
@@ -3,13 +3,14 @@ import { randomUUID } from 'crypto';
|
||||
import { PERSON_GQL_FIELDS } from 'test/integration/constants/person-gql-fields.constants';
|
||||
import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util';
|
||||
import { createViewFilterGroupOperationFactory } from 'test/integration/graphql/utils/create-view-filter-group-operation-factory.util';
|
||||
import { createViewFilterOperationFactory } from 'test/integration/graphql/utils/create-view-filter-operation-factory.util';
|
||||
import { createViewOperationFactory } from 'test/integration/graphql/utils/create-view-operation-factory.util';
|
||||
import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util';
|
||||
import { groupByOperationFactory } from 'test/integration/graphql/utils/group-by-operation-factory.util';
|
||||
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
||||
import { findManyObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/find-many-object-metadata.util';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import { createOneCoreViewFilter } from 'test/integration/metadata/suites/view-filter/utils/create-one-core-view-filter.util';
|
||||
import { jestExpectToBeDefined } from 'test/utils/expect-to-be-defined.util.test';
|
||||
|
||||
import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
|
||||
import { type ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
|
||||
@@ -443,18 +444,18 @@ describe('group-by resolvers (integration)', () => {
|
||||
const viewFilterGroupId = viewFilterGroupResponse.body.data
|
||||
.createCoreViewFilterGroup.id as string;
|
||||
|
||||
await makeGraphqlAPIRequest(
|
||||
createViewFilterOperationFactory({
|
||||
data: {
|
||||
viewId,
|
||||
viewFilterGroupId,
|
||||
fieldMetadataId: cityFieldMetadataId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: cityToKeep,
|
||||
positionInViewFilterGroup: 0,
|
||||
},
|
||||
}),
|
||||
);
|
||||
jestExpectToBeDefined(cityFieldMetadataId);
|
||||
await createOneCoreViewFilter({
|
||||
input: {
|
||||
viewId,
|
||||
viewFilterGroupId,
|
||||
fieldMetadataId: cityFieldMetadataId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: cityToKeep,
|
||||
positionInViewFilterGroup: 0,
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await makeGraphqlAPIRequest(
|
||||
groupByOperationFactory({
|
||||
|
||||
+39
-42
@@ -1,10 +1,10 @@
|
||||
import { print } from 'graphql';
|
||||
import request from 'supertest';
|
||||
import { deleteOneRoleOperationFactory } from 'test/integration/graphql/utils/delete-one-role-operation-factory.util';
|
||||
import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util';
|
||||
import { updateWorkspaceMemberRole } from 'test/integration/graphql/utils/update-workspace-member-role.util';
|
||||
import { createOneObjectMetadataQueryFactory } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata-query-factory.util';
|
||||
import { deleteOneObjectMetadataQueryFactory } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata-query-factory.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
|
||||
import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
|
||||
@@ -16,6 +16,7 @@ const client = request(`http://localhost:${APP_PORT}`);
|
||||
describe('Granular settings permissions', () => {
|
||||
let customRoleId: string;
|
||||
let originalMemberRoleId: string;
|
||||
const createdObjectMetadataIds: string[] = [];
|
||||
|
||||
beforeAll(async () => {
|
||||
// Get the original Member role ID for restoration later
|
||||
@@ -123,54 +124,50 @@ describe('Granular settings permissions', () => {
|
||||
.post('/graphql')
|
||||
.set('Authorization', `Bearer ${APPLE_JANE_ADMIN_ACCESS_TOKEN}`)
|
||||
.send(deleteRoleQuery);
|
||||
|
||||
for (const objectMetadataId of createdObjectMetadataIds) {
|
||||
await updateOneObjectMetadata({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
idToUpdate: objectMetadataId,
|
||||
updatePayload: {
|
||||
isActive: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await deleteOneObjectMetadata({
|
||||
input: {
|
||||
idToDelete: objectMetadataId,
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe('Data Model Permissions', () => {
|
||||
it('should allow access to data model operations when user has DATA_MODEL setting permission', async () => {
|
||||
// Test creating an object metadata (requires DATA_MODEL permission)
|
||||
const { query: createObjectQuery, variables } =
|
||||
createOneObjectMetadataQueryFactory({
|
||||
input: {
|
||||
labelSingular: 'House',
|
||||
labelPlural: 'Houses',
|
||||
nameSingular: 'house',
|
||||
namePlural: 'houses',
|
||||
description: 'a house',
|
||||
icon: 'IconHome',
|
||||
},
|
||||
gqlFields: `
|
||||
const { data, errors } = await createOneObjectMetadata({
|
||||
input: {
|
||||
labelSingular: 'House',
|
||||
labelPlural: 'Houses',
|
||||
nameSingular: 'house',
|
||||
namePlural: 'houses',
|
||||
description: 'a house',
|
||||
icon: 'IconHome',
|
||||
},
|
||||
gqlFields: `
|
||||
id
|
||||
labelSingular
|
||||
labelPlural
|
||||
`,
|
||||
});
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await client
|
||||
.post('/metadata')
|
||||
.set('Authorization', `Bearer ${APPLE_JONY_MEMBER_ACCESS_TOKEN}`)
|
||||
.send({ query: print(createObjectQuery), variables });
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.errors).toBeUndefined();
|
||||
expect(response.body.data.createOneObject).toBeDefined();
|
||||
expect(response.body.data.createOneObject.labelSingular).toBe('House');
|
||||
|
||||
// Clean up - delete the created object
|
||||
const { query: deleteObjectQuery, variables: deleteObjectVariables } =
|
||||
deleteOneObjectMetadataQueryFactory({
|
||||
input: {
|
||||
idToDelete: response.body.data.createOneObject.id,
|
||||
},
|
||||
gqlFields: 'id',
|
||||
});
|
||||
|
||||
await client
|
||||
.post('/graphql')
|
||||
.set('Authorization', `Bearer ${APPLE_JANE_ADMIN_ACCESS_TOKEN}`)
|
||||
.send({
|
||||
query: print(deleteObjectQuery),
|
||||
variables: deleteObjectVariables,
|
||||
});
|
||||
createdObjectMetadataIds.push(data.createOneObject.id);
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.createOneObject).toBeDefined();
|
||||
expect(data.createOneObject.labelSingular).toBe('House');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`View Filter Resolver deleteCoreViewFilter should throw an error when deleting non-existent view filter 1`] = `
|
||||
{
|
||||
"extensions": {
|
||||
"code": "NOT_FOUND",
|
||||
"userFriendlyMessage": "An error occurred.",
|
||||
},
|
||||
"message": "View filter to delete not found",
|
||||
"name": "NotFoundError",
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`View Filter Resolver destroyCoreViewFilter should throw an error when destroying non-existent view filter 1`] = `
|
||||
{
|
||||
"extensions": {
|
||||
"code": "NOT_FOUND",
|
||||
"userFriendlyMessage": "An error occurred.",
|
||||
},
|
||||
"message": "View filter to destroy not found",
|
||||
"name": "NotFoundError",
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`View Filter Resolver updateCoreViewFilter should throw an error when updating non-existent view filter 1`] = `
|
||||
{
|
||||
"extensions": {
|
||||
"code": "NOT_FOUND",
|
||||
"userFriendlyMessage": "An error occurred.",
|
||||
},
|
||||
"message": "View filter to update not found",
|
||||
"name": "NotFoundError",
|
||||
}
|
||||
`;
|
||||
+6
@@ -31,6 +31,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 Should fail to crea
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -43,6 +44,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 Should fail to crea
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -83,6 +85,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -95,6 +98,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -135,6 +139,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -147,6 +152,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+10
@@ -31,6 +31,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -43,6 +44,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -83,6 +85,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"type": "update_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -95,6 +98,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -133,6 +137,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"type": "delete_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -145,6 +150,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -185,6 +191,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"type": "update_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -197,6 +204,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -237,6 +245,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"type": "update_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -249,6 +258,7 @@ exports[`View Field Resolver - Successful object metadata identifier update side
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+124
-142
@@ -1,31 +1,18 @@
|
||||
import { TEST_NOT_EXISTING_VIEW_FILTER_ID } from 'test/integration/constants/test-view-ids.constants';
|
||||
import { createViewFilterOperationFactory } from 'test/integration/graphql/utils/create-view-filter-operation-factory.util';
|
||||
import { deleteViewFilterOperationFactory } from 'test/integration/graphql/utils/delete-view-filter-operation-factory.util';
|
||||
import { destroyViewFilterOperationFactory } from 'test/integration/graphql/utils/destroy-view-filter-operation-factory.util';
|
||||
import { findViewFiltersOperationFactory } from 'test/integration/graphql/utils/find-view-filters-operation-factory.util';
|
||||
import {
|
||||
assertGraphQLErrorResponse,
|
||||
assertGraphQLSuccessfulResponse,
|
||||
} from 'test/integration/graphql/utils/graphql-test-assertions.util';
|
||||
import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util';
|
||||
import { updateViewFilterOperationFactory } from 'test/integration/graphql/utils/update-view-filter-operation-factory.util';
|
||||
import { createViewFilterData } from 'test/integration/graphql/utils/view-data-factory.util';
|
||||
import { expectOneNotInternalServerErrorSnapshot } from 'test/integration/graphql/utils/expect-one-not-internal-server-error-snapshot.util';
|
||||
import { createTestViewWithGraphQL } from 'test/integration/graphql/utils/view-graphql.util';
|
||||
import { createOneFieldMetadata } from 'test/integration/metadata/suites/field-metadata/utils/create-one-field-metadata.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
import {
|
||||
assertViewFilterStructure,
|
||||
cleanupViewRecords,
|
||||
} from 'test/integration/utils/view-test.util';
|
||||
import { createOneCoreViewFilter } from 'test/integration/metadata/suites/view-filter/utils/create-one-core-view-filter.util';
|
||||
import { deleteOneCoreViewFilter } from 'test/integration/metadata/suites/view-filter/utils/delete-one-core-view-filter.util';
|
||||
import { destroyOneCoreViewFilter } from 'test/integration/metadata/suites/view-filter/utils/destroy-one-core-view-filter.util';
|
||||
import { findCoreViewFilters } from 'test/integration/metadata/suites/view-filter/utils/find-core-view-filters.util';
|
||||
import { updateOneCoreViewFilter } from 'test/integration/metadata/suites/view-filter/utils/update-one-core-view-filter.util';
|
||||
import { cleanupViewRecords } from 'test/integration/utils/view-test.util';
|
||||
import { FieldMetadataType, ViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { ErrorCode } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
import {
|
||||
generateViewFilterExceptionMessage,
|
||||
ViewFilterExceptionMessageKey,
|
||||
} from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception';
|
||||
const TEST_NOT_EXISTING_VIEW_FILTER_ID = '20202020-52c5-4152-8c09-76a845fb8ece';
|
||||
|
||||
describe('View Filter Resolver', () => {
|
||||
let testViewId: string;
|
||||
@@ -98,33 +85,34 @@ describe('View Filter Resolver', () => {
|
||||
|
||||
describe('getCoreViewFilters', () => {
|
||||
it('should return empty array when no view filters exist', async () => {
|
||||
const operation = findViewFiltersOperationFactory({ viewId: testViewId });
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
const { data, errors } = await findCoreViewFilters({
|
||||
viewId: testViewId,
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
expect(response.body.data.getCoreViewFilters).toEqual([]);
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.getCoreViewFilters).toEqual([]);
|
||||
});
|
||||
|
||||
it('should return view filters for a specific view', async () => {
|
||||
const filterData = createViewFilterData(testViewId, {
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'test',
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
});
|
||||
const createOperation = createViewFilterOperationFactory({
|
||||
data: filterData,
|
||||
await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'test',
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
await makeGraphqlAPIRequest(createOperation);
|
||||
|
||||
const getOperation = findViewFiltersOperationFactory({
|
||||
const { data, errors } = await findCoreViewFilters({
|
||||
viewId: testViewId,
|
||||
expectToFail: false,
|
||||
});
|
||||
const response = await makeGraphqlAPIRequest(getOperation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
expect(response.body.data.getCoreViewFilters).toHaveLength(1);
|
||||
assertViewFilterStructure(response.body.data.getCoreViewFilters[0], {
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.getCoreViewFilters).toHaveLength(1);
|
||||
expect(data.getCoreViewFilters[0]).toMatchObject({
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'test',
|
||||
@@ -135,17 +123,18 @@ describe('View Filter Resolver', () => {
|
||||
|
||||
describe('createCoreViewFilter', () => {
|
||||
it('should create a new view filter with string value', async () => {
|
||||
const filterData = createViewFilterData(testViewId, {
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: 'test value',
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
const { data, errors } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: 'test value',
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const operation = createViewFilterOperationFactory({ data: filterData });
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
assertViewFilterStructure(response.body.data.createCoreViewFilter, {
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.createCoreViewFilter).toMatchObject({
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: 'test value',
|
||||
@@ -154,17 +143,18 @@ describe('View Filter Resolver', () => {
|
||||
});
|
||||
|
||||
it('should create a view filter with numeric value', async () => {
|
||||
const filterData = createViewFilterData(testViewId, {
|
||||
operand: ViewFilterOperand.GREATER_THAN_OR_EQUAL,
|
||||
value: 100,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
const { data, errors } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.GREATER_THAN_OR_EQUAL,
|
||||
value: 100,
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const operation = createViewFilterOperationFactory({ data: filterData });
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
assertViewFilterStructure(response.body.data.createCoreViewFilter, {
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.createCoreViewFilter).toMatchObject({
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
operand: ViewFilterOperand.GREATER_THAN_OR_EQUAL,
|
||||
value: 100,
|
||||
@@ -173,18 +163,18 @@ describe('View Filter Resolver', () => {
|
||||
});
|
||||
|
||||
it('should create a view filter with boolean value', async () => {
|
||||
const operation = createViewFilterOperationFactory({
|
||||
data: createViewFilterData(testViewId, {
|
||||
const { data, errors } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: true,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
}),
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
assertViewFilterStructure(response.body.data.createCoreViewFilter, {
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.createCoreViewFilter).toMatchObject({
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: true,
|
||||
@@ -195,30 +185,31 @@ describe('View Filter Resolver', () => {
|
||||
|
||||
describe('updateCoreViewFilter', () => {
|
||||
it('should update an existing view filter', async () => {
|
||||
const createOperation = createViewFilterOperationFactory({
|
||||
data: createViewFilterData(testViewId, {
|
||||
const { data: createData } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'original',
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
}),
|
||||
});
|
||||
|
||||
const createResponse = await makeGraphqlAPIRequest(createOperation);
|
||||
|
||||
const viewFilterId = createResponse.body.data.createCoreViewFilter.id;
|
||||
|
||||
const updateOperation = updateViewFilterOperationFactory({
|
||||
viewFilterId: viewFilterId,
|
||||
data: {
|
||||
operand: ViewFilterOperand.DOES_NOT_CONTAIN,
|
||||
value: 'updated',
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await makeGraphqlAPIRequest(updateOperation);
|
||||
const viewFilterId = createData.createCoreViewFilter.id;
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
assertViewFilterStructure(response.body.data.updateCoreViewFilter, {
|
||||
const { data, errors } = await updateOneCoreViewFilter({
|
||||
input: {
|
||||
id: viewFilterId,
|
||||
update: {
|
||||
operand: ViewFilterOperand.DOES_NOT_CONTAIN,
|
||||
value: 'updated',
|
||||
},
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.updateCoreViewFilter).toMatchObject({
|
||||
id: viewFilterId,
|
||||
operand: ViewFilterOperand.DOES_NOT_CONTAIN,
|
||||
value: 'updated',
|
||||
@@ -226,101 +217,92 @@ describe('View Filter Resolver', () => {
|
||||
});
|
||||
|
||||
it('should throw an error when updating non-existent view filter', async () => {
|
||||
const operation = updateViewFilterOperationFactory({
|
||||
viewFilterId: TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
const { errors } = await updateOneCoreViewFilter({
|
||||
input: {
|
||||
id: TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
update: {},
|
||||
},
|
||||
expectToFail: true,
|
||||
});
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLErrorResponse(
|
||||
response,
|
||||
ErrorCode.NOT_FOUND,
|
||||
generateViewFilterExceptionMessage(
|
||||
ViewFilterExceptionMessageKey.VIEW_FILTER_NOT_FOUND,
|
||||
TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
),
|
||||
);
|
||||
expectOneNotInternalServerErrorSnapshot({ errors });
|
||||
});
|
||||
});
|
||||
|
||||
describe('deleteCoreViewFilter', () => {
|
||||
it('should delete an existing view filter', async () => {
|
||||
const createOperation = createViewFilterOperationFactory({
|
||||
data: createViewFilterData(testViewId, {
|
||||
const { data: createData } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'to delete',
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
}),
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const createResponse = await makeGraphqlAPIRequest(createOperation);
|
||||
const viewFilterId = createData.createCoreViewFilter.id;
|
||||
|
||||
const viewFilterId = createResponse.body.data.createCoreViewFilter.id;
|
||||
|
||||
const deleteOperation = deleteViewFilterOperationFactory({
|
||||
viewFilterId: viewFilterId,
|
||||
const { data, errors } = await deleteOneCoreViewFilter({
|
||||
input: { id: viewFilterId },
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await makeGraphqlAPIRequest(deleteOperation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
expect(response.body.data.deleteCoreViewFilter).toBe(true);
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.deleteCoreViewFilter).toMatchObject({
|
||||
id: viewFilterId,
|
||||
});
|
||||
expect(data.deleteCoreViewFilter.deletedAt).toBeDefined();
|
||||
});
|
||||
|
||||
it('should throw an error when deleting non-existent view filter', async () => {
|
||||
const operation = deleteViewFilterOperationFactory({
|
||||
viewFilterId: TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
const { errors } = await deleteOneCoreViewFilter({
|
||||
input: { id: TEST_NOT_EXISTING_VIEW_FILTER_ID },
|
||||
expectToFail: true,
|
||||
});
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLErrorResponse(
|
||||
response,
|
||||
ErrorCode.NOT_FOUND,
|
||||
generateViewFilterExceptionMessage(
|
||||
ViewFilterExceptionMessageKey.VIEW_FILTER_NOT_FOUND,
|
||||
TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
),
|
||||
);
|
||||
expectOneNotInternalServerErrorSnapshot({ errors });
|
||||
});
|
||||
});
|
||||
|
||||
describe('destroyCoreViewFilter', () => {
|
||||
it('should destroy an existing view filter', async () => {
|
||||
const createOperation = createViewFilterOperationFactory({
|
||||
data: createViewFilterData(testViewId, {
|
||||
const { data: createData } = await createOneCoreViewFilter({
|
||||
input: {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
viewId: testViewId,
|
||||
operand: ViewFilterOperand.CONTAINS,
|
||||
value: 'to destroy',
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
}),
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const createResponse = await makeGraphqlAPIRequest(createOperation);
|
||||
const viewFilterId = createData.createCoreViewFilter.id;
|
||||
|
||||
const viewFilterId = createResponse.body.data.createCoreViewFilter.id;
|
||||
|
||||
const destroyOperation = destroyViewFilterOperationFactory({
|
||||
viewFilterId: viewFilterId,
|
||||
await deleteOneCoreViewFilter({
|
||||
input: {
|
||||
id: viewFilterId,
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
const { data, errors } = await destroyOneCoreViewFilter({
|
||||
input: { id: viewFilterId },
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
const response = await makeGraphqlAPIRequest(destroyOperation);
|
||||
|
||||
assertGraphQLSuccessfulResponse(response);
|
||||
expect(response.body.data.destroyCoreViewFilter).toBe(true);
|
||||
expect(errors).toBeUndefined();
|
||||
expect(data.destroyCoreViewFilter).toMatchObject({
|
||||
id: viewFilterId,
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error when destroying non-existent view filter', async () => {
|
||||
const operation = destroyViewFilterOperationFactory({
|
||||
viewFilterId: TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
const { errors } = await destroyOneCoreViewFilter({
|
||||
input: { id: TEST_NOT_EXISTING_VIEW_FILTER_ID },
|
||||
expectToFail: true,
|
||||
});
|
||||
const response = await makeGraphqlAPIRequest(operation);
|
||||
|
||||
assertGraphQLErrorResponse(
|
||||
response,
|
||||
ErrorCode.NOT_FOUND,
|
||||
generateViewFilterExceptionMessage(
|
||||
ViewFilterExceptionMessageKey.VIEW_FILTER_NOT_FOUND,
|
||||
TEST_NOT_EXISTING_VIEW_FILTER_ID,
|
||||
),
|
||||
);
|
||||
expectOneNotInternalServerErrorSnapshot({ errors });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
|
||||
import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
||||
|
||||
type CreateViewFilterOperationFactoryParams = {
|
||||
gqlFields?: string;
|
||||
data?: Partial<ViewFilterEntity>;
|
||||
};
|
||||
|
||||
export const createViewFilterOperationFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
data = {},
|
||||
}: CreateViewFilterOperationFactoryParams = {}) => ({
|
||||
query: gql`
|
||||
mutation CreateCoreViewFilter($input: CreateViewFilterInput!) {
|
||||
createCoreViewFilter(input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input: data,
|
||||
},
|
||||
});
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
export const deleteViewFilterOperationFactory = ({
|
||||
viewFilterId,
|
||||
}: {
|
||||
viewFilterId: string;
|
||||
}) => ({
|
||||
query: gql`
|
||||
mutation DeleteCoreViewFilter($id: String!) {
|
||||
deleteCoreViewFilter(id: $id)
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
id: viewFilterId,
|
||||
},
|
||||
});
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
export const destroyViewFilterOperationFactory = ({
|
||||
viewFilterId,
|
||||
}: {
|
||||
viewFilterId: string;
|
||||
}) => ({
|
||||
query: gql`
|
||||
mutation DestroyCoreViewFilter($id: String!) {
|
||||
destroyCoreViewFilter(id: $id)
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
id: viewFilterId,
|
||||
},
|
||||
});
|
||||
-24
@@ -1,24 +0,0 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
|
||||
export const updateViewFilterOperationFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
viewFilterId,
|
||||
data = {},
|
||||
}: {
|
||||
gqlFields?: string;
|
||||
viewFilterId: string;
|
||||
data?: object;
|
||||
}) => ({
|
||||
query: gql`
|
||||
mutation UpdateCoreViewFilter($id: String!, $input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(id: $id, input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
id: viewFilterId,
|
||||
input: data,
|
||||
},
|
||||
});
|
||||
+2
@@ -32,6 +32,7 @@ exports[`createOne FieldMetadataService name/label sync should return an error w
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -44,6 +45,7 @@ exports[`createOne FieldMetadataService name/label sync should return an error w
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+4
@@ -32,6 +32,7 @@ exports[`updateOne failing update should not update a field name if it is not sy
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -44,6 +45,7 @@ exports[`updateOne failing update should not update a field name if it is not sy
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -92,6 +94,7 @@ exports[`updateOne failing update should throw if the field name is not availabl
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -104,6 +107,7 @@ exports[`updateOne failing update should throw if the field name is not availabl
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+140
@@ -33,6 +33,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -45,6 +46,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -88,6 +90,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -100,6 +103,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -142,6 +146,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -154,6 +159,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -211,6 +217,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -223,6 +230,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -280,6 +288,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -292,6 +301,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -349,6 +359,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -361,6 +372,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -418,6 +430,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -430,6 +443,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -472,6 +486,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -484,6 +499,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -527,6 +543,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -539,6 +556,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -586,6 +604,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -598,6 +617,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -640,6 +660,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -652,6 +673,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -695,6 +717,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -707,6 +730,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -749,6 +773,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -761,6 +786,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -818,6 +844,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -830,6 +857,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -872,6 +900,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -884,6 +913,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -926,6 +956,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -938,6 +969,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -981,6 +1013,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -993,6 +1026,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1036,6 +1070,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1048,6 +1083,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1090,6 +1126,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1102,6 +1139,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1145,6 +1183,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1157,6 +1196,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1199,6 +1239,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1211,6 +1252,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1258,6 +1300,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1270,6 +1313,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1312,6 +1356,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1324,6 +1369,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1367,6 +1413,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1379,6 +1426,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1421,6 +1469,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1433,6 +1482,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1480,6 +1530,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1492,6 +1543,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1534,6 +1586,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1546,6 +1599,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1589,6 +1643,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1601,6 +1656,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1643,6 +1699,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1655,6 +1712,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1702,6 +1760,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1714,6 +1773,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1756,6 +1816,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1768,6 +1829,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1810,6 +1872,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1822,6 +1885,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1869,6 +1933,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1881,6 +1946,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1923,6 +1989,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1935,6 +2002,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1977,6 +2045,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1989,6 +2058,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2032,6 +2102,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2044,6 +2115,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2086,6 +2158,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2098,6 +2171,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2145,6 +2219,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2157,6 +2232,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2199,6 +2275,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2211,6 +2288,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2253,6 +2331,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2265,6 +2344,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2322,6 +2402,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2334,6 +2415,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2391,6 +2473,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2403,6 +2486,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2460,6 +2544,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2472,6 +2557,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2529,6 +2615,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2541,6 +2628,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2584,6 +2672,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2596,6 +2685,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2643,6 +2733,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2655,6 +2746,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2697,6 +2789,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2709,6 +2802,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2752,6 +2846,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2764,6 +2859,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2806,6 +2902,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2818,6 +2915,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2860,6 +2958,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2872,6 +2971,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2914,6 +3014,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2926,6 +3027,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2969,6 +3071,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2981,6 +3084,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3023,6 +3127,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3035,6 +3140,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3078,6 +3184,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3090,6 +3197,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3132,6 +3240,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3144,6 +3253,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3191,6 +3301,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3203,6 +3314,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3245,6 +3357,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3257,6 +3370,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3300,6 +3414,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3312,6 +3427,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3354,6 +3470,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3366,6 +3483,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3413,6 +3531,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3425,6 +3544,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3467,6 +3587,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3479,6 +3600,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3522,6 +3644,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3534,6 +3657,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3576,6 +3700,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3588,6 +3713,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3635,6 +3761,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3647,6 +3774,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3689,6 +3817,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3701,6 +3830,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3743,6 +3873,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3755,6 +3886,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3802,6 +3934,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3814,6 +3947,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3856,6 +3990,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3868,6 +4003,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3910,6 +4046,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3922,6 +4059,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3965,6 +4103,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3977,6 +4116,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+136
@@ -33,6 +33,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -45,6 +46,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -88,6 +90,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -100,6 +103,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -142,6 +146,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -154,6 +159,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -211,6 +217,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -223,6 +230,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -280,6 +288,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -292,6 +301,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -349,6 +359,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -361,6 +372,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -418,6 +430,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -430,6 +443,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -472,6 +486,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -484,6 +499,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -527,6 +543,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -539,6 +556,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -586,6 +604,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -598,6 +617,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -640,6 +660,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -652,6 +673,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -695,6 +717,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -707,6 +730,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -749,6 +773,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -761,6 +786,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -818,6 +844,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -830,6 +857,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -872,6 +900,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -884,6 +913,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -926,6 +956,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -938,6 +969,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -981,6 +1013,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -993,6 +1026,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1036,6 +1070,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1048,6 +1083,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1090,6 +1126,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1102,6 +1139,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1145,6 +1183,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1157,6 +1196,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1199,6 +1239,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1211,6 +1252,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1258,6 +1300,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1270,6 +1313,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1312,6 +1356,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1324,6 +1369,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1366,6 +1412,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1378,6 +1425,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1425,6 +1473,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1437,6 +1486,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1479,6 +1529,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1491,6 +1542,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1534,6 +1586,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1546,6 +1599,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1588,6 +1642,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1600,6 +1655,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1647,6 +1703,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1659,6 +1716,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1701,6 +1759,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1713,6 +1772,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1755,6 +1815,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1767,6 +1828,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1814,6 +1876,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1826,6 +1889,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1868,6 +1932,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1880,6 +1945,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1922,6 +1988,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1934,6 +2001,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1976,6 +2044,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1988,6 +2057,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2030,6 +2100,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2042,6 +2113,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2089,6 +2161,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2101,6 +2174,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2143,6 +2217,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2155,6 +2230,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2197,6 +2273,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2209,6 +2286,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2266,6 +2344,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2278,6 +2357,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2335,6 +2415,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2347,6 +2428,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2404,6 +2486,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2416,6 +2499,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2473,6 +2557,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2485,6 +2570,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2528,6 +2614,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2540,6 +2627,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2587,6 +2675,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2599,6 +2688,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2641,6 +2731,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2653,6 +2744,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2696,6 +2788,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2708,6 +2801,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2750,6 +2844,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2762,6 +2857,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2804,6 +2900,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2816,6 +2913,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2858,6 +2956,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2870,6 +2969,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2913,6 +3013,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2925,6 +3026,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2967,6 +3069,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2979,6 +3082,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3022,6 +3126,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3034,6 +3139,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3076,6 +3182,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3088,6 +3195,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3135,6 +3243,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3147,6 +3256,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3189,6 +3299,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3201,6 +3312,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3243,6 +3355,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3255,6 +3368,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3302,6 +3416,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3314,6 +3429,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3356,6 +3472,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3368,6 +3485,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3411,6 +3529,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3423,6 +3542,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3465,6 +3585,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3477,6 +3598,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3524,6 +3646,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3536,6 +3659,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3578,6 +3702,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3590,6 +3715,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3632,6 +3758,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3644,6 +3771,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3691,6 +3819,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3703,6 +3832,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3745,6 +3875,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3757,6 +3888,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3799,6 +3931,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3811,6 +3944,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3853,6 +3987,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3865,6 +4000,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+34
@@ -80,6 +80,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -92,6 +93,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -133,6 +135,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -145,6 +148,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -180,6 +184,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -192,6 +197,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -227,6 +233,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -239,6 +246,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -302,6 +310,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -314,6 +323,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -371,6 +381,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -383,6 +394,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -440,6 +452,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -452,6 +465,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -515,6 +529,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -527,6 +542,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -570,6 +586,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -582,6 +599,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -625,6 +643,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -637,6 +656,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -679,6 +699,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -691,6 +712,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -726,6 +748,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -738,6 +761,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -773,6 +797,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -785,6 +810,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -820,6 +846,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -832,6 +859,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -870,6 +898,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -882,6 +911,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -918,6 +948,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -930,6 +961,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -965,6 +997,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -977,6 +1010,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+40
@@ -33,6 +33,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -45,6 +46,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -88,6 +90,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -100,6 +103,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -149,6 +153,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -161,6 +166,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -204,6 +210,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -216,6 +223,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -265,6 +273,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -277,6 +286,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -320,6 +330,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -332,6 +343,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -375,6 +387,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -387,6 +400,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -429,6 +443,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -441,6 +456,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -516,6 +532,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -528,6 +545,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -571,6 +589,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -583,6 +602,7 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -642,6 +662,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -654,6 +675,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -713,6 +735,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -725,6 +748,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -790,6 +814,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -802,6 +827,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -861,6 +887,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -873,6 +900,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -938,6 +966,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -950,6 +979,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -993,6 +1023,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1005,6 +1036,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1048,6 +1080,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1060,6 +1093,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1102,6 +1136,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1114,6 +1149,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1189,6 +1225,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1201,6 +1238,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1244,6 +1282,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1256,6 +1295,7 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+4
@@ -48,6 +48,7 @@ exports[`Field metadata relation update should fail relation when name is change
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -60,6 +61,7 @@ exports[`Field metadata relation update should fail relation when name is change
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -142,6 +144,7 @@ exports[`Field metadata relation update should fail relation when name is not in
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -154,6 +157,7 @@ exports[`Field metadata relation update should fail relation when name is not in
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+42
@@ -588,6 +588,7 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -600,6 +601,7 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1197,6 +1199,7 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1209,6 +1212,7 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -1806,6 +1810,7 @@ exports[`Object metadata creation should fail v2 when labelPlural is empty 1`] =
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -1818,6 +1823,7 @@ exports[`Object metadata creation should fail v2 when labelPlural is empty 1`] =
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -2415,6 +2421,7 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -2427,6 +2434,7 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3024,6 +3032,7 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3036,6 +3045,7 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -3633,6 +3643,7 @@ exports[`Object metadata creation should fail v2 when labelSingular is empty 1`]
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -3645,6 +3656,7 @@ exports[`Object metadata creation should fail v2 when labelSingular is empty 1`]
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -4243,6 +4255,7 @@ exports[`Object metadata creation should fail v2 when labels are identical 1`] =
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -4255,6 +4268,7 @@ exports[`Object metadata creation should fail v2 when labels are identical 1`] =
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -4853,6 +4867,7 @@ exports[`Object metadata creation should fail v2 when labels with whitespaces re
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -4865,6 +4880,7 @@ exports[`Object metadata creation should fail v2 when labels with whitespaces re
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -5492,6 +5508,7 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -5504,6 +5521,7 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -6101,6 +6119,7 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -6113,6 +6132,7 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -6710,6 +6730,7 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -6722,6 +6743,7 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -7324,6 +7346,7 @@ exports[`Object metadata creation should fail v2 when namePlural is an empty str
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -7336,6 +7359,7 @@ exports[`Object metadata creation should fail v2 when namePlural is an empty str
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -7938,6 +7962,7 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -7950,6 +7975,7 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -8612,6 +8638,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -8624,6 +8651,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -9286,6 +9314,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -9298,6 +9327,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -9925,6 +9955,7 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -9937,6 +9968,7 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -10564,6 +10596,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -10576,6 +10609,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -11238,6 +11272,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is an empty s
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -11250,6 +11285,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is an empty s
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -11912,6 +11948,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -11924,6 +11961,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -12522,6 +12560,7 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] =
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -12534,6 +12573,7 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] =
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -13132,6 +13172,7 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -13144,6 +13185,7 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+6
@@ -49,6 +49,7 @@ exports[`Object metadata update should fail when labelIdentifier is not a TEXT o
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -61,6 +62,7 @@ exports[`Object metadata update should fail when labelIdentifier is not a TEXT o
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -125,6 +127,7 @@ exports[`Object metadata update should fail when labelIdentifier is not a known
|
||||
"type": "create_view_field",
|
||||
},
|
||||
],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -137,6 +140,7 @@ exports[`Object metadata update should fail when labelIdentifier is not a known
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
@@ -195,6 +199,7 @@ exports[`Object metadata update should fail when labelIdentifier is null 1`] = `
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
@@ -207,6 +212,7 @@ exports[`Object metadata update should fail when labelIdentifier is null 1`] = `
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
|
||||
import { type CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input';
|
||||
|
||||
export const createCoreViewFilterQueryFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
input,
|
||||
}: PerformMetadataQueryParams<CreateViewFilterInput>) => ({
|
||||
query: gql`
|
||||
mutation CreateCoreViewFilter($input: CreateViewFilterInput!) {
|
||||
createCoreViewFilter(input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input,
|
||||
},
|
||||
});
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
|
||||
import { createCoreViewFilterQueryFactory } from 'test/integration/metadata/suites/view-filter/utils/create-core-view-filter-query-factory.util';
|
||||
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||
|
||||
import { type CreateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/create-view-filter.input';
|
||||
import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
|
||||
export const createOneCoreViewFilter = async ({
|
||||
input,
|
||||
gqlFields,
|
||||
expectToFail,
|
||||
}: PerformMetadataQueryParams<CreateViewFilterInput>): CommonResponseBody<{
|
||||
createCoreViewFilter: ViewFilterDTO;
|
||||
}> => {
|
||||
const graphqlOperation = createCoreViewFilterQueryFactory({
|
||||
input,
|
||||
gqlFields,
|
||||
});
|
||||
|
||||
const response = await makeMetadataAPIRequest(graphqlOperation);
|
||||
|
||||
if (expectToFail === true) {
|
||||
warnIfNoErrorButExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter creation should have failed but did not',
|
||||
});
|
||||
}
|
||||
|
||||
if (expectToFail === false) {
|
||||
warnIfErrorButNotExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter creation has failed but should not',
|
||||
});
|
||||
}
|
||||
|
||||
return { data: response.body.data, errors: response.body.errors };
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
|
||||
import { type DeleteViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/delete-view-filter.input';
|
||||
|
||||
export const deleteCoreViewFilterQueryFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
input,
|
||||
}: PerformMetadataQueryParams<DeleteViewFilterInput>) => ({
|
||||
query: gql`
|
||||
mutation DeleteCoreViewFilter($input: DeleteViewFilterInput!) {
|
||||
deleteCoreViewFilter(input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input,
|
||||
},
|
||||
});
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
|
||||
import { deleteCoreViewFilterQueryFactory } from 'test/integration/metadata/suites/view-filter/utils/delete-core-view-filter-query-factory.util';
|
||||
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||
|
||||
import { type DeleteViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/delete-view-filter.input';
|
||||
import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
|
||||
export const deleteOneCoreViewFilter = async ({
|
||||
input,
|
||||
gqlFields,
|
||||
expectToFail,
|
||||
}: PerformMetadataQueryParams<DeleteViewFilterInput>): CommonResponseBody<{
|
||||
deleteCoreViewFilter: ViewFilterDTO;
|
||||
}> => {
|
||||
const graphqlOperation = deleteCoreViewFilterQueryFactory({
|
||||
input,
|
||||
gqlFields,
|
||||
});
|
||||
|
||||
const response = await makeMetadataAPIRequest(graphqlOperation);
|
||||
|
||||
if (expectToFail === true) {
|
||||
warnIfNoErrorButExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter deletion should have failed but did not',
|
||||
});
|
||||
}
|
||||
|
||||
if (expectToFail === false) {
|
||||
warnIfErrorButNotExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter deletion has failed but should not',
|
||||
});
|
||||
}
|
||||
|
||||
return { data: response.body.data, errors: response.body.errors };
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
|
||||
import { type DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/destroy-view-filter.input';
|
||||
|
||||
export const destroyCoreViewFilterQueryFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
input,
|
||||
}: PerformMetadataQueryParams<DestroyViewFilterInput>) => ({
|
||||
query: gql`
|
||||
mutation DestroyCoreViewFilter($input: DestroyViewFilterInput!) {
|
||||
destroyCoreViewFilter(input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input,
|
||||
},
|
||||
});
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
|
||||
import { destroyCoreViewFilterQueryFactory } from 'test/integration/metadata/suites/view-filter/utils/destroy-core-view-filter-query-factory.util';
|
||||
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||
|
||||
import { type DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/destroy-view-filter.input';
|
||||
import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
|
||||
export const destroyOneCoreViewFilter = async ({
|
||||
input,
|
||||
gqlFields,
|
||||
expectToFail,
|
||||
}: PerformMetadataQueryParams<DestroyViewFilterInput>): CommonResponseBody<{
|
||||
destroyCoreViewFilter: ViewFilterDTO;
|
||||
}> => {
|
||||
const graphqlOperation = destroyCoreViewFilterQueryFactory({
|
||||
input,
|
||||
gqlFields,
|
||||
});
|
||||
|
||||
const response = await makeMetadataAPIRequest(graphqlOperation);
|
||||
|
||||
if (expectToFail === true) {
|
||||
warnIfNoErrorButExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter destruction should have failed but did not',
|
||||
});
|
||||
}
|
||||
|
||||
if (expectToFail === false) {
|
||||
warnIfErrorButNotExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter destruction has failed but should not',
|
||||
});
|
||||
}
|
||||
|
||||
return { data: response.body.data, errors: response.body.errors };
|
||||
};
|
||||
+3
-3
@@ -1,15 +1,15 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
|
||||
export const findViewFiltersOperationFactory = ({
|
||||
export const findCoreViewFiltersQueryFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
viewId,
|
||||
}: {
|
||||
gqlFields?: string;
|
||||
viewId: string;
|
||||
viewId?: string;
|
||||
}) => ({
|
||||
query: gql`
|
||||
query GetCoreViewFilters($viewId: String!) {
|
||||
query GetCoreViewFilters($viewId: String) {
|
||||
getCoreViewFilters(viewId: $viewId) {
|
||||
${gqlFields}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
|
||||
import { findCoreViewFiltersQueryFactory } from 'test/integration/metadata/suites/view-filter/utils/find-core-view-filters-query-factory.util';
|
||||
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||
|
||||
import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
|
||||
export const findCoreViewFilters = async ({
|
||||
viewId,
|
||||
gqlFields,
|
||||
expectToFail,
|
||||
}: {
|
||||
viewId?: string;
|
||||
gqlFields?: string;
|
||||
expectToFail?: boolean;
|
||||
}): CommonResponseBody<{
|
||||
getCoreViewFilters: ViewFilterDTO[];
|
||||
}> => {
|
||||
const graphqlOperation = findCoreViewFiltersQueryFactory({
|
||||
viewId,
|
||||
gqlFields,
|
||||
});
|
||||
|
||||
const response = await makeMetadataAPIRequest(graphqlOperation);
|
||||
|
||||
if (expectToFail === true) {
|
||||
warnIfNoErrorButExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter search should have failed but did not',
|
||||
});
|
||||
}
|
||||
|
||||
if (expectToFail === false) {
|
||||
warnIfErrorButNotExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter search has failed but should not',
|
||||
});
|
||||
}
|
||||
|
||||
return { data: response.body.data, errors: response.body.errors };
|
||||
};
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import gql from 'graphql-tag';
|
||||
import { VIEW_FILTER_GQL_FIELDS } from 'test/integration/constants/view-gql-fields.constants';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
|
||||
import { type UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input';
|
||||
|
||||
export const updateCoreViewFilterQueryFactory = ({
|
||||
gqlFields = VIEW_FILTER_GQL_FIELDS,
|
||||
input,
|
||||
}: PerformMetadataQueryParams<UpdateViewFilterInput>) => ({
|
||||
query: gql`
|
||||
mutation UpdateCoreViewFilter($input: UpdateViewFilterInput!) {
|
||||
updateCoreViewFilter(input: $input) {
|
||||
${gqlFields}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
input,
|
||||
},
|
||||
});
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
import { makeMetadataAPIRequest } from 'test/integration/metadata/suites/utils/make-metadata-api-request.util';
|
||||
import { updateCoreViewFilterQueryFactory } from 'test/integration/metadata/suites/view-filter/utils/update-core-view-filter-query-factory.util';
|
||||
import { type CommonResponseBody } from 'test/integration/metadata/types/common-response-body.type';
|
||||
import { type PerformMetadataQueryParams } from 'test/integration/metadata/types/perform-metadata-query.type';
|
||||
import { warnIfErrorButNotExpectedToFail } from 'test/integration/metadata/utils/warn-if-error-but-not-expected-to-fail.util';
|
||||
import { warnIfNoErrorButExpectedToFail } from 'test/integration/metadata/utils/warn-if-no-error-but-expected-to-fail.util';
|
||||
|
||||
import { type UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input';
|
||||
import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto';
|
||||
|
||||
export const updateOneCoreViewFilter = async ({
|
||||
input,
|
||||
gqlFields,
|
||||
expectToFail,
|
||||
}: PerformMetadataQueryParams<UpdateViewFilterInput>): CommonResponseBody<{
|
||||
updateCoreViewFilter: ViewFilterDTO;
|
||||
}> => {
|
||||
const graphqlOperation = updateCoreViewFilterQueryFactory({
|
||||
input,
|
||||
gqlFields,
|
||||
});
|
||||
|
||||
const response = await makeMetadataAPIRequest(graphqlOperation);
|
||||
|
||||
if (expectToFail === true) {
|
||||
warnIfNoErrorButExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter update should have failed but did not',
|
||||
});
|
||||
}
|
||||
|
||||
if (expectToFail === false) {
|
||||
warnIfErrorButNotExpectedToFail({
|
||||
response,
|
||||
errorMessage: 'View Filter update has failed but should not',
|
||||
});
|
||||
}
|
||||
|
||||
return { data: response.body.data, errors: response.body.errors };
|
||||
};
|
||||
@@ -1,2 +1 @@
|
||||
export const MULTI_ITEM_FIELD_DEFAULT_MAX_VALUES = 10;
|
||||
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
export const MULTI_ITEM_FIELD_MIN_MAX_VALUES = 1;
|
||||
|
||||
|
||||
@@ -6,6 +6,11 @@ describe('parseJson', () => {
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it('if value is raw string', () => {
|
||||
const result = parseJson('t');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it('if value is undefined', () => {
|
||||
const result = parseJson(undefined);
|
||||
expect(result).toBeNull();
|
||||
|
||||
Reference in New Issue
Block a user