@messenger-box/platform-client 10.0.3-alpha.16 → 10.0.3-alpha.160

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/lib/graphql/fragments/post-message.gql +36 -0
  3. package/lib/graphql/id-generation.js.map +1 -1
  4. package/lib/graphql/index.js.map +1 -1
  5. package/lib/graphql/mutations/channel-mutation.gql +5 -0
  6. package/lib/graphql/mutations/messages-mutation.gql +29 -0
  7. package/lib/graphql/policies/channel-policies.d.ts.map +1 -1
  8. package/lib/graphql/policies/channel-policies.js +150 -2
  9. package/lib/graphql/policies/channel-policies.js.map +1 -1
  10. package/lib/graphql/policies/messages-policies.d.ts.map +1 -1
  11. package/lib/graphql/policies/messages-policies.js +229 -37
  12. package/lib/graphql/policies/messages-policies.js.map +1 -1
  13. package/lib/graphql/policies/post-thread-policies.d.ts.map +1 -1
  14. package/lib/graphql/policies/post-thread-policies.js +136 -31
  15. package/lib/graphql/policies/post-thread-policies.js.map +1 -1
  16. package/lib/graphql/policies/posts-policies.js.map +1 -1
  17. package/lib/graphql/policies/teams-policies.d.ts.map +1 -1
  18. package/lib/graphql/policies/teams-policies.js +13 -1
  19. package/lib/graphql/policies/teams-policies.js.map +1 -1
  20. package/lib/graphql/policies/user-account-policies.js.map +1 -1
  21. package/lib/graphql/policies/user-policies.js.map +1 -1
  22. package/lib/graphql/queries/channels-by-user.gql +26 -0
  23. package/lib/graphql/queries/messages.gql +2 -2
  24. package/lib/graphql/queries/organization-query.gql +70 -35
  25. package/lib/graphql/queries/post-thread-message.gql +4 -0
  26. package/lib/graphql/queries/teams-query.gql +29 -29
  27. package/lib/graphql/queries/user-account.gql +1 -1
  28. package/lib/graphql/queries/users.gql +1 -1
  29. package/lib/graphql/schema/index.js.map +1 -1
  30. package/lib/graphql/subscription/fileUpdated.gql +11 -0
  31. package/lib/graphql/subscription/sandboxError.gql +17 -0
  32. package/lib/hooks/use-base-file-upload.hook.d.ts.map +1 -1
  33. package/lib/hooks/use-upload-file.hook.d.ts +1 -1
  34. package/lib/hooks/use-upload-file.hook.d.ts.map +1 -1
  35. package/lib/hooks/use-upload-file.hook.js +1 -1
  36. package/lib/hooks/use-upload-file.hook.js.map +1 -1
  37. package/lib/hooks/use-upload-file.hook.native.d.ts +1 -1
  38. package/lib/hooks/use-upload-file.hook.native.d.ts.map +1 -1
  39. package/lib/hooks/use-upload-file.hook.native.js +1 -1
  40. package/lib/hooks/use-upload-file.hook.native.js.map +1 -1
  41. package/lib/hooks/use-upload-files.hook.d.ts +1 -1
  42. package/lib/hooks/use-upload-files.hook.d.ts.map +1 -1
  43. package/lib/hooks/use-upload-files.hook.js +1 -1
  44. package/lib/hooks/use-upload-files.hook.js.map +1 -1
  45. package/lib/hooks/use-upload-files.hook.native.d.ts +1 -1
  46. package/lib/hooks/use-upload-files.hook.native.d.ts.map +1 -1
  47. package/lib/hooks/use-upload-files.hook.native.js +1 -1
  48. package/lib/hooks/use-upload-files.hook.native.js.map +1 -1
  49. package/lib/utils/index.d.ts.map +1 -1
  50. package/lib/utils/index.js.map +1 -1
  51. package/package.json +4 -4
  52. package/src/graphql/fragments/post-message.gql +36 -0
  53. package/src/graphql/mutations/channel-mutation.gql +5 -0
  54. package/src/graphql/mutations/messages-mutation.gql +3 -0
  55. package/src/graphql/policies/channel-policies.ts +148 -2
  56. package/src/graphql/policies/messages-policies.ts +251 -39
  57. package/src/graphql/policies/post-thread-policies.ts +151 -31
  58. package/src/graphql/policies/teams-policies.ts +13 -1
  59. package/src/graphql/queries/channels-by-user.gql +26 -0
  60. package/src/graphql/queries/messages.gql +2 -2
  61. package/src/graphql/queries/organization-query.gql +70 -35
  62. package/src/graphql/queries/post-thread-message.gql +4 -0
  63. package/src/graphql/queries/teams-query.gql +29 -29
  64. package/src/graphql/queries/user-account.gql +1 -1
  65. package/src/graphql/queries/users.gql +1 -1
  66. package/src/graphql/subscription/fileUpdated.gql +11 -0
  67. package/src/hooks/use-upload-file.hook.native.ts +1 -1
  68. package/src/hooks/use-upload-file.hook.ts +1 -1
  69. package/src/hooks/use-upload-files.hook.native.ts +1 -1
  70. package/src/hooks/use-upload-files.hook.ts +1 -1
@@ -27,29 +27,50 @@ const messagesPolicies = {
27
27
  }
28
28
  },
29
29
  data: {
30
- keyArgs: false,
30
+ keyArgs: ['channelId', 'parentId'],
31
31
  merge: (existing = [], incoming = [], {
32
- readField,
33
- mergeObjects
32
+ readField
34
33
  }) => {
35
- // console.log('existing', existing);
36
- // console.log('incoming', incoming);
37
- const merged = [...incoming];
38
- const existingIds = existing.map(item => readField('id', item));
39
- merged.forEach((item, index) => {
40
- const itemId = readField('id', item);
41
- const existingIndex = existingIds.findIndex(id => id === itemId);
42
- if (existingIndex !== -1) {
43
- merged[index] = mergeObjects(existing[existingIndex], merged[index]);
34
+ // Use a Map for O(1) lookups instead of array iterations
35
+ const existingMap = new Map();
36
+ // Populate map with existing messages
37
+ if (existing && existing.length > 0) {
38
+ for (let i = 0; i < existing.length; i++) {
39
+ const id = readField('id', existing[i]);
40
+ if (id) {
41
+ existingMap.set(id, existing[i]);
42
+ }
44
43
  }
45
- });
46
- return merged;
44
+ }
45
+ // Create result array with same capacity as total items
46
+ const result = [];
47
+ // Add incoming items, overwriting existing ones
48
+ if (incoming && incoming.length > 0) {
49
+ for (let i = 0; i < incoming.length; i++) {
50
+ const item = incoming[i];
51
+ const id = readField('id', item);
52
+ if (id) {
53
+ existingMap.set(id, item);
54
+ }
55
+ result.push(item);
56
+ }
57
+ }
58
+ // Add remaining existing items not in incoming
59
+ if (existing && existing.length > 0) {
60
+ for (let i = 0; i < existing.length; i++) {
61
+ const id = readField('id', existing[i]);
62
+ if (id && !result.some(item => readField('id', item) === id)) {
63
+ result.push(existing[i]);
64
+ }
65
+ }
66
+ }
67
+ return result;
47
68
  }
48
69
  },
49
70
  totalCount: {
50
- keyArgs: false,
71
+ keyArgs: ['channelId', 'parentId'],
51
72
  merge(existing, incoming) {
52
- return existing && existing > incoming ? existing : incoming;
73
+ return incoming !== undefined ? incoming : existing;
53
74
  }
54
75
  }
55
76
  // data: {
@@ -96,32 +117,203 @@ const messagesPolicies = {
96
117
  Query: {
97
118
  fields: {
98
119
  messages: {
99
- // keyArgs: ['channelId', 'parentId', 'limit', 'skip'],
100
- // keyArgs: ['channelId', 'parentId'],
120
+ keyArgs: ['channelId', 'parentId'],
121
+ merge(existing, incoming, {
122
+ args,
123
+ readField
124
+ }) {
125
+ if (!incoming) return existing;
126
+ if (!existing) return incoming;
127
+ // Fast return if incoming has no data
128
+ if (!incoming.data || incoming.data.length === 0) {
129
+ return {
130
+ ...existing,
131
+ totalCount: incoming.totalCount ?? existing.totalCount
132
+ };
133
+ }
134
+ // Fast return if existing has no data
135
+ if (!existing.data || existing.data.length === 0) {
136
+ return incoming;
137
+ }
138
+ // Determine if this is likely a new message or pagination
139
+ const isNewMessage = args && args.skip === 0;
140
+ // Create a map for existing messages for fast lookups
141
+ const idSet = new Set();
142
+ const mergedData = [...existing.data];
143
+ // Mark all existing IDs
144
+ for (let i = 0; i < mergedData.length; i++) {
145
+ const id = readField('id', mergedData[i]);
146
+ if (id) idSet.add(id);
147
+ }
148
+ // Process incoming messages
149
+ for (let i = 0; i < incoming.data.length; i++) {
150
+ const incomingMsg = incoming.data[i];
151
+ const id = readField('id', incomingMsg);
152
+ if (!id) continue;
153
+ if (idSet.has(id)) {
154
+ // Replace existing message with same ID
155
+ const existingIndex = mergedData.findIndex(msg => readField('id', msg) === id);
156
+ if (existingIndex >= 0) {
157
+ mergedData[existingIndex] = incomingMsg;
158
+ }
159
+ } else {
160
+ // Add new message
161
+ if (isNewMessage) {
162
+ // Add to beginning for new messages
163
+ mergedData.unshift(incomingMsg);
164
+ } else {
165
+ // Add to end for pagination
166
+ mergedData.push(incomingMsg);
167
+ }
168
+ idSet.add(id);
169
+ }
170
+ }
171
+ return {
172
+ ...existing,
173
+ totalCount: incoming.totalCount ?? existing.totalCount,
174
+ data: mergedData
175
+ };
176
+ }
177
+ }
178
+ }
179
+ },
180
+ FilesInfo: {
181
+ merge: true,
182
+ // Use default merging behavior for FilesInfo
183
+ fields: {
184
+ data: {
185
+ merge(existing = [], incoming = [], {
186
+ readField
187
+ }) {
188
+ // If no existing data, just return incoming
189
+ if (!existing || existing.length === 0) {
190
+ return incoming;
191
+ }
192
+ // If no incoming data, keep existing
193
+ if (!incoming || incoming.length === 0) {
194
+ return existing;
195
+ }
196
+ // Create a map for efficient lookup
197
+ const fileMap = new Map();
198
+ // Add existing files to map
199
+ for (let i = 0; i < existing.length; i++) {
200
+ const file = existing[i];
201
+ if (file) {
202
+ const id = readField('id', file);
203
+ if (id) {
204
+ fileMap.set(id, file);
205
+ }
206
+ }
207
+ }
208
+ // Merge in incoming files, overwriting existing ones
209
+ for (let i = 0; i < incoming.length; i++) {
210
+ const file = incoming[i];
211
+ if (file) {
212
+ const id = readField('id', file);
213
+ if (id) {
214
+ fileMap.set(id, file);
215
+ }
216
+ }
217
+ }
218
+ // Convert map values back to array
219
+ return Array.from(fileMap.values());
220
+ }
221
+ }
222
+ }
223
+ },
224
+ FileInfo: {
225
+ // Use ID as key field
226
+ keyFields: ['id'],
227
+ fields: {
228
+ url: {
229
+ // Ensure URL is always preserved and not normalized
101
230
  merge(existing, incoming) {
231
+ return incoming ?? existing;
232
+ }
233
+ }
234
+ }
235
+ },
236
+ Post: {
237
+ fields: {
238
+ replies: {
239
+ merge(existing, incoming) {
240
+ if (!incoming) return existing;
241
+ if (!existing) return incoming;
242
+ // Use a Set for fast duplicate checking
243
+ const uniqueIds = new Set();
244
+ const mergedData = [];
245
+ // Add all existing items to the result and track IDs
246
+ if (existing.data && existing.data.length > 0) {
247
+ for (let i = 0; i < existing.data.length; i++) {
248
+ const item = existing.data[i];
249
+ if (item && item.id && !uniqueIds.has(item.id)) {
250
+ uniqueIds.add(item.id);
251
+ mergedData.push(item);
252
+ }
253
+ }
254
+ }
255
+ // Add incoming items that don't exist yet
256
+ if (incoming.data && incoming.data.length > 0) {
257
+ for (let i = 0; i < incoming.data.length; i++) {
258
+ const item = incoming.data[i];
259
+ if (item && item.id && !uniqueIds.has(item.id)) {
260
+ uniqueIds.add(item.id);
261
+ mergedData.push(item);
262
+ }
263
+ }
264
+ }
102
265
  return {
103
266
  ...incoming,
104
- data: [...(existing?.data ?? []), ...(incoming.data ?? [])]
267
+ data: mergedData
268
+ };
269
+ }
270
+ },
271
+ files: {
272
+ merge(existing, incoming, {
273
+ readField
274
+ }) {
275
+ if (!incoming) return existing;
276
+ if (!existing) return incoming;
277
+ // If either has no data or totalCount is 0, prefer the one with data
278
+ if (!existing.data || existing.data.length === 0) {
279
+ return incoming;
280
+ }
281
+ if (!incoming.data || incoming.data.length === 0) {
282
+ return existing;
283
+ }
284
+ // Create a map for efficient lookup
285
+ const fileMap = new Map();
286
+ // Add existing files to map
287
+ if (existing.data) {
288
+ for (let i = 0; i < existing.data.length; i++) {
289
+ const file = existing.data[i];
290
+ if (file) {
291
+ const id = readField('id', file);
292
+ if (id) {
293
+ fileMap.set(id, file);
294
+ }
295
+ }
296
+ }
297
+ }
298
+ // Merge in incoming files, overwriting existing ones
299
+ if (incoming.data) {
300
+ for (let i = 0; i < incoming.data.length; i++) {
301
+ const file = incoming.data[i];
302
+ if (file) {
303
+ const id = readField('id', file);
304
+ if (id) {
305
+ fileMap.set(id, file);
306
+ }
307
+ }
308
+ }
309
+ }
310
+ // Create merged result
311
+ return {
312
+ __typename: 'FilesInfo',
313
+ totalCount: Math.max(existing.totalCount || 0, incoming.totalCount || 0, fileMap.size),
314
+ data: Array.from(fileMap.values())
105
315
  };
106
316
  }
107
- // merge(existing, incoming, { args, mergeObjects }) {
108
- // console.log('existing length', existing?.data?.length);
109
- // console.log('incoming length', incoming?.data?.length);
110
- // // console.log('existing', JSON.stringify(existing), 'incoming', JSON.stringify(incoming));
111
- // if (!incoming || incoming?.data?.length) return existing;
112
- // if (!existing || existing?.data?.length) return incoming;
113
- // //console.log('existing', JSON.stringify(existing), 'incoming', JSON.stringify(incoming));
114
- // const mergedData = existing ? existing?.data?.slice(0) : [];
115
- // // Insert the incoming elements in the right places, according to args.
116
- // const end = args?.skip + Math.min(args?.limit, incoming?.data?.length);
117
- // for (let i = args?.skip; i < end; ++i) {
118
- // mergedData[i] = incoming?.data[i - args?.skip];
119
- // }
120
- // const merged = { ...incoming, data: mergedData };
121
- // return merged;
122
- // // return mergeObjects(existing, incoming);
123
- // //return existing ? { ...existing, ...incoming } : incoming;
124
- // },
125
317
  }
126
318
  }
127
319
  }
@@ -1 +1 @@
1
- {"version":3,"file":"messages-policies.js","sources":["../../../src/graphql/policies/messages-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,gBAAgB,GAAiB;AAC1C,EAAA,QAAA,EAAQ;;;;AAIJ,IAAA,MAAA,EAAA;AACI,MAAA,EAAA,EAAA;AACI,QAAA,IAAA,CAAA,QAAK,EAAA;AACD,UAAA;AACA,SAAA,EAAA;gBACJ;AACH,YAAA,SAAA;AACD,YAAA;AACI,WAAA,GAAA,SAAK;AACD,UAAA,OAAA,QAAA,GAAQ,CAAS,EAAA,qBAAoB,iBAAU,CAAA,CAAA;AAC/C;;AAEP,MAAA,aAAA,EAAA;AACD,QAAA,IAAA,CAAA,QAAM,EAAA;AACF,UAAA;AACA,SAAA,EAAA;;qBAEyC;AACrC,YAAA;AACA,WAAA,GAAA,SAAA;yBAEM,eAAc,CAAE,CAAA,EAAA,QAAS,CAAA,CAAA,GAAA,CAAA,EAAA,SAAA,CAAA,CAAA;;AAE3B,OAAA;AACA,MAAA,IAAA,EAAA;AACI,QAAA,OAAA,EAAA,KAAA;wBACJ,GAAC,EAAA,EAAA,QAAA,GAAA,EAAA,EAAA;AACL,UAAA,SAAA;AACA,UAAA;;AAEP;AACD;AACI,UAAA,MAAA,MAAA,GAAS,CAAK,GAAA,QAAA,CAAA;gBACd,WAAc,GAAA,QAAU,CAAA,GAAA,CAAA,IAAA,IAAA,SAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACpB,UAAA,MAAA,CAAA,OAAA,CAAA,CAAA,IAAe,EAAA,KAAA,KAAY;kBAC9B,MAAA,GAAA,SAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AACJ,YAAA,MAAA,aAAA,GAAA,WAAA,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA,KAAA,MAAA,CAAA;YACD,IAAU,aAAA,KAAA,EAAA,EAAA;cACgD,MAAA,CAAA,KAAA,CAAA,GAAA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA;;YAE1D;iBACkF,MAAA;;;gBAG9B,EAAA;eACxC,EAAA,KAAA;aACa,CAAA,QAAA,EAAA,QAAA,EAAA;iBAChB,QAAA,IAAA,QAAA,GAAA,QAAA,GAAA,QAAA,GAAA,QAAA;;AAEZ;AACJ;AACD;;AAEI;AACI;AACI;AACI;AACA;;AAEP;AACD;AACI;AACI;AACA,GAAA;oBACH,EAAA;AACJ;AACJ,IAAA,MAAA,EAAA;AACJ,MAAA,mBAAA,EAAA;AACD,QAAA,IAAO,CAAA,QAAA,EAAA;AACH,UAAA;AACI,SAAA,EAAA;gBACI;qBACsC;;uBAE3B;AACH,UAAA,OAAA,QAAA,GAAW,CAAA,EAAA,SAAA,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA,GAAA,CAAA,EAAA,SAAA,CAAA,CAAA;AACX;;;qBAG8C,EAAA;;;gBAGtD;qBACgE;;uBAEiC;iBAC9B,QAAA,GAAA,CAAA,EAAA,SAAA,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA,GAAA,CAAA,EAAA,SAAA,CAAA,CAAA;;;;;;;gBAQnE;;;sBAGK,EAAA,QAAA,EAAA;AACR,UAAA,OAAA;AACJ,YAAA,GAAA,QAAA;AACJ,YAAA,IAAA,EAAA,CAAA,IAAA,QAAA,EAAA,IAAA,IAAA,EAAA,CAAA,EAAA,IAAA,QAAA,CAAA,IAAA,IAAA,EAAA,CAAA;WACH;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"messages-policies.js","sources":["../../../src/graphql/policies/messages-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"post-thread-policies.d.ts","sourceRoot":"","sources":["../../../src/graphql/policies/post-thread-policies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,kBAAkB,EAAE,YAwDhC,CAAC"}
1
+ {"version":3,"file":"post-thread-policies.d.ts","sourceRoot":"","sources":["../../../src/graphql/policies/post-thread-policies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAa9C,eAAO,MAAM,kBAAkB,EAAE,YAqKhC,CAAC"}
@@ -1,57 +1,162 @@
1
+ import {gql}from'@apollo/client/index.js';// Define the fragment we'll use for cache operations
2
+ gql`
3
+ fragment PostThreadInfo on PostThread {
4
+ replies
5
+ replyCount
6
+ lastReplyAt
7
+ updatedAt
8
+ }
9
+ `;
1
10
  const postThreadPolicies = {
2
11
  ThreadMessages: {
3
- // keyFields: ['messagesRefId'],
4
- //keyFields: [],
5
12
  keyFields: ['data', ['channel', ['id']]],
6
13
  fields: {
7
14
  data: {
8
- // keyArgs: false,
9
- // merge: (existing = [], incoming = [], { readField, mergeObjects }) => {
10
- // return existing ? [...existing, ...incoming] : incoming;
11
- // // console.log('existing', existing);
12
- // // console.log('incoming', incoming);
13
- // // const merged = [...incoming];
14
- // // const existingIds = existing.map((item) => readField<String>('id', item));
15
- // // merged.forEach((item, index) => {
16
- // // const itemId = readField<String>('id', item);
17
- // // const existingIndex = existingIds.findIndex((id) => id === itemId);
18
- // // if (existingIndex !== -1) {
19
- // // merged[index] = mergeObjects(existing[existingIndex], merged[index]);
20
- // // }
21
- // // });
22
- // // return merged;
23
- // },
15
+ merge: (existing = [], incoming = [], {
16
+ readField
17
+ }) => {
18
+ // Create a map for efficient lookups
19
+ const threadMap = new Map();
20
+ // Store existing threads
21
+ if (existing && existing.length > 0) {
22
+ for (const item of existing) {
23
+ const id = readField('id', item);
24
+ if (id) threadMap.set(id, item);
25
+ }
26
+ }
27
+ // Add or update with incoming threads
28
+ if (incoming && incoming.length > 0) {
29
+ for (const item of incoming) {
30
+ const id = readField('id', item);
31
+ if (id) threadMap.set(id, item);
32
+ }
33
+ }
34
+ // Convert back to array
35
+ return Array.from(threadMap.values());
36
+ }
24
37
  },
25
38
  totalCount: {
26
- // keyArgs: false,
27
- // merge(existing, incoming) {
28
- // return existing && existing > incoming ? existing : incoming;
29
- // },
39
+ merge(existing, incoming) {
40
+ // Take the higher of the two counts
41
+ return incoming !== undefined ? Math.max(existing || 0, incoming) : existing;
42
+ }
30
43
  }
31
44
  }
32
45
  },
33
46
  Query: {
34
47
  fields: {
35
48
  threadMessages: {
36
- // keyArgs: ['channelId', 'parentId', 'limit', 'skip'],
37
49
  keyArgs: ['channelId'],
38
- //keyArgs: false,
39
- merge(existing, incoming) {
40
- // debugger;
50
+ merge(existing, incoming, {
51
+ readField
52
+ }) {
53
+ if (!existing) return incoming;
54
+ if (!incoming) return existing;
41
55
  return {
42
56
  ...incoming,
43
- data: [...(existing?.data ?? []), ...(incoming.data ?? [])]
57
+ data: [...(existing?.data || []), ...(incoming.data || [])].filter((item, index, self) =>
58
+ // Filter out duplicates
59
+ index === self.findIndex(t => readField('id', t) === readField('id', item)))
44
60
  };
45
61
  }
46
62
  },
47
63
  getPostThread: {
48
- // keyArgs: ['channelId', 'parentId', 'limit', 'skip'],
49
- keyArgs: ['channelId', 'postParentId', 'limit', 'skip', 'role'],
64
+ keyArgs: ['channelId', 'postParentId', 'role'],
50
65
  merge(existing, incoming, {
51
66
  mergeObjects
52
67
  }) {
53
- // debugger;
54
- return mergeObjects(existing, incoming);
68
+ if (!existing) return incoming;
69
+ if (!incoming) return existing;
70
+ // Carefully merge the two objects
71
+ const result = mergeObjects(existing, incoming);
72
+ // Special handling for replies to avoid duplicates
73
+ if (existing.replies && incoming.replies) {
74
+ const uniqueReplies = new Map();
75
+ // Add existing replies
76
+ for (const reply of existing.replies) {
77
+ uniqueReplies.set(reply.id, reply);
78
+ }
79
+ // Add incoming replies, overwriting existing ones
80
+ for (const reply of incoming.replies) {
81
+ uniqueReplies.set(reply.id, reply);
82
+ }
83
+ // Replace replies with deduplicated list
84
+ result.replies = Array.from(uniqueReplies.values());
85
+ }
86
+ return result;
87
+ }
88
+ }
89
+ }
90
+ },
91
+ // Mutation: {
92
+ // fields: {
93
+ // createPostThread: {
94
+ // merge(existing, incoming, { cache, args, readField }) {
95
+ // // Early return if not enough data
96
+ // if (!incoming?.lastMessage || !incoming?.data || !args?.channelId || !args?.postParentId) {
97
+ // return incoming;
98
+ // }
99
+ // try {
100
+ // // Use type policies to handle the cache update instead of direct manipulation
101
+ // const queryRef = cache.identify({
102
+ // __typename: 'Query',
103
+ // getPostThread: {
104
+ // channelId: args.channelId,
105
+ // postParentId: args.postParentId,
106
+ // role: args.threadMessageInput?.role
107
+ // }
108
+ // });
109
+ // // Use cache.modify which doesn't require fragments
110
+ // if (queryRef) {
111
+ // cache.modify({
112
+ // id: queryRef,
113
+ // fields: {
114
+ // getPostThread(existingThread = {}) {
115
+ // if (!existingThread) return existingThread;
116
+ // // Create a new object with the updated properties
117
+ // return {
118
+ // ...existingThread,
119
+ // replies: [incoming.lastMessage, ...(existingThread.replies || [])],
120
+ // replyCount: (existingThread.replyCount || 0) + 1,
121
+ // lastReplyAt: incoming.lastMessage.createdAt,
122
+ // updatedAt: incoming.lastMessage.createdAt
123
+ // };
124
+ // }
125
+ // }
126
+ // });
127
+ // }
128
+ // } catch (error) {
129
+ // console.error('Error updating cache in createPostThread policy:', error);
130
+ // }
131
+ // return incoming;
132
+ // },
133
+ // },
134
+ // },
135
+ // },
136
+ PostThread: {
137
+ fields: {
138
+ replies: {
139
+ merge(existing = [], incoming = [], {
140
+ readField
141
+ }) {
142
+ // Use a map for fast deduplication
143
+ const replyMap = new Map();
144
+ // Add existing replies
145
+ if (existing && existing.length > 0) {
146
+ for (const reply of existing) {
147
+ const id = readField('id', reply);
148
+ if (id) replyMap.set(id, reply);
149
+ }
150
+ }
151
+ // Add or update with incoming replies
152
+ if (incoming && incoming.length > 0) {
153
+ for (const reply of incoming) {
154
+ const id = readField('id', reply);
155
+ if (id) replyMap.set(id, reply);
156
+ }
157
+ }
158
+ // Convert back to array
159
+ return Array.from(replyMap.values());
55
160
  }
56
161
  }
57
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"post-thread-policies.js","sources":["../../../src/graphql/policies/post-thread-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,kBAAkB,GAAiB;AAC5C,EAAA,cAAA,EAAc;;;aAGD,EAAA,CAAA,MAAG,EAAA,CAAA,SAAkB,EAAA,CAAA,IAAG,CAAA,CAAA,CAAA;AACjC,IAAA,MAAA,EAAA;AACI,MAAA,IAAA,EAAA;;;;;;;;;;;;;;;;;AAiBC,OAAA;AACD,MAAA,UAAA,EAAA;;;;;AAKC;AACJ;AACJ,GAAA;AACD,EAAA,KAAA,EAAK;AACD,IAAA,MAAA,EAAA;AACI,MAAA,cAAA,EAAA;;iBAEW,CAAA,WAAG,CAAA;;sBAEJ,EAAQ,QAAE,EAAQ;;;AAGhB,YAAA,GAAA,QAAA;AACA,YAAA,IAAA,EAAA,CAAA,IAAA,QAAO,EAAA,IAAY,IAAA,EAAA,CAAA,MAAU,QAAK,CAAA,IAAY,IAAA,EAAA,CAAA;;;AAGzD,OAAA;AACD,MAAA,aAAA,EAAA;;iBAEW,CAAA,WAAG,EAAA,cAAa,EAAA,OAAgB,EAAA,MAAO,EAAE,MAAM,CAAE;AACxD,QAAA,KAAA,CAAA,QAAM,EAAQ,QAAE;;AAEZ,SAAA,EAAA;;AAEP,UAAA,OAAA,YAAA,CAAA,QAAA,EAAA,QAAA,CAAA;AACJ;AACJ;;;"}
1
+ {"version":3,"file":"post-thread-policies.js","sources":["../../../src/graphql/policies/post-thread-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"posts-policies.js","sources":["../../../src/graphql/policies/posts-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,YAAY,GAAiB;AACtC,EAAA,IAAA,EAAI;AACA,IAAA,MAAA,EAAA;AACI,MAAA,QAAA,EAAA;;AAEQ,UAAA,OAAA,KAAA;;AAEP,OAAA;AACD,MAAA,MAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAY;AAC7B,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,IAAA;;AAEP,OAAA;AACD,MAAA,cAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAY;AAC7B,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,YAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAY;AAC7B,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,eAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAY;AAC7B,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,qBAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAY;AAC7B,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,qBAAA,EAAA;AACI,QAAA,IAAA,CAAA,CAAA,EAAA;AACI,UAAA,SAAA;AACA,UAAA;;AAEJ,UAAK,SAAS,CAAG,YAAgB;AAC7B,UAAA,OAAA,EAAA;;AAEP,QAAA,KAAA,CAAA,QAAA,GAAA,EAAA,EAAA,QAAA,EAAA;AACD,UAAA,OAAA,QAAA;AACI;AACI,OAAA;sBACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI;AACI,OAAA;gBACJ,EAAC;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI;AACI,OAAA;gBACJ,EAAC;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI;AACI,OAAA;qBACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI;AACI,OAAA;iBACH;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI;AACI,OAAA;+BACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACJ,UAAA,OAAA,EAAA;AACJ;;;;"}
1
+ {"version":3,"file":"posts-policies.js","sources":["../../../src/graphql/policies/posts-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,YAAY,GAAiB;AACtC,EAAA,IAAA,EAAI;AACA,IAAA,MAAA,EAAA;AACI,MAAA,QAAA,EAAA;;AAEQ,UAAA,OAAA,KAAA;;AAEP,OAAA;AACD,MAAA,MAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,IAAA;;AAEP,OAAA;AACD,MAAA,cAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,YAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,eAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,qBAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;;AAGA,UAAA,OAAA,EAAA;;AAEP,OAAA;AACD,MAAA,qBAAA,EAAA;AACI,QAAA,IAAA,CAAA,CAAA,EAAA;AACI,UAAA,SAAA;AACA,UAAA;;AAEJ,UAAK,SAAS,CAAA,YAAO;AACjB,UAAA,OAAA,EAAA;;AAEP,QAAA,KAAA,CAAA,QAAA,GAAA,EAAA,EAAA,QAAA,EAAA;AACD,UAAA,OAAA,QAAA;AACI,QAAA;AACI,OAAA;sBACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI,QAAA;AACI,OAAA;gBACJ,EAAC;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI,QAAA;AACI,OAAA;gBACJ,EAAC;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI,QAAA;AACI,OAAA;qBACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI,QAAA;AACI,OAAA;iBACH;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACD,UAAA,OAAA,EAAA;AACI,QAAA;AACI,OAAA;+BACH,EAAA;sBACG,GAAA,EAAA,EAAA,QAAA,EAAA;AACA,UAAA,OAAA,QAAA;;AAEP,QAAA,IAAA,GAAA;AACJ,UAAA,OAAA,EAAA;AACJ,QAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"teams-policies.d.ts","sourceRoot":"","sources":["../../../src/graphql/policies/teams-policies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,YAI1B,CAAC"}
1
+ {"version":3,"file":"teams-policies.d.ts","sourceRoot":"","sources":["../../../src/graphql/policies/teams-policies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,YAgB1B,CAAC"}
@@ -1,5 +1,17 @@
1
1
  const teamPolicies = {
2
2
  Query: {
3
- fields: {}
3
+ fields: {
4
+ getOrganizationTeams: {
5
+ merge(existing = [], incoming) {
6
+ return incoming;
7
+ },
8
+ read(existing) {
9
+ return existing;
10
+ }
11
+ }
12
+ }
13
+ },
14
+ AccountTeam: {
15
+ keyFields: ['id']
4
16
  }
5
17
  };export{teamPolicies};//# sourceMappingURL=teams-policies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teams-policies.js","sources":["../../../src/graphql/policies/teams-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,YAAY,GAAiB;AACtC,EAAA,KAAA,EAAK;AACD,IAAA,MAAA,EAAA;AACH;"}
1
+ {"version":3,"file":"teams-policies.js","sources":["../../../src/graphql/policies/teams-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,YAAY,GAAiB;AACtC,EAAA,KAAA,EAAK;AACD,IAAA,MAAA,EAAA;AACI,MAAA,oBAAA,EAAA;AACI,QAAA,KAAA,CAAA,QAAM,GAAA,EAAA,EAAA,QAAe,EAAA;AACjB,UAAA,OAAA,QAAA;;AAEJ,QAAA,IAAA,CAAA,QAAK,EAAA;AACD,UAAA,OAAA,QAAA;;AAEP;AACJ;AACJ,GAAA;AACD,EAAA,WAAA,EAAW;aACP,EAAA,CAAA,IAAY;AACf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-account-policies.js","sources":["../../../src/graphql/policies/user-account-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,mBAAmB,GAAiB;AAC7C,EAAA,WAAA,EAAW;AACP,IAAA,MAAA,EAAA;AACI,MAAA,QAAA,EAAA;AACI,QAAA,IAAA,CAAA,CAAA,EAAA;AACI,UAAA,SAAA;AACA,UAAA;AACA,SAAA,EAAA;gBACJ,SAAC,GAAA,SAAA,CAAA,WAAA,CAAA;AACJ,UAAA,MAAA,UAAA,GAAA,SAAA,CAAA,YAAA,CAAA;AACJ,UAAA,OAAA,CAAA,EAAA,SAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"user-account-policies.js","sources":["../../../src/graphql/policies/user-account-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,mBAAmB,GAAiB;AAC7C,EAAA,WAAA,EAAW;AACP,IAAA,MAAA,EAAA;AACI,MAAA,QAAA,EAAA;AACI,QAAA,IAAA,CAAA,CAAA,EAAA;AACI,UAAA,SAAA;AACA,UAAA;AACA,SAAA,EAAA;gBACJ,SAAC,GAAA,SAAA,CAAA,WAAA,CAAA;AACJ,UAAA,MAAA,UAAA,GAAA,SAAA,CAAA,YAAA,CAAA;AACJ,UAAA,OAAA,CAAA,EAAA,SAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA;AACJ,QAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"user-policies.js","sources":["../../../src/graphql/policies/user-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEa,MAAA,YAAY,GAAiB;AACtC,EAAA,KAAA,EAAK;AACD,IAAA,MAAA,EAAA;AACI,MAAA,WAAA,EAAA;AACI,QAAA,IAAA,CAAA,QAAK,EAAQ;AACT,UAAA,SAAA;AACA,UAAA;;wBAEI,GAAI,SAAa,CAAA,UAAM,CAAA;AACnB,UAAA,OAAA,QAAA,EAAA,MAAA,CAAA,OAAa;yBAChB,SAAA,CAAA,OAAA,EAAA,GAAA,CAAA;AACD,YAAA,IAAA,IAAA,CAAA,QAAA,CAAA,KAAW,OAAC,CAAA,EAAA;AAChB,cAAA,OAAC,KAAE;;AAEV,YAAA,OAAA,IAAA;AACD,WAAA,CAAA;AACI;AACI,OAAA;AACA,MAAA,WAAA,EAAA;;;AAGQ,UAAA;;AAEJ,UAAA,MAAA,QAAA,GAAA,SAAY,CAAC,UAAA,CAAA;AACjB,UAAA,OAAA,QAAK,EAAC,MAAA,CAAA,GAAA,IAAA;kBACT,IAAA,GAAA,SAAA,CAAA,OAAA,EAAA,GAAA,CAAA;AACJ,YAAA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA;AACJ,cAAA,OAAA,IAAA;AACJ;YACH,OAAA,KAAA;;;;;;"}
1
+ {"version":3,"file":"user-policies.js","sources":["../../../src/graphql/policies/user-policies.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,YAAY,GAAiB;AACtC,EAAA,KAAA,EAAK;AACD,IAAA,MAAA,EAAA;AACI,MAAA,WAAA,EAAA;AACI,QAAA,IAAA,CAAA,QAAK,EAAA;AACD,UAAA,SAAA;AACA,UAAA;;wBAEI,GAAA,SAAS,CAAA,UAAc,CAAA;AACnB,UAAA,OAAA,QAAA,EAAA,MAAA,CAAA,OAAa;yBAChB,SAAA,CAAA,OAAA,EAAA,GAAA,CAAA;AACD,YAAA,IAAA,IAAA,CAAA,QAAA,CAAA,KAAW,OAAC,CAAA,EAAA;AAChB,cAAA,OAAC,KAAE;;AAEV,YAAA,OAAA,IAAA;AACD,UAAA,CAAA,CAAA;AACI,QAAA;AACI,OAAA;AACA,MAAA,WAAA,EAAA;;;AAGQ,UAAA;;AAEJ,UAAA,MAAA,QAAA,GAAA,SAAY,CAAC,UAAA,CAAA;AACjB,UAAA,OAAA,QAAK,EAAC,MAAA,CAAA,GAAA,IAAA;kBACT,IAAA,GAAA,SAAA,CAAA,OAAA,EAAA,GAAA,CAAA;AACJ,YAAA,IAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA;AACJ,cAAA,OAAA,IAAA;AACJ,YAAA;YACH,OAAA,KAAA;;;;;;"}
@@ -14,6 +14,32 @@ query GetChannelsByUser($role: String, $criteria: AnyObject, $limit: Int, $skip:
14
14
  creator {
15
15
  ...MessengerUser
16
16
  }
17
+ lastPostAt
18
+ createdAt
19
+ updatedAt
20
+ }
21
+ }
22
+
23
+
24
+ query GetChannelsByUserWithLastMessage($role: String, $criteria: AnyObject, $limit: Int, $skip: Int, $sort: Sort) {
25
+ channelsByUser(role: $role, criteria: $criteria, limit: $limit, skip: $skip, sort: $sort) {
26
+ id
27
+ title
28
+ description
29
+ type
30
+ displayName
31
+ members {
32
+ id
33
+ user {
34
+ ...MessengerUser
35
+ }
36
+ }
37
+ creator {
38
+ ...MessengerUser
39
+ }
40
+ lastMessage {
41
+ ...Post
42
+ }
17
43
  createdAt
18
44
  updatedAt
19
45
  }
@@ -1,5 +1,5 @@
1
- query Messages($channelId: ID,$parentId: String, $limit: Int! = 10, $skip: Int! = 0, $sort: Sort) {
2
- messages(channelId: $channelId,parentId:$parentId, limit: $limit, skip: $skip, sort: $sort) @connection(key: "messages", filter: ["channelId","skip"]){
1
+ query Messages($channelId: ID,$parentId: String, $limit: Int! = 10, $skip: Int! = 0, $sort: Sort, $props: AnyObject) {
2
+ messages(channelId: $channelId,parentId:$parentId, limit: $limit, skip: $skip, sort: $sort, props: $props) @connection(key: "messages", filter: ["channelId","skip"]){
3
3
  messagesRefId @client
4
4
  data{
5
5
  ...Post