@@ -32,6 +32,7 @@ const route = useRoute()
3232const router = useRouter ()
3333const config = useRuntimeConfig ()
3434const { lgAndUp, mdAndDown } = useDisplay ()
35+ const { formatPhoneNumber } = useFilters ()
3536const notificationsStore = useNotificationsStore ()
3637const authStore = useAuthStore ()
3738const phonesStore = usePhonesStore ()
@@ -45,6 +46,14 @@ const hideMessages = ref(true)
4546const messages = ref <Message []>([])
4647const selectedMenuItem = ref (- 1 )
4748const messageBody = ref <HTMLElement | null >(null )
49+ const form = ref <{ validate: () => Promise <{ valid: boolean }> } | null >(null )
50+
51+ const formMessageRules = [
52+ (v : string ) =>
53+ v === ' ' ||
54+ (v && v .length <= 320 ) ||
55+ ' Message must be less than 320 characters' ,
56+ ]
4857
4958let webhookChannel: Channel | null = null
5059
@@ -152,6 +161,7 @@ async function resendMessage(message: Message) {
152161 from: message .owner ,
153162 to: message .contact ,
154163 content: message .content ,
164+ sim: ' DEFAULT' ,
155165 })
156166 setTimeout (() => {
157167 selectedMenuItem .value = - 1
@@ -187,11 +197,17 @@ async function sendMessage(event: KeyboardEvent | Event) {
187197 if (event instanceof KeyboardEvent && event .shiftKey ) return
188198 if (! formMessage .value .trim ()) return
189199
200+ if (form .value ) {
201+ const { valid } = await form .value .validate ()
202+ if (! valid ) return
203+ }
204+
190205 submitting .value = true
191206 await messagesStore .sendMessage ({
192207 from: phonesStore .owner ,
193208 to: threadsStore .currentThread ! .contact ,
194209 content: formMessage .value ,
210+ sim: ' DEFAULT' ,
195211 })
196212 loadMessages (false )
197213 formMessage .value = ' '
@@ -230,7 +246,7 @@ onBeforeUnmount(() => {
230246 </VBtn >
231247 <VToolbarTitle >
232248 <span v-if =" threadsStore.currentThread" >
233- {{ useFilters().phoneNumber (threadsStore.currentThread.contact) }}
249+ {{ formatPhoneNumber (threadsStore.currentThread.contact) }}
234250 </span >
235251 </VToolbarTitle >
236252 <VSpacer />
@@ -364,7 +380,7 @@ onBeforeUnmount(() => {
364380 target =" _blank"
365381 rel =" noopener noreferrer"
366382 :href =" attachment"
367- class =" text-decoration-none text-body-medium mb-2 d-flex w-100"
383+ class =" text-decoration-none hover:text-decoration-underline text-body-medium mb-2 d-flex w-100"
368384 >
369385 <VIcon
370386 size="x-small"
@@ -454,12 +470,13 @@ onBeforeUnmount(() => {
454470 </div >
455471 <VFooter app color="#121212 ">
456472 <VContainer class="pb-0">
457- <form class =" d-flex" @submit.prevent =" sendMessage" >
473+ <VForm ref=" form" class="d-flex" @submit .prevent =" sendMessage " >
458474 <VTextField
459475 v-model =" formMessage "
460476 :disabled =" submitting || ! contactIsPhoneNumber "
461477 variant="solo"
462478 class="no-scrollbar ml-2"
479+ :rules =" formMessageRules "
463480 :placeholder ="
464481 contactIsPhoneNumber
465482 ? ' Type your message here'
@@ -485,7 +502,7 @@ onBeforeUnmount(() => {
485502 />
486503 <VIcon :icon =" mdiSend " />
487504 </VBtn >
488- </form >
505+ </VForm >
489506 </VContainer >
490507 </VFooter >
491508 </VContainer >
0 commit comments