카테고리
This commit is contained in:
parent
bc029d1df8
commit
ad46249c8b
|
|
@ -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,
|
||||||
|
|
@ -49,7 +43,7 @@ export function CategoryColumnList({
|
||||||
|
|
||||||
// API 응답 구조 파싱 (여러 가능성 대응)
|
// API 응답 구조 파싱 (여러 가능성 대응)
|
||||||
let allColumns: any[] = [];
|
let allColumns: any[] = [];
|
||||||
|
|
||||||
if (Array.isArray(response.data)) {
|
if (Array.isArray(response.data)) {
|
||||||
// response.data가 직접 배열인 경우
|
// response.data가 직접 배열인 경우
|
||||||
allColumns = response.data;
|
allColumns = response.data;
|
||||||
|
|
@ -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>
|
테이블 타입 관리에서 컬럼의 입력 타입을 '카테고리'로 설정하세요
|
||||||
<p className="mt-1 text-xs text-muted-foreground">
|
|
||||||
테이블 타입 관리에서 컬럼의 입력 타입을 '카테고리'로
|
|
||||||
설정하세요
|
|
||||||
</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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue