diff --git a/apimail/api/views.py b/apimail/api/views.py index b298cb9ab93c5c31ce7d4dd20fd6f14c4b06e8bb..e0a0c062931d3146233a6316c9d200372b2dacbf 100644 --- a/apimail/api/views.py +++ b/apimail/api/views.py @@ -56,10 +56,7 @@ class ComposedMessageCreateAPIView(CreateAPIView): # in order to include request.user in data and link an # active account data = request.data - print(request) - print(kwargs) data['author'] = request.user.id - print(data) serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) diff --git a/apimail/static/apimail/assets/vue/components/MessageComposer.vue b/apimail/static/apimail/assets/vue/components/MessageComposer.vue index 843556f2398e99f14cc7a6c42255ced2856fdf5f..d33116c6d5754ebb4cf36422d3c2daeb31daf259 100644 --- a/apimail/static/apimail/assets/vue/components/MessageComposer.vue +++ b/apimail/static/apimail/assets/vue/components/MessageComposer.vue @@ -14,6 +14,7 @@ id="input-from-account" v-model="form.from_account" :options="from_account_accesses" + type="int" value-field="account.pk" text-field="account.email" > @@ -99,8 +100,21 @@ ></span> </b-col> </b-row> - <b-button type="savedraft" variant="warning" @click="saveDraft">Save draft</b-button> + <b-button type="savedraft" variant="warning" @click.stop.prevent="saveDraft"> + Save draft + </b-button> <b-button type="send" variant="success">Send</b-button> + <template v-if="saveDraftSuccessful"> + <p class="m-2 p-2 bg-success text-white"> + The message draft was successfully saved. + </p> + </template> + <template v-else-if="saveDraftSuccessful === false"> + <p class="m-2 p-2 bg-danger text-white"> + The server responded with an error, please check and try again + </p> + </template> + <span v-if="draftLastSaved" size="sm"> [last saved: {{ draftLastSaved }}]</span> </b-form> </div> </template> @@ -134,6 +148,10 @@ export default { sanitized_body_html: '', }, from_account_accesses: [], + response: null, + response_body_json: null, + saveDraftSuccessful: null, + draftLastSaved: null, } }, computed: { @@ -149,7 +167,6 @@ export default { .catch(error => console.error(error)) }, saveDraft () { - alert('saveDraft called'); fetch('/mail/api/composed_message/create', { method: 'POST', @@ -166,14 +183,21 @@ export default { 'body_text': this.form.body, 'body_html': this.form.sanitized_body_html, }) - } - ).then(function(response) { - if (!response.ok) { - console.log('Error: ' + response); - throw new Error('HTTP error, status = ' + response.status); - } - }); - alert('saveDraft done'); + }) + .then(response => { + this.response = response.clone() + if (response.ok) { + this.saveDraftSuccessful = true + this.draftLastSaved = Date().toString() + } + if (!response.ok) { + this.saveDraftSuccessful = false + // throw new Error('HTTP error, status = ' + response.status); + } + return response.json() + }) + .then(responsejson => this.response_body_json = responsejson) + .catch(error => console.error(error)) } }, mounted () { diff --git a/apimail/static/apimail/assets/vue/components/MessageContent.vue b/apimail/static/apimail/assets/vue/components/MessageContent.vue index 08429da4eeaa7ab4727cd9a81cffdbb7995a3b1a..7aaf8470f7e9854290684676d6904cff86cd2a76 100644 --- a/apimail/static/apimail/assets/vue/components/MessageContent.vue +++ b/apimail/static/apimail/assets/vue/components/MessageContent.vue @@ -27,7 +27,7 @@ <message-composer :originalmessage="message" action="reply"></message-composer> <template v-slot:modal-footer="{ cancel, }"> <b-button size="sm" variant="danger" @click="cancel()"> - Cancel + Cancel/close </b-button> </template> </b-modal>