UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 5.06 kB
{"version":3,"file":"paginate.mjs","names":["useProxiedModel","computed","inject","provide","propsFactory","makeDataTablePaginateProps","page","type","Number","String","default","itemsPerPage","VDataTablePaginationSymbol","Symbol","for","createPagination","props","items","undefined","value","itemsLength","length","startIndex","stopIndex","Math","min","pageCount","ceil","data","usePagination","Error","usePaginatedItems","paginatedItems","slice"],"sources":["../../../../src/labs/VDataTable/composables/paginate.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const makeDataTablePaginateProps = propsFactory({\n page: {\n type: [Number, String],\n default: 1,\n },\n itemsPerPage: {\n type: [Number, String],\n default: 10,\n },\n}, 'v-data-table-paginate')\n\nconst VDataTablePaginationSymbol: InjectionKey<{\n page: Ref<number>\n itemsPerPage: Ref<number>\n startIndex: Ref<number>\n stopIndex: Ref<number>\n pageCount: Ref<number>\n itemsLength: Ref<number>\n}> = Symbol.for('vuetify:data-table-pagination')\n\ntype PaginationProps = {\n page: number | string\n 'onUpdate:page': ((val: any) => void) | undefined\n itemsPerPage: number | string\n 'onUpdate:itemsPerPage': ((val: any) => void) | undefined\n itemsLength?: number | string\n}\n\nexport function createPagination (props: PaginationProps, items: Ref<any[]>) {\n const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1))\n const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10))\n const itemsLength = computed(() => +(props.itemsLength ?? items.value.length))\n\n const startIndex = computed(() => {\n if (itemsPerPage.value === -1) return 0\n\n return itemsPerPage.value * (page.value - 1)\n })\n const stopIndex = computed(() => {\n if (itemsPerPage.value === -1) return itemsLength.value\n\n return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value)\n })\n\n const pageCount = computed(() => {\n if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1\n\n return Math.ceil(itemsLength.value / itemsPerPage.value)\n })\n\n const data = { page, itemsPerPage, startIndex, stopIndex, pageCount, itemsLength }\n\n provide(VDataTablePaginationSymbol, data)\n\n return data\n}\n\nexport function usePagination () {\n const data = inject(VDataTablePaginationSymbol)\n\n if (!data) throw new Error('Missing pagination!')\n\n return data\n}\n\nexport function usePaginatedItems (\n items: Ref<any[]>,\n startIndex: Ref<number>,\n stopIndex: Ref<number>,\n itemsPerPage: Ref<number>\n) {\n const paginatedItems = computed(() => {\n if (itemsPerPage.value <= 0) return items.value\n\n return items.value.slice(startIndex.value, stopIndex.value)\n })\n\n return { paginatedItems }\n}\n"],"mappings":"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"}