Skip to content
This repository was archived by the owner on Oct 11, 2022. It is now read-only.

Commit 4286a58

Browse files
authored
Merge pull request #2979 from withspectrum/2.2.8
2.2.8
2 parents 7f3cca1 + 760517e commit 4286a58

File tree

111 files changed

+3258
-1793
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+3258
-1793
lines changed

api/loaders/channel.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
import { getChannelsSettings } from '../models/channelSettings';
88
import createLoader from './create-loader';
99
import { getPendingUsersInChannels } from '../models/usersChannels';
10-
import type { Loader } from './types';
1110

1211
export const __createChannelLoader = createLoader(channels =>
1312
getChannels(channels)

api/loaders/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
} from './directMessageThread';
3838
import { __createReactionLoader } from './reaction';
3939
import { __createStripeCustomersLoader } from './stripe';
40+
import { __createMessageLoader } from './message';
4041
import type { DataLoaderOptions } from './types';
4142

4243
// Create all the necessary loaders to be attached to the GraphQL context for each request
@@ -70,6 +71,7 @@ const createLoaders = (options?: DataLoaderOptions) => ({
7071
directMessageThread: __createDirectMessageThreadLoader(options),
7172
directMessageParticipants: __createDirectMessageParticipantsLoader(options),
7273
directMessageSnippet: __createDirectMessageSnippetLoader(options),
74+
message: __createMessageLoader(options),
7375
messageReaction: __createReactionLoader(options),
7476
});
7577

api/loaders/message.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// @flow
2+
import { getManyMessages } from '../models/message';
3+
import createLoader from './create-loader';
4+
import type { Loader } from './types';
5+
6+
export const __createMessageLoader = createLoader((messages: string[]) =>
7+
getManyMessages(messages)
8+
);
9+
10+
export default () => {
11+
throw new Error(
12+
'⚠️ Do not import loaders directly, get them from the GraphQL context instead! ⚠️'
13+
);
14+
};

api/loaders/user.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
import { getUsersPermissionsInChannels } from '../models/usersChannels';
1313
import { getThreadsNotificationStatusForUsers } from '../models/usersThreads';
1414
import createLoader from './create-loader';
15-
import type { Loader } from './types';
1615

1716
export const __createUserLoader = createLoader(users => getUsers(users), 'id');
1817

api/models/communitySettings.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ export const getCommunitiesSettings = (
3131
.getAll(...communityIds, { index: 'communityId' })
3232
.run()
3333
.then(data => {
34-
if (!data || data.length === 0)
34+
if (!data || data.length === 0) {
3535
return Array.from({ length: communityIds.length }, (_, index) => ({
3636
...defaultSettings,
3737
communityId: communityIds[index],
3838
}));
39+
}
3940

4041
if (data.length === communityIds.length) {
4142
return data.map(
@@ -50,12 +51,23 @@ export const getCommunitiesSettings = (
5051
}
5152

5253
if (data.length < communityIds.length) {
53-
return communityIds.map(community => {
54-
const record = data.find(o => o.communityId === community);
54+
return communityIds.map(communityId => {
55+
const record = data.find(o => o.communityId === communityId);
56+
if (record) return record;
57+
return {
58+
...defaultSettings,
59+
communityId,
60+
};
61+
});
62+
}
63+
64+
if (data.length > communityIds.length) {
65+
return communityIds.map(communityId => {
66+
const record = data.find(o => o.communityId === communityId);
5567
if (record) return record;
5668
return {
5769
...defaultSettings,
58-
communityId: community,
70+
communityId,
5971
};
6072
});
6173
}

api/models/message.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { createChangefeed } from 'shared/changefeed-utils';
1111
import { setThreadLastActive } from './thread';
1212

1313
export type MessageTypes = 'text' | 'media';
14-
// TODO: Fix this
1514
export type Message = Object;
1615

1716
export const getMessage = (messageId: string): Promise<Message> => {
@@ -25,6 +24,16 @@ export const getMessage = (messageId: string): Promise<Message> => {
2524
});
2625
};
2726

27+
export const getManyMessages = (messageIds: string[]): Promise<Message[]> => {
28+
return db
29+
.table('messages')
30+
.getAll(...messageIds)
31+
.run()
32+
.then(messages => {
33+
return messages.filter(message => message && !message.deletedAt);
34+
});
35+
};
36+
2837
type BackwardsPaginationOptions = { last?: number, before?: number | Date };
2938

3039
const getBackwardsMessages = (

api/mutations/message/addMessage.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { EditorState } from 'draft-js';
44
import type { GraphQLContext } from '../../';
55
import UserError from '../../utils/UserError';
66
import { uploadImage } from '../../utils/file-storage';
7-
import { storeMessage } from '../../models/message';
7+
import { storeMessage, getMessage } from '../../models/message';
88
import { setDirectMessageThreadLastActive } from '../../models/directMessageThread';
99
import { setUserLastSeenInDirectMessageThread } from '../../models/usersDirectMessageThreads';
1010
import { createMemberInChannel } from '../../models/usersChannels';
@@ -25,6 +25,7 @@ type AddMessageInput = {
2525
content: {
2626
body: string,
2727
},
28+
parentId?: string,
2829
file?: FileUpload,
2930
},
3031
};
@@ -86,6 +87,12 @@ export default async (
8687
}
8788
}
8889

90+
if (message.parentId) {
91+
const parent = await getMessage(message.parentId);
92+
if (parent.threadId !== message.threadId)
93+
throw new UserError('You can only quote messages from the same thread.');
94+
}
95+
8996
// construct the shape of the object to be stored in the db
9097
let messageForDb = Object.assign({}, message);
9198
if (message.file && message.messageType === 'media') {

api/queries/community/brandedLogin.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// @flow
22
import type { DBCommunity } from 'shared/types';
3-
import { getCommunitySettings } from '../../models/communitySettings';
43
import type { GraphQLContext } from '../../';
54

65
export default async (

api/queries/message/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import sender from './sender';
55
import author from './author';
66
import thread from './thread';
77
import reactions from './reactions';
8+
import parent from './parent';
89

910
module.exports = {
1011
Query: {
@@ -16,5 +17,6 @@ module.exports = {
1617
sender, // deprecated
1718
thread,
1819
reactions,
20+
parent,
1921
},
2022
};

api/queries/message/parent.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// @flow
2+
import type { DBMessage } from 'shared/types';
3+
import type { GraphQLContext } from '../../';
4+
5+
export default (
6+
{ parentId }: DBMessage,
7+
_: void,
8+
{ loaders }: GraphQLContext
9+
) => {
10+
if (!parentId) return null;
11+
return loaders.message.load(parentId);
12+
};

0 commit comments

Comments
 (0)