( remoteItems: ConversationItem[], localItems: ConversationItem[], )
| 206 | } |
| 207 | |
| 208 | export function mergeThreadItems( |
| 209 | remoteItems: ConversationItem[], |
| 210 | localItems: ConversationItem[], |
| 211 | ) { |
| 212 | if (!localItems.length) { |
| 213 | return remoteItems; |
| 214 | } |
| 215 | const byId = new Map(remoteItems.map((item) => [item.id, item])); |
| 216 | const localItemsById = new Map(localItems.map((item) => [item.id, item])); |
| 217 | const merged = remoteItems.map((item) => { |
| 218 | const local = localItemsById.get(item.id); |
| 219 | return local ? chooseRicherItem(item, local) : item; |
| 220 | }); |
| 221 | localItems.forEach((item) => { |
| 222 | if (!byId.has(item.id)) { |
| 223 | merged.push(item); |
| 224 | } |
| 225 | }); |
| 226 | return merged; |
| 227 | } |
no test coverage detected