Skip to content

Commit bc8ca54

Browse files
authored
Merge pull request #96 from HC200ok/customize-rowsPerPage
Customize rows per page
2 parents 3b55060 + e236a92 commit bc8ca54

File tree

5 files changed

+50
-3
lines changed

5 files changed

+50
-3
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"author": "HC200ok",
44
"description": "A customizable and easy-to-use data table component made with Vue.js 3.x.",
55
"private": false,
6-
"version": "1.4.13",
6+
"version": "1.4.14",
77
"types": "./types/main.d.ts",
88
"license": "MIT",
99
"files": [

src/components/DataTable.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,7 @@ const {
360360
const {
361361
rowsItemsComputed,
362362
rowsPerPageRef,
363+
updateRowsPerPage,
363364
} = useRows(
364365
isServerSideMode,
365366
rowsItems,
@@ -498,6 +499,9 @@ defineExpose({
498499
nextPage,
499500
prevPage,
500501
updatePage,
502+
rowsPerPageOptions: rowsItemsComputed,
503+
rowsPerPageActiveOption: rowsPerPageRef,
504+
updateRowsPerPageActiveOption: updateRowsPerPage,
501505
});
502506
</script>
503507

src/hooks/useRows.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@ export default function useRows(
1616

1717
const rowsPerPageRef = ref(serverOptions.value ? serverOptions.value.rowsPerPage : rowsPerPage.value);
1818

19+
const updateRowsPerPage = (option: number) => {
20+
rowsPerPageRef.value = option;
21+
};
22+
1923
return {
2024
rowsItemsComputed,
2125
rowsPerPageRef,
26+
updateRowsPerPage,
2227
};
2328
}

src/modes/Client.vue

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
:body-item-class-name="bodyItemClassNameFunction"
3434
@click-row="showItem"
3535
@update-sort="updateSort"
36+
hide-footer
3637
>
3738

3839
<template #expand="item">
@@ -61,6 +62,21 @@
6162
</DataTable>
6263

6364
<div class="customize-footer">
65+
<div class="customize-rows-per-page">
66+
<select
67+
class="select-items"
68+
@change="updateRowsPerPageSelect"
69+
>
70+
<option
71+
v-for="item in rowsPerPageOptions"
72+
:key="item"
73+
:selected="item === rowsPerPageActiveOption"
74+
:value="item"
75+
>
76+
{{ item }} rows per page
77+
</option>
78+
</select>
79+
</div>
6480
<div class="customize-index">
6581
Now displaying: {{ currentPageFirstIndex }} ~ {{ currentPageLastIndex }} of {{ totalItemsLength }}
6682
</div>
@@ -98,12 +114,15 @@
98114
import {
99115
computed, ref, reactive, toRefs,
100116
} from 'vue';
117+
// import { useRowsPerPage } from 'use-vue3-easy-data-table';
118+
// import type { UseRowsPerPageReturn } from 'use-vue3-easy-data-table';
101119
import type {
102120
Header, Item, FilterOption, ClickRowArgument, UpdateSortArgument, HeaderItemClassNameFunction, BodyItemClassNameFunction, BodyRowClassNameFunction,
103121
} from '../types/main';
104122
import DataTable from '../components/DataTable.vue';
105123
import { mockClientNestedItems, mockClientItems, mockDuplicateClientNestedItems } from '../mock';
106124
125+
107126
const searchField = ref('name');
108127
const searchValue = ref('');
109128
@@ -191,6 +210,7 @@ const dataTable = ref();
191210
// index related
192211
const currentPageFirstIndex = computed(() => dataTable.value?.currentPageFirstIndex);
193212
const currentPageLastIndex = computed(() => dataTable.value?.currentPageLastIndex);
213+
194214
const totalItemsLength = computed(() => dataTable.value?.totalItemsLength);
195215
196216
// paginations related
@@ -209,6 +229,24 @@ const prevPage = () => {
209229
const updatePage = (paginationNumber: number) => {
210230
dataTable.value.updatePage(paginationNumber);
211231
};
232+
233+
// rows per page
234+
const rowsPerPageOptions = computed(() => dataTable.value?.rowsPerPageOptions);
235+
const rowsPerPageActiveOption = computed(() => dataTable.value?.rowsPerPageActiveOption);
236+
237+
const updateRowsPerPageSelect = (e: Event) => {
238+
dataTable.value.updateRowsPerPageActiveOption(Number((e.target as HTMLInputElement).value));
239+
};
240+
241+
// const {
242+
// rowsPerPageOptions,
243+
// rowsPerPageActiveOption,
244+
// updateRowsPerPageActiveOption,
245+
// }: UseRowsPerPageReturn = useRowsPerPage(dataTable);
246+
247+
// const updateRowsPerPageSelect = (e: Event) => {
248+
// updateRowsPerPageActiveOption(Number((e.target as HTMLInputElement).value));
249+
// };
212250
</script>
213251

214252
<style scoped>

0 commit comments

Comments
 (0)