이미지 미리보기 기능
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user