@@ -66,6 +66,38 @@ const defaultColumns: ColumnDef<Person>[] = [
66
66
accessorKey : 'firstName' ,
67
67
} ,
68
68
]
69
+ const defaultPaginatedColumns : ColumnDef < Person > [ ] = [
70
+ {
71
+ id : 'select' ,
72
+ header : ( { table } ) => {
73
+ return (
74
+ < input
75
+ data-testid = "select-all-page"
76
+ aria-checked = { table . getIsSomePageRowsSelected ( ) ? 'mixed' : undefined }
77
+ type = "checkbox"
78
+ disabled
79
+ checked = { table . getIsAllPageRowsSelected ( ) }
80
+ onChange = { table . getToggleAllRowsSelectedHandler ( ) }
81
+ />
82
+ )
83
+ } ,
84
+ cell : ( { row } ) => {
85
+ return ( row . getCanSelect ( ) ? (
86
+ < input
87
+ data-testid = "select-single"
88
+ type = "checkbox"
89
+ disabled = { row . getCanSelect ( ) }
90
+ checked = { row . getIsSelected ( ) }
91
+ onChange = { row . getToggleSelectedHandler ( ) }
92
+ />
93
+ ) :null )
94
+ } ,
95
+ } ,
96
+ {
97
+ header : 'First Name' ,
98
+ accessorKey : 'firstName' ,
99
+ } ,
100
+ ]
69
101
70
102
const TableComponent : FC < { options ?: Partial < TableOptions < Person > > } > = ( {
71
103
options = { } ,
@@ -134,6 +166,46 @@ test(`Select all do not select rows which are not available for selection`, () =
134
166
expect ( title ) . not . toBePartiallyChecked ( )
135
167
expect ( notSelected ) . not . toBeChecked ( )
136
168
expect ( selected ) . not . toBeChecked ( )
169
+
170
+ } )
171
+
172
+ // issue #4757
173
+ test ( `Select all is unchecked for current page if all rows are not available for selection` , ( ) => {
174
+ let condition = row => row . original . age > 50 ;
175
+
176
+ const { rerender} = render (
177
+ < TableComponent
178
+ options = { {
179
+ columns : defaultPaginatedColumns ,
180
+ data : defaultData ,
181
+ enableRowSelection : condition
182
+ } }
183
+ />
184
+ )
185
+
186
+ expect ( screen . queryByTestId ( 'select-single' ) ) . not . toBeInTheDocument ( )
187
+ let selectedOnPage = screen . getByTestId ( 'select-all-page' )
188
+ expect ( selectedOnPage ) . not . toBeChecked ( )
189
+ expect ( selectedOnPage ) . not . toHaveAttribute ( 'aria-checked' , 'mixed' )
190
+
191
+ condition = row => row . original . age > 40 ;
192
+ rerender ( < TableComponent
193
+ options = { {
194
+ columns : defaultPaginatedColumns ,
195
+ data : defaultData ,
196
+ enableRowSelection : condition
197
+ } }
198
+ />
199
+ )
200
+
201
+ expect ( screen . queryByTestId ( 'select-single' ) ) . toBeInTheDocument ( )
202
+ selectedOnPage = screen . getByTestId ( 'select-all-page' )
203
+ expect ( selectedOnPage ) . not . toBeChecked ( )
204
+ expect ( selectedOnPage ) . not . toHaveAttribute ( 'aria-checked' , 'mixed' )
205
+
206
+ fireEvent . click ( screen . queryByTestId ( 'select-single' ) )
207
+ expect ( selectedOnPage ) . toBeChecked ( )
208
+
137
209
} )
138
210
139
211
test ( `Select all when all rows are available for selection` , ( ) => {
0 commit comments