Skip to content

Commit 1d79205

Browse files
Refactoring
1 parent bf83483 commit 1d79205

File tree

2 files changed

+38
-25
lines changed

2 files changed

+38
-25
lines changed

src/core/renderHelper.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ function getSlot(slots, key) {
66
return slotValue ? slotValue() : [];
77
}
88

9-
function computeChildren(slots) {
9+
function computeChildrenAndNodes(slots) {
1010
const [header, defaultNodes, footer] = [
1111
"header",
1212
"default",
@@ -22,21 +22,29 @@ function computeChildren(slots) {
2222
};
2323
}
2424

25+
function solveTag(tag) {
26+
const externalComponent = !isHtmlTag(tag) && !isTransitionName(tag);
27+
const realRoot = externalComponent ? resolveComponent(tag) : tag;
28+
return {
29+
tag: realRoot,
30+
externalComponent
31+
};
32+
}
33+
2534
function computeRenderContext({ $slots, tag }) {
26-
const children = computeChildren($slots);
35+
const childrenAndNodes = computeChildrenAndNodes($slots);
2736
const {
2837
nodes: { header, footer }
29-
} = children;
30-
const realRoot =
31-
isHtmlTag(tag) || isTransitionName(tag) ? tag : resolveComponent(tag);
38+
} = childrenAndNodes;
39+
const tagInformation = solveTag(tag);
3240

3341
return {
34-
tag: realRoot,
42+
...tagInformation,
43+
...childrenAndNodes,
3544
offsets: {
3645
header: header.length,
3746
footer: footer.length
38-
},
39-
...children
47+
}
4048
};
4149
}
4250

src/vuedraggable.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,14 @@ const draggableComponent = defineComponent({
112112
render() {
113113
const { $slots, $attrs, tag, componentData } = this;
114114
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;
119115
const attributes = getComponentAttributes({ $attrs, componentData });
120116

121117
const mainNode = h(renderContext.tag, attributes, renderContext.children);
122-
this.mainNode = mainNode;
118+
119+
this.renderContext = renderContext;
120+
this.transitionMode = isTransition(renderContext.nodes.default);
121+
this.noneFunctionalComponentMode =
122+
renderContext.externalComponent && typeof mainNode.type !== "function";
123123
return mainNode;
124124
},
125125

@@ -132,11 +132,14 @@ const draggableComponent = defineComponent({
132132
},
133133

134134
mounted() {
135-
const { tag, $attrs, rootContainer } = this;
136-
this.noneFunctionalComponentMode =
137-
tag.toLowerCase() !== this.$el.nodeName.toLowerCase() &&
138-
!this.getIsFunctional();
139-
if (this.noneFunctionalComponentMode && this.transitionMode) {
135+
const {
136+
tag,
137+
$attrs,
138+
rootContainer,
139+
noneFunctionalComponentMode,
140+
transitionMode
141+
} = this;
142+
if (noneFunctionalComponentMode && transitionMode) {
140143
throw new Error(
141144
`Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${tag}`
142145
);
@@ -207,16 +210,18 @@ const draggableComponent = defineComponent({
207210
const {
208211
noneFunctionalComponentMode,
209212
transitionMode,
210-
defaultSlots
213+
renderContext: {
214+
nodes: { default: defaultNodes }
215+
}
211216
} = this;
212217
if (noneFunctionalComponentMode) {
213218
//TODO check
214-
return defaultSlots[0].children;
219+
return defaultNodes[0].children;
215220
//return this.$children[0].$slots.default();
216221
}
217222

218223
if (transitionMode) {
219-
const [{ children }] = defaultSlots;
224+
const [{ children }] = defaultNodes;
220225
if (Array.isArray(children)) {
221226
return children;
222227
}
@@ -225,9 +230,9 @@ const draggableComponent = defineComponent({
225230
.filter(node => !!node.transition);
226231
}
227232

228-
return defaultSlots.length === 1 && defaultSlots[0].el.nodeType === 3
229-
? defaultSlots[0].children
230-
: defaultSlots;
233+
return defaultNodes.length === 1 && defaultNodes[0].el.nodeType === 3
234+
? defaultNodes[0].children
235+
: defaultNodes;
231236
},
232237

233238
computeIndexes() {
@@ -236,7 +241,7 @@ const draggableComponent = defineComponent({
236241
this.getChildrenNodes(),
237242
this.rootContainer.children,
238243
this.transitionMode,
239-
this.footerOffset
244+
this.renderContext.offsets.footer
240245
);
241246
});
242247
},

0 commit comments

Comments
 (0)