get-children.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. function getChildren(originalSlots = {}, slidesRef, oldSlidesRef) {
  2. const slides = [];
  3. const slots = {
  4. 'container-start': [],
  5. 'container-end': [],
  6. 'wrapper-start': [],
  7. 'wrapper-end': []
  8. };
  9. const getSlidesFromElements = (els, slotName) => {
  10. if (!Array.isArray(els)) {
  11. return;
  12. }
  13. els.forEach(vnode => {
  14. const isFragment = typeof vnode.type === 'symbol';
  15. if (slotName === 'default') slotName = 'container-end';
  16. if (isFragment && vnode.children) {
  17. getSlidesFromElements(vnode.children, 'default');
  18. } else if (vnode.type && (vnode.type.name === 'SwiperSlide' || vnode.type.name === 'AsyncComponentWrapper')) {
  19. slides.push(vnode);
  20. } else if (slots[slotName]) {
  21. slots[slotName].push(vnode);
  22. }
  23. });
  24. };
  25. Object.keys(originalSlots).forEach(slotName => {
  26. const els = originalSlots[slotName]();
  27. getSlidesFromElements(els, slotName);
  28. });
  29. oldSlidesRef.value = slidesRef.value;
  30. slidesRef.value = slides;
  31. return {
  32. slides,
  33. slots
  34. };
  35. }
  36. export { getChildren };