@@ -706,10 +706,13 @@ class GridContainer extends BaseContainer {
706706 * @returns {* }
707707 */
708708 createColumns ( columns ) {
709- let me = this ,
710- { columnDefaults} = me ,
711- sorters = me . store ?. sorters ,
712- columnClass , renderer ;
709+ let me = this ,
710+ { columnDefaults} = me ,
711+ centerButtons = [ ] ,
712+ lockedEndButtons = [ ] ,
713+ lockedStartButtons = [ ] ,
714+ sorters = me . store ?. sorters ,
715+ buttonConfig , columnClass , renderer ;
713716
714717 if ( columns ) {
715718 if ( columnDefaults ) {
@@ -735,6 +738,16 @@ class GridContainer extends BaseContainer {
735738 scope : me
736739 } ;
737740
741+ buttonConfig = { ...column } ;
742+
743+ if ( column . locked === 'start' ) {
744+ lockedStartButtons . push ( buttonConfig ) ;
745+ } else if ( column . locked === 'end' ) {
746+ lockedEndButtons . push ( buttonConfig ) ;
747+ } else {
748+ centerButtons . push ( buttonConfig ) ;
749+ }
750+
738751 if ( column . component && ! column . type ) {
739752 column . type = 'component'
740753 }
@@ -758,7 +771,7 @@ class GridContainer extends BaseContainer {
758771 me . centerColumns = columns . filter ( c => ! c . locked ) ;
759772 me . lockedEndColumns = columns . filter ( c => c . locked === 'end' ) ;
760773
761- me . createOrUpdateSubGrids ( ) ;
774+ me . createOrUpdateSubGrids ( lockedStartButtons , centerButtons , lockedEndButtons ) ;
762775
763776 return me . _columns
764777 }
@@ -767,7 +780,7 @@ class GridContainer extends BaseContainer {
767780 me . centerColumns = columns . filter ( c => ! c . locked ) ;
768781 me . lockedEndColumns = columns . filter ( c => c . locked === 'end' ) ;
769782
770- me . createOrUpdateSubGrids ( ) ;
783+ me . createOrUpdateSubGrids ( lockedStartButtons , centerButtons , lockedEndButtons ) ;
771784
772785 return Neo . create ( Collection , {
773786 keyProperty : 'dataField' ,
@@ -777,15 +790,20 @@ class GridContainer extends BaseContainer {
777790 }
778791
779792 /**
793+ * @param {Object[] } [lockedStartButtons]
794+ * @param {Object[] } [centerButtons]
795+ * @param {Object[] } [lockedEndButtons]
780796 * @protected
781797 */
782- createOrUpdateSubGrids ( ) {
798+ createOrUpdateSubGrids ( lockedStartButtons , centerButtons , lockedEndButtons ) {
783799 let me = this ;
784800
785801 // --- Center (Default) ---
786802 if ( me . centerColumns . length > 0 ) {
787- me . headerToolbar . items = me . centerColumns ;
788- me . headerToolbar . createItems ( ) ;
803+ if ( centerButtons ) {
804+ me . headerToolbar . items = centerButtons ;
805+ me . headerToolbar . createItems ( ) ;
806+ }
789807 }
790808
791809 // --- Start (Left) ---
@@ -795,7 +813,7 @@ class GridContainer extends BaseContainer {
795813 ...me . headerToolbar . initialConfig ,
796814 flex : 'none' ,
797815 gridContainer : me ,
798- items : me . lockedStartColumns ,
816+ items : lockedStartButtons || [ ] ,
799817 layoutLock : 'start' ,
800818 parentId : me . headerWrapper . id ,
801819 theme : me . theme ,
@@ -810,8 +828,8 @@ class GridContainer extends BaseContainer {
810828 theme : me . theme ,
811829 windowId : me . windowId
812830 } ) ;
813- } else {
814- me . headerStart . items = me . lockedStartColumns ;
831+ } else if ( lockedStartButtons ) {
832+ me . headerStart . items = lockedStartButtons ;
815833 me . headerStart . createItems ( ) ;
816834 }
817835 } else if ( me . headerStart ) {
@@ -827,7 +845,7 @@ class GridContainer extends BaseContainer {
827845 ...me . headerToolbar . initialConfig ,
828846 flex : 'none' ,
829847 gridContainer : me ,
830- items : me . lockedEndColumns ,
848+ items : lockedEndButtons || [ ] ,
831849 layoutLock : 'end' ,
832850 parentId : me . headerWrapper . id ,
833851 theme : me . theme ,
@@ -842,8 +860,8 @@ class GridContainer extends BaseContainer {
842860 theme : me . theme ,
843861 windowId : me . windowId
844862 } ) ;
845- } else {
846- me . headerEnd . items = me . lockedEndColumns ;
863+ } else if ( lockedEndButtons ) {
864+ me . headerEnd . items = lockedEndButtons ;
847865 me . headerEnd . createItems ( ) ;
848866 }
849867 } else if ( me . headerEnd ) {
@@ -962,6 +980,19 @@ class GridContainer extends BaseContainer {
962980 return `${ this . id } __wrapper`
963981 }
964982
983+ /**
984+ * @param {String } dataField
985+ * @returns {Neo.grid.header.Button|null }
986+ * @protected
987+ */
988+ getButton ( dataField ) {
989+ let me = this ;
990+ return me . headerStart ?. getColumn ( dataField ) ||
991+ me . headerToolbar ?. getColumn ( dataField ) ||
992+ me . headerEnd ?. getColumn ( dataField ) ||
993+ null
994+ }
995+
965996 /**
966997 * @param {Object } data
967998 */
@@ -973,6 +1004,58 @@ class GridContainer extends BaseContainer {
9731004 me . lockedEndColumns = me . _columns . items . filter ( c => c . locked === 'end' ) ;
9741005
9751006 me . createOrUpdateSubGrids ( ) ;
1007+
1008+ me . lockedStartColumns . forEach ( ( col , targetIndex ) => {
1009+ let btn = me . getButton ( col . dataField ) ;
1010+
1011+ if ( btn ) {
1012+ if ( btn . parentId !== me . headerStart . id ) {
1013+ Neo . getComponent ( btn . parentId ) . remove ( btn , false ) ;
1014+ me . headerStart . add ( btn ) ;
1015+ }
1016+
1017+ let currentIndex = me . headerStart . indexOf ( btn ) ;
1018+
1019+ if ( currentIndex !== targetIndex ) {
1020+ me . headerStart . moveTo ( currentIndex , targetIndex )
1021+ }
1022+ }
1023+ } ) ;
1024+
1025+ me . centerColumns . forEach ( ( col , targetIndex ) => {
1026+ let btn = me . getButton ( col . dataField ) ;
1027+
1028+ if ( btn ) {
1029+ if ( btn . parentId !== me . headerToolbar . id ) {
1030+ Neo . getComponent ( btn . parentId ) . remove ( btn , false ) ;
1031+ me . headerToolbar . add ( btn ) ;
1032+ }
1033+
1034+ let currentIndex = me . headerToolbar . indexOf ( btn ) ;
1035+
1036+ if ( currentIndex !== targetIndex ) {
1037+ me . headerToolbar . moveTo ( currentIndex , targetIndex )
1038+ }
1039+ }
1040+ } ) ;
1041+
1042+ me . lockedEndColumns . forEach ( ( col , targetIndex ) => {
1043+ let btn = me . getButton ( col . dataField ) ;
1044+
1045+ if ( btn ) {
1046+ if ( btn . parentId !== me . headerEnd . id ) {
1047+ Neo . getComponent ( btn . parentId ) . remove ( btn , false ) ;
1048+ me . headerEnd . add ( btn ) ;
1049+ }
1050+
1051+ let currentIndex = me . headerEnd . indexOf ( btn ) ;
1052+
1053+ if ( currentIndex !== targetIndex ) {
1054+ me . headerEnd . moveTo ( currentIndex , targetIndex )
1055+ }
1056+ }
1057+ } ) ;
1058+
9761059 me . updateColCount ( )
9771060 }
9781061
0 commit comments