Skip to content

Commit 8bd383a

Browse files
WIP adding data attribute to deal with header and footer slot
1 parent ffab62b commit 8bd383a

File tree

6 files changed

+18
-34
lines changed

6 files changed

+18
-34
lines changed

example/components/headerslot.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@
1010
@end="dragging = false"
1111
item-key="name"
1212
>
13-
<template v-slot:footer>
13+
<template #header>
1414
<div
1515
class="btn-group list-group-item"
1616
role="group"
1717
aria-label="Basic example"
1818
>
19-
<button class="btn btn-secondary" @click="replace">Replace</button>
19+
<button class="btn btn-secondary" @click="add">Add</button>
2020
</div>
2121
</template>
2222

23-
<template v-slot:header>
23+
<template #footer>
2424
<div
2525
class="btn-group list-group-item"
2626
role="group"
2727
aria-label="Basic example"
2828
>
29-
<button class="btn btn-secondary" @click="add">Add</button>
29+
<button class="btn btn-secondary" @click="replace">Replace</button>
3030
</div>
3131
</template>
3232

33-
<template v-slot:item="{ element }">
33+
<template #item="{ element }">
3434
<div class="list-group-item item">
3535
{{ element.name }}
3636
</div>

src/core/componentBuilderHelper.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { capitalize, camelize } from "../util/string";
2-
import { events, isReadOnlyEvent } from "./sortableEvents";
1+
import { camelize } from "../util/string";
2+
import { events, isReadOnly } from "./sortableEvents";
33
import { isHtmlAttribute } from "../util/tags";
44

55
function project(entries) {
@@ -26,8 +26,9 @@ function createSortableOption({ $attrs, callBackBuilder }) {
2626
options[`on${event}`] = eventBuilder(event);
2727
});
2828
});
29+
const draggable = `${options.draggable || ""}[data-draggable]`;
2930
return {
30-
draggable: ">*",
31+
draggable,
3132
...options
3233
};
3334
}
@@ -36,7 +37,7 @@ function getValidSortableEntries(value) {
3637
return Object.entries(value)
3738
.filter(([key, _]) => !isHtmlAttribute(key))
3839
.map(([key, value]) => [camelize(key), value])
39-
.filter(([key, _]) => !isReadOnlyEvent(key));
40+
.filter(([key, _]) => !isReadOnly(key));
4041
}
4142

4243
export {

src/core/renderHelper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ function computeNodes({ $slots, realList, itemKey }) {
1818
const defaultNodes = realList.flatMap((element, index) =>
1919
item({ element, index }).map(node => {
2020
node.key = element[itemKey];
21+
node.props = { ...(node.props || {}), "data-draggable": true };
2122
return node;
2223
})
2324
);

src/core/sortableEvents.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
const manageAndEmit = ["Start", "Add", "Remove", "Update", "End"];
22
const emit = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
33
const manage = ["Move"];
4-
const eventHandlerNames = [...manage, ...manageAndEmit, ...emit].map(
5-
evt => `on${evt}`
6-
);
4+
const eventHandlerNames = [manage, manageAndEmit, emit]
5+
.flatMap(events => events)
6+
.map(evt => `on${evt}`);
77

88
const events = {
99
manage,
1010
manageAndEmit,
1111
emit
1212
};
1313

14-
function isReadOnlyEvent(eventName) {
14+
function isReadOnly(eventName) {
1515
return eventHandlerNames.indexOf(eventName) !== -1;
1616
}
1717

18-
export { events, isReadOnlyEvent };
18+
export { events, isReadOnly };

src/util/string.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,4 @@ function cached(fn) {
99
const regex = /-(\w)/g;
1010
const camelize = cached(str => str.replace(regex, (_, c) => c.toUpperCase()));
1111

12-
const capitalize = str => str.replace(/^\w/, c => c.toUpperCase());
13-
14-
export { camelize, capitalize };
12+
export { camelize };

tests/unit/util/string.spec.js

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { camelize, capitalize } from "@/util/string";
1+
import { camelize } from "@/util/string";
22

33
describe("camelize", () => {
44
test.each([
@@ -15,20 +15,4 @@ describe("camelize", () => {
1515
expect(actual).toEqual(expected);
1616
}
1717
)
18-
});
19-
20-
describe("capitalize", () => {
21-
test.each([
22-
["myProp", "MyProp"],
23-
["abcdde", "Abcdde"],
24-
["Zab", "Zab"],
25-
["zab", "Zab"],
26-
["123456", "123456"]
27-
])(
28-
"transform %s into %s",
29-
(value, expected) =>{
30-
const actual = capitalize(value);
31-
expect(actual).toEqual(expected);
32-
}
33-
)
3418
});

0 commit comments

Comments
 (0)