- 新增 AnimalSpriteImage 组件用于精灵图渲染 - 集成精灵图渲染到桌面版动物组件 - 集成精灵图渲染到移动版动物组件 - 重构历史记录组件使用精灵图渲染 - 更新动物覆盖层组件使用精灵图渲染 - 移除旧的单个图片资源引用 - 添加精灵图生成脚本和相关配置 - 优化启动资源加载排除精灵图源文件 - 添加精灵图位置计算工具函数
63 lines
1.5 KiB
TypeScript
63 lines
1.5 KiB
TypeScript
import { useQuery } from '@tanstack/react-query'
|
|
import { useMemo } from 'react'
|
|
|
|
import { getGamePeriodHistory } from '@/api'
|
|
import type { GamePeriodHistoryItemDto, PeriodHistoryDisplayItem } from '@/type'
|
|
|
|
export type { PeriodHistoryDisplayItem } from '@/type'
|
|
|
|
export const DEFAULT_PERIOD_HISTORY_LIMIT = 36
|
|
|
|
function formatPeriodNo(periodNo: string) {
|
|
const [, timeSegment] = periodNo.split('-')
|
|
|
|
return timeSegment && timeSegment.length <= 8 ? timeSegment : periodNo
|
|
}
|
|
|
|
function formatResultNumber(number: number) {
|
|
return String(number).padStart(2, '0')
|
|
}
|
|
|
|
export function toPeriodHistoryDisplayItem(
|
|
item: GamePeriodHistoryItemDto,
|
|
): PeriodHistoryDisplayItem {
|
|
return {
|
|
animalId: item.result_number,
|
|
displayPeriodNo: formatPeriodNo(item.period_no),
|
|
displayResultNumber: formatResultNumber(item.result_number),
|
|
isOdd: item.result_number % 2 === 1,
|
|
openTime: item.open_time,
|
|
periodNo: item.period_no,
|
|
resultNumber: item.result_number,
|
|
}
|
|
}
|
|
|
|
export function usePeriodHistoryVm({
|
|
enabled,
|
|
limit = DEFAULT_PERIOD_HISTORY_LIMIT,
|
|
}: {
|
|
enabled: boolean
|
|
limit?: number
|
|
}) {
|
|
const query = useQuery({
|
|
queryKey: ['game', 'period-history', limit],
|
|
enabled,
|
|
queryFn: () => getGamePeriodHistory({ limit }),
|
|
refetchOnMount: 'always',
|
|
staleTime: 0,
|
|
})
|
|
|
|
const items = useMemo(
|
|
() =>
|
|
(query.data?.list ?? []).map((item) => toPeriodHistoryDisplayItem(item)),
|
|
[query.data?.list],
|
|
)
|
|
|
|
return {
|
|
isError: query.isError,
|
|
isLoading: query.isLoading,
|
|
items,
|
|
refetch: query.refetch,
|
|
}
|
|
}
|