@@ -9,6 +9,7 @@ import { IGroupsItems } from './IListView';
9
9
import * as telemetry from '../../common/telemetry' ;
10
10
import filter = require( 'lodash/filter' ) ;
11
11
import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox' ;
12
+ import { Guid } from '@microsoft/sp-core-library' ;
12
13
13
14
/**
14
15
* File type icon component
@@ -58,10 +59,10 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
58
59
* @param prevState
59
60
*/
60
61
public componentDidUpdate ( prevProps : IListViewProps , prevState : IListViewState ) : void {
61
- // select default items
62
- this . _setSelectedItems ( ) ;
63
62
64
63
if ( ! isEqual ( prevProps , this . props ) ) {
64
+ // select default items
65
+ this . _setSelectedItems ( ) ;
65
66
// Reset the selected items
66
67
if ( this . _selection ) {
67
68
this . _selection . setItems ( this . props . items , true ) ;
@@ -244,7 +245,7 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
244
245
* @param item
245
246
*/
246
247
private _flattenItem ( item : any ) : any {
247
- let flatItem = { } ;
248
+ let flatItem : any = { } ;
248
249
for ( let parentPropName in item ) {
249
250
// Check if property already exists
250
251
if ( ! item . hasOwnProperty ( parentPropName ) ) continue ;
@@ -261,6 +262,15 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
261
262
flatItem [ parentPropName ] = item [ parentPropName ] ;
262
263
}
263
264
}
265
+
266
+ if ( ! flatItem . key ) {
267
+ flatItem . key = flatItem . ID || flatItem . Id ;
268
+
269
+ if ( ! flatItem . key ) {
270
+ flatItem . key = Guid . newGuid ( ) . toString ( ) ;
271
+ }
272
+ }
273
+
264
274
return flatItem ;
265
275
}
266
276
@@ -406,20 +416,6 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
406
416
const ascItems = sortBy ( items , [ columnName ] ) ;
407
417
const sortedItems = descending ? ascItems . reverse ( ) : ascItems ;
408
418
409
- // Check if selection needs to be updated
410
- if ( this . _selection ) {
411
- const selection = this . _selection . getSelection ( ) ;
412
- if ( selection && selection . length > 0 ) {
413
- // Clear selection
414
- this . _selection . setItems ( [ ] , true ) ;
415
- setTimeout ( ( ) => {
416
- // Find new index
417
- let idxs : number [ ] = selection . map ( item => findIndex ( sortedItems , item ) ) ;
418
- idxs . forEach ( idx => this . _selection . setIndexSelected ( idx , true , false ) ) ;
419
- } , 0 ) ;
420
- }
421
- }
422
-
423
419
// Return the sorted items list
424
420
return sortedItems ;
425
421
}
@@ -430,7 +426,7 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
430
426
* @param items
431
427
* @param columns
432
428
*/
433
- private _executeFiltering ( filterValue : string , items : any [ ] , columns : IColumn [ ] ) : any [ ] {
429
+ private _executeFiltering ( filterValue : string , items : any [ ] , columns : IColumn [ ] ) : any [ ] {
434
430
const filterSeparator = ":" ;
435
431
436
432
let filterColumns = [ ...columns ] ;
@@ -517,14 +513,15 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
517
513
return (
518
514
< div >
519
515
{
520
- showFilter && < SearchBox placeholder = { filterPlaceHolder || strings . ListViewFilterLabel } onSearch = { this . _updateFilterValue } onChange = { this . _updateFilterValue } value = { filterValue } />
516
+ showFilter && < SearchBox placeholder = { filterPlaceHolder || strings . ListViewFilterLabel } onSearch = { this . _updateFilterValue } onChange = { this . _updateFilterValue } value = { filterValue } />
521
517
}
522
518
< DetailsList
523
519
key = "ListViewControl"
524
520
items = { items }
525
521
columns = { this . state . columns }
526
522
groups = { this . state . groups }
527
523
selectionMode = { this . props . selectionMode || SelectionMode . none }
524
+ selectionPreservedOnEmptyClick = { true }
528
525
selection = { this . _selection }
529
526
layoutMode = { DetailsListLayoutMode . justified }
530
527
compact = { this . props . compact }
0 commit comments