CopyPasteUtil.js 814 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {
  2. forEach
  3. } from 'min-dash';
  4. export function getTopLevel(elements) {
  5. var topLevel = {},
  6. parents = [],
  7. result = [],
  8. clearedParents = [];
  9. forEach(elements, function(element) {
  10. var parent = element.parent;
  11. if (!topLevel[parent.id]) {
  12. topLevel[parent.id] = [];
  13. }
  14. if (parents.indexOf(parent.id) === -1) {
  15. parents.push(parent.id);
  16. }
  17. topLevel[parent.id].push(element);
  18. });
  19. forEach(parents, function(parent) {
  20. forEach(topLevel[parent], function(element) {
  21. if (topLevel[element.id]) {
  22. clearedParents.push(element.id);
  23. }
  24. });
  25. });
  26. forEach(parents, function(parent) {
  27. var idx = clearedParents.indexOf(parent);
  28. if (idx === -1) {
  29. result = result.concat(topLevel[parent]);
  30. }
  31. });
  32. return result;
  33. }