5622 add a syncemail onboarding step (#5689)

- add sync email onboarding step
- refactor calendar and email visibility enums
- add a new table `keyValuePair` in `core` schema
- add a new resolved boolean field `skipSyncEmail` in current user




https://github.com/twentyhq/twenty/assets/29927851/de791475-5bfe-47f9-8e90-76c349fba56f
This commit is contained in:
martmull
2024-06-05 18:16:53 +02:00
committed by GitHub
parent fda0d2a170
commit 9f6a6c3282
92 changed files with 2707 additions and 1246 deletions

View File

@ -1,7 +1,13 @@
import { ObjectType, Field } from '@nestjs/graphql';
import { ObjectType, Field, registerEnumType } from '@nestjs/graphql';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { TimelineThreadParticipant } from 'src/engine/core-modules/messaging/dtos/timeline-thread-participant.dto';
import { MessageChannelVisibility } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity';
registerEnumType(MessageChannelVisibility, {
name: 'MessageChannelVisibility',
description: 'Visibility of the message channel',
});
@ObjectType('TimelineThread')
export class TimelineThread {
@ -11,8 +17,8 @@ export class TimelineThread {
@Field()
read: boolean;
@Field()
visibility: string;
@Field(() => MessageChannelVisibility)
visibility: MessageChannelVisibility;
@Field()
firstParticipant: TimelineThreadParticipant;

View File

@ -3,6 +3,7 @@ import { Injectable } from '@nestjs/common';
import { TIMELINE_THREADS_DEFAULT_PAGE_SIZE } from 'src/engine/core-modules/messaging/constants/messaging.constants';
import { TimelineThreadsWithTotal } from 'src/engine/core-modules/messaging/dtos/timeline-threads-with-total.dto';
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { MessageChannelVisibility } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity';
type TimelineThreadParticipant = {
personId: string;
@ -352,7 +353,7 @@ export class TimelineMessagingService {
const threadVisibility:
| {
id: string;
visibility: 'metadata' | 'subject' | 'share_everything';
visibility: MessageChannelVisibility;
}[]
| undefined = await this.workspaceDataSourceService.executeRawQuery(
`
@ -372,11 +373,11 @@ export class TimelineMessagingService {
workspaceId,
);
const visibilityValues = ['metadata', 'subject', 'share_everything'];
const visibilityValues = Object.values(MessageChannelVisibility);
const threadVisibilityByThreadIdForWhichWorkspaceMemberIsNotInParticipants:
| {
[key: string]: 'metadata' | 'subject' | 'share_everything';
[key: string]: MessageChannelVisibility;
}
| undefined = threadVisibility?.reduce(
(threadVisibilityAcc, threadVisibility) => {
@ -385,7 +386,8 @@ export class TimelineMessagingService {
Math.max(
visibilityValues.indexOf(threadVisibility.visibility),
visibilityValues.indexOf(
threadVisibilityAcc[threadVisibility.id] ?? 'metadata',
threadVisibilityAcc[threadVisibility.id] ??
MessageChannelVisibility.METADATA,
),
)
];
@ -396,7 +398,7 @@ export class TimelineMessagingService {
);
const threadVisibilityByThreadId: {
[key: string]: 'metadata' | 'subject' | 'share_everything';
[key: string]: MessageChannelVisibility;
} = messageThreadIds.reduce((threadVisibilityAcc, messageThreadId) => {
// If the workspace member is not in the participants of the thread, use the visibility value from the query
threadVisibilityAcc[messageThreadId] =
@ -405,8 +407,8 @@ export class TimelineMessagingService {
)
? threadVisibilityByThreadIdForWhichWorkspaceMemberIsNotInParticipants?.[
messageThreadId
] ?? 'metadata'
: 'share_everything';
] ?? MessageChannelVisibility.METADATA
: MessageChannelVisibility.SHARE_EVERYTHING;
return threadVisibilityAcc;
}, {});
@ -461,7 +463,9 @@ export class TimelineMessagingService {
lastTwoParticipants,
lastMessageReceivedAt: thread.lastMessageReceivedAt,
lastMessageBody: thread.lastMessageBody,
visibility: threadVisibilityByThreadId?.[messageThreadId] ?? 'metadata',
visibility:
threadVisibilityByThreadId?.[messageThreadId] ??
MessageChannelVisibility.METADATA,
subject: threadSubject,
numberOfMessagesInThread: numberOfMessages,
participantCount: threadActiveParticipants.length,