Skip to content

Commit 8b27994

Browse files
authored
Preserve order of relation members in element info table (#780)
1 parent 8bdd5c5 commit 8b27994

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"buffer": "^6.0.3",
2525
"date-fns": "^2.22.1",
2626
"deep-equal": "^2.2.3",
27+
"diff": "^7.0.0",
2728
"dompurify": "^3.0.3",
2829
"history": "^4.10.1",
2930
"immutable": "^3.8.2",

src/components/element_info.js

+8-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { useState, useEffect } from 'react';
22
import { connect } from 'react-redux';
3+
import { diffArrays } from 'diff';
34

45
import { osmUrl } from '../config/constants.js';
56
import { flagFeature, unflagFeature } from '../network/changeset';
@@ -295,16 +296,12 @@ function TagsTable({ action }) {
295296
}
296297

297298
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}`) ?? [];
299301

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+
});
308305

309306
return (
310307
<table className="member-table">
@@ -315,7 +312,8 @@ function RelationMembersTable({ action, setHighlight }) {
315312
</tr>
316313
</thead>
317314
<tbody>
318-
{allMemberIds.map(id => {
315+
{diff.map(({ value }) => {
316+
const id = value[0];
319317
const [type, ref] = id.split('/');
320318
const oldMember = action.old?.members.find(
321319
m => m.type === type && m.ref === +ref

yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -5438,6 +5438,11 @@ diff-sequences@^27.5.1:
54385438
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
54395439
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
54405440

5441+
diff@^7.0.0:
5442+
version "7.0.0"
5443+
resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a"
5444+
integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==
5445+
54415446
dir-glob@^3.0.1:
54425447
version "3.0.1"
54435448
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"

0 commit comments

Comments
 (0)