24 lines
999 B
TypeScript
24 lines
999 B
TypeScript
import { useMemo } from 'react'
|
|
import { useSessionListQuery } from '@/apis'
|
|
import { useListStore } from '@/features/list/stores/useListStore'
|
|
import { deadlineToOrder, statusLabelToCode, toListItem } from '@/features/list/lib/adapter'
|
|
|
|
const PAGE_SIZE = 20
|
|
|
|
// 필터/정렬/페이지는 서버에 위임하고, 응답(정수 코드)을 화면용 라벨로 변환한다.
|
|
export function useList() {
|
|
const { selectedStatus, selectedDeadline, currentPage, setCurrentPage } = useListStore()
|
|
|
|
const query = useSessionListQuery({
|
|
status: selectedStatus ? statusLabelToCode(selectedStatus) : undefined,
|
|
order: selectedDeadline ? deadlineToOrder(selectedDeadline) : undefined,
|
|
page: currentPage,
|
|
page_size: PAGE_SIZE,
|
|
})
|
|
|
|
const items = useMemo(() => (query.data?.items ?? []).map(toListItem), [query.data])
|
|
const totalPages = Math.max(1, Math.ceil((query.data?.total ?? 0) / PAGE_SIZE))
|
|
|
|
return { items, isLoading: query.isLoading, totalPages, currentPage, setCurrentPage }
|
|
}
|