Skip to content

Commit 2a51ad7

Browse files
breaking component in sub functions
1 parent 1de03cb commit 2a51ad7

File tree

2 files changed

+53
-38
lines changed

2 files changed

+53
-38
lines changed

src/core/renderHelper.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { isHtmlTag, isTransition as isTransitionName } from "../util/tags";
2+
import { resolveComponent } from "vue";
3+
4+
function getSlot(slots, key) {
5+
const slotValue = slots[key];
6+
return slotValue ? slotValue() : [];
7+
}
8+
9+
function computeChildren(slots) {
10+
const defaultNodes = getSlot(slots, "default");
11+
const header = getSlot(slots, "header");
12+
const footer = getSlot(slots, "footer");
13+
return {
14+
children: [...header, ...defaultNodes, ...footer],
15+
nodes: {
16+
header,
17+
footer,
18+
default: defaultNodes
19+
}
20+
};
21+
}
22+
23+
function computeRenderContext({ $slots, tag }) {
24+
const children = computeChildren($slots);
25+
const {
26+
nodes: { header, footer }
27+
} = children;
28+
const realRoot =
29+
isHtmlTag(tag) || isTransitionName(tag) ? tag : resolveComponent(tag);
30+
31+
return {
32+
tag: realRoot,
33+
offsets: {
34+
header: header.length,
35+
footer: footer.length
36+
},
37+
...children
38+
};
39+
}
40+
41+
export { computeRenderContext };

src/vuedraggable.js

Lines changed: 12 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import Sortable from "sortablejs";
22
import { insertNodeAt, removeNode } from "./util/htmlHelper";
33
import { console } from "./util/console";
4-
import { isHtmlTag, isTransition as isTransitionName } from "./util/tags";
4+
import { isTransition as isTransitionName } from "./util/tags";
55
import {
66
getComponentAttributes,
77
createSortableOption,
88
getValidSortableEntries
99
} from "./core/componentBuilderHelper";
10+
import { computeRenderContext } from "./core/renderHelper";
1011
import { h, defineComponent, nextTick, resolveComponent } from "vue";
1112

1213
function computeVmIndex(vNodes, element) {
@@ -60,29 +61,7 @@ function isTransition(slots) {
6061
return !!type && (isTransitionName(type) || isTransitionName(type.name));
6162
}
6263

63-
function getSlot(slot, key) {
64-
const slotValue = slot[key];
65-
return slotValue ? slotValue() : undefined;
66-
}
67-
68-
function computeChildrenAndOffsets(defaultNodes, slot) {
69-
let children = [...defaultNodes];
70-
let headerOffset = 0;
71-
let footerOffset = 0;
72-
const header = getSlot(slot, "header");
73-
if (header) {
74-
headerOffset = header.length;
75-
children = [...header, ...children];
76-
}
77-
const footer = getSlot(slot, "footer");
78-
if (footer) {
79-
footerOffset = footer.length;
80-
children = [...children, ...footer];
81-
}
82-
return { children, headerOffset, footerOffset };
83-
}
84-
85-
var draggingElement = null;
64+
let draggingElement = null;
8665

8766
const props = {
8867
list: {
@@ -132,19 +111,14 @@ const draggableComponent = defineComponent({
132111

133112
render() {
134113
const { $slots, $attrs, tag, componentData } = this;
135-
const defaultSlots = getSlot($slots, "default") || [];
136-
this.transitionMode = isTransition(defaultSlots);
137-
const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(
138-
defaultSlots,
139-
$slots
140-
);
141-
this.headerOffset = headerOffset;
142-
this.footerOffset = footerOffset;
143-
this.defaultSlots = defaultSlots;
114+
const renderContext = computeRenderContext({ $slots, tag });
115+
this.transitionMode = isTransition(renderContext.nodes.default);
116+
this.headerOffset = renderContext.offsets.header;
117+
this.footerOffset = renderContext.offsets.footer;
118+
this.defaultSlots = renderContext.nodes.default;
144119
const attributes = getComponentAttributes({ $attrs, componentData });
145-
const realRoot =
146-
isHtmlTag(tag) || isTransitionName(tag) ? tag : resolveComponent(tag);
147-
const mainNode = h(realRoot, attributes, children);
120+
121+
const mainNode = h(renderContext.tag, attributes, renderContext.children);
148122
this.mainNode = mainNode;
149123
return mainNode;
150124
},
@@ -269,8 +243,8 @@ const draggableComponent = defineComponent({
269243
});
270244
},
271245

272-
getUnderlyingVm(htmlElt) {
273-
const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);
246+
getUnderlyingVm(htmlElement) {
247+
const index = computeVmIndex(this.getChildrenNodes(), htmlElement);
274248
if (index === -1) {
275249
//Edge case during move callback: related element might be
276250
//an element different from collection

0 commit comments

Comments
 (0)