1+ /* eslint camelcase: 0 */
12/* eslint react/require-default-props: 0 */
23import React from 'react' ;
34import PropTypes from 'prop-types' ;
@@ -19,26 +20,25 @@ export default (
1920 dataField : PropTypes . string . isRequired ,
2021 order : PropTypes . oneOf ( [ Const . SORT_DESC , Const . SORT_ASC ] ) . isRequired
2122 } ) ) ,
23+ sort : PropTypes . shape ( {
24+ dataField : PropTypes . string ,
25+ order : PropTypes . oneOf ( [ Const . SORT_DESC , Const . SORT_ASC ] )
26+ } ) ,
2227 defaultSortDirection : PropTypes . oneOf ( [ Const . SORT_DESC , Const . SORT_ASC ] )
2328 }
2429
2530 constructor ( props ) {
2631 super ( props ) ;
2732 let sortOrder ;
2833 let sortColumn ;
29- const { columns , defaultSorted, defaultSortDirection } = props ;
34+ const { defaultSorted, defaultSortDirection, sort } = props ;
3035
3136 if ( defaultSorted && defaultSorted . length > 0 ) {
32- const sortField = defaultSorted [ 0 ] . dataField ;
3337 sortOrder = defaultSorted [ 0 ] . order || defaultSortDirection ;
34- const sortColumns = columns . filter ( col => col . dataField === sortField ) ;
35- if ( sortColumns . length > 0 ) {
36- sortColumn = sortColumns [ 0 ] ;
37-
38- if ( sortColumn . onSort ) {
39- sortColumn . onSort ( sortField , sortOrder ) ;
40- }
41- }
38+ sortColumn = this . initSort ( defaultSorted [ 0 ] . dataField , sortOrder ) ;
39+ } else if ( sort && sort . dataField && sort . order ) {
40+ sortOrder = sort . order ;
41+ sortColumn = this . initSort ( sort . dataField , sortOrder ) ;
4242 }
4343 this . state = { sortOrder, sortColumn } ;
4444 }
@@ -50,6 +50,30 @@ export default (
5050 }
5151 }
5252
53+ UNSAFE_componentWillReceiveProps ( nextProps ) {
54+ const { sort, columns } = nextProps ;
55+ if ( sort && sort . dataField && sort . order ) {
56+ this . setState ( {
57+ sortOrder : sort . order ,
58+ sortColumn : columns . find ( col => col . dataField === sort . dataField )
59+ } ) ;
60+ }
61+ }
62+
63+ initSort ( sortField , sortOrder ) {
64+ let sortColumn ;
65+ const { columns } = this . props ;
66+ const sortColumns = columns . filter ( col => col . dataField === sortField ) ;
67+ if ( sortColumns . length > 0 ) {
68+ sortColumn = sortColumns [ 0 ] ;
69+
70+ if ( sortColumn . onSort ) {
71+ sortColumn . onSort ( sortField , sortOrder ) ;
72+ }
73+ }
74+ return sortColumn ;
75+ }
76+
5377 handleSort = ( column ) => {
5478 const sortOrder = dataOperator . nextOrder ( column , this . state , this . props . defaultSortDirection ) ;
5579
0 commit comments