fix(select): Radix UI Select v2.x value="" 에러 수정
Radix UI Select v2.0부터 빈 문자열 value=""가 금지됨 (placeholder 예약어) 수정 파일: - FieldDetailSettingsModal.tsx: saveColumn "__default__" - TableLogViewer.tsx: 전체 필터 "__all__" - FlowStepPanel.tsx: disabled placeholder "__placeholder__" - MapConfigPanel.tsx: 선택 안 함 "__none__" (2곳) - DataMappingSettings.tsx: disabled placeholder "__placeholder__" (2곳) - ScreenAssignmentTab.tsx: disabled placeholder "__placeholder__" - multilang/page.tsx: 전체 메뉴/타입 "__all__" (2곳)
This commit is contained in:
parent
3396834417
commit
9878f1f502
|
|
@ -317,12 +317,16 @@ export default function MultiLangPage() {
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<Label htmlFor="menu">메뉴</Label>
|
<Label htmlFor="menu">메뉴</Label>
|
||||||
<Select value={selectedMenu} onValueChange={setSelectedMenu}>
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__all__" 사용 */}
|
||||||
|
<Select
|
||||||
|
value={selectedMenu || "__all__"}
|
||||||
|
onValueChange={(value) => setSelectedMenu(value === "__all__" ? "" : value)}
|
||||||
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="전체 메뉴" />
|
<SelectValue placeholder="전체 메뉴" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">전체 메뉴</SelectItem>
|
<SelectItem value="__all__">전체 메뉴</SelectItem>
|
||||||
{menus.map((menu) => (
|
{menus.map((menu) => (
|
||||||
<SelectItem key={menu.code} value={menu.code}>
|
<SelectItem key={menu.code} value={menu.code}>
|
||||||
{menu.name}
|
{menu.name}
|
||||||
|
|
@ -334,12 +338,16 @@ export default function MultiLangPage() {
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<Label htmlFor="keyType">키 타입</Label>
|
<Label htmlFor="keyType">키 타입</Label>
|
||||||
<Select value={selectedKeyType} onValueChange={setSelectedKeyType}>
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__all__" 사용 */}
|
||||||
|
<Select
|
||||||
|
value={selectedKeyType || "__all__"}
|
||||||
|
onValueChange={(value) => setSelectedKeyType(value === "__all__" ? "" : value)}
|
||||||
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="전체 타입" />
|
<SelectValue placeholder="전체 타입" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">전체 타입</SelectItem>
|
<SelectItem value="__all__">전체 타입</SelectItem>
|
||||||
{keyTypes.map((type) => (
|
{keyTypes.map((type) => (
|
||||||
<SelectItem key={type.code} value={type.code}>
|
<SelectItem key={type.code} value={type.code}>
|
||||||
{type.name}
|
{type.name}
|
||||||
|
|
|
||||||
|
|
@ -172,8 +172,9 @@ export const ScreenAssignmentTab: React.FC<ScreenAssignmentTabProps> = ({ menus
|
||||||
// });
|
// });
|
||||||
|
|
||||||
if (!menuList || menuList.length === 0) {
|
if (!menuList || menuList.length === 0) {
|
||||||
|
// Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__placeholder__" 사용
|
||||||
return [
|
return [
|
||||||
<SelectItem key="no-menu" value="" disabled>
|
<SelectItem key="no-menu" value="__placeholder__" disabled>
|
||||||
메뉴가 없습니다
|
메뉴가 없습니다
|
||||||
</SelectItem>,
|
</SelectItem>,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -151,12 +151,16 @@ export function TableLogViewer({ tableName, open, onOpenChange }: TableLogViewer
|
||||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-3">
|
<div className="grid grid-cols-2 gap-3 md:grid-cols-3">
|
||||||
<div>
|
<div>
|
||||||
<label className="mb-1 block text-sm text-gray-600">작업 유형</label>
|
<label className="mb-1 block text-sm text-gray-600">작업 유형</label>
|
||||||
<Select value={operationType} onValueChange={setOperationType}>
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__all__" 사용 */}
|
||||||
|
<Select
|
||||||
|
value={operationType || "__all__"}
|
||||||
|
onValueChange={(value) => setOperationType(value === "__all__" ? "" : value)}
|
||||||
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="전체" />
|
<SelectValue placeholder="전체" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">전체</SelectItem>
|
<SelectItem value="__all__">전체</SelectItem>
|
||||||
<SelectItem value="INSERT">추가</SelectItem>
|
<SelectItem value="INSERT">추가</SelectItem>
|
||||||
<SelectItem value="UPDATE">수정</SelectItem>
|
<SelectItem value="UPDATE">수정</SelectItem>
|
||||||
<SelectItem value="DELETE">삭제</SelectItem>
|
<SelectItem value="DELETE">삭제</SelectItem>
|
||||||
|
|
|
||||||
|
|
@ -236,12 +236,13 @@ export const DataMappingSettings: React.FC<DataMappingSettingsProps> = ({
|
||||||
<SelectValue placeholder={tablesLoading ? "테이블 목록 로딩 중..." : "저장할 테이블을 선택하세요"} />
|
<SelectValue placeholder={tablesLoading ? "테이블 목록 로딩 중..." : "저장할 테이블을 선택하세요"} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__placeholder__" 사용 */}
|
||||||
{tablesLoading ? (
|
{tablesLoading ? (
|
||||||
<SelectItem value="" disabled>
|
<SelectItem value="__placeholder__" disabled>
|
||||||
테이블 목록 로딩 중...
|
테이블 목록 로딩 중...
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
) : availableTables.length === 0 ? (
|
) : availableTables.length === 0 ? (
|
||||||
<SelectItem value="" disabled>
|
<SelectItem value="__placeholder__" disabled>
|
||||||
사용 가능한 테이블이 없습니다
|
사용 가능한 테이블이 없습니다
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
) : (
|
) : (
|
||||||
|
|
|
||||||
|
|
@ -1173,7 +1173,8 @@ export function FlowStepPanel({
|
||||||
기본 REST API 연결
|
기본 REST API 연결
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
) : (
|
) : (
|
||||||
<SelectItem value="" disabled>
|
// Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__placeholder__" 사용
|
||||||
|
<SelectItem value="__placeholder__" disabled>
|
||||||
연결된 REST API가 없습니다
|
연결된 REST API가 없습니다
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -315,16 +315,17 @@ export default function MapConfigPanel({ config, onChange }: MapConfigPanelProps
|
||||||
{/* 라벨 컬럼 (선택) */}
|
{/* 라벨 컬럼 (선택) */}
|
||||||
<div className="space-y-2 mb-3">
|
<div className="space-y-2 mb-3">
|
||||||
<Label>라벨 컬럼 (선택사항)</Label>
|
<Label>라벨 컬럼 (선택사항)</Label>
|
||||||
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__none__" 사용 */}
|
||||||
<Select
|
<Select
|
||||||
value={config.dataSource?.labelColumn || ""}
|
value={config.dataSource?.labelColumn || "__none__"}
|
||||||
onValueChange={(value) => updateConfig("dataSource.labelColumn", value)}
|
onValueChange={(value) => updateConfig("dataSource.labelColumn", value === "__none__" ? "" : value)}
|
||||||
disabled={isLoadingColumns || !config.dataSource?.tableName}
|
disabled={isLoadingColumns || !config.dataSource?.tableName}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="라벨 컬럼 선택" />
|
<SelectValue placeholder="라벨 컬럼 선택" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">선택 안 함</SelectItem>
|
<SelectItem value="__none__">선택 안 함</SelectItem>
|
||||||
{columns.map((col) => (
|
{columns.map((col) => (
|
||||||
<SelectItem key={col.column_name} value={col.column_name}>
|
<SelectItem key={col.column_name} value={col.column_name}>
|
||||||
{col.column_name} ({col.data_type})
|
{col.column_name} ({col.data_type})
|
||||||
|
|
@ -337,16 +338,17 @@ export default function MapConfigPanel({ config, onChange }: MapConfigPanelProps
|
||||||
{/* 상태 컬럼 (선택) */}
|
{/* 상태 컬럼 (선택) */}
|
||||||
<div className="space-y-2 mb-3">
|
<div className="space-y-2 mb-3">
|
||||||
<Label>상태 컬럼 (선택사항)</Label>
|
<Label>상태 컬럼 (선택사항)</Label>
|
||||||
|
{/* Radix UI Select v2.x: 빈 문자열 value="" 금지 → "__none__" 사용 */}
|
||||||
<Select
|
<Select
|
||||||
value={config.dataSource?.statusColumn || ""}
|
value={config.dataSource?.statusColumn || "__none__"}
|
||||||
onValueChange={(value) => updateConfig("dataSource.statusColumn", value)}
|
onValueChange={(value) => updateConfig("dataSource.statusColumn", value === "__none__" ? "" : value)}
|
||||||
disabled={isLoadingColumns || !config.dataSource?.tableName}
|
disabled={isLoadingColumns || !config.dataSource?.tableName}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue placeholder="상태 컬럼 선택" />
|
<SelectValue placeholder="상태 컬럼 선택" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">선택 안 함</SelectItem>
|
<SelectItem value="__none__">선택 안 함</SelectItem>
|
||||||
{columns.map((col) => (
|
{columns.map((col) => (
|
||||||
<SelectItem key={col.column_name} value={col.column_name}>
|
<SelectItem key={col.column_name} value={col.column_name}>
|
||||||
{col.column_name} ({col.data_type})
|
{col.column_name} ({col.data_type})
|
||||||
|
|
|
||||||
|
|
@ -550,12 +550,12 @@ export function FieldDetailSettingsModal({
|
||||||
<Label className="text-[10px]">저장할 컬럼</Label>
|
<Label className="text-[10px]">저장할 컬럼</Label>
|
||||||
{selectTableColumns.length > 0 ? (
|
{selectTableColumns.length > 0 ? (
|
||||||
<Select
|
<Select
|
||||||
value={localField.selectOptions?.saveColumn || ""}
|
value={localField.selectOptions?.saveColumn || "__default__"}
|
||||||
onValueChange={(value) =>
|
onValueChange={(value) =>
|
||||||
updateField({
|
updateField({
|
||||||
selectOptions: {
|
selectOptions: {
|
||||||
...localField.selectOptions,
|
...localField.selectOptions,
|
||||||
saveColumn: value,
|
saveColumn: value === "__default__" ? "" : value,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -564,7 +564,7 @@ export function FieldDetailSettingsModal({
|
||||||
<SelectValue placeholder="컬럼 선택 (미선택 시 조인 컬럼 저장)" />
|
<SelectValue placeholder="컬럼 선택 (미선택 시 조인 컬럼 저장)" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectItem value="">조인 컬럼 사용 (기본)</SelectItem>
|
<SelectItem value="__default__">조인 컬럼 사용 (기본)</SelectItem>
|
||||||
{selectTableColumns.map((col) => (
|
{selectTableColumns.map((col) => (
|
||||||
<SelectItem key={col.name} value={col.name}>
|
<SelectItem key={col.name} value={col.name}>
|
||||||
{col.name}
|
{col.name}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue