Files
iD/modules/actions/add_member.js
2016-10-11 23:09:27 -04:00

33 lines
1.1 KiB
JavaScript

import { osmJoinWays } from '../osm/index';
export function actionAddMember(relationId, member, memberIndex) {
return function(graph) {
var relation = graph.entity(relationId);
if (isNaN(memberIndex) && member.type === 'way') {
var members = relation.indexedMembers();
members.push(member);
var joined = osmJoinWays(members, graph);
for (var i = 0; i < joined.length; i++) {
var segment = joined[i];
for (var j = 0; j < segment.length && segment.length >= 2; j++) {
if (segment[j] !== member)
continue;
if (j === 0) {
memberIndex = segment[j + 1].index;
} else if (j === segment.length - 1) {
memberIndex = segment[j - 1].index + 1;
} else {
memberIndex = Math.min(segment[j - 1].index + 1, segment[j + 1].index + 1);
}
}
}
}
return graph.replace(relation.addMember(member, memberIndex));
};
}