vuetify
Version:
Vue Material Component Framework
1 lines • 16.2 kB
Source Map (JSON)
{"version":3,"file":"VDataTable.mjs","names":["makeVDataTableFooterProps","VDataTableFooter","makeVDataTableHeadersProps","VDataTableHeaders","makeVDataTableRowsProps","VDataTableRows","makeVTableProps","VTable","makeDataTableExpandProps","provideExpanded","createGroupBy","makeDataTableGroupProps","provideGroupBy","useGroupedItems","createHeaders","makeDataTableHeaderProps","makeDataTableItemsProps","useDataTableItems","useOptions","createPagination","makeDataTablePaginateProps","providePagination","usePaginatedItems","makeDataTableSelectProps","provideSelection","createSort","makeDataTableSortProps","provideSort","useSortedItems","provideDefaults","makeFilterProps","useFilter","computed","toRef","genericComponent","propsFactory","useRender","makeDataTableProps","width","String","Number","search","makeVDataTableProps","VDataTable","name","props","emits","value","setup","_ref","emit","slots","groupBy","sortBy","multiSort","mustSort","page","itemsPerPage","columns","headers","showSelect","showExpand","items","filteredItems","transform","item","toggleSort","sortByWithGroups","opened","extractRows","isGroupOpen","toggleGroup","sortedItems","flatItems","itemsLength","length","startIndex","stopIndex","pageCount","setItemsPerPage","paginatedItems","paginatedItemsWithoutGroups","isSelected","select","selectAll","toggleSelect","someSelected","allSelected","allItems","currentPage","isExpanded","toggleExpand","hideNoData","noDataText","loading","loadingText","slotProps","groupedItems","dataTableFooterProps","filterProps","dataTableHeadersProps","dataTableRowsProps","tableProps","_createVNode","_mergeProps","class","style","top","default","_Fragment","colgroup","thead","body","tbody","tfoot","bottom","prepend"],"sources":["../../../src/labs/VDataTable/VDataTable.tsx"],"sourcesContent":["// Styles\nimport './VDataTable.sass'\n\n// Components\nimport { makeVDataTableFooterProps, VDataTableFooter } from './VDataTableFooter'\nimport { makeVDataTableHeadersProps, VDataTableHeaders } from './VDataTableHeaders'\nimport { makeVDataTableRowsProps, VDataTableRows } from './VDataTableRows'\nimport { makeVTableProps, VTable } from '@/components/VTable/VTable'\n\n// Composables\nimport { makeDataTableExpandProps, provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems } from './composables/group'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemsProps, useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { createPagination, makeDataTablePaginateProps, providePagination, usePaginatedItems } from './composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from './composables/select'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { UnwrapRef } from 'vue'\nimport type { Group } from './composables/group'\nimport type { DataTableItem, InternalDataTableHeader } from './types'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\n\nexport type VDataTableSlotProps = {\n page: number\n itemsPerPage: number\n sortBy: UnwrapRef<ReturnType<typeof provideSort>['sortBy']>\n pageCount: number\n toggleSort: ReturnType<typeof provideSort>['toggleSort']\n setItemsPerPage: ReturnType<typeof providePagination>['setItemsPerPage']\n someSelected: boolean\n allSelected: boolean\n isSelected: ReturnType<typeof provideSelection>['isSelected']\n select: ReturnType<typeof provideSelection>['select']\n selectAll: ReturnType<typeof provideSelection>['selectAll']\n toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n isGroupOpen: ReturnType<typeof provideGroupBy>['isGroupOpen']\n toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup']\n items: readonly DataTableItem[]\n groupedItems: readonly (DataTableItem | Group<DataTableItem>)[]\n columns: InternalDataTableHeader[]\n headers: InternalDataTableHeader[][]\n}\n\nexport type VDataTableSlots = VDataTableRowsSlots & VDataTableHeadersSlots & {\n default: VDataTableSlotProps\n colgroup: VDataTableSlotProps\n top: VDataTableSlotProps\n body: VDataTableSlotProps\n tbody: VDataTableSlotProps\n thead: VDataTableSlotProps\n tfoot: VDataTableSlotProps\n bottom: VDataTableSlotProps\n 'footer.prepend': never\n}\n\nexport const makeDataTableProps = propsFactory({\n ...makeVDataTableRowsProps(),\n\n width: [String, Number],\n search: String,\n\n ...makeDataTableExpandProps(),\n ...makeDataTableGroupProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemsProps(),\n ...makeDataTableSelectProps(),\n ...makeDataTableSortProps(),\n ...makeVDataTableHeadersProps(),\n ...makeVTableProps(),\n}, 'DataTable')\n\nexport const makeVDataTableProps = propsFactory({\n ...makeDataTablePaginateProps(),\n ...makeDataTableProps(),\n ...makeFilterProps(),\n ...makeVDataTableFooterProps(),\n}, 'VDataTable')\n\nexport const VDataTable = genericComponent<VDataTableSlots>()({\n name: 'VDataTable',\n\n props: makeVDataTableProps(),\n\n emits: {\n 'update:modelValue': (value: any[]) => true,\n 'update:page': (value: number) => true,\n 'update:itemsPerPage': (value: number) => true,\n 'update:sortBy': (value: any) => true,\n 'update:options': (value: any) => true,\n 'update:groupBy': (value: any) => true,\n 'update:expanded': (value: any) => true,\n },\n\n setup (props, { emit, slots }) {\n const { groupBy } = createGroupBy(props)\n const { sortBy, multiSort, mustSort } = createSort(props)\n const { page, itemsPerPage } = createPagination(props)\n\n const { columns, headers } = createHeaders(props, {\n groupBy,\n showSelect: toRef(props, 'showSelect'),\n showExpand: toRef(props, 'showExpand'),\n })\n\n const { items } = useDataTableItems(props, columns)\n\n const search = toRef(props, 'search')\n const { filteredItems } = useFilter(props, items, search, { transform: item => item.columns })\n\n const { toggleSort } = provideSort({ sortBy, multiSort, mustSort, page })\n const { sortByWithGroups, opened, extractRows, isGroupOpen, toggleGroup } = provideGroupBy({ groupBy, sortBy })\n\n const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups)\n const { flatItems } = useGroupedItems(sortedItems, groupBy, opened)\n const itemsLength = computed(() => flatItems.value.length)\n\n const { startIndex, stopIndex, pageCount, setItemsPerPage } = providePagination({ page, itemsPerPage, itemsLength })\n const { paginatedItems } = usePaginatedItems({ items: flatItems, startIndex, stopIndex, itemsPerPage })\n\n const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value))\n\n const {\n isSelected,\n select,\n selectAll,\n toggleSelect,\n someSelected,\n allSelected,\n } = provideSelection(props, { allItems: items, currentPage: paginatedItemsWithoutGroups })\n\n const { isExpanded, toggleExpand } = provideExpanded(props)\n\n useOptions({\n page,\n itemsPerPage,\n sortBy,\n groupBy,\n search,\n })\n\n provideDefaults({\n VDataTableRows: {\n hideNoData: toRef(props, 'hideNoData'),\n noDataText: toRef(props, 'noDataText'),\n loading: toRef(props, 'loading'),\n loadingText: toRef(props, 'loadingText'),\n },\n })\n\n const slotProps = computed<VDataTableSlotProps>(() => ({\n page: page.value,\n itemsPerPage: itemsPerPage.value,\n sortBy: sortBy.value,\n pageCount: pageCount.value,\n toggleSort,\n setItemsPerPage,\n someSelected: someSelected.value,\n allSelected: allSelected.value,\n isSelected,\n select,\n selectAll,\n toggleSelect,\n isExpanded,\n toggleExpand,\n isGroupOpen,\n toggleGroup,\n items: paginatedItemsWithoutGroups.value,\n groupedItems: paginatedItems.value,\n columns: columns.value,\n headers: headers.value,\n }))\n\n useRender(() => {\n const [dataTableFooterProps] = VDataTableFooter.filterProps(props)\n const [dataTableHeadersProps] = VDataTableHeaders.filterProps(props)\n const [dataTableRowsProps] = VDataTableRows.filterProps(props)\n const [tableProps] = VTable.filterProps(props)\n\n return (\n <VTable\n class={[\n 'v-data-table',\n {\n 'v-data-table--show-select': props.showSelect,\n 'v-data-table--loading': props.loading,\n },\n props.class,\n ]}\n style={ props.style }\n { ...tableProps }\n >\n {{\n top: () => slots.top?.(slotProps.value),\n default: () => slots.default ? slots.default(slotProps.value) : (\n <>\n { slots.colgroup?.(slotProps.value) }\n <thead>\n <VDataTableHeaders\n { ...dataTableHeadersProps }\n v-slots={ slots }\n />\n </thead>\n { slots.thead?.(slotProps.value) }\n <tbody>\n { slots.body ? slots.body(slotProps.value) : (\n <VDataTableRows\n { ...dataTableRowsProps }\n items={ paginatedItems.value }\n v-slots={ slots }\n />\n )}\n </tbody>\n { slots.tbody?.(slotProps.value) }\n { slots.tfoot?.(slotProps.value) }\n </>\n ),\n bottom: () => slots.bottom ? slots.bottom(slotProps.value) : (\n <>\n <VDataTableFooter\n { ...dataTableFooterProps }\n v-slots={{\n prepend: slots['footer.prepend'],\n }}\n />\n </>\n ),\n }}\n </VTable>\n )\n })\n\n return {}\n },\n})\n\nexport type VDataTable = InstanceType<typeof VDataTable>\n"],"mappings":"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"}