77409b6eb2
In this PR (1/3) - introduce view.mainGroupByFieldMetadataId as the new reference determining which fieldMetadataId is used in a grouped view, in order to deprecate viewGroup.fieldMetadataId which creates inconsistencies. view.mainGroupByFieldMetadataId is now filled at every view creation, though not in use yet. - Introduce a command to backfill view.mainGroupByFieldMetadataId for existing views + delete all viewGroup.fieldMetadataId with a fieldMetadataId that is not view.mainGroupByFieldMetadataId. (It should concern 37 active workspaces) - Temporarily disable the option to change a grouped view's fieldMetadataId as for now it creates inconsistencies. This feature can be reintroduced when we have done the full migration. In a next PR - (2/3) use view.mainGroupByFieldMetadataId instead of viewGroup.fieldMetadataId. In FE we may keep viewGroup.fieldMetadataId as a state (TBD). View groups will now be created / deleted as a side effect of view's mainGroupByFieldMetadataId update. - (3/3) remove viewGroup.fieldMetadataId --------- Co-authored-by: Charles Bochet <charles@twenty.com>
96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import { Field, InputType } from '@nestjs/graphql';
|
|
|
|
import {
|
|
IsBoolean,
|
|
IsEnum,
|
|
IsNotEmpty,
|
|
IsOptional,
|
|
IsString,
|
|
IsUUID,
|
|
} from 'class-validator';
|
|
|
|
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
|
|
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
|
|
import { IsValidMetadataName } from 'src/engine/decorators/metadata/is-valid-metadata-name.decorator';
|
|
import { ViewCalendarLayout } from 'src/engine/metadata-modules/view/enums/view-calendar-layout.enum';
|
|
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';
|
|
import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum';
|
|
|
|
// TODO: this should be refactored like for view-field.input.ts
|
|
// This is a temporary fix as we were extending the CreateViewInput class which was adding default values for the non filled fields
|
|
@InputType()
|
|
export class UpdateViewInput {
|
|
@IsUUID()
|
|
@Field(() => UUIDScalarType, { nullable: true })
|
|
id: string;
|
|
|
|
@IsOptional()
|
|
@IsNotEmpty()
|
|
@IsValidMetadataName()
|
|
@Field({ nullable: true })
|
|
name?: string;
|
|
|
|
@IsOptional()
|
|
@IsEnum(ViewType)
|
|
@Field(() => ViewType, { nullable: true })
|
|
type?: ViewType;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Field({ nullable: true })
|
|
icon?: string;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
@Field({ nullable: true })
|
|
position?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
@Field({ nullable: true })
|
|
isCompact?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsEnum(ViewOpenRecordIn)
|
|
@Field(() => ViewOpenRecordIn, {
|
|
nullable: true,
|
|
})
|
|
openRecordIn?: ViewOpenRecordIn;
|
|
|
|
@IsOptional()
|
|
@IsEnum(AggregateOperations)
|
|
@Field(() => AggregateOperations, { nullable: true })
|
|
kanbanAggregateOperation?: AggregateOperations;
|
|
|
|
@IsOptional()
|
|
@IsUUID()
|
|
@Field(() => UUIDScalarType, { nullable: true })
|
|
kanbanAggregateOperationFieldMetadataId?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@Field({ nullable: true })
|
|
anyFieldFilterValue?: string;
|
|
|
|
@IsOptional()
|
|
@IsEnum(ViewCalendarLayout)
|
|
@Field(() => ViewCalendarLayout, { nullable: true })
|
|
calendarLayout?: ViewCalendarLayout;
|
|
|
|
@IsOptional()
|
|
@IsUUID()
|
|
@Field(() => UUIDScalarType, { nullable: true })
|
|
calendarFieldMetadataId?: string;
|
|
|
|
@IsOptional()
|
|
@IsEnum(ViewVisibility)
|
|
@Field(() => ViewVisibility, { nullable: true })
|
|
visibility?: ViewVisibility;
|
|
|
|
@IsOptional()
|
|
@IsUUID()
|
|
@Field(() => UUIDScalarType, { nullable: true })
|
|
mainGroupByFieldMetadataId?: string;
|
|
}
|