1
1
import React , { useState , useEffect } from 'react' ;
2
2
import { connect } from 'react-redux' ;
3
+ import { diffArrays } from 'diff' ;
3
4
4
5
import { osmUrl } from '../config/constants.js' ;
5
6
import { flagFeature , unflagFeature } from '../network/changeset' ;
@@ -295,16 +296,12 @@ function TagsTable({ action }) {
295
296
}
296
297
297
298
function RelationMembersTable ( { action, setHighlight } ) {
298
- let allMembers ;
299
+ let oldMemberIds = action . old ?. members . map ( m => `${ m . type } /${ m . ref } ` ) ?? [ ] ;
300
+ let newMemberIds = action . new ?. members . map ( m => `${ m . type } /${ m . ref } ` ) ?? [ ] ;
299
301
300
- if ( action . type === 'create' ) {
301
- allMembers = action . new . members ;
302
- } else {
303
- allMembers = [ ...action . old . members , ...action . new . members ] ;
304
- }
305
-
306
- let allMemberIds = new Set ( allMembers . map ( m => `${ m . type } /${ m . ref } ` ) ) ;
307
- allMemberIds = [ ...allMemberIds ] . sort ( ) ;
302
+ let diff = diffArrays ( oldMemberIds , newMemberIds , {
303
+ oneChangePerToken : true
304
+ } ) ;
308
305
309
306
return (
310
307
< table className = "member-table" >
@@ -315,7 +312,8 @@ function RelationMembersTable({ action, setHighlight }) {
315
312
</ tr >
316
313
</ thead >
317
314
< tbody >
318
- { allMemberIds . map ( id => {
315
+ { diff . map ( ( { value } ) => {
316
+ const id = value [ 0 ] ;
319
317
const [ type , ref ] = id . split ( '/' ) ;
320
318
const oldMember = action . old ?. members . find (
321
319
m => m . type === type && m . ref === + ref
0 commit comments