feat: 파일 미리보기 및 동적 컴포넌트 조정 기능 추가

- 파일 미리보기 API에 공개 접근을 허용하여 인증되지 않은 사용자도 이미지 미리보기를 할 수 있도록 수정하였습니다.
- ScreenModal 컴포넌트에서 숨겨진 컴포넌트의 동적 y 좌표 조정 로직을 추가하여 사용자 인터페이스의 일관성을 개선하였습니다.
- V2Media 및 V2Select 컴포넌트에서 기본값 설정 기능을 추가하여 사용자 경험을 향상시켰습니다.
- RepeaterTable 및 SimpleRepeaterTableComponent에서 키 값을 개선하여 렌더링 성능을 최적화하였습니다.
- formData의 디버깅 로그를 추가하여 개발 중 상태 확인을 용이하게 하였습니다.
This commit is contained in:
kjs
2026-02-04 09:28:16 +09:00
parent 8bf3bc3f47
commit d13cd478de
17 changed files with 1332 additions and 209 deletions

View File

@@ -684,13 +684,13 @@ export function SimpleRepeaterTableComponent({
<thead className="bg-muted sticky top-0 z-10">
<tr>
{showRowNumber && (
<th className="px-4 py-2 text-left font-medium text-muted-foreground w-12">
<th key="header-rownum" className="px-4 py-2 text-left font-medium text-muted-foreground w-12">
#
</th>
)}
{columns.map((col) => (
<th
key={col.field}
key={`header-${col.field}`}
className="px-4 py-2 text-left font-medium text-muted-foreground"
style={{ width: col.width }}
>
@@ -699,7 +699,7 @@ export function SimpleRepeaterTableComponent({
</th>
))}
{!readOnly && allowDelete && (
<th className="px-4 py-2 text-left font-medium text-muted-foreground w-20">
<th key="header-delete" className="px-4 py-2 text-left font-medium text-muted-foreground w-20">
</th>
)}
@@ -707,8 +707,9 @@ export function SimpleRepeaterTableComponent({
</thead>
<tbody className="bg-background">
{value.length === 0 ? (
<tr>
<tr key="empty-row">
<td
key="empty-cell"
colSpan={totalColumns}
className="px-4 py-8 text-center text-muted-foreground"
>
@@ -724,19 +725,19 @@ export function SimpleRepeaterTableComponent({
</tr>
) : (
value.map((row, rowIndex) => (
<tr key={rowIndex} className="border-t hover:bg-accent/50">
<tr key={`row-${rowIndex}`} className="border-t hover:bg-accent/50">
{showRowNumber && (
<td className="px-4 py-2 text-center text-muted-foreground">
<td key={`rownum-${rowIndex}`} className="px-4 py-2 text-center text-muted-foreground">
{rowIndex + 1}
</td>
)}
{columns.map((col) => (
<td key={col.field} className="px-2 py-1">
<td key={`${rowIndex}-${col.field}`} className="px-2 py-1">
{renderCell(row, col, rowIndex)}
</td>
))}
{!readOnly && allowDelete && (
<td className="px-4 py-2 text-center">
<td key={`delete-${rowIndex}`} className="px-4 py-2 text-center">
<Button
variant="ghost"
size="sm"