이미지 미리보기 기능

This commit is contained in:
kjs
2025-09-05 14:52:10 +09:00
parent dcc459850c
commit 20cdcca171
16 changed files with 1093 additions and 48 deletions

View File

@@ -1,5 +1,12 @@
import { useState, useCallback, useMemo, useEffect } from "react";
import { Company, CompanyFormData, CompanyModalState, CompanyDeleteState, CompanySearchFilter } from "@/types/company";
import {
Company,
CompanyFormData,
CompanyModalState,
CompanyDeleteState,
CompanySearchFilter,
AllDiskUsageInfo,
} from "@/types/company";
import { DEFAULT_COMPANY_FORM_DATA, COMPANY_STATUS } from "@/constants/company";
import { companyAPI } from "@/lib/api/company";
@@ -32,6 +39,10 @@ export const useCompanyManagement = () => {
targetCompany: null,
});
// 디스크 사용량 상태
const [diskUsageInfo, setDiskUsageInfo] = useState<AllDiskUsageInfo | null>(null);
const [isDiskUsageLoading, setIsDiskUsageLoading] = useState(false);
// 회사 목록 로드
const loadCompanies = useCallback(async () => {
setIsLoading(true);
@@ -58,15 +69,52 @@ export const useCompanyManagement = () => {
}
}, [searchFilter]);
// 디스크 사용량 로드
const loadDiskUsage = useCallback(async () => {
setIsDiskUsageLoading(true);
try {
const data = await companyAPI.getAllDiskUsage();
setDiskUsageInfo(data);
console.log("✅ 디스크 사용량 조회 성공:", data.summary);
} catch (err) {
console.error("❌ 디스크 사용량 조회 실패:", err);
// 디스크 사용량 조회 실패는 에러로 처리하지 않음 (선택적 기능)
} finally {
setIsDiskUsageLoading(false);
}
}, []);
// 초기 로드 및 검색 필터 변경 시 재로드
useEffect(() => {
loadCompanies();
}, [loadCompanies]);
loadDiskUsage(); // 디스크 사용량도 함께 로드
}, [loadCompanies, loadDiskUsage]);
// 필터링된 회사 목록 (이제 서버에서 필터링되므로 그대로 반환)
// 디스크 사용량 정보가 포함된 회사 목록
const companiesWithDiskUsage = useMemo(() => {
if (!diskUsageInfo) return companies;
return companies.map((company) => {
const diskUsage = diskUsageInfo.companies.find((usage) => usage.companyCode === company.company_code);
return {
...company,
diskUsage: diskUsage
? {
fileCount: diskUsage.fileCount,
totalSize: diskUsage.totalSize,
totalSizeMB: diskUsage.totalSizeMB,
lastChecked: diskUsage.lastChecked,
}
: undefined,
};
});
}, [companies, diskUsageInfo]);
// 필터링된 회사 목록 (디스크 사용량 정보 포함)
const filteredCompanies = useMemo(() => {
return companies;
}, [companies]);
return companiesWithDiskUsage;
}, [companiesWithDiskUsage]);
// 검색 필터 업데이트
const updateSearchFilter = useCallback((filter: Partial<CompanySearchFilter>) => {
@@ -225,6 +273,11 @@ export const useCompanyManagement = () => {
isLoading,
error,
// 디스크 사용량 관련
diskUsageInfo,
isDiskUsageLoading,
loadDiskUsage,
// 모달 상태
modalState,
deleteState,