Skip to content

Commit 367c1c0

Browse files
committed
feat: added iteration index
1 parent d70db7b commit 367c1c0

File tree

4 files changed

+96
-6
lines changed

4 files changed

+96
-6
lines changed

docs/components/index.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -355,13 +355,18 @@ It also provides the row's original index, useful e.g if you want to delete an i
355355
<tr>
356356
<td>row</td>
357357
<td>Object</td>
358-
<td>The dataset row data.</td>
358+
<td>The dataset row data</td>
359359
</tr>
360360
<tr>
361361
<td>rowIndex</td>
362362
<td>Number</td>
363363
<td>The original index of the data row</td>
364364
</tr>
365+
<tr>
366+
<td>index</td>
367+
<td>Number</td>
368+
<td>The iteration index</td>
369+
</tr>
365370
</tbody>
366371
</table>
367372

src/DatasetItem.vue

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<template>
22
<component :is="tag">
3-
<template v-for="item in dsRows">
4-
<slot :row="dsData[item]" :rowIndex="item"></slot>
3+
<template v-for="(rowIndex, i) in dsRows">
4+
<slot :row="dsData[rowIndex]" :rowIndex="rowIndex" :index="indexes[i]"></slot>
55
</template>
66
<slot v-if="!dsRows.length" name="noDataFound"></slot>
77
</component>
88
</template>
99

1010
<script>
11-
import { inject } from 'vue'
11+
import { inject, computed } from 'vue'
1212
1313
export default {
1414
props: {
@@ -18,9 +18,18 @@ export default {
1818
}
1919
},
2020
setup() {
21+
const indexes = computed(() => {
22+
const arr = []
23+
for (let i = inject('dsFrom').value; i < inject('dsTo').value; i++) {
24+
arr.push(i)
25+
}
26+
return arr
27+
})
28+
2129
return {
2230
dsData: inject('dsData'),
23-
dsRows: inject('dsRows')
31+
dsRows: inject('dsRows'),
32+
indexes
2433
}
2534
}
2635
}

tests/unit/DatasetItem.spec.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,18 @@ describe('DatasetItem', () => {
2222
}
2323
]),
2424
dsRows: ref([0, 1]),
25+
dsFrom: ref(0),
26+
dsTo: ref(10),
2527
...provideOpts
2628
}
2729
},
2830
slots: {
2931
default: `
30-
<template v-slot="{ row, rowIndex }">
32+
<template v-slot="{ row, rowIndex, index }">
3133
<div class="result">
3234
<p>{{ row.name }}</p>
3335
<p>{{ rowIndex }}</p>
36+
<p>{{ index }}</p>
3437
</div>
3538
</template>
3639
`,
@@ -45,11 +48,21 @@ describe('DatasetItem', () => {
4548
wrapper.unmount()
4649
})
4750

51+
it('renders correctly', () => {
52+
wrapper = wrapperWithProvide()
53+
expect(wrapper.element).toMatchSnapshot()
54+
})
55+
4856
it('renders divs based on passed props', () => {
4957
wrapper = wrapperWithProvide()
5058
expect(wrapper.findAll('div.result').length).toBe(2)
5159
})
5260

61+
it('calculates the correct indexes', () => {
62+
wrapper = wrapperWithProvide()
63+
expect(wrapper.vm.indexes).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
64+
})
65+
5366
it('does not render any results when dsRows is empty', () => {
5467
wrapper = wrapperWithProvide({
5568
dsRows: ref([])
@@ -76,5 +89,6 @@ describe('DatasetItem', () => {
7689
dsRows: ref([0])
7790
})
7891
expect(wrapper.findAll('div.result').length).toBe(1)
92+
expect(wrapper.element).toMatchSnapshot()
7993
})
8094
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`DatasetItem renders correctly 1`] = `
4+
<div>
5+
6+
7+
<div
8+
class="result"
9+
>
10+
<p>
11+
Jessie Casey
12+
</p>
13+
<p>
14+
0
15+
</p>
16+
<p>
17+
0
18+
</p>
19+
</div>
20+
21+
22+
<div
23+
class="result"
24+
>
25+
<p>
26+
Solomon Stanley
27+
</p>
28+
<p>
29+
1
30+
</p>
31+
<p>
32+
1
33+
</p>
34+
</div>
35+
36+
37+
<!--v-if-->
38+
</div>
39+
`;
40+
41+
exports[`DatasetItem renders divs after data changed 1`] = `
42+
<div>
43+
44+
45+
<div
46+
class="result"
47+
>
48+
<p>
49+
John Doe
50+
</p>
51+
<p>
52+
0
53+
</p>
54+
<p>
55+
0
56+
</p>
57+
</div>
58+
59+
60+
<!--v-if-->
61+
</div>
62+
`;

0 commit comments

Comments
 (0)