From 8e31078f57ea8e711c757cabb636d6edb309000c Mon Sep 17 00:00:00 2001 From: yell Date: Wed, 15 Sep 2021 10:52:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[#888]=20Grid=20Virtual=20scroll=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?#################=20-=20Grid=EC=9D=98=20bodyEl.clientHeight=20?= =?UTF-8?q?=EA=B0=80=200=20=EC=9D=B4=20=EC=95=84=EB=8B=8C=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20Virtual=20scroll=20=EA=B3=84=EC=82=B0=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/grid/Grid.vue | 1 + src/components/grid/uses.js | 68 ++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/components/grid/Grid.vue b/src/components/grid/Grid.vue index fc670886f..e0be118f9 100644 --- a/src/components/grid/Grid.vue +++ b/src/components/grid/Grid.vue @@ -443,6 +443,7 @@ export default { stores, sortInfo, filterInfo, + elementInfo, setSort, setFilter, updateVScroll, diff --git a/src/components/grid/uses.js b/src/components/grid/uses.js index f9c0eb47c..dc01fdbb6 100644 --- a/src/components/grid/uses.js +++ b/src/components/grid/uses.js @@ -1,4 +1,4 @@ -import { getCurrentInstance } from 'vue'; +import { getCurrentInstance, nextTick } from 'vue'; import { isEqual, uniqBy } from 'lodash-es'; import { numberWithComma } from '@/common/utils'; @@ -114,7 +114,7 @@ export const scrollEvent = (params) => { const isHorizontal = !(scrollLeft === lastLeft); const isVertical = !(scrollTop === lastTop); - if (isVertical) { + if (isVertical && bodyEl.clientHeight) { updateVScroll(); } @@ -236,7 +236,9 @@ export const resizeEvent = (params) => { } calculatedColumn(); - updateVScroll(); + if (elementInfo.body?.clientHeight) { + updateVScroll(); + } }; /** * column resize 이벤트를 처리한다. @@ -762,6 +764,7 @@ export const storeEvent = (params) => { stores, sortInfo, filterInfo, + elementInfo, setSort, setFilter, updateVScroll, @@ -773,44 +776,47 @@ export const storeEvent = (params) => { * @param {boolean} makeIndex - 인덱스 생성 유무 */ const setStore = (value, makeIndex = true) => { - const store = []; - let checked; - let selected = false; + nextTick(() => { + const store = []; + let checked; + let selected = false; + + if (makeIndex) { + let hasUnChecked = false; + + for (let ix = 0; ix < value.length; ix++) { + checked = props.checked.includes(value[ix]); + if (!checked) { + hasUnChecked = true; + } - if (makeIndex) { - let hasUnChecked = false; + if (!selected && isEqual(selectInfo.selectedRow, value[ix])) { + selectInfo.selectedRow = value[ix]; + selected = true; + } - for (let ix = 0; ix < value.length; ix++) { - checked = props.checked.includes(value[ix]); - if (!checked) { - hasUnChecked = true; + store.push([ix, checked, value[ix]]); } - if (!selected && isEqual(selectInfo.selectedRow, value[ix])) { - selectInfo.selectedRow = value[ix]; - selected = true; + if (!selected) { + selectInfo.selectedRow = []; } - store.push([ix, checked, value[ix]]); + checkInfo.isHeaderChecked = value.length > 0 ? !hasUnChecked : false; + stores.originStore = store; } - if (!selected) { - selectInfo.selectedRow = []; + if (filterInfo.isFiltering) { + setFilter(); } - checkInfo.isHeaderChecked = value.length > 0 ? !hasUnChecked : false; - stores.originStore = store; - } - - if (filterInfo.isFiltering) { - setFilter(); - } - - if (sortInfo.sortField) { - setSort(); - } - - updateVScroll(); + if (sortInfo.sortField) { + setSort(); + } + if (elementInfo.body?.clientHeight) { + updateVScroll(); + } + }); }; /** * 컴포넌트의 변경 데이터를 store에 업데이트한다. From d20481fbfb0ea3cb3ddf660daa68383587e11e79 Mon Sep 17 00:00:00 2001 From: yell Date: Wed, 15 Sep 2021 10:59:10 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[#888]=20Grid=20Virtual=20scroll=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?#################?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/grid/uses.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/grid/uses.js b/src/components/grid/uses.js index dc01fdbb6..8c6aa546a 100644 --- a/src/components/grid/uses.js +++ b/src/components/grid/uses.js @@ -780,7 +780,6 @@ export const storeEvent = (params) => { const store = []; let checked; let selected = false; - if (makeIndex) { let hasUnChecked = false; @@ -805,11 +804,9 @@ export const storeEvent = (params) => { checkInfo.isHeaderChecked = value.length > 0 ? !hasUnChecked : false; stores.originStore = store; } - if (filterInfo.isFiltering) { setFilter(); } - if (sortInfo.sortField) { setSort(); }