@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,6 +1,6 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject'
|
|
2
2
|
import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
|
|
3
|
-
import {
|
|
3
|
+
import { usingAsync } from '@furystack/utils'
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
5
5
|
import type { FilterableFindOptions } from '../data-grid.js'
|
|
6
6
|
import { NumberFilter } from './number-filter.js'
|
|
@@ -14,24 +14,32 @@ describe('NumberFilter', () => {
|
|
|
14
14
|
document.body.innerHTML = ''
|
|
15
15
|
})
|
|
16
16
|
|
|
17
|
-
const createFindOptions = (options: Partial<FilterableFindOptions> = {}):
|
|
18
|
-
return
|
|
17
|
+
const createFindOptions = (options: Partial<FilterableFindOptions> = {}): FilterableFindOptions => {
|
|
18
|
+
return options as FilterableFindOptions
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const renderNumberFilter = async (
|
|
22
|
-
findOptions:
|
|
22
|
+
findOptions: FilterableFindOptions,
|
|
23
23
|
field = 'level',
|
|
24
24
|
onClose = vi.fn(),
|
|
25
|
+
onFindOptionsChange = vi.fn(),
|
|
25
26
|
) => {
|
|
26
27
|
const injector = new Injector()
|
|
27
28
|
const rootElement = document.getElementById('root')!
|
|
28
29
|
initializeShadeRoot({
|
|
29
30
|
injector,
|
|
30
31
|
rootElement,
|
|
31
|
-
jsxElement:
|
|
32
|
+
jsxElement: (
|
|
33
|
+
<NumberFilter
|
|
34
|
+
field={field}
|
|
35
|
+
findOptions={findOptions}
|
|
36
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
37
|
+
onClose={onClose}
|
|
38
|
+
/>
|
|
39
|
+
),
|
|
32
40
|
})
|
|
33
41
|
await flushUpdates()
|
|
34
|
-
return { injector, onClose }
|
|
42
|
+
return { injector, onClose, onFindOptionsChange }
|
|
35
43
|
}
|
|
36
44
|
|
|
37
45
|
it('should render operator segmented control and input', async () => {
|
|
@@ -47,7 +55,7 @@ describe('NumberFilter', () => {
|
|
|
47
55
|
|
|
48
56
|
it('should apply $eq filter on submit', async () => {
|
|
49
57
|
const findOptions = createFindOptions()
|
|
50
|
-
const { injector, onClose } = await renderNumberFilter(findOptions)
|
|
58
|
+
const { injector, onClose, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
51
59
|
await usingAsync(injector, async () => {
|
|
52
60
|
const input = document.querySelector('[data-testid="number-filter-value"]') as HTMLInputElement
|
|
53
61
|
input.value = '42'
|
|
@@ -57,14 +65,14 @@ describe('NumberFilter', () => {
|
|
|
57
65
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
58
66
|
await flushUpdates()
|
|
59
67
|
|
|
60
|
-
expect(
|
|
68
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ filter: { level: { $eq: 42 } } }))
|
|
61
69
|
expect(onClose).toHaveBeenCalled()
|
|
62
70
|
})
|
|
63
71
|
})
|
|
64
72
|
|
|
65
73
|
it('should apply $gt operator when selected', async () => {
|
|
66
74
|
const findOptions = createFindOptions()
|
|
67
|
-
const { injector, onClose } = await renderNumberFilter(findOptions)
|
|
75
|
+
const { injector, onClose, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
68
76
|
await usingAsync(injector, async () => {
|
|
69
77
|
const gtButton = document.querySelector('shade-segmented-control button[data-value="$gt"]') as HTMLButtonElement
|
|
70
78
|
gtButton?.click()
|
|
@@ -78,14 +86,14 @@ describe('NumberFilter', () => {
|
|
|
78
86
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
79
87
|
await flushUpdates()
|
|
80
88
|
|
|
81
|
-
expect(
|
|
89
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ filter: { level: { $gt: 10 } } }))
|
|
82
90
|
expect(onClose).toHaveBeenCalled()
|
|
83
91
|
})
|
|
84
92
|
})
|
|
85
93
|
|
|
86
94
|
it('should apply $lte operator when selected', async () => {
|
|
87
95
|
const findOptions = createFindOptions()
|
|
88
|
-
const { injector, onClose } = await renderNumberFilter(findOptions)
|
|
96
|
+
const { injector, onClose, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
89
97
|
await usingAsync(injector, async () => {
|
|
90
98
|
const lteButton = document.querySelector('shade-segmented-control button[data-value="$lte"]') as HTMLButtonElement
|
|
91
99
|
lteButton?.click()
|
|
@@ -99,27 +107,28 @@ describe('NumberFilter', () => {
|
|
|
99
107
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
100
108
|
await flushUpdates()
|
|
101
109
|
|
|
102
|
-
expect(
|
|
110
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ filter: { level: { $lte: 99.5 } } }))
|
|
103
111
|
expect(onClose).toHaveBeenCalled()
|
|
104
112
|
})
|
|
105
113
|
})
|
|
106
114
|
|
|
107
115
|
it('should clear filter when Clear button is clicked', async () => {
|
|
108
116
|
const findOptions = createFindOptions({ filter: { level: { $eq: 5 } } })
|
|
109
|
-
const { injector, onClose } = await renderNumberFilter(findOptions)
|
|
117
|
+
const { injector, onClose, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
110
118
|
await usingAsync(injector, async () => {
|
|
111
119
|
const clearButton = Array.from(document.querySelectorAll('button')).find((b) => b.textContent?.trim() === 'Clear')
|
|
112
120
|
clearButton?.click()
|
|
113
121
|
await flushUpdates()
|
|
114
122
|
|
|
115
|
-
|
|
123
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
124
|
+
expect(updatedOptions.filter?.level).toBeUndefined()
|
|
116
125
|
expect(onClose).toHaveBeenCalled()
|
|
117
126
|
})
|
|
118
127
|
})
|
|
119
128
|
|
|
120
129
|
it('should remove filter when submitting NaN value', async () => {
|
|
121
130
|
const findOptions = createFindOptions({ filter: { level: { $eq: 5 } } })
|
|
122
|
-
const { injector, onClose } = await renderNumberFilter(findOptions)
|
|
131
|
+
const { injector, onClose, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
123
132
|
await usingAsync(injector, async () => {
|
|
124
133
|
const input = document.querySelector('[data-testid="number-filter-value"]') as HTMLInputElement
|
|
125
134
|
input.value = ''
|
|
@@ -129,28 +138,29 @@ describe('NumberFilter', () => {
|
|
|
129
138
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
130
139
|
await flushUpdates()
|
|
131
140
|
|
|
132
|
-
|
|
141
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
142
|
+
expect(updatedOptions.filter?.level).toBeUndefined()
|
|
133
143
|
expect(onClose).toHaveBeenCalled()
|
|
134
144
|
})
|
|
135
145
|
})
|
|
136
146
|
|
|
137
147
|
it('should preserve filters on other fields', async () => {
|
|
138
148
|
const findOptions = createFindOptions({ filter: { level: { $gt: 10 }, name: { $regex: 'keep' } } })
|
|
139
|
-
const { injector } = await renderNumberFilter(findOptions)
|
|
149
|
+
const { injector, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
140
150
|
await usingAsync(injector, async () => {
|
|
141
151
|
const clearButton = Array.from(document.querySelectorAll('button')).find((b) => b.textContent?.trim() === 'Clear')
|
|
142
152
|
clearButton?.click()
|
|
143
153
|
await flushUpdates()
|
|
144
154
|
|
|
145
|
-
const
|
|
146
|
-
expect(
|
|
147
|
-
expect(
|
|
155
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
156
|
+
expect(updatedOptions.filter?.level).toBeUndefined()
|
|
157
|
+
expect(updatedOptions.filter?.name).toEqual({ $regex: 'keep' })
|
|
148
158
|
})
|
|
149
159
|
})
|
|
150
160
|
|
|
151
161
|
it('should reset skip to 0 when applying filter', async () => {
|
|
152
162
|
const findOptions = createFindOptions({ skip: 20 })
|
|
153
|
-
const { injector } = await renderNumberFilter(findOptions)
|
|
163
|
+
const { injector, onFindOptionsChange } = await renderNumberFilter(findOptions)
|
|
154
164
|
await usingAsync(injector, async () => {
|
|
155
165
|
const input = document.querySelector('[data-testid="number-filter-value"]') as HTMLInputElement
|
|
156
166
|
input.value = '5'
|
|
@@ -160,7 +170,7 @@ describe('NumberFilter', () => {
|
|
|
160
170
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
161
171
|
await flushUpdates()
|
|
162
172
|
|
|
163
|
-
expect(
|
|
173
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ skip: 0 }))
|
|
164
174
|
})
|
|
165
175
|
})
|
|
166
176
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createComponent, Shade } from '@furystack/shades'
|
|
2
|
-
import type { ObservableValue } from '@furystack/utils'
|
|
3
2
|
import { Button } from '../../button.js'
|
|
4
3
|
import { SegmentedControl } from '../../button-group.js'
|
|
5
4
|
import { Icon } from '../../icons/icon.js'
|
|
@@ -20,17 +19,18 @@ const operatorLabels: Record<NumberOperator, string> = {
|
|
|
20
19
|
|
|
21
20
|
export const NumberFilter = Shade<{
|
|
22
21
|
field: string
|
|
23
|
-
findOptions:
|
|
22
|
+
findOptions: FilterableFindOptions
|
|
23
|
+
onFindOptionsChange: (options: FilterableFindOptions) => void
|
|
24
24
|
onClose: () => void
|
|
25
25
|
}>({
|
|
26
|
-
|
|
26
|
+
customElementName: 'data-grid-number-filter',
|
|
27
27
|
css: {
|
|
28
28
|
...filterBaseCss,
|
|
29
29
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
30
30
|
'& input': filterInputCss,
|
|
31
31
|
},
|
|
32
|
-
render: ({ props,
|
|
33
|
-
const
|
|
32
|
+
render: ({ props, useState }) => {
|
|
33
|
+
const { findOptions } = props
|
|
34
34
|
|
|
35
35
|
const currentFilter = findOptions.filter?.[props.field] as Record<string, number> | undefined
|
|
36
36
|
const currentOperator: NumberOperator = currentFilter
|
|
@@ -46,14 +46,14 @@ export const NumberFilter = Shade<{
|
|
|
46
46
|
} else {
|
|
47
47
|
filter[props.field] = { [operator]: num }
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
props.onFindOptionsChange({ ...findOptions, filter, skip: 0 })
|
|
50
50
|
props.onClose()
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
const clearFilter = () => {
|
|
54
54
|
const filter = { ...findOptions.filter }
|
|
55
55
|
delete filter[props.field]
|
|
56
|
-
|
|
56
|
+
props.onFindOptionsChange({ ...findOptions, filter, skip: 0 })
|
|
57
57
|
props.onClose()
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject'
|
|
2
2
|
import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
|
|
3
|
-
import {
|
|
3
|
+
import { usingAsync } from '@furystack/utils'
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
5
5
|
import type { FilterableFindOptions } from '../data-grid.js'
|
|
6
6
|
import { StringFilter } from './string-filter.js'
|
|
@@ -14,24 +14,32 @@ describe('StringFilter', () => {
|
|
|
14
14
|
document.body.innerHTML = ''
|
|
15
15
|
})
|
|
16
16
|
|
|
17
|
-
const createFindOptions = (options: Partial<FilterableFindOptions> = {}):
|
|
18
|
-
return
|
|
17
|
+
const createFindOptions = (options: Partial<FilterableFindOptions> = {}): FilterableFindOptions => {
|
|
18
|
+
return options as FilterableFindOptions
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const renderStringFilter = async (
|
|
22
|
-
findOptions:
|
|
22
|
+
findOptions: FilterableFindOptions,
|
|
23
23
|
field = 'name',
|
|
24
24
|
onClose = vi.fn(),
|
|
25
|
+
onFindOptionsChange = vi.fn(),
|
|
25
26
|
) => {
|
|
26
27
|
const injector = new Injector()
|
|
27
28
|
const rootElement = document.getElementById('root')!
|
|
28
29
|
initializeShadeRoot({
|
|
29
30
|
injector,
|
|
30
31
|
rootElement,
|
|
31
|
-
jsxElement:
|
|
32
|
+
jsxElement: (
|
|
33
|
+
<StringFilter
|
|
34
|
+
field={field}
|
|
35
|
+
findOptions={findOptions}
|
|
36
|
+
onFindOptionsChange={onFindOptionsChange}
|
|
37
|
+
onClose={onClose}
|
|
38
|
+
/>
|
|
39
|
+
),
|
|
32
40
|
})
|
|
33
41
|
await flushUpdates()
|
|
34
|
-
return { injector, onClose }
|
|
42
|
+
return { injector, onClose, onFindOptionsChange }
|
|
35
43
|
}
|
|
36
44
|
|
|
37
45
|
it('should render operator segmented control and input', async () => {
|
|
@@ -47,7 +55,7 @@ describe('StringFilter', () => {
|
|
|
47
55
|
|
|
48
56
|
it('should apply $regex filter on submit', async () => {
|
|
49
57
|
const findOptions = createFindOptions()
|
|
50
|
-
const { injector, onClose } = await renderStringFilter(findOptions)
|
|
58
|
+
const { injector, onClose, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
51
59
|
await usingAsync(injector, async () => {
|
|
52
60
|
const input = document.querySelector('[data-testid="string-filter-value"]') as HTMLInputElement
|
|
53
61
|
input.value = 'test-value'
|
|
@@ -57,27 +65,30 @@ describe('StringFilter', () => {
|
|
|
57
65
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
58
66
|
await flushUpdates()
|
|
59
67
|
|
|
60
|
-
expect(
|
|
68
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(
|
|
69
|
+
expect.objectContaining({ filter: { name: { $regex: 'test-value' } } }),
|
|
70
|
+
)
|
|
61
71
|
expect(onClose).toHaveBeenCalled()
|
|
62
72
|
})
|
|
63
73
|
})
|
|
64
74
|
|
|
65
75
|
it('should clear filter when Clear button is clicked', async () => {
|
|
66
76
|
const findOptions = createFindOptions({ filter: { name: { $regex: 'existing' } } })
|
|
67
|
-
const { injector, onClose } = await renderStringFilter(findOptions)
|
|
77
|
+
const { injector, onClose, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
68
78
|
await usingAsync(injector, async () => {
|
|
69
79
|
const clearButton = Array.from(document.querySelectorAll('button')).find((b) => b.textContent?.trim() === 'Clear')
|
|
70
80
|
clearButton?.click()
|
|
71
81
|
await flushUpdates()
|
|
72
82
|
|
|
73
|
-
|
|
83
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
84
|
+
expect(updatedOptions.filter?.name).toBeUndefined()
|
|
74
85
|
expect(onClose).toHaveBeenCalled()
|
|
75
86
|
})
|
|
76
87
|
})
|
|
77
88
|
|
|
78
89
|
it('should remove filter when submitting empty value', async () => {
|
|
79
90
|
const findOptions = createFindOptions({ filter: { name: { $regex: 'existing' } } })
|
|
80
|
-
const { injector, onClose } = await renderStringFilter(findOptions)
|
|
91
|
+
const { injector, onClose, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
81
92
|
await usingAsync(injector, async () => {
|
|
82
93
|
const input = document.querySelector('[data-testid="string-filter-value"]') as HTMLInputElement
|
|
83
94
|
input.value = ''
|
|
@@ -87,14 +98,15 @@ describe('StringFilter', () => {
|
|
|
87
98
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
88
99
|
await flushUpdates()
|
|
89
100
|
|
|
90
|
-
|
|
101
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
102
|
+
expect(updatedOptions.filter?.name).toBeUndefined()
|
|
91
103
|
expect(onClose).toHaveBeenCalled()
|
|
92
104
|
})
|
|
93
105
|
})
|
|
94
106
|
|
|
95
107
|
it('should preserve filters on other fields', async () => {
|
|
96
108
|
const findOptions = createFindOptions({ filter: { name: { $regex: 'old' }, email: { $regex: 'keep' } } })
|
|
97
|
-
const { injector } = await renderStringFilter(findOptions)
|
|
109
|
+
const { injector, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
98
110
|
await usingAsync(injector, async () => {
|
|
99
111
|
const input = document.querySelector('[data-testid="string-filter-value"]') as HTMLInputElement
|
|
100
112
|
input.value = 'new-value'
|
|
@@ -104,15 +116,15 @@ describe('StringFilter', () => {
|
|
|
104
116
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
105
117
|
await flushUpdates()
|
|
106
118
|
|
|
107
|
-
const
|
|
108
|
-
expect(
|
|
109
|
-
expect(
|
|
119
|
+
const updatedOptions = onFindOptionsChange.mock.lastCall?.[0] as FilterableFindOptions
|
|
120
|
+
expect(updatedOptions.filter?.name).toEqual({ $regex: 'new-value' })
|
|
121
|
+
expect(updatedOptions.filter?.email).toEqual({ $regex: 'keep' })
|
|
110
122
|
})
|
|
111
123
|
})
|
|
112
124
|
|
|
113
125
|
it('should apply selected operator', async () => {
|
|
114
126
|
const findOptions = createFindOptions()
|
|
115
|
-
const { injector, onClose } = await renderStringFilter(findOptions)
|
|
127
|
+
const { injector, onClose, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
116
128
|
await usingAsync(injector, async () => {
|
|
117
129
|
const eqButton = document.querySelector('shade-segmented-control button[data-value="$eq"]') as HTMLButtonElement
|
|
118
130
|
eqButton?.click()
|
|
@@ -126,14 +138,14 @@ describe('StringFilter', () => {
|
|
|
126
138
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
127
139
|
await flushUpdates()
|
|
128
140
|
|
|
129
|
-
expect(
|
|
141
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ filter: { name: { $eq: 'exact' } } }))
|
|
130
142
|
expect(onClose).toHaveBeenCalled()
|
|
131
143
|
})
|
|
132
144
|
})
|
|
133
145
|
|
|
134
146
|
it('should reset skip to 0 when applying filter', async () => {
|
|
135
147
|
const findOptions = createFindOptions({ skip: 20 })
|
|
136
|
-
const { injector } = await renderStringFilter(findOptions)
|
|
148
|
+
const { injector, onFindOptionsChange } = await renderStringFilter(findOptions)
|
|
137
149
|
await usingAsync(injector, async () => {
|
|
138
150
|
const input = document.querySelector('[data-testid="string-filter-value"]') as HTMLInputElement
|
|
139
151
|
input.value = 'test'
|
|
@@ -143,7 +155,7 @@ describe('StringFilter', () => {
|
|
|
143
155
|
form.dispatchEvent(new Event('submit', { bubbles: true }))
|
|
144
156
|
await flushUpdates()
|
|
145
157
|
|
|
146
|
-
expect(
|
|
158
|
+
expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ skip: 0 }))
|
|
147
159
|
})
|
|
148
160
|
})
|
|
149
161
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createComponent, Shade } from '@furystack/shades'
|
|
2
|
-
import type { ObservableValue } from '@furystack/utils'
|
|
3
2
|
import { Button } from '../../button.js'
|
|
4
3
|
import { SegmentedControl } from '../../button-group.js'
|
|
5
4
|
import { Icon } from '../../icons/icon.js'
|
|
@@ -19,17 +18,18 @@ const operatorLabels: Record<StringOperator, string> = {
|
|
|
19
18
|
|
|
20
19
|
export const StringFilter = Shade<{
|
|
21
20
|
field: string
|
|
22
|
-
findOptions:
|
|
21
|
+
findOptions: FilterableFindOptions
|
|
22
|
+
onFindOptionsChange: (options: FilterableFindOptions) => void
|
|
23
23
|
onClose: () => void
|
|
24
24
|
}>({
|
|
25
|
-
|
|
25
|
+
customElementName: 'data-grid-string-filter',
|
|
26
26
|
css: {
|
|
27
27
|
...filterBaseCss,
|
|
28
28
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
29
29
|
'& input': filterInputCss,
|
|
30
30
|
},
|
|
31
|
-
render: ({ props,
|
|
32
|
-
const
|
|
31
|
+
render: ({ props, useState }) => {
|
|
32
|
+
const { findOptions } = props
|
|
33
33
|
|
|
34
34
|
const currentFilter = findOptions.filter?.[props.field] as Record<string, string> | undefined
|
|
35
35
|
const currentOperator: StringOperator = currentFilter
|
|
@@ -44,14 +44,14 @@ export const StringFilter = Shade<{
|
|
|
44
44
|
} else {
|
|
45
45
|
filter[props.field] = { [operator]: value }
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
props.onFindOptionsChange({ ...findOptions, filter, skip: 0 })
|
|
48
48
|
props.onClose()
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
const clearFilter = () => {
|
|
52
52
|
const filter = { ...findOptions.filter }
|
|
53
53
|
delete filter[props.field]
|
|
54
|
-
|
|
54
|
+
props.onFindOptionsChange({ ...findOptions, filter, skip: 0 })
|
|
55
55
|
props.onClose()
|
|
56
56
|
}
|
|
57
57
|
|