Compare commits

...

1 Commits

Author SHA1 Message Date
kmh 5e8572954a chore: update .gitignore and remove unused images
- Added support for ignoring PNG files in .gitignore to streamline file management.
- Deleted unused image files from the .playwright-mcp directory to reduce clutter and improve project organization.
- Enhanced column visibility handling in TableListComponent to include width adjustments and localStorage synchronization for better user experience.

Made-with: Cursor
2026-03-13 14:57:07 +09:00
8 changed files with 48 additions and 3 deletions

1
.gitignore vendored
View File

@ -153,6 +153,7 @@ backend-node/uploads/
uploads/ uploads/
*.jpg *.jpg
*.jpeg *.jpeg
*.png
*.gif *.gif
*.pdf *.pdf
*.doc *.doc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@ -583,7 +583,7 @@ const RealtimePreviewDynamicComponent: React.FC<RealtimePreviewProps> = ({
const needsStripBorder = isV2HorizLabel || isButtonComponent; const needsStripBorder = isV2HorizLabel || isButtonComponent;
const safeComponentStyle = needsStripBorder const safeComponentStyle = needsStripBorder
? (() => { ? (() => {
const { borderWidth, borderColor, borderStyle, border, borderRadius, ...rest } = componentStyle as any; const { borderWidth, borderColor, borderStyle, border, ...rest } = componentStyle as any;
return rest; return rest;
})() })()
: componentStyle; : componentStyle;

View File

@ -379,12 +379,33 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
} }
}, [tableConfig.selectedTable, currentUserId]); }, [tableConfig.selectedTable, currentUserId]);
// columnVisibility 변경 시 컬럼 순서 및 가시성 적용 // columnVisibility 변경 시 컬럼 순서, 가시성, 너비 적용
useEffect(() => { useEffect(() => {
if (columnVisibility.length > 0) { if (columnVisibility.length > 0) {
const newOrder = columnVisibility.map((cv) => cv.columnName).filter((name) => name !== "__checkbox__"); // 체크박스 제외 const newOrder = columnVisibility.map((cv) => cv.columnName).filter((name) => name !== "__checkbox__"); // 체크박스 제외
setColumnOrder(newOrder); setColumnOrder(newOrder);
// 너비 적용
const newWidths: Record<string, number> = {};
columnVisibility.forEach((cv) => {
if (cv.width) {
newWidths[cv.columnName] = cv.width;
}
});
if (Object.keys(newWidths).length > 0) {
setColumnWidths((prev) => ({ ...prev, ...newWidths }));
// table_column_widths_* localStorage도 동기화 (초기 너비 로드 시 올바른 값 사용)
if (tableConfig.selectedTable && userId) {
const widthsKey = `table_column_widths_${tableConfig.selectedTable}_${userId}`;
try {
const existing = localStorage.getItem(widthsKey);
const merged = existing ? { ...JSON.parse(existing), ...newWidths } : newWidths;
localStorage.setItem(widthsKey, JSON.stringify(merged));
} catch { /* ignore */ }
}
}
// localStorage에 저장 (사용자별) // localStorage에 저장 (사용자별)
if (tableConfig.selectedTable && currentUserId) { if (tableConfig.selectedTable && currentUserId) {
const storageKey = `table_column_visibility_${tableConfig.selectedTable}_${currentUserId}`; const storageKey = `table_column_visibility_${tableConfig.selectedTable}_${currentUserId}`;

View File

@ -570,6 +570,8 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
...restComponentStyle, ...restComponentStyle,
width: "100%", width: "100%",
height: "100%", height: "100%",
borderRadius: _br || "0.5rem",
overflow: "hidden",
}; };
// 디자인 모드 스타일 // 디자인 모드 스타일

View File

@ -520,12 +520,33 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
} }
}, [tableConfig.selectedTable, currentUserId]); }, [tableConfig.selectedTable, currentUserId]);
// columnVisibility 변경 시 컬럼 순서 및 가시성 적용 // columnVisibility 변경 시 컬럼 순서, 가시성, 너비 적용
useEffect(() => { useEffect(() => {
if (columnVisibility.length > 0) { if (columnVisibility.length > 0) {
const newOrder = columnVisibility.map((cv) => cv.columnName).filter((name) => name !== "__checkbox__"); // 체크박스 제외 const newOrder = columnVisibility.map((cv) => cv.columnName).filter((name) => name !== "__checkbox__"); // 체크박스 제외
setColumnOrder(newOrder); setColumnOrder(newOrder);
// 너비 적용
const newWidths: Record<string, number> = {};
columnVisibility.forEach((cv) => {
if (cv.width) {
newWidths[cv.columnName] = cv.width;
}
});
if (Object.keys(newWidths).length > 0) {
setColumnWidths((prev) => ({ ...prev, ...newWidths }));
// table_column_widths_* localStorage도 동기화 (초기 너비 로드 시 올바른 값 사용)
if (tableConfig.selectedTable && userId) {
const widthsKey = `table_column_widths_${tableConfig.selectedTable}_${userId}`;
try {
const existing = localStorage.getItem(widthsKey);
const merged = existing ? { ...JSON.parse(existing), ...newWidths } : newWidths;
localStorage.setItem(widthsKey, JSON.stringify(merged));
} catch { /* ignore */ }
}
}
// localStorage에 저장 (사용자별) // localStorage에 저장 (사용자별)
if (tableConfig.selectedTable && currentUserId) { if (tableConfig.selectedTable && currentUserId) {
const storageKey = `table_column_visibility_${tableConfig.selectedTable}_${currentUserId}`; const storageKey = `table_column_visibility_${tableConfig.selectedTable}_${currentUserId}`;