Skip to content

Commit a27bd13

Browse files
committedApr 13, 2022
feat(quest): add elevated quest auto focus
1 parent c0c5768 commit a27bd13

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed
 

‎src/views/Quests/Menu/AutoFocus.vue

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<script setup lang="ts">
2+
import { Checkbox } from "@/components"
3+
import { useQuestsMenuStore } from "./store"
4+
import { storeToRefs } from "pinia"
5+
import { onBeforeMount, watch } from "vue"
6+
7+
const questsMenuStore = useQuestsMenuStore()
8+
const { shouldAutoFocusLastIncompleteQuest, shouldElevateLastIncompleteQuest } = storeToRefs(questsMenuStore)
9+
10+
onBeforeMount(() => {
11+
const ul = document.querySelector<HTMLUListElement>("ul[role=list]")
12+
if (!ul) return
13+
14+
ul.innerHTML = ul.innerHTML.replaceAll("<li", "<button")
15+
ul.innerHTML = ul.innerHTML.replaceAll("</li", "</button")
16+
Array.from(ul.children).forEach((child) => {
17+
child.classList.add("button-text-left")
18+
})
19+
})
20+
21+
watch(
22+
[shouldElevateLastIncompleteQuest, shouldAutoFocusLastIncompleteQuest],
23+
([shouldElevate, shouldFocus]) => {
24+
if (!shouldElevate || !shouldFocus) return
25+
26+
/** let button transform kick in */
27+
setTimeout(() => {
28+
const quest = document.querySelector<HTMLButtonElement>("#latest")
29+
if (!quest) return
30+
quest.focus()
31+
})
32+
},
33+
{
34+
immediate: true,
35+
}
36+
)
37+
</script>
38+
39+
<template>
40+
<Checkbox
41+
:model-value="shouldElevateLastIncompleteQuest ? shouldAutoFocusLastIncompleteQuest : false"
42+
@update:modelValue="shouldAutoFocusLastIncompleteQuest = $event"
43+
:disabled="!shouldElevateLastIncompleteQuest"
44+
>
45+
<template #default> Autofocus last incomplete quest </template>
46+
<template #subtitle> Just hit space/enter! </template>
47+
</Checkbox>
48+
</template>
49+
50+
<style lang="scss">
51+
.button-text-left {
52+
text-align: left !important;
53+
}
54+
</style>

‎src/views/Quests/Menu/Incomplete.vue

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ onBeforeMount(() => {
1717
const children = Array.from(ul.children).reverse()
1818
for (const child of children) {
1919
if (child.querySelector("svg")) continue
20+
child.id = "latest"
2021
lastIncompleteElement.value = child as HTMLLIElement
2122
break
2223
}

‎src/views/Quests/Menu/Menu.vue

+2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<script setup lang="ts">
22
import Incomplete from "./Incomplete.vue"
3+
import AutoFocus from "./AutoFocus.vue"
34
45
import { Controls } from "@/components"
56
</script>
67

78
<template>
89
<Controls to=".text-center.rounded-lg.backdrop-blur-md" style="color: white">
910
<Incomplete />
11+
<AutoFocus />
1012
</Controls>
1113
</template>

‎src/views/Quests/Menu/store.ts

+2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ export const useQuestsMenuStore = defineStore(
55
"questsMenu",
66
() => {
77
const shouldElevateLastIncompleteQuest = ref(false)
8+
const shouldAutoFocusLastIncompleteQuest = ref(false)
89

910
return {
1011
shouldElevateLastIncompleteQuest,
12+
shouldAutoFocusLastIncompleteQuest,
1113
}
1214
},
1315
{

0 commit comments

Comments
 (0)
Please sign in to comment.