Skip to content

Commit 9b3aadf

Browse files
committed
support filtering when there are sections in gridlist
1 parent 058f820 commit 9b3aadf

File tree

5 files changed

+29
-20
lines changed

5 files changed

+29
-20
lines changed

packages/@react-aria/collections/src/BaseCollection.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ export class FilterLessNode<T> extends CollectionNode<T> {
9191
}
9292
}
9393

94-
export class LoaderNode extends FilterLessNode<any> {
94+
export class HeaderNode extends FilterLessNode<unknown> {
95+
static readonly type = 'header';
96+
}
97+
98+
export class LoaderNode extends FilterLessNode<unknown> {
9599
static readonly type = 'loader';
96100
}
97101

packages/@react-aria/collections/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
export {CollectionBuilder, Collection, createLeafComponent, createBranchComponent} from './CollectionBuilder';
1414
export {createHideableComponent, useIsHidden} from './Hidden';
1515
export {useCachedChildren} from './useCachedChildren';
16-
export {BaseCollection, CollectionNode, ItemNode, SectionNode, FilterLessNode, LoaderNode} from './BaseCollection';
16+
export {BaseCollection, CollectionNode, ItemNode, SectionNode, FilterLessNode, LoaderNode, HeaderNode} from './BaseCollection';
1717

1818
export type {CollectionBuilderProps, CollectionProps} from './CollectionBuilder';
1919
export type {CachedChildrenOptions} from './useCachedChildren';

packages/react-aria-components/src/GridList.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import {AriaGridListProps, DraggableItemResult, DragPreviewRenderer, DropIndicatorAria, DroppableCollectionResult, FocusScope, ListKeyboardDelegate, mergeProps, useCollator, useFocusRing, useGridList, useGridListItem, useGridListSection, useGridListSelectionCheckbox, useHover, useLocale, useVisuallyHidden} from 'react-aria';
1313
import {ButtonContext} from './Button';
1414
import {CheckboxContext} from './RSPContexts';
15-
import {Collection, CollectionBuilder, createBranchComponent, createLeafComponent, ItemNode, LoaderNode} from '@react-aria/collections';
15+
import {Collection, CollectionBuilder, createBranchComponent, createLeafComponent, HeaderNode, ItemNode, LoaderNode, SectionNode} from '@react-aria/collections';
1616
import {CollectionProps, CollectionRendererContext, DefaultCollectionRenderer, ItemRenderProps, SectionProps} from './Collection';
1717
import {ContextValue, DEFAULT_SLOT, Provider, RenderProps, SlotProps, StyleProps, StyleRenderProps, useContextProps, useRenderProps} from './utils';
1818
import {DragAndDropContext, DropIndicatorContext, DropIndicatorProps, useDndPersistedKeys, useRenderDropIndicator} from './DragAndDrop';
@@ -580,7 +580,7 @@ export interface GridListSectionProps<T> extends SectionProps<T> {}
580580
/**
581581
* A GridListSection represents a section within a GridList.
582582
*/
583-
export const GridListSection = /*#__PURE__*/ createBranchComponent('section', <T extends object>(props: GridListSectionProps<T>, ref: ForwardedRef<HTMLElement>, item: Node<T>) => {
583+
export const GridListSection = /*#__PURE__*/ createBranchComponent(SectionNode, <T extends object>(props: GridListSectionProps<T>, ref: ForwardedRef<HTMLElement>, item: Node<T>) => {
584584
let state = useContext(ListStateContext)!;
585585
let {CollectionBranch} = useContext(CollectionRendererContext);
586586
let headingRef = useRef(null);
@@ -617,7 +617,7 @@ export const GridListSection = /*#__PURE__*/ createBranchComponent('section', <T
617617

618618
const GridListHeaderContext = createContext<HTMLAttributes<HTMLElement> | null>(null);
619619

620-
export const GridListHeader = /*#__PURE__*/ createLeafComponent('header', function Header(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {
620+
export const GridListHeader = /*#__PURE__*/ createLeafComponent(HeaderNode, function Header(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {
621621
[props, ref] = useContextProps(props, ref, HeaderContext);
622622
let rowHeaderProps = useContext(GridListHeaderContext);
623623

packages/react-aria-components/src/Header.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,11 @@
1111
*/
1212

1313
import {ContextValue, useContextProps} from './utils';
14-
import {createLeafComponent, FilterLessNode} from '@react-aria/collections';
14+
import {createLeafComponent, HeaderNode} from '@react-aria/collections';
1515
import React, {createContext, ForwardedRef, HTMLAttributes} from 'react';
1616

1717
export const HeaderContext = createContext<ContextValue<HTMLAttributes<HTMLElement>, HTMLElement>>({});
1818

19-
class HeaderNode extends FilterLessNode<unknown> {
20-
static readonly type = 'header';
21-
}
22-
2319
export const Header = /*#__PURE__*/ createLeafComponent(HeaderNode, function Header(props: HTMLAttributes<HTMLElement>, ref: ForwardedRef<HTMLElement>) {
2420
[props, ref] = useContextProps(props, ref, HeaderContext);
2521
return (

packages/react-aria-components/stories/Autocomplete.stories.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import {action} from '@storybook/addon-actions';
14-
import {Autocomplete, Button, Cell, Collection, Column, DialogTrigger, GridList, Header, Input, Keyboard, Label, ListBox, ListBoxSection, ListLayout, Menu, MenuItem, MenuSection, MenuTrigger, OverlayArrow, Popover, Row, SearchField, Select, SelectValue, Separator, SubmenuTrigger, Table, TableBody, TableHeader, TableLayout, TagGroup, TagList, Text, TextArea, TextField, Tooltip, TooltipTrigger, Virtualizer} from 'react-aria-components';
14+
import {Autocomplete, Button, Cell, Collection, Column, DialogTrigger, GridList, GridListHeader, GridListSection, Header, Input, Keyboard, Label, ListBox, ListBoxSection, ListLayout, Menu, MenuItem, MenuSection, MenuTrigger, OverlayArrow, Popover, Row, SearchField, Select, SelectValue, Separator, SubmenuTrigger, Table, TableBody, TableHeader, TableLayout, TagGroup, TagList, Text, TextArea, TextField, Tooltip, TooltipTrigger, Virtualizer} from 'react-aria-components';
1515
import {LoadingSpinner, MyListBoxItem, MyMenuItem} from './utils';
1616
import {Meta, StoryObj} from '@storybook/react';
1717
import {MyCheckbox} from './Table.stories';
@@ -973,15 +973,24 @@ export const AutocompleteWithGridList = () => {
973973
className={styles.menu}
974974
style={{height: 200, width: 200}}
975975
aria-label="test gridlist">
976-
<MyGridListItem textValue="Foo">Foo <Button>Actions</Button></MyGridListItem>
977-
<MyGridListItem textValue="Bar">Bar <Button>Actions</Button></MyGridListItem>
978-
<MyGridListItem textValue="Baz">Baz <Button>Actions</Button></MyGridListItem>
979-
<MyGridListItem textValue="Charizard">Charizard<Button>Actions</Button></MyGridListItem>
980-
<MyGridListItem textValue="Blastoise">Blastoise <Button>Actions</Button></MyGridListItem>
981-
<MyGridListItem textValue="Pikachu">Pikachu <Button>Actions</Button></MyGridListItem>
982-
<MyGridListItem textValue="Venusaur">Venusaur<Button>Actions</Button></MyGridListItem>
983-
<MyGridListItem textValue="text value check">textValue is "text value check" <Button>Actions</Button></MyGridListItem>
984-
<MyGridListItem textValue="Blah">Blah <Button>Actions</Button></MyGridListItem>
976+
<GridListSection>
977+
<GridListHeader>Section 1</GridListHeader>
978+
<MyGridListItem textValue="Foo">Foo <Button>Actions</Button></MyGridListItem>
979+
<MyGridListItem textValue="Bar">Bar <Button>Actions</Button></MyGridListItem>
980+
<MyGridListItem textValue="Baz">Baz <Button>Actions</Button></MyGridListItem>
981+
</GridListSection>
982+
<GridListSection>
983+
<GridListHeader>Section 2</GridListHeader>
984+
<MyGridListItem textValue="Charizard">Charizard<Button>Actions</Button></MyGridListItem>
985+
<MyGridListItem textValue="Blastoise">Blastoise <Button>Actions</Button></MyGridListItem>
986+
<MyGridListItem textValue="Pikachu">Pikachu <Button>Actions</Button></MyGridListItem>
987+
<MyGridListItem textValue="Venusaur">Venusaur<Button>Actions</Button></MyGridListItem>
988+
</GridListSection>
989+
<GridListSection>
990+
<GridListHeader>Section 3</GridListHeader>
991+
<MyGridListItem textValue="text value check">textValue is "text value check" <Button>Actions</Button></MyGridListItem>
992+
<MyGridListItem textValue="Blah">Blah <Button>Actions</Button></MyGridListItem>
993+
</GridListSection>
985994
</GridList>
986995
</div>
987996
</AutocompleteWrapper>

0 commit comments

Comments
 (0)