Skip to content

Commit 2af27ea

Browse files
committed
Rework status message dialog
1 parent 7031578 commit 2af27ea

File tree

2 files changed

+160
-99
lines changed

2 files changed

+160
-99
lines changed
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<script setup lang="ts">
2+
import {computed, inject, ref} from 'vue'
3+
import {useMatchStateStore} from "@/store/matchState";
4+
import type {ControlApi} from "@/providers/controlApi";
5+
import TextInput from "@/components/common/TextInput.vue";
6+
7+
const store = useMatchStateStore()
8+
const control = inject<ControlApi>('control-api')!
9+
10+
const suggestedStatusMessages = [
11+
'Vision Problems',
12+
'Rule Discussions',
13+
]
14+
15+
const dialogOpen = ref(false)
16+
const customStatusMessage = ref<string>()
17+
18+
const sendStatusMessage = (value: string) => {
19+
if (value === store.matchState.statusMessage) {
20+
return
21+
}
22+
control.SubmitChange({
23+
origin: "UI",
24+
revertible: true,
25+
change: {
26+
$case: "setStatusMessageChange",
27+
setStatusMessageChange: {
28+
statusMessage: value,
29+
}
30+
}
31+
})
32+
}
33+
34+
const clearStatusMessage = () => {
35+
if (!store.matchState.statusMessage) {
36+
return
37+
}
38+
39+
control.SubmitChange({
40+
origin: "UI",
41+
revertible: true,
42+
change: {
43+
$case: "setStatusMessageChange",
44+
setStatusMessageChange: {
45+
statusMessage: undefined,
46+
}
47+
}
48+
})
49+
}
50+
51+
const statusMessageType = computed(() => {
52+
const currentStatusMessage = store.matchState.statusMessage
53+
if (!currentStatusMessage) {
54+
return 'None'
55+
}
56+
if (suggestedStatusMessages.includes(currentStatusMessage)) {
57+
return currentStatusMessage
58+
}
59+
return 'Custom'
60+
})
61+
62+
const onCustomStatusMessageUpdated = () => {
63+
if (statusMessageType.value !== 'Custom') {
64+
return
65+
}
66+
if (customStatusMessage.value) {
67+
sendStatusMessage(customStatusMessage.value)
68+
} else {
69+
clearStatusMessage()
70+
}
71+
}
72+
73+
const onCustomStatusMessageSelected = () => {
74+
if (customStatusMessage.value) {
75+
sendStatusMessage(customStatusMessage.value)
76+
}
77+
}
78+
79+
</script>
80+
81+
<template>
82+
<q-btn
83+
label="Status Message"
84+
color="primary"
85+
@click="dialogOpen = true"
86+
/>
87+
<q-dialog v-model="dialogOpen">
88+
<q-card class="q-px-sm q-pb-md">
89+
<q-card-section class="row items-center q-pb-none">
90+
<div class="text-h6">Status Message</div>
91+
<q-space/>
92+
<q-btn icon="close" flat round dense v-close-popup/>
93+
</q-card-section>
94+
95+
<q-card-section>
96+
The status message will be broadcast and displayed on the status-board.
97+
</q-card-section>
98+
99+
<q-separator/>
100+
101+
<q-list>
102+
<q-item tag="label" v-ripple
103+
v-for="suggestedMessage in suggestedStatusMessages"
104+
:key="suggestedMessage">
105+
<q-item-section avatar>
106+
<q-radio
107+
:model-value="statusMessageType"
108+
@update:model-value="sendStatusMessage(suggestedMessage)"
109+
:val="suggestedMessage"
110+
/>
111+
</q-item-section>
112+
<q-item-section>
113+
<q-item-label>{{ suggestedMessage }}</q-item-label>
114+
</q-item-section>
115+
</q-item>
116+
117+
<q-item tag="label" v-ripple>
118+
<q-item-section avatar>
119+
<q-radio
120+
:model-value="statusMessageType"
121+
@update:model-value="onCustomStatusMessageSelected"
122+
val="Custom"
123+
/>
124+
</q-item-section>
125+
<q-item-section>
126+
<q-item-label>Custom</q-item-label>
127+
</q-item-section>
128+
</q-item>
129+
130+
<q-item>
131+
<q-item-section avatar>
132+
<TextInput
133+
label="Custom Status Message"
134+
v-model="customStatusMessage"
135+
@focusout="onCustomStatusMessageUpdated"
136+
:clearable="false"
137+
/>
138+
</q-item-section>
139+
</q-item>
140+
</q-list>
141+
142+
<q-card-actions>
143+
<q-btn
144+
v-close-popup
145+
label="Close"
146+
color="primary"
147+
/>
148+
<q-btn
149+
label="Clear"
150+
color="primary"
151+
@click="clearStatusMessage"
152+
/>
153+
</q-card-actions>
154+
</q-card>
155+
</q-dialog>
156+
</template>
157+
158+
<style scoped>
159+
160+
</style>

frontend/src/components/match/StatusMessageInput.vue

Lines changed: 0 additions & 99 deletions
This file was deleted.

0 commit comments

Comments
 (0)