@@ -44,6 +44,85 @@ describe('useListData', function () {
4444 expect ( result . current . selectedKeys ) . toEqual ( new Set ( [ 'Sam' , 'Julia' ] ) ) ;
4545 } ) ;
4646
47+ describe ( 'addKeysToSelection' , function ( ) {
48+ it ( 'should add selected keys' , function ( ) {
49+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : [ 'Sam' ] } ) ) ;
50+ let initialResult = result . current ;
51+
52+ act ( ( ) => {
53+ result . current . addKeysToSelection ( [ 'Julia' ] ) ;
54+ } ) ;
55+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
56+ expect ( result . current . selectedKeys ) . toEqual ( new Set ( [ 'Sam' , 'Julia' ] ) ) ;
57+ } ) ;
58+
59+ it ( 'should support adding "all" to selected keys' , function ( ) {
60+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : [ 'Sam' ] } ) ) ;
61+ let initialResult = result . current ;
62+
63+ act ( ( ) => {
64+ result . current . addKeysToSelection ( 'all' ) ;
65+ } ) ;
66+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
67+ expect ( result . current . selectedKeys ) . toEqual ( 'all' ) ;
68+ } ) ;
69+
70+ it ( 'should still return "all" if selected keys was already "all"' , function ( ) {
71+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : 'all' } ) ) ;
72+
73+ act ( ( ) => {
74+ result . current . addKeysToSelection ( [ 'Same' ] ) ;
75+ } ) ;
76+ expect ( result . current . selectedKeys ) . toEqual ( 'all' ) ;
77+ } ) ;
78+ } ) ;
79+
80+ describe ( 'removeKeysFromSelection' , function ( ) {
81+ it ( 'should remove all keys' , function ( ) {
82+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : [ 'Sam' , 'Julia' ] } ) ) ;
83+ let initialResult = result . current ;
84+
85+ act ( ( ) => {
86+ result . current . removeKeysFromSelection ( 'all' ) ;
87+ } ) ;
88+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
89+ expect ( result . current . selectedKeys ) . toEqual ( new Set ( ) ) ;
90+ } ) ;
91+
92+ it ( 'should remove the selected keys' , function ( ) {
93+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : [ 'Sam' , 'Julia' ] } ) ) ;
94+ let initialResult = result . current ;
95+
96+ act ( ( ) => {
97+ result . current . removeKeysFromSelection ( [ 'Sam' ] ) ;
98+ } ) ;
99+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
100+ expect ( result . current . selectedKeys ) . toEqual ( new Set ( [ 'Julia' ] ) ) ;
101+ } ) ;
102+
103+ it ( 'should remove the selected keys from an "all" set' , function ( ) {
104+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : 'all' } ) ) ;
105+ let initialResult = result . current ;
106+
107+ act ( ( ) => {
108+ result . current . removeKeysFromSelection ( [ 'Sam' , 'David' ] ) ;
109+ } ) ;
110+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
111+ expect ( result . current . selectedKeys ) . toEqual ( new Set ( [ 'Julia' ] ) ) ;
112+ } ) ;
113+
114+ it ( 'should support removing "all"' , function ( ) {
115+ let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey, initialSelectedKeys : [ 'Sam' , 'Julia' ] } ) ) ;
116+ let initialResult = result . current ;
117+
118+ act ( ( ) => {
119+ result . current . removeKeysFromSelection ( 'all' ) ;
120+ } ) ;
121+ expect ( result . current . selectedKeys ) . not . toBe ( initialResult . selectedKeys ) ;
122+ expect ( result . current . selectedKeys ) . toEqual ( new Set ( [ ] ) ) ;
123+ } ) ;
124+ } ) ;
125+
47126 it ( 'should get an item by key' , function ( ) {
48127 let { result} = renderHook ( ( ) => useListData ( { initialItems : initial , getKey} ) ) ;
49128 expect ( result . current . getItem ( 'Sam' ) ) . toBe ( initial [ 1 ] ) ;
0 commit comments