@furystack/shades-common-components 13.4.1 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/README.md +3 -3
- package/esm/components/accordion/accordion-item.js +1 -1
- package/esm/components/accordion/accordion-item.js.map +1 -1
- package/esm/components/accordion/accordion.js +1 -1
- package/esm/components/accordion/accordion.js.map +1 -1
- package/esm/components/alert.js +1 -1
- package/esm/components/alert.js.map +1 -1
- package/esm/components/app-bar-link.js +1 -1
- package/esm/components/app-bar-link.js.map +1 -1
- package/esm/components/app-bar.js +1 -1
- package/esm/components/app-bar.js.map +1 -1
- package/esm/components/avatar.js +1 -1
- package/esm/components/avatar.js.map +1 -1
- package/esm/components/badge.js +1 -1
- package/esm/components/badge.js.map +1 -1
- package/esm/components/breadcrumb.js +1 -1
- package/esm/components/breadcrumb.js.map +1 -1
- package/esm/components/breadcrumb.spec.js +3 -3
- package/esm/components/breadcrumb.spec.js.map +1 -1
- package/esm/components/button-group.js +4 -4
- package/esm/components/button-group.js.map +1 -1
- package/esm/components/button.js +1 -1
- package/esm/components/button.js.map +1 -1
- package/esm/components/button.spec.js +1 -1
- package/esm/components/button.spec.js.map +1 -1
- package/esm/components/cache-view.js +1 -1
- package/esm/components/cache-view.js.map +1 -1
- package/esm/components/cache-view.spec.js +2 -2
- package/esm/components/cache-view.spec.js.map +1 -1
- package/esm/components/card.js +5 -5
- package/esm/components/card.js.map +1 -1
- package/esm/components/carousel.js +1 -1
- package/esm/components/carousel.js.map +1 -1
- package/esm/components/chip.js +1 -1
- package/esm/components/chip.js.map +1 -1
- package/esm/components/circular-progress.d.ts +2 -4
- package/esm/components/circular-progress.d.ts.map +1 -1
- package/esm/components/circular-progress.js +3 -6
- package/esm/components/circular-progress.js.map +1 -1
- package/esm/components/circular-progress.spec.js +19 -14
- package/esm/components/circular-progress.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +1 -1
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/command-palette/index.js +1 -1
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/context-menu/context-menu-item.js +1 -1
- package/esm/components/context-menu/context-menu-item.js.map +1 -1
- package/esm/components/context-menu/context-menu.js +1 -1
- package/esm/components/context-menu/context-menu.js.map +1 -1
- package/esm/components/data-grid/body.js +1 -1
- package/esm/components/data-grid/body.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.js +1 -1
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/data-grid.d.ts +5 -2
- package/esm/components/data-grid/data-grid.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid.js +5 -3
- package/esm/components/data-grid/data-grid.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +60 -60
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.js +4 -4
- package/esm/components/data-grid/filters/boolean-filter.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.spec.js +18 -17
- package/esm/components/data-grid/filters/boolean-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/date-filter.js +6 -6
- package/esm/components/data-grid/filters/date-filter.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.spec.js +26 -21
- package/esm/components/data-grid/filters/date-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.js +5 -5
- package/esm/components/data-grid/filters/enum-filter.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/enum-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/number-filter.js +5 -5
- package/esm/components/data-grid/filters/number-filter.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.spec.js +23 -21
- package/esm/components/data-grid/filters/number-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/string-filter.js +5 -5
- package/esm/components/data-grid/filters/string-filter.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/string-filter.spec.js.map +1 -1
- package/esm/components/data-grid/footer.d.ts +2 -2
- package/esm/components/data-grid/footer.d.ts.map +1 -1
- package/esm/components/data-grid/footer.js +8 -13
- package/esm/components/data-grid/footer.js.map +1 -1
- package/esm/components/data-grid/footer.spec.js +38 -27
- package/esm/components/data-grid/footer.spec.js.map +1 -1
- package/esm/components/data-grid/header.d.ts +6 -6
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +16 -17
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/header.spec.js +66 -60
- package/esm/components/data-grid/header.spec.js.map +1 -1
- package/esm/components/data-grid/selection-cell.js +1 -1
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/dialog.js +1 -1
- package/esm/components/dialog.js.map +1 -1
- package/esm/components/divider.js +1 -1
- package/esm/components/divider.js.map +1 -1
- package/esm/components/drawer/drawer-toggle-button.js +1 -1
- package/esm/components/drawer/drawer-toggle-button.js.map +1 -1
- package/esm/components/drawer/index.js +1 -1
- package/esm/components/drawer/index.js.map +1 -1
- package/esm/components/dropdown.js +1 -1
- package/esm/components/dropdown.js.map +1 -1
- package/esm/components/fab.js +1 -1
- package/esm/components/fab.js.map +1 -1
- package/esm/components/form.js +1 -1
- package/esm/components/form.js.map +1 -1
- package/esm/components/grid.js +1 -1
- package/esm/components/grid.js.map +1 -1
- package/esm/components/icons/icon.js +1 -1
- package/esm/components/icons/icon.js.map +1 -1
- package/esm/components/image.js +2 -2
- package/esm/components/image.js.map +1 -1
- package/esm/components/inputs/autocomplete.js +1 -1
- package/esm/components/inputs/autocomplete.js.map +1 -1
- package/esm/components/inputs/checkbox.js +1 -1
- package/esm/components/inputs/checkbox.js.map +1 -1
- package/esm/components/inputs/checkbox.spec.js +1 -1
- package/esm/components/inputs/checkbox.spec.js.map +1 -1
- package/esm/components/inputs/input-number.js +1 -1
- package/esm/components/inputs/input-number.js.map +1 -1
- package/esm/components/inputs/input-number.spec.js +1 -1
- package/esm/components/inputs/input-number.spec.js.map +1 -1
- package/esm/components/inputs/input.js +1 -1
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/inputs/input.spec.js +1 -1
- package/esm/components/inputs/input.spec.js.map +1 -1
- package/esm/components/inputs/radio-group.js +1 -1
- package/esm/components/inputs/radio-group.js.map +1 -1
- package/esm/components/inputs/radio-group.spec.js +1 -1
- package/esm/components/inputs/radio-group.spec.js.map +1 -1
- package/esm/components/inputs/radio.js +1 -1
- package/esm/components/inputs/radio.js.map +1 -1
- package/esm/components/inputs/radio.spec.js +1 -1
- package/esm/components/inputs/radio.spec.js.map +1 -1
- package/esm/components/inputs/select.js +1 -1
- package/esm/components/inputs/select.js.map +1 -1
- package/esm/components/inputs/slider.js +1 -1
- package/esm/components/inputs/slider.js.map +1 -1
- package/esm/components/inputs/switch.js +1 -1
- package/esm/components/inputs/switch.js.map +1 -1
- package/esm/components/inputs/switch.spec.js +1 -1
- package/esm/components/inputs/switch.spec.js.map +1 -1
- package/esm/components/inputs/text-area.js +1 -1
- package/esm/components/inputs/text-area.js.map +1 -1
- package/esm/components/inputs/text-area.spec.js +1 -1
- package/esm/components/inputs/text-area.spec.js.map +1 -1
- package/esm/components/linear-progress.d.ts +2 -4
- package/esm/components/linear-progress.d.ts.map +1 -1
- package/esm/components/linear-progress.js +3 -6
- package/esm/components/linear-progress.js.map +1 -1
- package/esm/components/linear-progress.spec.js +21 -18
- package/esm/components/linear-progress.spec.js.map +1 -1
- package/esm/components/list/list-item.js +1 -1
- package/esm/components/list/list-item.js.map +1 -1
- package/esm/components/list/list.js +1 -1
- package/esm/components/list/list.js.map +1 -1
- package/esm/components/loader.js +1 -1
- package/esm/components/loader.js.map +1 -1
- package/esm/components/loader.spec.js +1 -1
- package/esm/components/loader.spec.js.map +1 -1
- package/esm/components/markdown/markdown-display.js +1 -1
- package/esm/components/markdown/markdown-display.js.map +1 -1
- package/esm/components/markdown/markdown-display.spec.js +1 -1
- package/esm/components/markdown/markdown-display.spec.js.map +1 -1
- package/esm/components/markdown/markdown-editor.js +1 -1
- package/esm/components/markdown/markdown-editor.js.map +1 -1
- package/esm/components/markdown/markdown-editor.spec.js +1 -1
- package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
- package/esm/components/markdown/markdown-input.js +1 -1
- package/esm/components/markdown/markdown-input.js.map +1 -1
- package/esm/components/markdown/markdown-input.spec.js +1 -1
- package/esm/components/markdown/markdown-input.spec.js.map +1 -1
- package/esm/components/menu/menu.js +1 -1
- package/esm/components/menu/menu.js.map +1 -1
- package/esm/components/modal.js +1 -1
- package/esm/components/modal.js.map +1 -1
- package/esm/components/modal.spec.js +3 -3
- package/esm/components/modal.spec.js.map +1 -1
- package/esm/components/noty-list.js +2 -2
- package/esm/components/noty-list.js.map +1 -1
- package/esm/components/page-container/index.d.ts.map +1 -1
- package/esm/components/page-container/index.js +2 -2
- package/esm/components/page-container/index.js.map +1 -1
- package/esm/components/page-container/index.spec.js +5 -4
- package/esm/components/page-container/index.spec.js.map +1 -1
- package/esm/components/page-container/page-header.js +1 -1
- package/esm/components/page-container/page-header.js.map +1 -1
- package/esm/components/page-layout/index.d.ts +6 -0
- package/esm/components/page-layout/index.d.ts.map +1 -1
- package/esm/components/page-layout/index.js +29 -14
- package/esm/components/page-layout/index.js.map +1 -1
- package/esm/components/page-layout/index.spec.js +119 -0
- package/esm/components/page-layout/index.spec.js.map +1 -1
- package/esm/components/pagination.js +1 -1
- package/esm/components/pagination.js.map +1 -1
- package/esm/components/paper.js +1 -1
- package/esm/components/paper.js.map +1 -1
- package/esm/components/rating.js +1 -1
- package/esm/components/rating.js.map +1 -1
- package/esm/components/rating.spec.js +1 -1
- package/esm/components/rating.spec.js.map +1 -1
- package/esm/components/result.js +1 -1
- package/esm/components/result.js.map +1 -1
- package/esm/components/skeleton.js +1 -1
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/suggest/index.js +1 -1
- package/esm/components/suggest/index.js.map +1 -1
- package/esm/components/suggest/index.spec.js +1 -1
- package/esm/components/suggest/index.spec.js.map +1 -1
- package/esm/components/suggest/suggest-input.js +1 -1
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-input.spec.js +1 -1
- package/esm/components/suggest/suggest-input.spec.js.map +1 -1
- package/esm/components/suggest/suggestion-list.js +1 -1
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/components/suggest/suggestion-list.spec.js +1 -1
- package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
- package/esm/components/tabs.js +2 -2
- package/esm/components/tabs.js.map +1 -1
- package/esm/components/timeline.js +2 -2
- package/esm/components/timeline.js.map +1 -1
- package/esm/components/tooltip.js +1 -1
- package/esm/components/tooltip.js.map +1 -1
- package/esm/components/tree/tree-item.js +1 -1
- package/esm/components/tree/tree-item.js.map +1 -1
- package/esm/components/tree/tree.js +1 -1
- package/esm/components/tree/tree.js.map +1 -1
- package/esm/components/typography.js +1 -1
- package/esm/components/typography.js.map +1 -1
- package/esm/components/wizard/index.js +1 -1
- package/esm/components/wizard/index.js.map +1 -1
- package/esm/components/wizard/index.spec.js +3 -3
- package/esm/components/wizard/index.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/components/accordion/accordion-item.tsx +1 -1
- package/src/components/accordion/accordion.tsx +1 -1
- package/src/components/alert.tsx +1 -1
- package/src/components/app-bar-link.tsx +1 -1
- package/src/components/app-bar.tsx +1 -1
- package/src/components/avatar.tsx +1 -1
- package/src/components/badge.tsx +1 -1
- package/src/components/breadcrumb.spec.tsx +3 -3
- package/src/components/breadcrumb.tsx +1 -1
- package/src/components/button-group.tsx +4 -4
- package/src/components/button.spec.tsx +1 -1
- package/src/components/button.tsx +1 -1
- package/src/components/cache-view.spec.tsx +2 -2
- package/src/components/cache-view.tsx +3 -3
- package/src/components/card.tsx +5 -5
- package/src/components/carousel.tsx +1 -1
- package/src/components/chip.tsx +1 -1
- package/src/components/circular-progress.spec.tsx +20 -14
- package/src/components/circular-progress.tsx +5 -11
- package/src/components/command-palette/command-palette-input.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.tsx +1 -1
- package/src/components/command-palette/index.tsx +1 -1
- package/src/components/context-menu/context-menu-item.tsx +1 -1
- package/src/components/context-menu/context-menu.tsx +1 -1
- package/src/components/data-grid/body.tsx +1 -1
- package/src/components/data-grid/data-grid-row.tsx +1 -1
- package/src/components/data-grid/data-grid.spec.tsx +62 -36
- package/src/components/data-grid/data-grid.tsx +14 -8
- package/src/components/data-grid/filters/boolean-filter.spec.tsx +29 -18
- package/src/components/data-grid/filters/boolean-filter.tsx +6 -6
- package/src/components/data-grid/filters/date-filter.spec.tsx +35 -22
- package/src/components/data-grid/filters/date-filter.tsx +8 -8
- package/src/components/data-grid/filters/enum-filter.spec.tsx +35 -20
- package/src/components/data-grid/filters/enum-filter.tsx +7 -7
- package/src/components/data-grid/filters/filter-dropdown.tsx +1 -1
- package/src/components/data-grid/filters/number-filter.spec.tsx +32 -22
- package/src/components/data-grid/filters/number-filter.tsx +7 -7
- package/src/components/data-grid/filters/string-filter.spec.tsx +32 -20
- package/src/components/data-grid/filters/string-filter.tsx +7 -7
- package/src/components/data-grid/footer.spec.tsx +79 -31
- package/src/components/data-grid/footer.tsx +10 -15
- package/src/components/data-grid/header.spec.tsx +152 -68
- package/src/components/data-grid/header.tsx +64 -27
- package/src/components/data-grid/selection-cell.tsx +1 -1
- package/src/components/dialog.tsx +1 -1
- package/src/components/divider.tsx +1 -1
- package/src/components/drawer/drawer-toggle-button.tsx +1 -1
- package/src/components/drawer/index.tsx +1 -1
- package/src/components/dropdown.tsx +1 -1
- package/src/components/fab.tsx +1 -1
- package/src/components/form.tsx +1 -1
- package/src/components/grid.tsx +1 -1
- package/src/components/icons/icon.tsx +1 -1
- package/src/components/image.tsx +2 -2
- package/src/components/inputs/autocomplete.tsx +1 -1
- package/src/components/inputs/checkbox.spec.tsx +1 -1
- package/src/components/inputs/checkbox.tsx +1 -1
- package/src/components/inputs/input-number.spec.tsx +1 -1
- package/src/components/inputs/input-number.tsx +1 -1
- package/src/components/inputs/input.spec.tsx +1 -1
- package/src/components/inputs/input.tsx +1 -1
- package/src/components/inputs/radio-group.spec.tsx +1 -1
- package/src/components/inputs/radio-group.tsx +1 -1
- package/src/components/inputs/radio.spec.tsx +1 -1
- package/src/components/inputs/radio.tsx +1 -1
- package/src/components/inputs/select.tsx +1 -1
- package/src/components/inputs/slider.tsx +1 -1
- package/src/components/inputs/switch.spec.tsx +1 -1
- package/src/components/inputs/switch.tsx +1 -1
- package/src/components/inputs/text-area.spec.tsx +1 -1
- package/src/components/inputs/text-area.tsx +1 -1
- package/src/components/linear-progress.spec.tsx +22 -18
- package/src/components/linear-progress.tsx +5 -11
- package/src/components/list/list-item.tsx +1 -1
- package/src/components/list/list.tsx +1 -1
- package/src/components/loader.spec.tsx +1 -1
- package/src/components/loader.tsx +1 -1
- package/src/components/markdown/markdown-display.spec.tsx +1 -1
- package/src/components/markdown/markdown-display.tsx +1 -1
- package/src/components/markdown/markdown-editor.spec.tsx +1 -1
- package/src/components/markdown/markdown-editor.tsx +1 -1
- package/src/components/markdown/markdown-input.spec.tsx +1 -1
- package/src/components/markdown/markdown-input.tsx +1 -1
- package/src/components/menu/menu.tsx +1 -1
- package/src/components/modal.spec.tsx +3 -3
- package/src/components/modal.tsx +1 -1
- package/src/components/noty-list.tsx +2 -2
- package/src/components/page-container/index.spec.tsx +5 -4
- package/src/components/page-container/index.tsx +8 -2
- package/src/components/page-container/page-header.tsx +1 -1
- package/src/components/page-layout/index.spec.tsx +173 -0
- package/src/components/page-layout/index.tsx +36 -14
- package/src/components/pagination.tsx +1 -1
- package/src/components/paper.tsx +1 -1
- package/src/components/rating.spec.tsx +1 -1
- package/src/components/rating.tsx +1 -1
- package/src/components/result.tsx +1 -1
- package/src/components/skeleton.tsx +1 -1
- package/src/components/suggest/index.spec.tsx +1 -1
- package/src/components/suggest/index.tsx +1 -1
- package/src/components/suggest/suggest-input.spec.tsx +1 -1
- package/src/components/suggest/suggest-input.tsx +1 -1
- package/src/components/suggest/suggestion-list.spec.tsx +1 -1
- package/src/components/suggest/suggestion-list.tsx +1 -1
- package/src/components/tabs.tsx +2 -2
- package/src/components/timeline.tsx +2 -2
- package/src/components/tooltip.tsx +1 -1
- package/src/components/tree/tree-item.tsx +1 -1
- package/src/components/tree/tree.tsx +1 -1
- package/src/components/typography.tsx +1 -1
- package/src/components/wizard/index.spec.tsx +3 -3
- package/src/components/wizard/index.tsx +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FindOptions } from '@furystack/core'
|
|
2
2
|
import { Injector } from '@furystack/inject'
|
|
3
3
|
import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
|
|
4
|
-
import {
|
|
4
|
+
import { usingAsync } from '@furystack/utils'
|
|
5
5
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
6
6
|
import { CollectionService } from '../../services/collection-service.js'
|
|
7
7
|
import { DataGrid } from './data-grid.js'
|
|
@@ -34,25 +34,23 @@ describe('DataGrid', () => {
|
|
|
34
34
|
fn: (ctx: {
|
|
35
35
|
injector: Injector
|
|
36
36
|
service: CollectionService<TestEntry>
|
|
37
|
-
findOptions:
|
|
37
|
+
findOptions: FindOptions<TestEntry, Array<keyof TestEntry>>
|
|
38
|
+
onFindOptionsChange: (options: FindOptions<TestEntry, Array<keyof TestEntry>>) => void
|
|
38
39
|
}) => Promise<void>,
|
|
39
40
|
opts?: { createService?: () => CollectionService<TestEntry> },
|
|
40
41
|
) => {
|
|
41
42
|
await usingAsync(new Injector(), async (injector) => {
|
|
42
43
|
await usingAsync(opts?.createService?.() ?? createTestService(), async (service) => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await fn({ injector, service, findOptions })
|
|
47
|
-
},
|
|
48
|
-
)
|
|
44
|
+
const findOptions: FindOptions<TestEntry, Array<keyof TestEntry>> = {}
|
|
45
|
+
const onFindOptionsChange = vi.fn<(options: FindOptions<TestEntry, Array<keyof TestEntry>>) => void>()
|
|
46
|
+
await fn({ injector, service, findOptions, onFindOptionsChange })
|
|
49
47
|
})
|
|
50
48
|
})
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
describe('rendering', () => {
|
|
54
52
|
it('should render with columns', async () => {
|
|
55
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
53
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
56
54
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
57
55
|
|
|
58
56
|
initializeShadeRoot({
|
|
@@ -63,6 +61,7 @@ describe('DataGrid', () => {
|
|
|
63
61
|
columns={['id', 'name']}
|
|
64
62
|
collectionService={service}
|
|
65
63
|
findOptions={findOptions}
|
|
64
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
66
65
|
styles={{}}
|
|
67
66
|
headerComponents={{}}
|
|
68
67
|
rowComponents={{}}
|
|
@@ -81,7 +80,7 @@ describe('DataGrid', () => {
|
|
|
81
80
|
})
|
|
82
81
|
|
|
83
82
|
it('should render table structure', async () => {
|
|
84
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
83
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
85
84
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
86
85
|
|
|
87
86
|
initializeShadeRoot({
|
|
@@ -92,6 +91,7 @@ describe('DataGrid', () => {
|
|
|
92
91
|
columns={['id', 'name']}
|
|
93
92
|
collectionService={service}
|
|
94
93
|
findOptions={findOptions}
|
|
94
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
95
95
|
styles={{}}
|
|
96
96
|
headerComponents={{}}
|
|
97
97
|
rowComponents={{}}
|
|
@@ -113,7 +113,7 @@ describe('DataGrid', () => {
|
|
|
113
113
|
})
|
|
114
114
|
|
|
115
115
|
it('should render custom header components when provided', async () => {
|
|
116
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
116
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
117
117
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
118
118
|
|
|
119
119
|
initializeShadeRoot({
|
|
@@ -124,6 +124,7 @@ describe('DataGrid', () => {
|
|
|
124
124
|
columns={['id', 'name']}
|
|
125
125
|
collectionService={service}
|
|
126
126
|
findOptions={findOptions}
|
|
127
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
127
128
|
styles={{}}
|
|
128
129
|
headerComponents={{
|
|
129
130
|
id: () => <span data-testid="custom-header-id">Custom ID Header</span>,
|
|
@@ -143,7 +144,7 @@ describe('DataGrid', () => {
|
|
|
143
144
|
})
|
|
144
145
|
|
|
145
146
|
it('should render default header components from headerComponents.default', async () => {
|
|
146
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
147
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
147
148
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
148
149
|
|
|
149
150
|
initializeShadeRoot({
|
|
@@ -154,6 +155,7 @@ describe('DataGrid', () => {
|
|
|
154
155
|
columns={['id', 'name']}
|
|
155
156
|
collectionService={service}
|
|
156
157
|
findOptions={findOptions}
|
|
158
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
157
159
|
styles={{}}
|
|
158
160
|
headerComponents={{
|
|
159
161
|
default: (name) => <span data-testid={`default-header-${name}`}>Default: {name}</span>,
|
|
@@ -175,7 +177,7 @@ describe('DataGrid', () => {
|
|
|
175
177
|
})
|
|
176
178
|
|
|
177
179
|
it('should render DataGridHeader when no custom header is provided', async () => {
|
|
178
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
180
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
179
181
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
180
182
|
|
|
181
183
|
initializeShadeRoot({
|
|
@@ -186,6 +188,7 @@ describe('DataGrid', () => {
|
|
|
186
188
|
columns={['id', 'name']}
|
|
187
189
|
collectionService={service}
|
|
188
190
|
findOptions={findOptions}
|
|
191
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
189
192
|
styles={{}}
|
|
190
193
|
headerComponents={{}}
|
|
191
194
|
rowComponents={{}}
|
|
@@ -202,7 +205,7 @@ describe('DataGrid', () => {
|
|
|
202
205
|
})
|
|
203
206
|
|
|
204
207
|
it('should render filter buttons when columnFilters are provided', async () => {
|
|
205
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
208
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
206
209
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
207
210
|
|
|
208
211
|
initializeShadeRoot({
|
|
@@ -213,6 +216,7 @@ describe('DataGrid', () => {
|
|
|
213
216
|
columns={['id', 'name']}
|
|
214
217
|
collectionService={service}
|
|
215
218
|
findOptions={findOptions}
|
|
219
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
216
220
|
styles={{}}
|
|
217
221
|
columnFilters={{ name: { type: 'string' } }}
|
|
218
222
|
/>
|
|
@@ -228,7 +232,7 @@ describe('DataGrid', () => {
|
|
|
228
232
|
})
|
|
229
233
|
|
|
230
234
|
it('should not render filter buttons when columnFilters is not provided', async () => {
|
|
231
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
235
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
232
236
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
233
237
|
|
|
234
238
|
initializeShadeRoot({
|
|
@@ -239,6 +243,7 @@ describe('DataGrid', () => {
|
|
|
239
243
|
columns={['id', 'name']}
|
|
240
244
|
collectionService={service}
|
|
241
245
|
findOptions={findOptions}
|
|
246
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
242
247
|
styles={{}}
|
|
243
248
|
/>
|
|
244
249
|
),
|
|
@@ -253,7 +258,7 @@ describe('DataGrid', () => {
|
|
|
253
258
|
})
|
|
254
259
|
|
|
255
260
|
it('should render without headerComponents and rowComponents', async () => {
|
|
256
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
261
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
257
262
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
258
263
|
|
|
259
264
|
initializeShadeRoot({
|
|
@@ -264,6 +269,7 @@ describe('DataGrid', () => {
|
|
|
264
269
|
columns={['id', 'name']}
|
|
265
270
|
collectionService={service}
|
|
266
271
|
findOptions={findOptions}
|
|
272
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
267
273
|
styles={{}}
|
|
268
274
|
/>
|
|
269
275
|
),
|
|
@@ -282,7 +288,7 @@ describe('DataGrid', () => {
|
|
|
282
288
|
|
|
283
289
|
describe('focus management', () => {
|
|
284
290
|
it('should set focus on click', async () => {
|
|
285
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
291
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
286
292
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
287
293
|
|
|
288
294
|
expect(service.hasFocus.getValue()).toBe(false)
|
|
@@ -295,6 +301,7 @@ describe('DataGrid', () => {
|
|
|
295
301
|
columns={['id', 'name']}
|
|
296
302
|
collectionService={service}
|
|
297
303
|
findOptions={findOptions}
|
|
304
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
298
305
|
styles={{}}
|
|
299
306
|
headerComponents={{}}
|
|
300
307
|
rowComponents={{}}
|
|
@@ -314,7 +321,7 @@ describe('DataGrid', () => {
|
|
|
314
321
|
})
|
|
315
322
|
|
|
316
323
|
it('should lose focus on click outside', async () => {
|
|
317
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
324
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
318
325
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
319
326
|
|
|
320
327
|
initializeShadeRoot({
|
|
@@ -327,6 +334,7 @@ describe('DataGrid', () => {
|
|
|
327
334
|
columns={['id', 'name']}
|
|
328
335
|
collectionService={service}
|
|
329
336
|
findOptions={findOptions}
|
|
337
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
330
338
|
styles={{}}
|
|
331
339
|
headerComponents={{}}
|
|
332
340
|
rowComponents={{}}
|
|
@@ -353,7 +361,7 @@ describe('DataGrid', () => {
|
|
|
353
361
|
|
|
354
362
|
describe('keyboard navigation', () => {
|
|
355
363
|
it('should handle ArrowDown to move focus to next entry', async () => {
|
|
356
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
364
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
357
365
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
358
366
|
|
|
359
367
|
service.hasFocus.setValue(true)
|
|
@@ -367,6 +375,7 @@ describe('DataGrid', () => {
|
|
|
367
375
|
columns={['id', 'name']}
|
|
368
376
|
collectionService={service}
|
|
369
377
|
findOptions={findOptions}
|
|
378
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
370
379
|
styles={{}}
|
|
371
380
|
headerComponents={{}}
|
|
372
381
|
rowComponents={{}}
|
|
@@ -384,7 +393,7 @@ describe('DataGrid', () => {
|
|
|
384
393
|
})
|
|
385
394
|
|
|
386
395
|
it('should handle ArrowUp to move focus to previous entry', async () => {
|
|
387
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
396
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
388
397
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
389
398
|
|
|
390
399
|
service.hasFocus.setValue(true)
|
|
@@ -398,6 +407,7 @@ describe('DataGrid', () => {
|
|
|
398
407
|
columns={['id', 'name']}
|
|
399
408
|
collectionService={service}
|
|
400
409
|
findOptions={findOptions}
|
|
410
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
401
411
|
styles={{}}
|
|
402
412
|
headerComponents={{}}
|
|
403
413
|
rowComponents={{}}
|
|
@@ -415,7 +425,7 @@ describe('DataGrid', () => {
|
|
|
415
425
|
})
|
|
416
426
|
|
|
417
427
|
it('should handle Home to move focus to first entry', async () => {
|
|
418
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
428
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
419
429
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
420
430
|
|
|
421
431
|
service.hasFocus.setValue(true)
|
|
@@ -429,6 +439,7 @@ describe('DataGrid', () => {
|
|
|
429
439
|
columns={['id', 'name']}
|
|
430
440
|
collectionService={service}
|
|
431
441
|
findOptions={findOptions}
|
|
442
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
432
443
|
styles={{}}
|
|
433
444
|
headerComponents={{}}
|
|
434
445
|
rowComponents={{}}
|
|
@@ -446,7 +457,7 @@ describe('DataGrid', () => {
|
|
|
446
457
|
})
|
|
447
458
|
|
|
448
459
|
it('should handle End to move focus to last entry', async () => {
|
|
449
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
460
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
450
461
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
451
462
|
|
|
452
463
|
service.hasFocus.setValue(true)
|
|
@@ -460,6 +471,7 @@ describe('DataGrid', () => {
|
|
|
460
471
|
columns={['id', 'name']}
|
|
461
472
|
collectionService={service}
|
|
462
473
|
findOptions={findOptions}
|
|
474
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
463
475
|
styles={{}}
|
|
464
476
|
headerComponents={{}}
|
|
465
477
|
rowComponents={{}}
|
|
@@ -477,7 +489,7 @@ describe('DataGrid', () => {
|
|
|
477
489
|
})
|
|
478
490
|
|
|
479
491
|
it('should handle Tab to toggle focus', async () => {
|
|
480
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
492
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
481
493
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
482
494
|
|
|
483
495
|
service.hasFocus.setValue(true)
|
|
@@ -490,6 +502,7 @@ describe('DataGrid', () => {
|
|
|
490
502
|
columns={['id', 'name']}
|
|
491
503
|
collectionService={service}
|
|
492
504
|
findOptions={findOptions}
|
|
505
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
493
506
|
styles={{}}
|
|
494
507
|
headerComponents={{}}
|
|
495
508
|
rowComponents={{}}
|
|
@@ -507,7 +520,7 @@ describe('DataGrid', () => {
|
|
|
507
520
|
})
|
|
508
521
|
|
|
509
522
|
it('should handle Escape to clear selection and search', async () => {
|
|
510
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
523
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
511
524
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
512
525
|
|
|
513
526
|
const { entries } = service.data.getValue()
|
|
@@ -523,6 +536,7 @@ describe('DataGrid', () => {
|
|
|
523
536
|
columns={['id', 'name']}
|
|
524
537
|
collectionService={service}
|
|
525
538
|
findOptions={findOptions}
|
|
539
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
526
540
|
styles={{}}
|
|
527
541
|
headerComponents={{}}
|
|
528
542
|
rowComponents={{}}
|
|
@@ -541,7 +555,7 @@ describe('DataGrid', () => {
|
|
|
541
555
|
})
|
|
542
556
|
|
|
543
557
|
it('should handle Space to toggle selection of focused entry', async () => {
|
|
544
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
558
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
545
559
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
546
560
|
|
|
547
561
|
const { entries } = service.data.getValue()
|
|
@@ -556,6 +570,7 @@ describe('DataGrid', () => {
|
|
|
556
570
|
columns={['id', 'name']}
|
|
557
571
|
collectionService={service}
|
|
558
572
|
findOptions={findOptions}
|
|
573
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
559
574
|
styles={{}}
|
|
560
575
|
headerComponents={{}}
|
|
561
576
|
rowComponents={{}}
|
|
@@ -576,7 +591,7 @@ describe('DataGrid', () => {
|
|
|
576
591
|
})
|
|
577
592
|
|
|
578
593
|
it('should handle + to select all entries', async () => {
|
|
579
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
594
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
580
595
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
581
596
|
|
|
582
597
|
service.hasFocus.setValue(true)
|
|
@@ -589,6 +604,7 @@ describe('DataGrid', () => {
|
|
|
589
604
|
columns={['id', 'name']}
|
|
590
605
|
collectionService={service}
|
|
591
606
|
findOptions={findOptions}
|
|
607
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
592
608
|
styles={{}}
|
|
593
609
|
headerComponents={{}}
|
|
594
610
|
rowComponents={{}}
|
|
@@ -606,7 +622,7 @@ describe('DataGrid', () => {
|
|
|
606
622
|
})
|
|
607
623
|
|
|
608
624
|
it('should handle - to deselect all entries', async () => {
|
|
609
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
625
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
610
626
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
611
627
|
|
|
612
628
|
const { entries } = service.data.getValue()
|
|
@@ -621,6 +637,7 @@ describe('DataGrid', () => {
|
|
|
621
637
|
columns={['id', 'name']}
|
|
622
638
|
collectionService={service}
|
|
623
639
|
findOptions={findOptions}
|
|
640
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
624
641
|
styles={{}}
|
|
625
642
|
headerComponents={{}}
|
|
626
643
|
rowComponents={{}}
|
|
@@ -638,7 +655,7 @@ describe('DataGrid', () => {
|
|
|
638
655
|
})
|
|
639
656
|
|
|
640
657
|
it('should handle * to invert selection', async () => {
|
|
641
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
658
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
642
659
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
643
660
|
|
|
644
661
|
const { entries } = service.data.getValue()
|
|
@@ -653,6 +670,7 @@ describe('DataGrid', () => {
|
|
|
653
670
|
columns={['id', 'name']}
|
|
654
671
|
collectionService={service}
|
|
655
672
|
findOptions={findOptions}
|
|
673
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
656
674
|
styles={{}}
|
|
657
675
|
headerComponents={{}}
|
|
658
676
|
rowComponents={{}}
|
|
@@ -673,7 +691,7 @@ describe('DataGrid', () => {
|
|
|
673
691
|
})
|
|
674
692
|
|
|
675
693
|
it('should not handle keyboard when not focused', async () => {
|
|
676
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
694
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
677
695
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
678
696
|
|
|
679
697
|
service.hasFocus.setValue(false)
|
|
@@ -687,6 +705,7 @@ describe('DataGrid', () => {
|
|
|
687
705
|
columns={['id', 'name']}
|
|
688
706
|
collectionService={service}
|
|
689
707
|
findOptions={findOptions}
|
|
708
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
690
709
|
styles={{}}
|
|
691
710
|
headerComponents={{}}
|
|
692
711
|
rowComponents={{}}
|
|
@@ -704,7 +723,7 @@ describe('DataGrid', () => {
|
|
|
704
723
|
})
|
|
705
724
|
|
|
706
725
|
it('should handle Insert to toggle selection and move to next', async () => {
|
|
707
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
726
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
708
727
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
709
728
|
|
|
710
729
|
const { entries } = service.data.getValue()
|
|
@@ -719,6 +738,7 @@ describe('DataGrid', () => {
|
|
|
719
738
|
columns={['id', 'name']}
|
|
720
739
|
collectionService={service}
|
|
721
740
|
findOptions={findOptions}
|
|
741
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
722
742
|
styles={{}}
|
|
723
743
|
headerComponents={{}}
|
|
724
744
|
rowComponents={{}}
|
|
@@ -739,7 +759,7 @@ describe('DataGrid', () => {
|
|
|
739
759
|
|
|
740
760
|
describe('styles', () => {
|
|
741
761
|
it('should apply wrapper styles when provided', async () => {
|
|
742
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
762
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
743
763
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
744
764
|
|
|
745
765
|
initializeShadeRoot({
|
|
@@ -750,6 +770,7 @@ describe('DataGrid', () => {
|
|
|
750
770
|
columns={['id', 'name']}
|
|
751
771
|
collectionService={service}
|
|
752
772
|
findOptions={findOptions}
|
|
773
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
753
774
|
styles={{
|
|
754
775
|
wrapper: { backgroundColor: 'red' },
|
|
755
776
|
}}
|
|
@@ -767,7 +788,7 @@ describe('DataGrid', () => {
|
|
|
767
788
|
})
|
|
768
789
|
|
|
769
790
|
it('should apply header styles when provided', async () => {
|
|
770
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
791
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
771
792
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
772
793
|
|
|
773
794
|
initializeShadeRoot({
|
|
@@ -778,6 +799,7 @@ describe('DataGrid', () => {
|
|
|
778
799
|
columns={['id', 'name']}
|
|
779
800
|
collectionService={service}
|
|
780
801
|
findOptions={findOptions}
|
|
802
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
781
803
|
styles={{
|
|
782
804
|
header: { color: 'blue' },
|
|
783
805
|
}}
|
|
@@ -799,7 +821,7 @@ describe('DataGrid', () => {
|
|
|
799
821
|
describe('empty and loading states', () => {
|
|
800
822
|
it('should show empty component when no data', async () => {
|
|
801
823
|
await withTestGrid(
|
|
802
|
-
async ({ injector, service, findOptions }) => {
|
|
824
|
+
async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
803
825
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
804
826
|
|
|
805
827
|
initializeShadeRoot({
|
|
@@ -810,6 +832,7 @@ describe('DataGrid', () => {
|
|
|
810
832
|
columns={['id', 'name']}
|
|
811
833
|
collectionService={service}
|
|
812
834
|
findOptions={findOptions}
|
|
835
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
813
836
|
styles={{}}
|
|
814
837
|
headerComponents={{}}
|
|
815
838
|
rowComponents={{}}
|
|
@@ -834,7 +857,7 @@ describe('DataGrid', () => {
|
|
|
834
857
|
it('should pass row click to collectionService', async () => {
|
|
835
858
|
const onRowClick = vi.fn()
|
|
836
859
|
await withTestGrid(
|
|
837
|
-
async ({ injector, service, findOptions }) => {
|
|
860
|
+
async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
838
861
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
839
862
|
|
|
840
863
|
service.data.setValue({
|
|
@@ -850,6 +873,7 @@ describe('DataGrid', () => {
|
|
|
850
873
|
columns={['id', 'name']}
|
|
851
874
|
collectionService={service}
|
|
852
875
|
findOptions={findOptions}
|
|
876
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
853
877
|
styles={{}}
|
|
854
878
|
headerComponents={{}}
|
|
855
879
|
rowComponents={{}}
|
|
@@ -872,7 +896,7 @@ describe('DataGrid', () => {
|
|
|
872
896
|
it('should pass row double click to collectionService', async () => {
|
|
873
897
|
const onRowDoubleClick = vi.fn()
|
|
874
898
|
await withTestGrid(
|
|
875
|
-
async ({ injector, service, findOptions }) => {
|
|
899
|
+
async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
876
900
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
877
901
|
|
|
878
902
|
service.data.setValue({
|
|
@@ -888,6 +912,7 @@ describe('DataGrid', () => {
|
|
|
888
912
|
columns={['id', 'name']}
|
|
889
913
|
collectionService={service}
|
|
890
914
|
findOptions={findOptions}
|
|
915
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
891
916
|
styles={{}}
|
|
892
917
|
headerComponents={{}}
|
|
893
918
|
rowComponents={{}}
|
|
@@ -911,7 +936,7 @@ describe('DataGrid', () => {
|
|
|
911
936
|
|
|
912
937
|
describe('keyboard listener cleanup', () => {
|
|
913
938
|
it('should remove keyboard listener when component is disconnected', async () => {
|
|
914
|
-
await withTestGrid(async ({ injector, service, findOptions }) => {
|
|
939
|
+
await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
|
|
915
940
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
916
941
|
|
|
917
942
|
service.hasFocus.setValue(true)
|
|
@@ -925,6 +950,7 @@ describe('DataGrid', () => {
|
|
|
925
950
|
columns={['id', 'name']}
|
|
926
951
|
collectionService={service}
|
|
927
952
|
findOptions={findOptions}
|
|
953
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
928
954
|
styles={{}}
|
|
929
955
|
headerComponents={{}}
|
|
930
956
|
rowComponents={{}}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { FindOptions } from '@furystack/core'
|
|
2
2
|
import type { ChildrenList } from '@furystack/shades'
|
|
3
3
|
import { createComponent, Shade } from '@furystack/shades'
|
|
4
|
-
import type { ObservableValue } from '@furystack/utils'
|
|
5
4
|
import { ClickAwayService } from '../../services/click-away-service.js'
|
|
6
5
|
import type { CollectionService } from '../../services/collection-service.js'
|
|
7
6
|
import { cssVariableTheme } from '../../services/css-variable-theme.js'
|
|
@@ -62,7 +61,12 @@ export interface DataGridProps<T, Column extends string> {
|
|
|
62
61
|
/**
|
|
63
62
|
* The query settings to use for the data source
|
|
64
63
|
*/
|
|
65
|
-
findOptions:
|
|
64
|
+
findOptions: FindOptions<T, Array<keyof T>>
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Callback invoked when find options change (e.g. pagination, sorting, filtering)
|
|
68
|
+
*/
|
|
69
|
+
onFindOptionsChange: (options: FindOptions<T, Array<keyof T>>) => void
|
|
66
70
|
|
|
67
71
|
/**
|
|
68
72
|
* A list of custom header components to use
|
|
@@ -121,7 +125,7 @@ export const DataGrid: <T, Column extends string>(
|
|
|
121
125
|
props: DataGridProps<T, Column>,
|
|
122
126
|
children: ChildrenList,
|
|
123
127
|
) => JSX.Element<any> = Shade({
|
|
124
|
-
|
|
128
|
+
customElementName: 'shade-data-grid',
|
|
125
129
|
css: {
|
|
126
130
|
display: 'block',
|
|
127
131
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -156,6 +160,9 @@ export const DataGrid: <T, Column extends string>(
|
|
|
156
160
|
render: ({ props, useDisposable, useRef, useHostProps }) => {
|
|
157
161
|
const wrapperRef = useRef<HTMLDivElement>('gridWrapper')
|
|
158
162
|
|
|
163
|
+
const headerFindOptions = props.findOptions as FilterableFindOptions
|
|
164
|
+
const handleHeaderChange = props.onFindOptionsChange as (options: FilterableFindOptions) => void
|
|
165
|
+
|
|
159
166
|
useDisposable('keydown-handler', () => {
|
|
160
167
|
const listener = (ev: KeyboardEvent) => props.collectionService.handleKeyDown(ev)
|
|
161
168
|
window.addEventListener('keydown', listener)
|
|
@@ -190,12 +197,10 @@ export const DataGrid: <T, Column extends string>(
|
|
|
190
197
|
return (
|
|
191
198
|
<th style={props.styles?.header}>
|
|
192
199
|
{props.headerComponents?.[column]?.(column) || props.headerComponents?.default?.(column) || (
|
|
193
|
-
<DataGridHeader<
|
|
194
|
-
ReturnType<typeof props.collectionService.data.getValue>['entries'][number],
|
|
195
|
-
typeof column
|
|
196
|
-
>
|
|
200
|
+
<DataGridHeader<typeof column>
|
|
197
201
|
field={column}
|
|
198
|
-
findOptions={
|
|
202
|
+
findOptions={headerFindOptions}
|
|
203
|
+
onFindOptionsChange={handleHeaderChange}
|
|
199
204
|
filterConfig={props.columnFilters?.[column]}
|
|
200
205
|
/>
|
|
201
206
|
)}
|
|
@@ -222,6 +227,7 @@ export const DataGrid: <T, Column extends string>(
|
|
|
222
227
|
<DataGridFooter
|
|
223
228
|
service={props.collectionService}
|
|
224
229
|
findOptions={props.findOptions}
|
|
230
|
+
onFindOptionsChange={props.onFindOptionsChange}
|
|
225
231
|
paginationOptions={props.paginationOptions}
|
|
226
232
|
/>
|
|
227
233
|
</div>
|