11<script setup lang="ts">
2- const { t } = useI18n ();
2+ import type { PlayerStat } from " ~~/generated/api" ;
3+
4+ const { t, te } = useI18n ();
35const api = useApi ();
46const transformer = useTransformerStore ();
57
@@ -11,8 +13,40 @@ const [categoriesRes, itemsRes, playersRes] = await Promise.all([
1113 api .players (),
1214]);
1315
14- const categories = withNoneOption (categoriesRes .data , t (" common.none" ));
15- const items = withNoneOption (itemsRes .data , t (" common.none" ));
16+ function translateCategory(name : string ) {
17+ const key = ` categories.${name } ` ;
18+ return te (key ) ? t (key ) : name ;
19+ }
20+
21+ const rawCategories = withNoneOption (categoriesRes .data , t (" common.none" ));
22+ const categories = rawCategories .map ((c ) => {
23+ return {
24+ ... c ,
25+ label: c .id === - 1 ? t (" common.none" ) : translateCategory (c .name ),
26+ };
27+ });
28+
29+ function formatItem(name : string ) {
30+ if (! name .startsWith (" minecraft:" )) return name ;
31+ const s = ` statName.${name } ` ;
32+ console .log (s );
33+ if (te (s )) return t (s );
34+ return name
35+ .slice (10 , name .length )
36+ .split (" _" )
37+ .map ((word ) => {
38+ return word .charAt (0 ).toUpperCase () + word .slice (1 );
39+ })
40+ .join (" " );
41+ }
42+
43+ const rawItems = withNoneOption (itemsRes .data , t (" common.none" ));
44+ const items = rawItems .map ((c ) => {
45+ return {
46+ ... c ,
47+ label: c .id === - 1 ? t (" common.none" ) : formatItem (c .name ),
48+ };
49+ });
1650const players = withNoneOption (playersRes .data , t (" common.none" ));
1751
1852const selectedCategory = ref (getDefaultNone (categories , t (" common.none" )));
@@ -23,26 +57,27 @@ const { data, page, maxPage, filters } = useDataTable({
2357 filters: [
2458 {
2559 key: " player" ,
26- label: t ( " filters.player" ) ,
60+ label: " filters.player" ,
2761 type: " select" ,
2862 items: players ,
2963 modelValue: selectedPlayer ,
3064 },
3165 {
3266 key: " category" ,
33- label: t ( " filters.category" ) ,
67+ label: " filters.category" ,
3468 type: " select" ,
3569 items: categories ,
3670 modelValue: selectedCategory ,
3771 },
3872 {
3973 key: " item" ,
40- label: t ( " filters.item" ) ,
74+ label: " filters.item" ,
4175 type: " select" ,
4276 items: items ,
4377 modelValue: selectedItem ,
4478 },
4579 ],
80+ t ,
4681
4782 onFetch : async (filterValues , pageNum ) => {
4883 const { category, item, player_uuid } = normalizeStatsFilters (filterValues );
@@ -67,21 +102,25 @@ const columns = computed(() => [
67102 header: t (" stats.player" ),
68103 },
69104 {
70- accessorFn : (row ) => {
105+ accessorFn : (row : PlayerStat ) => {
71106 const categoryName = transformer .getCategoryNameById (
72- row .statCategoriesId as number ,
107+ row .statCategoriesId ,
73108 );
74109 const translated = t (` categories.${categoryName } ` ) || categoryName ;
75110 return translated ;
76111 },
77112 header: t (" stats.category" ),
78113 },
79114 {
80- accessorKey: " statName" ,
115+ accessorFn : (row : PlayerStat ) => {
116+ return formatItem (row .statName );
117+ },
81118 header: t (" stats.type" ),
82119 },
83120 {
84- accessorKey: " value" ,
121+ accessorFn : (row : PlayerStat ) => {
122+ if (row .statName .endsWith (" one_cm" )) return row .value / 100 ;
123+ },
85124 header: t (" stats.value" ),
86125 },
87126]);
0 commit comments