Skip to content

Commit

Permalink
[#1202] Grid > 객체 타입 Column Sorting (#1203)
Browse files Browse the repository at this point in the history
* [#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 <yell@ex-em.com>
  • Loading branch information
kimyell and kimyell1023 authored Jun 3, 2022
1 parent a7429c0 commit 953627f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 14 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "evui",
"version": "3.3.26",
"version": "3.3.27",
"description": "A EXEM Library project",
"author": "exem <dev_client@ex-em.com>",
"license": "MIT",
Expand Down
36 changes: 23 additions & 13 deletions src/components/grid/uses.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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;
});
Expand Down

0 comments on commit 953627f

Please sign in to comment.