[View migration] Clean ViewFilterOperand (#14785)
In the BE we have stored filter operand as IS_EMPTY, IS_NOT_EMPTY, etc. For some reason in the FE we were manipulating IsEmpty, IsNotEmpty, etc. (maybe because they were used before in Views before they were moved to core) So we were converting the operands in the FE from IS to Is (convertViewFilterOperandFromCore) to read and manipulate viewFilters, and then back to BE version to send mutations etc., from Is to IS (convertViewFilterOperandToCore). The migration is now over, so we can remove and simplify that code. (In the 1-5:migrate-views-to-core command we still do the migration from Is format to IS format.)
This commit is contained in:
+1
-2
@@ -30,7 +30,6 @@ import {
|
||||
GraphqlQueryRunnerExceptionCode,
|
||||
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
|
||||
import { ProcessAggregateHelper } from 'src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper';
|
||||
import { convertViewFilterOperand } from 'src/engine/api/graphql/graphql-query-runner/utils/convert-view-filter-operands';
|
||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||
import { ViewFilterGroupService } from 'src/engine/core-modules/view/services/view-filter-group.service';
|
||||
import { ViewFilterService } from 'src/engine/core-modules/view/services/view-filter.service';
|
||||
@@ -247,7 +246,7 @@ export class GraphqlQueryGroupByResolverService extends GraphqlQueryBaseResolver
|
||||
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||
value: convertViewFilterValueToString(viewFilter.value),
|
||||
type: getFilterTypeFromFieldType(fieldMetadataItem.type),
|
||||
operand: convertViewFilterOperand(viewFilter.operand),
|
||||
operand: viewFilter.operand,
|
||||
recordFilterGroupId: viewFilter.viewFilterGroupId,
|
||||
positionInRecordFilterGroup: viewFilter.positionInViewFilterGroup,
|
||||
subFieldName: viewFilter.subFieldName as CompositeFieldSubFieldName,
|
||||
|
||||
-44
@@ -1,44 +0,0 @@
|
||||
import { ViewFilterOperand as ViewFilterOperandShared } from 'twenty-shared/types';
|
||||
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
|
||||
export const convertViewFilterOperand = (
|
||||
operand: ViewFilterOperand,
|
||||
): ViewFilterOperandShared => {
|
||||
switch (operand) {
|
||||
case ViewFilterOperand.IS:
|
||||
return ViewFilterOperandShared.Is;
|
||||
case ViewFilterOperand.IS_NOT_NULL:
|
||||
return ViewFilterOperandShared.IsNotNull;
|
||||
case ViewFilterOperand.IS_NOT:
|
||||
return ViewFilterOperandShared.IsNot;
|
||||
case ViewFilterOperand.LESS_THAN_OR_EQUAL:
|
||||
return ViewFilterOperandShared.LessThanOrEqual;
|
||||
case ViewFilterOperand.GREATER_THAN_OR_EQUAL:
|
||||
return ViewFilterOperandShared.GreaterThanOrEqual;
|
||||
case ViewFilterOperand.IS_BEFORE:
|
||||
return ViewFilterOperandShared.IsBefore;
|
||||
case ViewFilterOperand.IS_AFTER:
|
||||
return ViewFilterOperandShared.IsAfter;
|
||||
case ViewFilterOperand.CONTAINS:
|
||||
return ViewFilterOperandShared.Contains;
|
||||
case ViewFilterOperand.DOES_NOT_CONTAIN:
|
||||
return ViewFilterOperandShared.DoesNotContain;
|
||||
case ViewFilterOperand.IS_EMPTY:
|
||||
return ViewFilterOperandShared.IsEmpty;
|
||||
case ViewFilterOperand.IS_NOT_EMPTY:
|
||||
return ViewFilterOperandShared.IsNotEmpty;
|
||||
case ViewFilterOperand.IS_RELATIVE:
|
||||
return ViewFilterOperandShared.IsRelative;
|
||||
case ViewFilterOperand.IS_IN_PAST:
|
||||
return ViewFilterOperandShared.IsInPast;
|
||||
case ViewFilterOperand.IS_IN_FUTURE:
|
||||
return ViewFilterOperandShared.IsInFuture;
|
||||
case ViewFilterOperand.IS_TODAY:
|
||||
return ViewFilterOperandShared.IsToday;
|
||||
case ViewFilterOperand.VECTOR_SEARCH:
|
||||
return ViewFilterOperandShared.VectorSearch;
|
||||
default:
|
||||
throw new Error(`Invalid view filter operand: ${operand}`);
|
||||
}
|
||||
};
|
||||
+1
-1
@@ -1,9 +1,9 @@
|
||||
import { Field, InputType } from '@nestjs/graphql';
|
||||
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
import { ViewFilterValue } from 'src/engine/core-modules/view/types/view-filter-value.type';
|
||||
|
||||
@InputType()
|
||||
|
||||
@@ -2,9 +2,9 @@ import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
|
||||
|
||||
import { IDField } from '@ptc-org/nestjs-query-graphql';
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
import { ViewFilterValue } from 'src/engine/core-modules/view/types/view-filter-value.type';
|
||||
|
||||
registerEnumType(ViewFilterOperand, {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import {
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
@@ -15,7 +16,6 @@ import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/inte
|
||||
|
||||
import { ViewFilterGroupEntity } from 'src/engine/core-modules/view/entities/view-filter-group.entity';
|
||||
import { ViewEntity } from 'src/engine/core-modules/view/entities/view.entity';
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
import { ViewFilterValue } from 'src/engine/core-modules/view/types/view-filter-value.type';
|
||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
export enum ViewFilterOperand {
|
||||
IS = 'IS',
|
||||
IS_NOT_NULL = 'IS_NOT_NULL',
|
||||
IS_NOT = 'IS_NOT',
|
||||
LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',
|
||||
GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',
|
||||
IS_BEFORE = 'IS_BEFORE',
|
||||
IS_AFTER = 'IS_AFTER',
|
||||
CONTAINS = 'CONTAINS',
|
||||
DOES_NOT_CONTAIN = 'DOES_NOT_CONTAIN',
|
||||
IS_EMPTY = 'IS_EMPTY',
|
||||
IS_NOT_EMPTY = 'IS_NOT_EMPTY',
|
||||
IS_RELATIVE = 'IS_RELATIVE',
|
||||
IS_IN_PAST = 'IS_IN_PAST',
|
||||
IS_IN_FUTURE = 'IS_IN_FUTURE',
|
||||
IS_TODAY = 'IS_TODAY',
|
||||
VECTOR_SEARCH = 'VECTOR_SEARCH',
|
||||
}
|
||||
+1
-1
@@ -1,10 +1,10 @@
|
||||
import { Test, type TestingModule } from '@nestjs/testing';
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
import { type Repository } from 'typeorm';
|
||||
|
||||
import { ViewFilterEntity } from 'src/engine/core-modules/view/entities/view-filter.entity';
|
||||
import { ViewFilterOperand } from 'src/engine/core-modules/view/enums/view-filter-operand';
|
||||
import {
|
||||
ViewFilterException,
|
||||
ViewFilterExceptionCode,
|
||||
|
||||
+1
-5
@@ -1,5 +1,4 @@
|
||||
import { isString } from '@sniptt/guards';
|
||||
import { type ViewFilterOperand as SharedViewFilterOperand } from 'twenty-shared/types';
|
||||
import { type DataSource, type QueryRunner } from 'typeorm';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
@@ -29,7 +28,6 @@ import { workflowRunsAllView } from 'src/engine/workspace-manager/standard-objec
|
||||
import { workflowVersionsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workflow-versions-all.view';
|
||||
import { workflowsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workflows-all.view';
|
||||
import { ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.workspace-entity';
|
||||
import { convertViewFilterOperandToCoreOperand } from 'src/modules/view/utils/convert-view-filter-operand-to-core-operand.util';
|
||||
|
||||
type PrefillCoreViewsArgs = {
|
||||
coreDataSource: DataSource;
|
||||
@@ -176,9 +174,7 @@ const createCoreViews = async (
|
||||
viewDefinition.filters.map((filter) => ({
|
||||
fieldMetadataId: filter.fieldMetadataId,
|
||||
viewId: viewDefinition.id,
|
||||
operand: convertViewFilterOperandToCoreOperand(
|
||||
filter.operand as SharedViewFilterOperand,
|
||||
),
|
||||
operand: filter.operand,
|
||||
value: filter.value,
|
||||
workspaceId,
|
||||
}));
|
||||
|
||||
+2
-1
@@ -1,4 +1,5 @@
|
||||
import { type MessageDescriptor } from '@lingui/core';
|
||||
import { type ViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { type AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
|
||||
import { type ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.workspace-entity';
|
||||
@@ -26,7 +27,7 @@ export interface ViewDefinition {
|
||||
filters?: {
|
||||
fieldMetadataId: string;
|
||||
displayValue: string;
|
||||
operand: string;
|
||||
operand: ViewFilterOperand;
|
||||
value: string;
|
||||
}[];
|
||||
groups?: {
|
||||
|
||||
+2
-1
@@ -1,4 +1,5 @@
|
||||
import { msg } from '@lingui/core/macro';
|
||||
import { ViewFilterOperand } from 'twenty-shared/types';
|
||||
|
||||
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import {
|
||||
@@ -34,7 +35,7 @@ export const tasksAssignedToMeView = (
|
||||
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
|
||||
)?.id ?? '',
|
||||
displayValue: 'Me',
|
||||
operand: 'is',
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: JSON.stringify({
|
||||
isCurrentWorkspaceMemberSelected: true,
|
||||
selectedRecordIds: [],
|
||||
|
||||
Reference in New Issue
Block a user