From 953627f031e4b5022891570a6f8dc2e256b58f9a Mon Sep 17 00:00:00 2001 From: kimyell <61657275+kimyell@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:40:53 +0900 Subject: [PATCH] =?UTF-8?q?[#1202]=20Grid=20>=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20Column=20Sorting=20(#1203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [#1202] Grid > 객체 타입 Column Sorting #################### - 객체 타입의 Column 도 Sorting 기능 동작하도록 수정 - Column의 filed명과 동일한 key값을 기준으로 정렬 (search 기능 시 적용된 스펙과 동일) - filed명 key 값을 기준으로 데이터 타입 지정 (ex. 'string', 'number', 'stringNumber', 'float', 'boolean') - 타입 누락 시 기본 정렬 타입 'string' * [#1202] Grid > 객체 타입 Column Sorting #################### - revision 업데이트 Co-authored-by: yell --- package.json | 2 +- src/components/grid/uses.js | 36 +++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 596169011..3954b9903 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "evui", - "version": "3.3.26", + "version": "3.3.27", "description": "A EXEM Library project", "author": "exem ", "license": "MIT", diff --git a/src/components/grid/uses.js b/src/components/grid/uses.js index aeab963ac..1ad794d2b 100644 --- a/src/components/grid/uses.js +++ b/src/components/grid/uses.js @@ -498,7 +498,6 @@ export const checkEvent = (params) => { export const sortEvent = (params) => { const { sortInfo, stores, getColumnIndex, updatePagingInfo } = params; - const { props } = getCurrentInstance(); function OrderQueue() { this.orders = ['asc', 'desc', 'init']; this.dequeue = () => this.orders.shift(); @@ -542,35 +541,46 @@ export const sortEvent = (params) => { return; } const index = getColumnIndex(sortInfo.sortField); - const type = props.columns[index]?.type || 'string'; + const type = stores.orderedColumns[index]?.type || 'string'; const sortFn = sortInfo.sortOrder === 'desc' ? setDesc : setAsc; const numberSortFn = sortInfo.sortOrder === 'desc' ? numberSetDesc : numberSetAsc; + const getColumnValue = (a, b) => { + let aCol = a[ROW_DATA_INDEX][index]; + let bCol = b[ROW_DATA_INDEX][index]; + if (a[ROW_DATA_INDEX][index] && typeof a[ROW_DATA_INDEX][index] === 'object') { + aCol = a[ROW_DATA_INDEX][index][stores.orderedColumns[index]?.field]; + bCol = b[ROW_DATA_INDEX][index][stores.orderedColumns[index]?.field]; + } + return { aCol, bCol }; + }; switch (type) { case 'string': stores.store.sort((a, b) => { - if (!a[ROW_DATA_INDEX][index] || typeof a[ROW_DATA_INDEX][index] === 'string') { - a[ROW_DATA_INDEX][index] = a[ROW_DATA_INDEX][index] || ''; - b[ROW_DATA_INDEX][index] = b[ROW_DATA_INDEX][index] || ''; - return sortFn(a[ROW_DATA_INDEX][index]?.toLowerCase(), - b[ROW_DATA_INDEX][index]?.toLowerCase()); + let { aCol, bCol } = getColumnValue(a, b); + if ((!aCol || typeof aCol === 'string') && (!bCol || typeof bCol === 'string')) { + aCol = aCol || ''; + bCol = bCol || ''; + return sortFn(aCol?.toLowerCase(), bCol?.toLowerCase()); } return 0; }); break; case 'stringNumber': stores.store.sort((a, b) => { - if (!a[ROW_DATA_INDEX][index] || typeof a[ROW_DATA_INDEX][index] === 'string' || typeof a[ROW_DATA_INDEX][index] === 'number') { - a[ROW_DATA_INDEX][index] = a[ROW_DATA_INDEX][index] === '' ? null : a[ROW_DATA_INDEX][index]; - b[ROW_DATA_INDEX][index] = b[ROW_DATA_INDEX][index] === '' ? null : b[ROW_DATA_INDEX][index]; - return numberSortFn(a[ROW_DATA_INDEX][index] ?? null, b[ROW_DATA_INDEX][index] ?? null); + let { aCol, bCol } = getColumnValue(a, b); + if (!aCol || typeof aCol === 'string' || typeof aCol === 'number') { + aCol = aCol === '' ? null : aCol; + bCol = bCol === '' ? null : bCol; + return numberSortFn(aCol ?? null, bCol ?? null); } return 0; }); break; default: stores.store.sort((a, b) => { - if (!a[ROW_DATA_INDEX][index] || typeof a[ROW_DATA_INDEX][index] === 'number' || typeof a[ROW_DATA_INDEX][index] === 'boolean') { - return numberSortFn(a[ROW_DATA_INDEX][index] ?? null, b[ROW_DATA_INDEX][index] ?? null); + const { aCol, bCol } = getColumnValue(a, b); + if (!aCol || typeof aCol === 'number' || typeof aCol === 'boolean') { + return numberSortFn(aCol ?? null, bCol ?? null); } return 0; });