카테고리

This commit is contained in:
kjs 2025-11-05 18:09:16 +09:00
parent bc029d1df8
commit ad46249c8b
1 changed files with 17 additions and 44 deletions

View File

@ -20,11 +20,7 @@ interface CategoryColumnListProps {
* ( ) * ( )
* - input_type='category' ( ) * - input_type='category' ( )
*/ */
export function CategoryColumnList({ export function CategoryColumnList({ tableName, selectedColumn, onColumnSelect }: CategoryColumnListProps) {
tableName,
selectedColumn,
onColumnSelect,
}: CategoryColumnListProps) {
const [columns, setColumns] = useState<CategoryColumn[]>([]); const [columns, setColumns] = useState<CategoryColumn[]>([]);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
@ -36,9 +32,7 @@ export function CategoryColumnList({
setIsLoading(true); setIsLoading(true);
try { try {
// table_type_columns에서 input_type = 'category'인 컬럼 조회 // table_type_columns에서 input_type = 'category'인 컬럼 조회
const response = await apiClient.get( const response = await apiClient.get(`/table-management/tables/${tableName}/columns`);
`/table-management/tables/${tableName}/columns`
);
console.log("🔍 테이블 컬럼 API 응답:", { console.log("🔍 테이블 컬럼 API 응답:", {
tableName, tableName,
@ -74,7 +68,7 @@ export function CategoryColumnList({
// category 타입만 필터링 // category 타입만 필터링
const categoryColumns = allColumns.filter( const categoryColumns = allColumns.filter(
(col: any) => col.inputType === "category" || col.input_type === "category" (col: any) => col.inputType === "category" || col.input_type === "category",
); );
console.log("✅ 카테고리 컬럼:", { console.log("✅ 카테고리 컬럼:", {
@ -90,7 +84,7 @@ export function CategoryColumnList({
columnName: col.columnName || col.column_name, columnName: col.columnName || col.column_name,
columnLabel: col.columnLabel || col.column_label || col.displayName || col.columnName || col.column_name, columnLabel: col.columnLabel || col.column_label || col.displayName || col.columnName || col.column_name,
inputType: col.inputType || col.input_type, inputType: col.inputType || col.input_type,
})) })),
); );
// 첫 번째 컬럼 자동 선택 // 첫 번째 컬럼 자동 선택
@ -111,7 +105,7 @@ export function CategoryColumnList({
if (isLoading) { if (isLoading) {
return ( return (
<div className="flex items-center justify-center py-12"> <div className="flex items-center justify-center py-12">
<Loader2 className="h-6 w-6 animate-spin text-primary" /> <Loader2 className="text-primary h-6 w-6 animate-spin" />
</div> </div>
); );
} }
@ -120,14 +114,11 @@ export function CategoryColumnList({
return ( return (
<div className="space-y-3"> <div className="space-y-3">
<h3 className="text-lg font-semibold"> </h3> <h3 className="text-lg font-semibold"> </h3>
<div className="rounded-lg border bg-muted/50 p-6 text-center"> <div className="bg-muted/50 rounded-lg border p-6 text-center">
<FolderTree className="mx-auto h-8 w-8 text-muted-foreground" /> <FolderTree className="text-muted-foreground mx-auto h-8 w-8" />
<p className="mt-2 text-sm text-muted-foreground"> <p className="text-muted-foreground mt-2 text-sm"> </p>
<p className="text-muted-foreground mt-1 text-xs">
</p> &apos;&apos;
<p className="mt-1 text-xs text-muted-foreground">
&apos;&apos;
</p> </p>
</div> </div>
</div> </div>
@ -138,42 +129,25 @@ export function CategoryColumnList({
<div className="space-y-3"> <div className="space-y-3">
<div className="space-y-1"> <div className="space-y-1">
<h3 className="text-lg font-semibold"> </h3> <h3 className="text-lg font-semibold"> </h3>
<p className="text-xs text-muted-foreground"> <p className="text-muted-foreground text-xs"> </p>
</p>
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
{columns.map((column) => ( {columns.map((column) => (
<div <div
key={column.columnName} key={column.columnName}
onClick={() => onClick={() => onColumnSelect(column.columnName, column.columnLabel || column.columnName)}
onColumnSelect(
column.columnName,
column.columnLabel || column.columnName
)
}
className={`cursor-pointer rounded-lg border p-4 transition-all ${ className={`cursor-pointer rounded-lg border p-4 transition-all ${
selectedColumn === column.columnName selectedColumn === column.columnName ? "border-primary bg-primary/10 shadow-sm" : "hover:bg-muted/50"
? "border-primary bg-primary/10 shadow-sm"
: "hover:bg-muted/50"
}`} }`}
> >
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<FolderTree <FolderTree
className={`h-4 w-4 ${ className={`h-4 w-4 ${selectedColumn === column.columnName ? "text-primary" : "text-muted-foreground"}`}
selectedColumn === column.columnName
? "text-primary"
: "text-muted-foreground"
}`}
/> />
<div className="flex-1"> <div className="flex-1">
<h4 className="text-sm font-semibold"> <h4 className="text-sm font-semibold">{column.columnLabel || column.columnName}</h4>
{column.columnLabel || column.columnName} <p className="text-muted-foreground text-xs">{column.columnName}</p>
</h4>
<p className="text-xs text-muted-foreground">
{column.columnName}
</p>
</div> </div>
</div> </div>
</div> </div>
@ -182,4 +156,3 @@ export function CategoryColumnList({
</div> </div>
); );
} }