# 공통 Hooks **경로**: `src/hooks/` --- ## 리스트 페이지 관련 ### useColumnSettings 테이블 컬럼 표시/숨기기 및 너비 관리. `IntegratedListTemplateV2`와 함께 사용. ```tsx import { useColumnSettings } from '@/hooks/useColumnSettings'; const columns = [ { key: 'name', label: '이름', width: '200px' }, { key: 'code', label: '코드', width: '150px' }, { key: 'status', label: '상태', width: '100px' }, ]; const { visibleColumns, // 현재 표시되는 컬럼 allColumnsWithVisibility, // 전체 컬럼 (visibility/locked 포함) columnWidths, // 컬럼 너비 맵 setColumnWidth, // 컬럼 너비 변경 toggleColumnVisibility, // 컬럼 표시/숨기기 토글 resetSettings, // 초기화 hasHiddenColumns, // 숨겨진 컬럼 존재 여부 } = useColumnSettings({ pageId: 'item-list', // Zustand 저장 키 (고유) columns, alwaysVisibleKeys: ['name'], // 항상 표시되는 컬럼 (숨기기 불가) }); ``` ### useListHandlers 리스트 페이지 검색, 필터, 페이지네이션 핸들러 통합. ```tsx import { useListHandlers } from '@/hooks/useListHandlers'; const { search, setSearch, pagination, handlePageChange, handleSearch } = useListHandlers({ initialSearch: '', fetchData: getItems, }); ``` ### useCRUDHandlers 생성, 수정, 삭제 핸들러 통합. ```tsx import { useCRUDHandlers } from '@/hooks/useCRUDHandlers'; const { handleCreate, handleUpdate, handleDelete, isSubmitting } = useCRUDHandlers({ createFn: createItem, updateFn: updateItem, deleteFn: deleteItems, onSuccess: () => fetchData(), }); ``` ### useDeleteDialog 삭제 확인 다이얼로그 상태 관리. ```tsx import { useDeleteDialog } from '@/hooks/useDeleteDialog'; const { isOpen, openDialog, closeDialog, confirmDelete, targetId } = useDeleteDialog({ onConfirm: async (id) => { await deleteItem(id); fetchData(); }, }); ``` --- ## 상세 페이지 관련 ### useDetailPageState 상세/수정/등록 페이지의 모드 및 상태 관리. ```tsx import { useDetailPageState } from '@/hooks/useDetailPageState'; const { mode, isEditMode, isNewMode, isViewMode } = useDetailPageState(); ``` ### useDetailData 상세 데이터 비동기 로드. ```tsx import { useDetailData } from '@/hooks/useDetailData'; const { data, isLoading, error, refetch } = useDetailData({ id: params.id, fetchFn: getItem, }); ``` --- ## 데이터 관련 ### useCommonCodes 공통 코드 조회 (상태, 분류 등). ```tsx import { useCommonCodes } from '@/hooks/useCommonCodes'; const { codes, isLoading } = useCommonCodes('item_status'); // codes: [{ id: 'active', name: '활성' }, { id: 'inactive', name: '비활성' }] ``` ### useClientList 거래처 목록 조회. ```tsx import { useClientList } from '@/hooks/useClientList'; const { clients, isLoading } = useClientList(); ``` ### useItemList 품목 목록 조회. ```tsx import { useItemList } from '@/hooks/useItemList'; const { items, isLoading } = useItemList(); ``` --- ## 유틸리티 관련 ### useDateRange 날짜 범위 상태 관리. ```tsx import { useDateRange } from '@/hooks/useDateRange'; const { startDate, endDate, setStartDate, setEndDate, reset } = useDateRange({ defaultStart: '2024-01-01', defaultEnd: '2024-12-31', }); ``` ### usePermission 권한 기반 접근 제어. ```tsx import { usePermission } from '@/hooks/usePermission'; const { canRead, canWrite, canDelete } = usePermission('item_master'); if (!canWrite) { return
수정 권한이 없습니다.
; } ``` ### useDaumPostcode 다음 우편번호 API 연동. ```tsx import { useDaumPostcode } from '@/hooks/useDaumPostcode'; const { openPostcode } = useDaumPostcode({ onComplete: (data) => { setAddress(data.address); setZipCode(data.zonecode); }, }); ```