Add calendar view type (#14475)

This commit is contained in:
Weiko
2025-09-14 16:34:10 +02:00
committed by GitHub
parent 6a96c85eed
commit f46d67f9f3
12 changed files with 119 additions and 0 deletions
@@ -15,4 +15,5 @@ export enum FeatureFlagKey {
IS_MESSAGE_FOLDER_CONTROL_ENABLED = 'IS_MESSAGE_FOLDER_CONTROL_ENABLED',
IS_WORKFLOW_ITERATOR_ENABLED = 'IS_WORKFLOW_ITERATOR_ENABLED',
IS_DATABASE_EVENT_TRIGGER_ENABLED = 'IS_DATABASE_EVENT_TRIGGER_ENABLED',
IS_CALENDAR_VIEW_ENABLED = 'IS_CALENDAR_VIEW_ENABLED',
}
@@ -2,6 +2,7 @@ import { Field, InputType } from '@nestjs/graphql';
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 { ViewCalendarLayout } from 'src/engine/core-modules/view/enums/view-calendar-layout.enum';
import { ViewKey } from 'src/engine/core-modules/view/enums/view-key.enum';
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
@@ -46,4 +47,7 @@ export class CreateViewInput {
@Field({ nullable: true })
anyFieldFilterValue?: string;
@Field(() => ViewCalendarLayout, { nullable: true })
calendarLayout?: ViewCalendarLayout;
}
@@ -2,6 +2,7 @@ import { Field, InputType } from '@nestjs/graphql';
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 { ViewCalendarLayout } from 'src/engine/core-modules/view/enums/view-calendar-layout.enum';
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
@@ -40,4 +41,7 @@ export class UpdateViewInput {
@Field({ nullable: true })
anyFieldFilterValue?: string;
@Field(() => ViewCalendarLayout, { nullable: true })
calendarLayout?: ViewCalendarLayout;
}
@@ -9,6 +9,7 @@ import { ViewFilterGroupDTO } from 'src/engine/core-modules/view/dtos/view-filte
import { ViewFilterDTO } from 'src/engine/core-modules/view/dtos/view-filter.dto';
import { ViewGroupDTO } from 'src/engine/core-modules/view/dtos/view-group.dto';
import { ViewSortDTO } from 'src/engine/core-modules/view/dtos/view-sort.dto';
import { ViewCalendarLayout } from 'src/engine/core-modules/view/enums/view-calendar-layout.enum';
import { ViewKey } from 'src/engine/core-modules/view/enums/view-key.enum';
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
@@ -16,6 +17,7 @@ import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
registerEnumType(ViewOpenRecordIn, { name: 'ViewOpenRecordIn' });
registerEnumType(ViewType, { name: 'ViewType' });
registerEnumType(ViewKey, { name: 'ViewKey' });
registerEnumType(ViewCalendarLayout, { name: 'ViewCalendarLayout' });
@ObjectType('CoreView')
export class ViewDTO {
@@ -64,6 +66,9 @@ export class ViewDTO {
@Field(() => String, { nullable: true })
anyFieldFilterValue?: string | null;
@Field(() => ViewCalendarLayout, { nullable: true })
calendarLayout: ViewCalendarLayout | null;
@Field()
createdAt: Date;
@@ -1,4 +1,5 @@
import {
Check,
Column,
CreateDateColumn,
DeleteDateColumn,
@@ -20,6 +21,7 @@ import { ViewFilterGroupEntity } from 'src/engine/core-modules/view/entities/vie
import { ViewFilterEntity } from 'src/engine/core-modules/view/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/core-modules/view/entities/view-group.entity';
import { ViewSortEntity } from 'src/engine/core-modules/view/entities/view-sort.entity';
import { ViewCalendarLayout } from 'src/engine/core-modules/view/enums/view-calendar-layout.enum';
import { ViewKey } from 'src/engine/core-modules/view/enums/view-key.enum';
import { ViewOpenRecordIn } from 'src/engine/core-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/core-modules/view/enums/view-type.enum';
@@ -31,6 +33,10 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
'workspaceId',
'objectMetadataId',
])
@Check(
'CHK_VIEW_CALENDAR_LAYOUT_NOT_NULL_WHEN_TYPE_CALENDAR',
`("type" != 'CALENDAR' OR "calendarLayout" IS NOT NULL)`,
)
export class ViewEntity extends SyncableEntity implements Required<ViewEntity> {
@PrimaryGeneratedColumn('uuid')
id: string;
@@ -94,6 +100,14 @@ export class ViewEntity extends SyncableEntity implements Required<ViewEntity> {
@Column({ nullable: true, type: 'uuid' })
kanbanAggregateOperationFieldMetadataId: string | null;
@Column({
type: 'enum',
enum: Object.values(ViewCalendarLayout),
nullable: true,
default: null,
})
calendarLayout: ViewCalendarLayout | null;
@Column({ nullable: false, type: 'uuid' })
workspaceId: string;
@@ -0,0 +1,5 @@
export enum ViewCalendarLayout {
DAY = 'DAY',
WEEK = 'WEEK',
MONTH = 'MONTH',
}
@@ -1,4 +1,5 @@
export enum ViewType {
TABLE = 'TABLE',
KANBAN = 'KANBAN',
CALENDAR = 'CALENDAR',
}
@@ -32,5 +32,6 @@ export const fromPartialFlatViewToFlatViewWithDefault = (
anyFieldFilterValue: partialFlatView.anyFieldFilterValue ?? null,
universalIdentifier: partialFlatView.universalIdentifier ?? viewId,
viewFieldIds: partialFlatView.viewFieldIds ?? [],
calendarLayout: partialFlatView.calendarLayout ?? null,
};
};