Compare commits
No commits in common. "9ea0f1b84f8866e9e026fff7a57e89f69cb5620f" and "338c885cfa7f28cb4d901a40dd13152fdfa5314b" have entirely different histories.
9ea0f1b84f
...
338c885cfa
|
|
@ -55,4 +55,3 @@ export default router;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,4 +51,3 @@ export default router;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,4 +67,3 @@ export default router;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,4 +55,3 @@ export default router;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,6 @@ export class AdminService {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// [임시 비활성화] 메뉴 권한 그룹 체크 - 모든 사용자에게 전체 메뉴 표시
|
|
||||||
// TODO: 권한 체크 다시 활성화 필요
|
|
||||||
logger.info(
|
|
||||||
`⚠️ [임시 비활성화] 권한 그룹 체크 스킵 - 사용자 ${userId}(${userType})에게 전체 메뉴 표시`
|
|
||||||
);
|
|
||||||
|
|
||||||
/* [원본 코드 - 권한 그룹 체크]
|
|
||||||
if (userType === "COMPANY_ADMIN") {
|
if (userType === "COMPANY_ADMIN") {
|
||||||
// 회사 관리자: 권한 그룹 기반 필터링 적용
|
// 회사 관리자: 권한 그룹 기반 필터링 적용
|
||||||
if (userRoleGroups.length > 0) {
|
if (userRoleGroups.length > 0) {
|
||||||
|
|
@ -148,7 +141,6 @@ export class AdminService {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
} else if (
|
} else if (
|
||||||
menuType !== undefined &&
|
menuType !== undefined &&
|
||||||
userType === "SUPER_ADMIN" &&
|
userType === "SUPER_ADMIN" &&
|
||||||
|
|
@ -420,15 +412,6 @@ export class AdminService {
|
||||||
let queryParams: any[] = [userLang];
|
let queryParams: any[] = [userLang];
|
||||||
let paramIndex = 2;
|
let paramIndex = 2;
|
||||||
|
|
||||||
// [임시 비활성화] 메뉴 권한 그룹 체크 - 모든 사용자에게 전체 메뉴 표시
|
|
||||||
// TODO: 권한 체크 다시 활성화 필요
|
|
||||||
logger.info(
|
|
||||||
`⚠️ [임시 비활성화] getUserMenuList 권한 그룹 체크 스킵 - 사용자 ${userId}(${userType})에게 전체 메뉴 표시`
|
|
||||||
);
|
|
||||||
authFilter = "";
|
|
||||||
unionFilter = "";
|
|
||||||
|
|
||||||
/* [원본 코드 - getUserMenuList 권한 그룹 체크]
|
|
||||||
if (userType === "SUPER_ADMIN") {
|
if (userType === "SUPER_ADMIN") {
|
||||||
// SUPER_ADMIN: 권한 그룹 체크 없이 해당 회사의 모든 메뉴 표시
|
// SUPER_ADMIN: 권한 그룹 체크 없이 해당 회사의 모든 메뉴 표시
|
||||||
logger.info(`✅ 좌측 사이드바 (SUPER_ADMIN): 회사 ${userCompanyCode}의 모든 메뉴 표시`);
|
logger.info(`✅ 좌측 사이드바 (SUPER_ADMIN): 회사 ${userCompanyCode}의 모든 메뉴 표시`);
|
||||||
|
|
@ -488,7 +471,6 @@ export class AdminService {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// 2. 회사별 필터링 조건 생성
|
// 2. 회사별 필터링 조건 생성
|
||||||
let companyFilter = "";
|
let companyFilter = "";
|
||||||
|
|
|
||||||
|
|
@ -587,4 +587,3 @@ const result = await executeNodeFlow(flowId, {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -360,4 +360,3 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -346,4 +346,3 @@ const getComponentValue = (componentId: string) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,4 +127,3 @@ export default function ScreenManagementPage() {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,4 +140,3 @@ export const useActiveTabOptional = () => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -197,4 +197,3 @@ export function applyAutoFillToFormData(
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -299,20 +299,6 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
|
||||||
// 🆕 modalDataStore에서 선택된 데이터 확인 (분할 패널 등에서 저장됨)
|
// 🆕 modalDataStore에서 선택된 데이터 확인 (분할 패널 등에서 저장됨)
|
||||||
const [modalStoreData, setModalStoreData] = useState<Record<string, any[]>>({});
|
const [modalStoreData, setModalStoreData] = useState<Record<string, any[]>>({});
|
||||||
|
|
||||||
// 🆕 splitPanelContext?.selectedLeftData를 로컬 상태로 추적 (리렌더링 보장)
|
|
||||||
const [trackedSelectedLeftData, setTrackedSelectedLeftData] = useState<Record<string, any> | null>(null);
|
|
||||||
|
|
||||||
// splitPanelContext?.selectedLeftData 변경 감지 및 로컬 상태 동기화
|
|
||||||
useEffect(() => {
|
|
||||||
const newData = splitPanelContext?.selectedLeftData ?? null;
|
|
||||||
setTrackedSelectedLeftData(newData);
|
|
||||||
console.log("🔄 [ButtonPrimary] selectedLeftData 변경 감지:", {
|
|
||||||
label: component.label,
|
|
||||||
hasData: !!newData,
|
|
||||||
dataKeys: newData ? Object.keys(newData) : [],
|
|
||||||
});
|
|
||||||
}, [splitPanelContext?.selectedLeftData, component.label]);
|
|
||||||
|
|
||||||
// modalDataStore 상태 구독 (실시간 업데이트)
|
// modalDataStore 상태 구독 (실시간 업데이트)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const actionConfig = component.componentConfig?.action;
|
const actionConfig = component.componentConfig?.action;
|
||||||
|
|
@ -371,8 +357,8 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
|
||||||
|
|
||||||
// 2. 분할 패널 좌측 선택 데이터 확인
|
// 2. 분할 패널 좌측 선택 데이터 확인
|
||||||
if (rowSelectionSource === "auto" || rowSelectionSource === "splitPanelLeft") {
|
if (rowSelectionSource === "auto" || rowSelectionSource === "splitPanelLeft") {
|
||||||
// SplitPanelContext에서 확인 (trackedSelectedLeftData 사용으로 리렌더링 보장)
|
// SplitPanelContext에서 확인
|
||||||
if (trackedSelectedLeftData && Object.keys(trackedSelectedLeftData).length > 0) {
|
if (splitPanelContext?.selectedLeftData && Object.keys(splitPanelContext.selectedLeftData).length > 0) {
|
||||||
if (!hasSelection) {
|
if (!hasSelection) {
|
||||||
hasSelection = true;
|
hasSelection = true;
|
||||||
selectionCount = 1;
|
selectionCount = 1;
|
||||||
|
|
@ -411,7 +397,7 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
|
||||||
selectionCount,
|
selectionCount,
|
||||||
selectionSource,
|
selectionSource,
|
||||||
hasSplitPanelContext: !!splitPanelContext,
|
hasSplitPanelContext: !!splitPanelContext,
|
||||||
trackedSelectedLeftData: trackedSelectedLeftData,
|
selectedLeftData: splitPanelContext?.selectedLeftData,
|
||||||
selectedRowsData: selectedRowsData?.length,
|
selectedRowsData: selectedRowsData?.length,
|
||||||
selectedRows: selectedRows?.length,
|
selectedRows: selectedRows?.length,
|
||||||
flowSelectedData: flowSelectedData?.length,
|
flowSelectedData: flowSelectedData?.length,
|
||||||
|
|
@ -443,7 +429,7 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
|
||||||
component.label,
|
component.label,
|
||||||
selectedRows,
|
selectedRows,
|
||||||
selectedRowsData,
|
selectedRowsData,
|
||||||
trackedSelectedLeftData,
|
splitPanelContext?.selectedLeftData,
|
||||||
flowSelectedData,
|
flowSelectedData,
|
||||||
splitPanelContext,
|
splitPanelContext,
|
||||||
modalStoreData,
|
modalStoreData,
|
||||||
|
|
|
||||||
|
|
@ -2043,7 +2043,7 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
return row.id || row.uuid || `row-${index}`;
|
return row.id || row.uuid || `row-${index}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleRowSelection = (rowKey: string, checked: boolean, rowData?: any) => {
|
const handleRowSelection = (rowKey: string, checked: boolean) => {
|
||||||
const newSelectedRows = new Set(selectedRows);
|
const newSelectedRows = new Set(selectedRows);
|
||||||
if (checked) {
|
if (checked) {
|
||||||
newSelectedRows.add(rowKey);
|
newSelectedRows.add(rowKey);
|
||||||
|
|
@ -2086,31 +2086,6 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🆕 분할 패널 컨텍스트에 선택된 데이터 저장/해제 (체크박스 선택 시에도 작동)
|
|
||||||
const effectiveSplitPosition = splitPanelPosition || currentSplitPosition;
|
|
||||||
if (splitPanelContext && effectiveSplitPosition === "left" && !splitPanelContext.disableAutoDataTransfer) {
|
|
||||||
if (checked && selectedRowsData.length > 0) {
|
|
||||||
// 선택된 경우: 첫 번째 선택된 데이터 저장 (또는 전달된 rowData)
|
|
||||||
const dataToStore = rowData || selectedRowsData[selectedRowsData.length - 1];
|
|
||||||
splitPanelContext.setSelectedLeftData(dataToStore);
|
|
||||||
console.log("🔗 [TableList] handleRowSelection - 분할 패널 좌측 데이터 저장:", {
|
|
||||||
rowKey,
|
|
||||||
dataToStore,
|
|
||||||
});
|
|
||||||
} else if (!checked && selectedRowsData.length === 0) {
|
|
||||||
// 모든 선택이 해제된 경우: 데이터 초기화
|
|
||||||
splitPanelContext.setSelectedLeftData(null);
|
|
||||||
console.log("🔗 [TableList] handleRowSelection - 분할 패널 좌측 데이터 초기화");
|
|
||||||
} else if (selectedRowsData.length > 0) {
|
|
||||||
// 일부 선택 해제된 경우: 남은 첫 번째 데이터로 업데이트
|
|
||||||
splitPanelContext.setSelectedLeftData(selectedRowsData[0]);
|
|
||||||
console.log("🔗 [TableList] handleRowSelection - 분할 패널 좌측 데이터 업데이트:", {
|
|
||||||
remainingCount: selectedRowsData.length,
|
|
||||||
firstData: selectedRowsData[0],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const allRowsSelected = filteredData.every((row, index) => newSelectedRows.has(getRowKey(row, index)));
|
const allRowsSelected = filteredData.every((row, index) => newSelectedRows.has(getRowKey(row, index)));
|
||||||
setIsAllSelected(allRowsSelected && filteredData.length > 0);
|
setIsAllSelected(allRowsSelected && filteredData.length > 0);
|
||||||
};
|
};
|
||||||
|
|
@ -2180,8 +2155,35 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
const rowKey = getRowKey(row, index);
|
const rowKey = getRowKey(row, index);
|
||||||
const isCurrentlySelected = selectedRows.has(rowKey);
|
const isCurrentlySelected = selectedRows.has(rowKey);
|
||||||
|
|
||||||
// handleRowSelection에서 분할 패널 데이터 처리도 함께 수행됨
|
handleRowSelection(rowKey, !isCurrentlySelected);
|
||||||
handleRowSelection(rowKey, !isCurrentlySelected, row);
|
|
||||||
|
// 🆕 분할 패널 컨텍스트에 선택된 데이터 저장 (좌측 화면인 경우)
|
||||||
|
// disableAutoDataTransfer가 true이면 자동 전달 비활성화 (버튼 클릭으로만 전달)
|
||||||
|
// currentSplitPosition을 사용하여 정확한 위치 확인 (splitPanelPosition이 없을 수 있음)
|
||||||
|
const effectiveSplitPosition = splitPanelPosition || currentSplitPosition;
|
||||||
|
|
||||||
|
console.log("🔗 [TableList] 행 클릭 - 분할 패널 위치 확인:", {
|
||||||
|
splitPanelPosition,
|
||||||
|
currentSplitPosition,
|
||||||
|
effectiveSplitPosition,
|
||||||
|
hasSplitPanelContext: !!splitPanelContext,
|
||||||
|
disableAutoDataTransfer: splitPanelContext?.disableAutoDataTransfer,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (splitPanelContext && effectiveSplitPosition === "left" && !splitPanelContext.disableAutoDataTransfer) {
|
||||||
|
if (!isCurrentlySelected) {
|
||||||
|
// 선택된 경우: 데이터 저장
|
||||||
|
splitPanelContext.setSelectedLeftData(row);
|
||||||
|
console.log("🔗 [TableList] 분할 패널 좌측 데이터 저장:", {
|
||||||
|
row,
|
||||||
|
parentDataMapping: splitPanelContext.parentDataMapping,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// 선택 해제된 경우: 데이터 초기화
|
||||||
|
splitPanelContext.setSelectedLeftData(null);
|
||||||
|
console.log("🔗 [TableList] 분할 패널 좌측 데이터 초기화");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
console.log("행 클릭:", { row, index, isSelected: !isCurrentlySelected });
|
console.log("행 클릭:", { row, index, isSelected: !isCurrentlySelected });
|
||||||
};
|
};
|
||||||
|
|
@ -3916,7 +3918,7 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
if (enterRow) {
|
if (enterRow) {
|
||||||
const rowKey = getRowKey(enterRow, rowIndex);
|
const rowKey = getRowKey(enterRow, rowIndex);
|
||||||
const isCurrentlySelected = selectedRows.has(rowKey);
|
const isCurrentlySelected = selectedRows.has(rowKey);
|
||||||
handleRowSelection(rowKey, !isCurrentlySelected, enterRow);
|
handleRowSelection(rowKey, !isCurrentlySelected);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case " ": // Space
|
case " ": // Space
|
||||||
|
|
@ -3926,7 +3928,7 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
if (spaceRow) {
|
if (spaceRow) {
|
||||||
const currentRowKey = getRowKey(spaceRow, rowIndex);
|
const currentRowKey = getRowKey(spaceRow, rowIndex);
|
||||||
const isChecked = selectedRows.has(currentRowKey);
|
const isChecked = selectedRows.has(currentRowKey);
|
||||||
handleRowSelection(currentRowKey, !isChecked, spaceRow);
|
handleRowSelection(currentRowKey, !isChecked);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "F2":
|
case "F2":
|
||||||
|
|
@ -4140,7 +4142,7 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
return (
|
return (
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={isChecked}
|
checked={isChecked}
|
||||||
onCheckedChange={(checked) => handleRowSelection(rowKey, checked as boolean, row)}
|
onCheckedChange={(checked) => handleRowSelection(rowKey, checked as boolean)}
|
||||||
aria-label={`행 ${index + 1} 선택`}
|
aria-label={`행 ${index + 1} 선택`}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1689,4 +1689,3 @@ const 출고등록_설정: ScreenSplitPanel = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -536,4 +536,3 @@ const { data: config } = await getScreenSplitPanel(screenId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -523,4 +523,3 @@ function ScreenViewPage() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue