feat: 개선된 데이터 필터링 로직 및 동적 검색 필터 옵션 로드 기능 추가

This commit is contained in:
DDD1542
2026-04-03 17:01:06 +09:00
parent 1cadb71d70
commit 425e1c6cf8
3 changed files with 116 additions and 64 deletions

View File

@@ -99,7 +99,14 @@ export function buildDataFilterWhereClause(
break;
case "in": {
const inArr = Array.isArray(value) ? value : value != null && value !== "" ? [String(value)] : [];
let inArr: any[];
if (Array.isArray(value)) {
inArr = value;
} else if (typeof value === "string" && value.includes("|")) {
inArr = value.split("|").filter((v: string) => v !== "");
} else {
inArr = value != null && value !== "" ? [String(value)] : [];
}
if (inArr.length > 0) {
const placeholders = inArr.map((_, idx) => `$${paramIndex + idx}`).join(", ");
conditions.push(`${columnRef} IN (${placeholders})`);
@@ -110,7 +117,14 @@ export function buildDataFilterWhereClause(
}
case "not_in": {
const notInArr = Array.isArray(value) ? value : value != null && value !== "" ? [String(value)] : [];
let notInArr: any[];
if (Array.isArray(value)) {
notInArr = value;
} else if (typeof value === "string" && value.includes("|")) {
notInArr = value.split("|").filter((v: string) => v !== "");
} else {
notInArr = value != null && value !== "" ? [String(value)] : [];
}
if (notInArr.length > 0) {
const placeholders = notInArr.map((_, idx) => `$${paramIndex + idx}`).join(", ");
conditions.push(`${columnRef} NOT IN (${placeholders})`);
@@ -170,13 +184,32 @@ export function buildDataFilterWhereClause(
paramIndex++;
break;
case "between":
case "between": {
let betweenArr: any[];
if (Array.isArray(value) && value.length === 2) {
conditions.push(`${columnRef} BETWEEN $${paramIndex} AND $${paramIndex + 1}`);
params.push(value[0], value[1]);
paramIndex += 2;
betweenArr = value;
} else if (typeof value === "string" && value.includes("|")) {
betweenArr = value.split("|");
} else {
betweenArr = [];
}
if (betweenArr.length === 2 && (betweenArr[0] || betweenArr[1])) {
if (betweenArr[0] && betweenArr[1]) {
conditions.push(`${columnRef} BETWEEN $${paramIndex} AND $${paramIndex + 1}`);
params.push(betweenArr[0], betweenArr[1]);
paramIndex += 2;
} else if (betweenArr[0]) {
conditions.push(`${columnRef} >= $${paramIndex}`);
params.push(betweenArr[0]);
paramIndex++;
} else {
conditions.push(`${columnRef} <= $${paramIndex}`);
params.push(betweenArr[1]);
paramIndex++;
}
}
break;
}
case "date_range_contains":
// 날짜 범위 포함: start_date <= value <= end_date