Files
36-character-flower/src/hooks/use-period-history-vm.ts
JiaJun c3059549e6 feat(game): 实现精灵图渲染优化游戏性能
- 新增 AnimalSpriteImage 组件用于精灵图渲染
- 集成精灵图渲染到桌面版动物组件
- 集成精灵图渲染到移动版动物组件
- 重构历史记录组件使用精灵图渲染
- 更新动物覆盖层组件使用精灵图渲染
- 移除旧的单个图片资源引用
- 添加精灵图生成脚本和相关配置
- 优化启动资源加载排除精灵图源文件
- 添加精灵图位置计算工具函数
2026-06-10 16:38:00 +08:00

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,
}
}