@@ -246,12 +284,9 @@ export function PopStringListComponent({
)}
{/* 컨텐츠 */}
-
+
{displayMode === "list" ? (
-
+
) : (
)}
+ {isPaginationSide && (
+ <>
+
+
+ >
+ )}
- {/* 전체보기 버튼 */}
- {showExpandButton && hasMore && (
-
-
+ {/* side 모드 페이지 인디케이터 (컨텐츠 아래 별도 영역) */}
+ {isPaginationSide && (
+
+
+ {currentPage} / {totalPages}
+
+
+ )}
+
+ {/* 더보기 모드 컨트롤 */}
+ {overflowMode === "loadMore" && showExpandButton && (hasMore || isExpanded) && (
+
+ {hasMore && (
+
+ )}
+ {isExpanded && (
+
+ )}
+
+ )}
+
+ {/* 페이지네이션 bottom 모드 컨트롤 */}
+ {overflowMode === "pagination" && paginationStyle === "bottom" && totalPages > 1 && (
+
+
+ {rows.length}건 중 {(currentPage - 1) * pageSize + 1}-{Math.min(currentPage * pageSize, rows.length)}
+
+
+
+
+ {currentPage} / {totalPages}
+
+
+
)}
diff --git a/frontend/lib/registry/pop-components/pop-string-list/PopStringListConfig.tsx b/frontend/lib/registry/pop-components/pop-string-list/PopStringListConfig.tsx
index f4702a16..4208301b 100644
--- a/frontend/lib/registry/pop-components/pop-string-list/PopStringListConfig.tsx
+++ b/frontend/lib/registry/pop-components/pop-string-list/PopStringListConfig.tsx
@@ -67,7 +67,7 @@ interface ConfigPanelProps {
const DEFAULT_CONFIG: PopStringListConfig = {
displayMode: "list",
header: { enabled: true, label: "" },
- overflow: { visibleRows: 5, showExpandButton: true, maxExpandRows: 20 },
+ overflow: { visibleRows: 5, mode: "loadMore", showExpandButton: true, loadMoreCount: 5, maxExpandRows: 50, pageSize: 5, paginationStyle: "bottom" },
dataSource: { tableName: "" },
listColumns: [],
cardGrid: undefined,
@@ -414,6 +414,8 @@ function StepOverflow({
overflow: PopStringListConfig["overflow"];
onChange: (overflow: PopStringListConfig["overflow"]) => void;
}) {
+ const mode = overflow.mode || "loadMore";
+
return (
@@ -429,32 +431,130 @@ function StepOverflow({
className="mt-1 h-8 text-xs"
/>
-
-
-
- onChange({ ...overflow, showExpandButton })
+
+
+
+
- {overflow.showExpandButton && (
-
-
-
- onChange({
- ...overflow,
- maxExpandRows: Number(e.target.value) || 20,
- })
- }
- className="mt-1 h-8 text-xs"
- />
-
+
+ {mode === "loadMore" && (
+ <>
+
+
+
+ onChange({ ...overflow, showExpandButton })
+ }
+ />
+
+ {overflow.showExpandButton && (
+ <>
+
+
+
+ onChange({
+ ...overflow,
+ loadMoreCount: Number(e.target.value) || 5,
+ })
+ }
+ className="mt-1 h-8 text-xs"
+ />
+
+ 클릭할 때마다 추가로 표시할 행 수
+
+
+
+
+
+ onChange({
+ ...overflow,
+ maxExpandRows: Number(e.target.value) || 50,
+ })
+ }
+ className="mt-1 h-8 text-xs"
+ />
+
+ >
+ )}
+ >
+ )}
+
+ {mode === "pagination" && (
+ <>
+
+
+
+ onChange({
+ ...overflow,
+ pageSize: Number(e.target.value) || 5,
+ })
+ }
+ className="mt-1 h-8 text-xs"
+ />
+
+
+
+
+
+ {(overflow.paginationStyle || "bottom") === "bottom"
+ ? "컴포넌트 하단에 이전/다음 버튼과 페이지 번호 표시"
+ : "컴포넌트 좌우에 화살표 버튼 표시"}
+
+
+ >
)}
);
diff --git a/frontend/lib/registry/pop-components/pop-string-list/index.tsx b/frontend/lib/registry/pop-components/pop-string-list/index.tsx
index 3d148c57..86fa156d 100644
--- a/frontend/lib/registry/pop-components/pop-string-list/index.tsx
+++ b/frontend/lib/registry/pop-components/pop-string-list/index.tsx
@@ -16,7 +16,7 @@ import type { PopStringListConfig } from "./types";
const defaultConfig: PopStringListConfig = {
displayMode: "list",
header: { enabled: true, label: "" },
- overflow: { visibleRows: 5, showExpandButton: true, maxExpandRows: 20 },
+ overflow: { visibleRows: 5, mode: "loadMore", showExpandButton: true, loadMoreCount: 5, maxExpandRows: 50, pageSize: 5, paginationStyle: "bottom" },
dataSource: { tableName: "" },
listColumns: [],
cardGrid: undefined,
diff --git a/frontend/lib/registry/pop-components/pop-string-list/types.ts b/frontend/lib/registry/pop-components/pop-string-list/types.ts
index 3fe0d748..6679cb54 100644
--- a/frontend/lib/registry/pop-components/pop-string-list/types.ts
+++ b/frontend/lib/registry/pop-components/pop-string-list/types.ts
@@ -47,11 +47,23 @@ export interface ListColumnConfig {
alternateColumns?: string[]; // 런타임에서 전환 가능한 대체 컬럼 목록
}
+/** 오버플로우 방식 */
+export type OverflowMode = "loadMore" | "pagination";
+
+/** 페이지네이션 네비게이션 스타일 */
+export type PaginationStyle = "bottom" | "side";
+
/** 오버플로우 설정 */
export interface OverflowConfig {
visibleRows: number; // 기본 표시 행 수
- showExpandButton: boolean; // "전체보기" 버튼 표시
- maxExpandRows: number; // 확장 시 최대 행 수
+ mode: OverflowMode; // 오버플로우 방식
+ // 더보기 모드 전용
+ showExpandButton: boolean; // "더보기" 버튼 표시
+ loadMoreCount: number; // 더보기 클릭 시 추가 로딩 행 수
+ maxExpandRows: number; // 최대 표시 행 수 (무한 확장 방지)
+ // 페이지네이션 모드 전용
+ pageSize: number; // 페이지당 표시 행 수
+ paginationStyle: PaginationStyle; // bottom: 하단 페이지 표시, side: 좌우 화살표
}
/** 헤더 설정 */