11<template >
22 <div v-if =" occupation" >
33 <p >Occupation: {{ occupation }} {{ getOccupationIcon(occupation) }}</p >
4+ <br >
5+ <div class =" flex flex-col space-y-2 max-w-56" >
6+ <p >Change Occupation:</p >
7+ <UInputMenu v-model =" chosenOccupation" :options =" availableOccupations" />
8+ <UButton :disabled =" cantChangeOccupation" @click =" changeOccupation" >
9+ <template v-if =" chosenOccupation === null " >
10+ Apply
11+ </template >
12+ <template v-else >
13+ Apply change to {{ chosenOccupation }} {{
14+ getOccupationIcon(chosenOccupation) }}
15+ </template >
16+ </UButton >
17+ </div >
18+
419 </div >
520</template >
621
@@ -19,7 +34,8 @@ const occupationIcon = {
1934 [Occupation .HUNTER ]: ' 🏹' ,
2035};
2136
22- function getOccupationIcon (occupation : Occupation ) {
37+
38+ function getOccupationIcon(occupation : Occupation ) {
2339 return occupationIcon [occupation ];
2440}
2541
@@ -31,14 +47,30 @@ const { data: occupation, refresh } = await useFetch<Occupation>(
3147 },
3248);
3349
34- let stopInterval: NodeJS .Timeout ;
50+ const availableOccupations =
51+ computed (() => Object .values (Occupation )
52+ .filter ((availableOccupation ) => availableOccupation !== occupation .value ));
53+
54+ const cantChangeOccupation =
55+ computed (() => chosenOccupation .value === null || chosenOccupation .value === occupation .value )
3556
36- onMounted (() => {
37- // Refresh data every 2.5 seconds
38- stopInterval = setInterval (refresh , 2500 );
39- });
57+ const chosenOccupation = ref <null | Occupation >(null )
58+
59+ async function changeOccupation() {
60+ await useFetch (
61+ basePath + ' occupations' ,
62+ {
63+ method: ' PUT' ,
64+ body: {
65+ occupation: chosenOccupation .value
66+ },
67+ lazy: true ,
68+ server: false ,
69+ }
70+ );
71+
72+ chosenOccupation .value = null ;
73+ await refresh ();
74+ }
4075
41- onUnmounted (() => {
42- clearInterval (stopInterval );
43- });
4476 </script >
0 commit comments