@@ -4,50 +4,23 @@ import { useLocation, useNavigate } from "react-router-dom";
44import { useShallow } from "zustand/react/shallow" ;
55import { saveScrollPosition } from "@/hooks/common/useScrollRestore" ;
66import { useRemoveGamesFromCategory } from "@/hooks/queries/useCollections" ;
7+ import { useAllGameLastPlayedMap } from "@/hooks/queries/useStats" ;
78import { snackbar } from "@/providers/snackBar" ;
8- import type { SortOption } from "@/services/invoke/types" ;
99import { useStore } from "@/store/appStore" ;
1010import { useGamePlayStore } from "@/store/gamePlayStore" ;
1111import type { GameData } from "@/types" ;
12- import { getLocalDateString } from "@/utils/dateTime" ;
1312import { getUserErrorMessage } from "@/utils/errors" ;
1413import { getGameDisplayName } from "@/utils/game" ;
1514import { CardsBatchBar } from "./CardsBatchBar" ;
15+ import { getCardSortFieldOverlay } from "./cardSortFieldOverlay" ;
1616import { RightMenuHost } from "./RightMenuHost" ;
17- import type {
18- CardSortFieldOverlay ,
19- RightMenuHostHandle ,
20- SortableCardItemProps ,
21- } from "./types" ;
17+ import type { RightMenuHostHandle , SortableCardItemProps } from "./types" ;
2218
2319interface UseCardsControllerOptions {
2420 gameIds : number [ ] ;
2521 categoryId ?: number ;
2622}
2723
28- function getCardSortFieldOverlay (
29- game : GameData ,
30- sortOption : SortOption ,
31- ) : CardSortFieldOverlay | undefined {
32- switch ( sortOption ) {
33- case "addtime" :
34- return game . created_at
35- ? { value : getLocalDateString ( game . created_at ) }
36- : undefined ;
37- case "datetime" :
38- return game . date ? { value : game . date } : undefined ;
39- case "userratingrank" : {
40- const userRating = game . custom_data ?. user_rating ;
41- return userRating ? { value : userRating . toFixed ( 1 ) } : undefined ;
42- }
43- case "bgmrank" :
44- case "vndbrank" :
45- case "lastplayed" :
46- case "namesort" :
47- return undefined ;
48- }
49- }
50-
5124export function useCardsController ( {
5225 gameIds,
5326 categoryId,
@@ -74,6 +47,13 @@ export function useCardsController({
7447 } ) ) ,
7548 ) ;
7649 const launchGame = useGamePlayStore ( ( s ) => s . launchGame ) ;
50+ const shouldShowCardSortFieldOverlay =
51+ isLibraries && showCardSortFieldOverlay ;
52+ const shouldLoadLastPlayed =
53+ shouldShowCardSortFieldOverlay && sortOption === "lastplayed" ;
54+ const lastPlayedQuery = useAllGameLastPlayedMap ( {
55+ enabled : shouldLoadLastPlayed ,
56+ } ) ;
7757 const [ batchMode , setBatchMode ] = useState ( false ) ;
7858 const [ selectedBatchGameIds , setSelectedBatchGameIds ] = useState < number [ ] > (
7959 [ ] ,
@@ -192,8 +172,14 @@ export function useCardsController({
192172 return {
193173 game,
194174 displayName : getGameDisplayName ( game ) ,
195- sortFieldOverlay : showCardSortFieldOverlay
196- ? getCardSortFieldOverlay ( game , sortOption )
175+ sortFieldOverlay : shouldShowCardSortFieldOverlay
176+ ? getCardSortFieldOverlay ( {
177+ game,
178+ sortOption,
179+ lastPlayed : lastPlayedQuery . data ?. get ( gameId ) ,
180+ language : i18n . language ,
181+ t,
182+ } )
197183 : undefined ,
198184 batch : showBatchControls
199185 ? { selected : selectedBatchGameIdSet . has ( gameId ) }
@@ -220,8 +206,10 @@ export function useCardsController({
220206 handleCardDoubleClick ,
221207 handleRemoveSingleFromCategory ,
222208 isCollectionCategory ,
209+ i18n . language ,
210+ lastPlayedQuery . data ,
211+ shouldShowCardSortFieldOverlay ,
223212 selectedBatchGameIdSet ,
224- showCardSortFieldOverlay ,
225213 showBatchControls ,
226214 sortOption ,
227215 t ,
0 commit comments