11<script setup lang="ts">
2- import type { TableColumn } from " #ui/types" ;
3- import { useApi } from " ~/composables/useApi" ;
4- import { useDataTable } from " ~/composables/useDataTable" ;
5- import { createUuidTransformer } from " ~/utils/dataTransformers" ;
6-
2+ const { t } = useI18n ();
73const api = useApi ();
84const transformer = useTransformerStore ();
9- transformer .loadCategories ();
105
11- const categoriesResponse = await api .categories ();
12- const categories = [... categoriesResponse .data ];
13- categories .splice (0 , 0 , { id: - 1 , name: " None" });
14- const selectedCategory = ref (
15- categories .find ((p : { name: string }) => p .name === " None" ) ?? null ,
16- );
6+ void transformer .loadCategories ();
7+
8+ const [categoriesRes, itemsRes, playersRes] = await Promise .all ([
9+ api .categories (),
10+ api .items (),
11+ api .players (),
12+ ]);
1713
18- const itemsResponse = await api .items ();
19- const items = [... itemsResponse .data ];
20- items .splice (0 , 0 , { id: - 1 , name: " None" });
21- const selectedItem = ref (
22- items .find ((p : { name: string }) => p .name === " None" ) ?? null ,
23- );
14+ const categories = withNoneOption (categoriesRes .data );
15+ const items = withNoneOption (itemsRes .data );
16+ const players = withNoneOption (playersRes .data );
2417
25- const playersResponse = await api .players ();
26- const players = [... playersResponse .data ];
27- players .splice (0 , 0 , { name: " None" , playerUuid: " None" });
28- const selectedPlayer = ref (
29- players .find ((p : { name: string }) => p .name === " None" ) ?? null ,
30- );
18+ const selectedCategory = ref (getDefaultNone (categories ));
19+ const selectedItem = ref (getDefaultNone (items ));
20+ const selectedPlayer = ref (getDefaultNone (players ));
3121
3222const { data, page, maxPage, isLoading, error, filters } = useDataTable ({
3323 filters: [
@@ -53,52 +43,43 @@ const { data, page, maxPage, isLoading, error, filters } = useDataTable({
5343 modelValue: selectedItem ,
5444 },
5545 ],
56- onFetch : async (filterValues , pageNum ) => {
57- const category = filterValues .category as { name: string } | undefined ;
58- const item = filterValues .item as { name: string } | null | undefined ;
59- const player = filterValues .player as
60- | { name : string ; playerUuid : string }
61- | null
62- | undefined ;
6346
64- const categoryName =
65- category && category .name !== " None" ? category .name : undefined ;
66- const itemName = item && item .name !== " None" ? item .name : undefined ;
67- const playerUuid =
68- player && player .name !== " None" ? player .playerUuid : undefined ;
47+ onFetch : async (filterValues , pageNum ) => {
48+ const { category, item, player_uuid } = normalizeStatsFilters (filterValues );
6949
7050 const response = await api .stats ({
71- item: itemName ,
72- category: categoryName ,
73- player_uuid: playerUuid ,
51+ category ,
52+ item ,
53+ player_uuid ,
7454 limit: 25 ,
7555 page: pageNum ,
7656 });
57+
7758 return { data: response .data as any };
7859 },
79- onTransform: createUuidTransformer (" playerName" ) as any ,
60+
61+ onTransform: createUuidTransformer (" playerName" ),
8062});
8163
82- const columns: TableColumn < Record < string , unknown >>[] = [
64+ const columns = computed (() => [
8365 {
8466 accessorKey: " playerName" ,
85- header: " Player " ,
67+ header: t ( " stats.player " ) ,
8668 },
8769 {
88- accessorFn : (row ) => {
89- return transformer .getCategoryNameById (row .statCategoriesId as number );
90- },
91- header: " Category" ,
70+ accessorFn : (row ) =>
71+ transformer .getCategoryNameById (row .statCategoriesId as number ),
72+ header: t (" stats.category" ),
9273 },
9374 {
9475 accessorKey: " statName" ,
95- header: " Type " ,
76+ header: t ( " stats.type " ) ,
9677 },
9778 {
9879 accessorKey: " value" ,
99- header: " Value " ,
80+ header: t ( " stats.value " ) ,
10081 },
101- ];
82+ ]) ;
10283
10384function handlePageUpdate(newPage : number ) {
10485 page .value = newPage ;
@@ -108,7 +89,7 @@ function handlePageUpdate(newPage: number) {
10889<template >
10990 <div >
11091 <UContainer >
111- <TableHeader title="Statistics " />
92+ <TableHeader : title =" t ( ' stats.title ' ) " />
11293
11394 <DynamicTable
11495 :data =" data as any "
@@ -127,7 +108,9 @@ function handlePageUpdate(newPage: number) {
127108 </template >
128109
129110 <template #value-cell =" { cell } " >
130- <span class =" font-mono font-semibold" >{{ cell.getValue() }}</span >
111+ <span class =" font-mono font-semibold" >
112+ {{ cell.getValue() }}
113+ </span >
131114 </template >
132115 </DynamicTable >
133116 </UContainer>
0 commit comments