Skip to content

Commit 08d1b2b

Browse files
committed
refactor(createDataGrid): simplify adapters, layout, and factory
- Extract shared applyOrder helper, eliminating duplicate ordering logic between ClientGridAdapter and VirtualGridAdapter - Fix O(n*m) order.includes() → Set-based O(n) lookup in adapters and ordering.apply() - Simplify layout.ts columns computed to reuse pinned regions instead of double-computing resolved() - Fix editable column filter to match editing.ts guard - Remove unused RowSpanningOptions import and numbered comments - Clean up test mock imports
1 parent c99114e commit 08d1b2b

9 files changed

Lines changed: 92 additions & 88 deletions

File tree

dev/src/components.d.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ declare module 'vue' {
2222
BreadcrumbsList: typeof import('./../../packages/0/src/components/Breadcrumbs/BreadcrumbsList.vue')['default']
2323
BreadcrumbsPage: typeof import('./../../packages/0/src/components/Breadcrumbs/BreadcrumbsPage.vue')['default']
2424
BreadcrumbsRoot: typeof import('./../../packages/0/src/components/Breadcrumbs/BreadcrumbsRoot.vue')['default']
25+
ButtonContent: typeof import('./../../packages/0/src/components/Button/ButtonContent.vue')['default']
26+
ButtonGroup: typeof import('./../../packages/0/src/components/Button/ButtonGroup.vue')['default']
27+
ButtonHiddenInput: typeof import('./../../packages/0/src/components/Button/ButtonHiddenInput.vue')['default']
28+
ButtonIcon: typeof import('./../../packages/0/src/components/Button/ButtonIcon.vue')['default']
29+
ButtonLoading: typeof import('./../../packages/0/src/components/Button/ButtonLoading.vue')['default']
30+
ButtonRoot: typeof import('./../../packages/0/src/components/Button/ButtonRoot.vue')['default']
2531
CheckboxGroup: typeof import('./../../packages/0/src/components/Checkbox/CheckboxGroup.vue')['default']
2632
CheckboxHiddenInput: typeof import('./../../packages/0/src/components/Checkbox/CheckboxHiddenInput.vue')['default']
2733
CheckboxIndicator: typeof import('./../../packages/0/src/components/Checkbox/CheckboxIndicator.vue')['default']
@@ -45,6 +51,7 @@ declare module 'vue' {
4551
InputDescription: typeof import('./../../packages/0/src/components/Input/InputDescription.vue')['default']
4652
InputError: typeof import('./../../packages/0/src/components/Input/InputError.vue')['default']
4753
InputRoot: typeof import('./../../packages/0/src/components/Input/InputRoot.vue')['default']
54+
Locale: typeof import('./../../packages/0/src/components/Locale/Locale.vue')['default']
4855
PaginationEllipsis: typeof import('./../../packages/0/src/components/Pagination/PaginationEllipsis.vue')['default']
4956
PaginationFirst: typeof import('./../../packages/0/src/components/Pagination/PaginationFirst.vue')['default']
5057
PaginationItem: typeof import('./../../packages/0/src/components/Pagination/PaginationItem.vue')['default']
@@ -63,8 +70,16 @@ declare module 'vue' {
6370
RouterLink: typeof import('vue-router')['RouterLink']
6471
RouterView: typeof import('vue-router')['RouterView']
6572
Scrim: typeof import('./../../packages/0/src/components/Scrim/Scrim.vue')['default']
73+
SelectActivator: typeof import('./../../packages/0/src/components/Select/SelectActivator.vue')['default']
74+
SelectContent: typeof import('./../../packages/0/src/components/Select/SelectContent.vue')['default']
75+
SelectCue: typeof import('./../../packages/0/src/components/Select/SelectCue.vue')['default']
76+
SelectHiddenInput: typeof import('./../../packages/0/src/components/Select/SelectHiddenInput.vue')['default']
6677
SelectionItem: typeof import('./../../packages/0/src/components/Selection/SelectionItem.vue')['default']
6778
SelectionRoot: typeof import('./../../packages/0/src/components/Selection/SelectionRoot.vue')['default']
79+
SelectItem: typeof import('./../../packages/0/src/components/Select/SelectItem.vue')['default']
80+
SelectPlaceholder: typeof import('./../../packages/0/src/components/Select/SelectPlaceholder.vue')['default']
81+
SelectRoot: typeof import('./../../packages/0/src/components/Select/SelectRoot.vue')['default']
82+
SelectValue: typeof import('./../../packages/0/src/components/Select/SelectValue.vue')['default']
6883
SingleItem: typeof import('./../../packages/0/src/components/Single/SingleItem.vue')['default']
6984
SingleRoot: typeof import('./../../packages/0/src/components/Single/SingleRoot.vue')['default']
7085
SliderHiddenInput: typeof import('./../../packages/0/src/components/Slider/SliderHiddenInput.vue')['default']
@@ -76,6 +91,7 @@ declare module 'vue' {
7691
SnackbarClose: typeof import('./../../packages/0/src/components/Snackbar/SnackbarClose.vue')['default']
7792
SnackbarContent: typeof import('./../../packages/0/src/components/Snackbar/SnackbarContent.vue')['default']
7893
SnackbarPortal: typeof import('./../../packages/0/src/components/Snackbar/SnackbarPortal.vue')['default']
94+
SnackbarQueue: typeof import('./../../packages/0/src/components/Snackbar/SnackbarQueue.vue')['default']
7995
SnackbarRoot: typeof import('./../../packages/0/src/components/Snackbar/SnackbarRoot.vue')['default']
8096
SplitterHandle: typeof import('./../../packages/0/src/components/Splitter/SplitterHandle.vue')['default']
8197
SplitterPanel: typeof import('./../../packages/0/src/components/Splitter/SplitterPanel.vue')['default']
@@ -92,6 +108,7 @@ declare module 'vue' {
92108
TabsList: typeof import('./../../packages/0/src/components/Tabs/TabsList.vue')['default']
93109
TabsPanel: typeof import('./../../packages/0/src/components/Tabs/TabsPanel.vue')['default']
94110
TabsRoot: typeof import('./../../packages/0/src/components/Tabs/TabsRoot.vue')['default']
111+
Theme: typeof import('./../../packages/0/src/components/Theme/Theme.vue')['default']
95112
TreeviewActivator: typeof import('./../../packages/0/src/components/Treeview/TreeviewActivator.vue')['default']
96113
TreeviewCheckbox: typeof import('./../../packages/0/src/components/Treeview/TreeviewCheckbox.vue')['default']
97114
TreeviewContent: typeof import('./../../packages/0/src/components/Treeview/TreeviewContent.vue')['default']
@@ -101,6 +118,7 @@ declare module 'vue' {
101118
TreeviewItem: typeof import('./../../packages/0/src/components/Treeview/TreeviewItem.vue')['default']
102119
TreeviewList: typeof import('./../../packages/0/src/components/Treeview/TreeviewList.vue')['default']
103120
TreeviewRoot: typeof import('./../../packages/0/src/components/Treeview/TreeviewRoot.vue')['default']
121+
TreeviewSelectAll: typeof import('./../../packages/0/src/components/Treeview/TreeviewSelectAll.vue')['default']
104122
V0Paper: typeof import('./../../packages/paper/src/components/V0Paper/V0Paper.vue')['default']
105123
}
106124
}

dev/src/composables.d.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export {}
88
declare global {
99
const COMMON_ELEMENTS: typeof import('../../packages/0/src/constants/htmlElements').COMMON_ELEMENTS
1010
const ClientAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ClientAdapter
11+
const ClientGridAdapter: typeof import('../../packages/0/src/composables/createDataGrid/index').ClientGridAdapter
1112
const ConsolaLoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').ConsolaLoggerAdapter
1213
const DEFAULT_DARK: typeof import('../../packages/paper/src/composables/useTheme/index').DEFAULT_DARK
1314
const DEFAULT_LIGHT: typeof import('../../packages/paper/src/composables/useTheme/index').DEFAULT_LIGHT
@@ -28,9 +29,13 @@ declare global {
2829
const SUPPORTS_OBSERVER: typeof import('../../packages/0/src/constants/globals').SUPPORTS_OBSERVER
2930
const SUPPORTS_TOUCH: typeof import('../../packages/0/src/constants/globals').SUPPORTS_TOUCH
3031
const ServerAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').ServerAdapter
32+
const ServerGridAdapter: typeof import('../../packages/0/src/composables/createDataGrid/index').ServerGridAdapter
3133
const TemporalDateAdapter: typeof import('../../packages/0/src/composables/useDate/index').TemporalDateAdapter
34+
const V0StyleSheetThemeAdapter: typeof import('../../packages/0/src/composables/useTheme/index').V0StyleSheetThemeAdapter
35+
const V0UnheadThemeAdapter: typeof import('../../packages/0/src/composables/useTheme/index').V0UnheadThemeAdapter
3236
const V0_ELEVATION_KEY: typeof import('../../packages/paper/src/composables/useElevation/index').V0_ELEVATION_KEY
3337
const VirtualAdapter: typeof import('../../packages/0/src/composables/createDataTable/index').VirtualAdapter
38+
const VirtualGridAdapter: typeof import('../../packages/0/src/composables/createDataGrid/index').VirtualGridAdapter
3439
const Vuetify0DateAdapter: typeof import('../../packages/0/src/composables/useDate/index').Vuetify0DateAdapter
3540
const Vuetify0LocaleAdapter: typeof import('../../packages/0/src/composables/useLocale/index').Vuetify0LocaleAdapter
3641
const Vuetify0LoggerAdapter: typeof import('../../packages/0/src/composables/useLogger/index').Vuetify0LoggerAdapter
@@ -39,6 +44,7 @@ declare global {
3944
const __LOGGER_ENABLED__: typeof import('../../packages/0/src/constants/globals').__LOGGER_ENABLED__
4045
const apca: typeof import('../../packages/0/src/utilities/apca').apca
4146
const clamp: typeof import('../../packages/0/src/utilities/helpers').clamp
47+
const computeDepth: typeof import('../../packages/0/src/composables/createDataTable/index').computeDepth
4248
const computed: typeof import('vue').computed
4349
const createApp: typeof import('vue').createApp
4450
const createBreadcrumbs: typeof import('../../packages/0/src/composables/createBreadcrumbs/index').createBreadcrumbs
@@ -47,6 +53,8 @@ declare global {
4753
const createBreakpointsContext: typeof import('../../packages/0/src/composables/useBreakpoints/index').createBreakpointsContext
4854
const createBreakpointsPlugin: typeof import('../../packages/0/src/composables/useBreakpoints/index').createBreakpointsPlugin
4955
const createContext: typeof import('../../packages/0/src/composables/createContext/index').createContext
56+
const createDataGrid: typeof import('../../packages/0/src/composables/createDataGrid/index').createDataGrid
57+
const createDataGridContext: typeof import('../../packages/0/src/composables/createDataGrid/index').createDataGridContext
5058
const createDataTable: typeof import('../../packages/0/src/composables/createDataTable/index').createDataTable
5159
const createDataTableContext: typeof import('../../packages/0/src/composables/createDataTable/index').createDataTableContext
5260
const createDate: typeof import('../../packages/0/src/composables/useDate/index').createDate
@@ -131,6 +139,7 @@ declare global {
131139
const defineAsyncComponent: typeof import('vue').defineAsyncComponent
132140
const defineComponent: typeof import('vue').defineComponent
133141
const effectScope: typeof import('vue').effectScope
142+
const extractLeaves: typeof import('../../packages/0/src/composables/createDataTable/index').extractLeaves
134143
const flatten: typeof import('../../packages/0/src/composables/createTokens/index').flatten
135144
const foreground: typeof import('../../packages/0/src/utilities/apca').foreground
136145
const genId: typeof import('../../packages/0/src/utilities/helpers').genId
@@ -191,6 +200,7 @@ declare global {
191200
const readonly: typeof import('vue').readonly
192201
const ref: typeof import('vue').ref
193202
const resolveComponent: typeof import('vue').resolveComponent
203+
const resolveHeaders: typeof import('../../packages/0/src/composables/createDataTable/index').resolveHeaders
194204
const rgbToHex: typeof import('../../packages/0/src/utilities/color').rgbToHex
195205
const rgbToRgba: typeof import('../../packages/paper/src/composables/useColor/index').rgbToRgba
196206
const rgbaToHexa: typeof import('../../packages/paper/src/composables/useColor/index').rgbaToHexa
@@ -219,6 +229,7 @@ declare global {
219229
const useContrast: typeof import('../../packages/paper/src/composables/useContrast/index').useContrast
220230
const useCssModule: typeof import('vue').useCssModule
221231
const useCssVars: typeof import('vue').useCssVars
232+
const useDataGrid: typeof import('../../packages/0/src/composables/createDataGrid/index').useDataGrid
222233
const useDataTable: typeof import('../../packages/0/src/composables/createDataTable/index').useDataTable
223234
const useDate: typeof import('../../packages/0/src/composables/useDate/index').useDate
224235
const useDimensions: typeof import('../../packages/paper/src/composables/useDimensions/index').useDimensions
@@ -316,7 +327,10 @@ declare global {
316327
export type { ContextKey, CreateContextOptions } from '../../packages/0/src/composables/createContext/index'
317328
import('../../packages/0/src/composables/createContext/index')
318329
// @ts-ignore
319-
export type { SelectStrategy, DataTableColumn, DataTableSort, DataTableSelection, DataTableGroup, DataTableGrouping, DataTableExpansion, DataTableOptions, DataTableContext, DataTableContextOptions, DataTableAdapterContext, DataTableAdapterInterface, DataTableAdapterResult, SortDirection, SortEntry, ServerAdapterOptions } from '../../packages/0/src/composables/createDataTable/index'
330+
export type { DataGridColumn, DataGridOptions, DataGridContext, DataGridContextOptions, ColumnLayout, GridColumnDef, PinnedRegion, PinPosition, ResolvedColumn, ActiveCell, CellEditing, CellEditingOptions, EditableColumn, RowOrdering, RowSpanningOptions, SpanEntry, ServerGridAdapterOptions } from '../../packages/0/src/composables/createDataGrid/index'
331+
import('../../packages/0/src/composables/createDataGrid/index')
332+
// @ts-ignore
333+
export type { SelectStrategy, DataTableColumn, DataTableSort, DataTableSelection, DataTableGroup, DataTableGrouping, DataTableExpansion, DataTableOptions, DataTableContext, DataTableContextOptions, DataTableAdapterContext, DataTableAdapterInterface, DataTableAdapterResult, SortDirection, SortEntry, ServerAdapterOptions, ColumnNode, InternalHeader } from '../../packages/0/src/composables/createDataTable/index'
320334
import('../../packages/0/src/composables/createDataTable/index')
321335
// @ts-ignore
322336
export type { PluginOptions, Plugin, PluginContextConfig } from '../../packages/0/src/composables/createPlugin/index'
@@ -477,6 +491,7 @@ declare module 'vue' {
477491
interface ComponentCustomProperties {
478492
readonly COMMON_ELEMENTS: UnwrapRef<typeof import('../../packages/0/src/constants/htmlElements')['COMMON_ELEMENTS']>
479493
readonly ClientAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['ClientAdapter']>
494+
readonly ClientGridAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['ClientGridAdapter']>
480495
readonly ConsolaLoggerAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useLogger/index')['ConsolaLoggerAdapter']>
481496
readonly DEFAULT_DARK: UnwrapRef<typeof import('../../packages/paper/src/composables/useTheme/index')['DEFAULT_DARK']>
482497
readonly DEFAULT_LIGHT: UnwrapRef<typeof import('../../packages/paper/src/composables/useTheme/index')['DEFAULT_LIGHT']>
@@ -494,15 +509,19 @@ declare module 'vue' {
494509
readonly SUPPORTS_OBSERVER: UnwrapRef<typeof import('../../packages/0/src/constants/globals')['SUPPORTS_OBSERVER']>
495510
readonly SUPPORTS_TOUCH: UnwrapRef<typeof import('../../packages/0/src/constants/globals')['SUPPORTS_TOUCH']>
496511
readonly ServerAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['ServerAdapter']>
512+
readonly ServerGridAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['ServerGridAdapter']>
513+
readonly V0StyleSheetThemeAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useTheme/index')['V0StyleSheetThemeAdapter']>
514+
readonly V0UnheadThemeAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useTheme/index')['V0UnheadThemeAdapter']>
497515
readonly V0_ELEVATION_KEY: UnwrapRef<typeof import('../../packages/paper/src/composables/useElevation/index')['V0_ELEVATION_KEY']>
498516
readonly VirtualAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['VirtualAdapter']>
517+
readonly VirtualGridAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['VirtualGridAdapter']>
499518
readonly Vuetify0LocaleAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useLocale/index')['Vuetify0LocaleAdapter']>
500519
readonly Vuetify0LoggerAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useLogger/index')['Vuetify0LoggerAdapter']>
501520
readonly Vuetify0RtlAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useRtl/index')['Vuetify0RtlAdapter']>
502-
readonly Vuetify0ThemeAdapter: UnwrapRef<typeof import('../../packages/0/src/composables/useTheme/index')['Vuetify0ThemeAdapter']>
503521
readonly __LOGGER_ENABLED__: UnwrapRef<typeof import('../../packages/0/src/constants/globals')['__LOGGER_ENABLED__']>
504522
readonly apca: UnwrapRef<typeof import('../../packages/0/src/utilities/apca')['apca']>
505523
readonly clamp: UnwrapRef<typeof import('../../packages/0/src/utilities/helpers')['clamp']>
524+
readonly computeDepth: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['computeDepth']>
506525
readonly computed: UnwrapRef<typeof import('vue')['computed']>
507526
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
508527
readonly createBreadcrumbs: UnwrapRef<typeof import('../../packages/0/src/composables/createBreadcrumbs/index')['createBreadcrumbs']>
@@ -511,6 +530,8 @@ declare module 'vue' {
511530
readonly createBreakpointsContext: UnwrapRef<typeof import('../../packages/0/src/composables/useBreakpoints/index')['createBreakpointsContext']>
512531
readonly createBreakpointsPlugin: UnwrapRef<typeof import('../../packages/0/src/composables/useBreakpoints/index')['createBreakpointsPlugin']>
513532
readonly createContext: UnwrapRef<typeof import('../../packages/0/src/composables/createContext/index')['createContext']>
533+
readonly createDataGrid: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['createDataGrid']>
534+
readonly createDataGridContext: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['createDataGridContext']>
514535
readonly createDataTable: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['createDataTable']>
515536
readonly createDataTableContext: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['createDataTableContext']>
516537
readonly createDate: UnwrapRef<typeof import('../../packages/0/src/composables/useDate/index')['createDate']>
@@ -593,6 +614,7 @@ declare module 'vue' {
593614
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
594615
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
595616
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
617+
readonly extractLeaves: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['extractLeaves']>
596618
readonly flatten: UnwrapRef<typeof import('../../packages/0/src/composables/createTokens/index')['flatten']>
597619
readonly foreground: UnwrapRef<typeof import('../../packages/0/src/utilities/apca')['foreground']>
598620
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
@@ -652,6 +674,7 @@ declare module 'vue' {
652674
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
653675
readonly ref: UnwrapRef<typeof import('vue')['ref']>
654676
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
677+
readonly resolveHeaders: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['resolveHeaders']>
655678
readonly rgbToHex: UnwrapRef<typeof import('../../packages/0/src/utilities/color')['rgbToHex']>
656679
readonly rgbToRgba: UnwrapRef<typeof import('../../packages/paper/src/composables/useColor/index')['rgbToRgba']>
657680
readonly rgbaToHexa: UnwrapRef<typeof import('../../packages/paper/src/composables/useColor/index')['rgbaToHexa']>
@@ -680,6 +703,7 @@ declare module 'vue' {
680703
readonly useContrast: UnwrapRef<typeof import('../../packages/paper/src/composables/useContrast/index')['useContrast']>
681704
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
682705
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
706+
readonly useDataGrid: UnwrapRef<typeof import('../../packages/0/src/composables/createDataGrid/index')['useDataGrid']>
683707
readonly useDataTable: UnwrapRef<typeof import('../../packages/0/src/composables/createDataTable/index')['useDataTable']>
684708
readonly useDate: UnwrapRef<typeof import('../../packages/0/src/composables/useDate/index')['useDate']>
685709
readonly useDimensions: UnwrapRef<typeof import('../../packages/paper/src/composables/useDimensions/index')['useDimensions']>

0 commit comments

Comments
 (0)