29
29
<TicketCustomerTemplateFields v-if =" isMobileView" />
30
30
31
31
<TicketConversation class =" grow" />
32
- <div class =" m-5" >
32
+ <div
33
+ class =" m-5"
34
+ @keydown.ctrl.enter.capture.stop =" sendEmail"
35
+ @keydown.meta.enter.capture.stop =" sendEmail"
36
+ >
33
37
<TicketTextEditor
34
38
v-if =" showEditor"
35
39
ref =" editor"
46
50
theme =" gray"
47
51
variant =" solid"
48
52
:disabled =" $refs.editor.editor.isEmpty || send.loading"
49
- @click =" () => send.submit()"
53
+ :loading =" send.loading"
54
+ @click =" sendEmail"
50
55
/>
51
56
</template >
52
57
</TicketTextEditor >
61
66
62
67
<script setup lang="ts">
63
68
import { computed , onMounted , onUnmounted , provide , ref } from " vue" ;
64
- import { createResource , Button , Breadcrumbs } from " frappe-ui" ;
69
+ import { createResource , Button , Breadcrumbs , confirmDialog } from " frappe-ui" ;
65
70
import { Icon } from " @iconify/vue" ;
66
71
import { useError } from " @/composables/error" ;
67
72
import TicketConversation from " ./ticket/TicketConversation.vue" ;
@@ -70,14 +75,12 @@ import TicketFeedback from "./ticket/TicketFeedback.vue";
70
75
import TicketTextEditor from " ./ticket/TicketTextEditor.vue" ;
71
76
import { ITicket } from " ./ticket/symbols" ;
72
77
import { useRouter } from " vue-router" ;
73
- import { createToast } from " @/utils" ;
78
+ import { createToast , isContentEmpty , setupCustomActions } from " @/utils" ;
74
79
import { socket } from " @/socket" ;
75
80
import { LayoutHeader } from " @/components" ;
76
81
import TicketCustomerSidebar from " @/components/ticket/TicketCustomerSidebar.vue" ;
77
82
import { useScreenSize } from " @/composables/screen" ;
78
83
import { useConfigStore } from " @/stores/config" ;
79
- import { confirmDialog } from " frappe-ui" ;
80
- import { setupCustomActions } from " @/utils" ;
81
84
interface P {
82
85
ticketId: string ;
83
86
}
@@ -142,6 +145,13 @@ function updateField(name, value, callback = () => {}) {
142
145
callback ();
143
146
}
144
147
148
+ function sendEmail() {
149
+ if (isContentEmpty (editorContent .value ) || send .loading ) {
150
+ return ;
151
+ }
152
+ send .submit ();
153
+ }
154
+
145
155
function updateTicket(fieldname : string , value : string ) {
146
156
createResource ({
147
157
url: " frappe.client.set_value" ,
0 commit comments