Skip to content

Commit 098490d

Browse files
committed
fix: Grid Multi-Body Architecture Type Desynchronization (#9486)
1 parent e4a00df commit 098490d

1 file changed

Lines changed: 98 additions & 15 deletions

File tree

src/grid/Container.mjs

Lines changed: 98 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)