feat: 개선된 데이터 필터링 로직 및 동적 검색 필터 옵션 로드 기능 추가
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user