diff --git a/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue b/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue new file mode 100644 index 0000000000000000000000000000000000000000..1356ff413f6cc4f74213490869966a72173036ab --- /dev/null +++ b/apimail/static/apimail/assets/vue/components/AttachmentListEditable.vue @@ -0,0 +1,45 @@ +<template> + <b-row> + <b-col class="col-lg-6"> + <b-form-file + multiple + v-model="attachments" + placeholder="Select a file, or drop it here" + drop-placeholder="Drop file here" + > + </b-form-file> + </b-col> + <b-col class="col-lg-6"> + <h3>Attachments:</h3> + <ul> + <li + is="attachment-list-item" + v-for="(attachment, index) in attachments" + :key="'att-' + index" + :attachment="attachment" + @remove="attachments.splice(index, 1)" + > + </li> + </ul> + </b-col> + </b-row> +</template> + +<script> + + import AttachmentListItem from './AttachmentListItem.vue' + + export default { + name: "attachment-list-editable", + components: { + AttachmentListItem, + }, + props: { + attachments: { + type: Array, + required: true, + } + } + } + +</script> diff --git a/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue b/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..e9f9b834c910fec9d2121e17dc65ae1943b6c921 --- /dev/null +++ b/apimail/static/apimail/assets/vue/components/AttachmentListItem.vue @@ -0,0 +1,20 @@ +<template> + <li> + {{ attachment.name }} ({{ attachment.type}}, {{ attachment.size }} bytes) + <b-button class="bg-danger p-1" size="sm" @click.stop="$emit('remove')"> + <i class="small fa fa-times text-white"></i> + </b-button> + </li> +</template> + +<script> + export default { + name: "attachment-list-item", + props: { + attachment: { + type: File, + required: true, + } + }, + } +</script> diff --git a/apimail/static/apimail/assets/vue/components/MessageComposer.vue b/apimail/static/apimail/assets/vue/components/MessageComposer.vue index 6bcaf523e2e849e85587aa4e8cd94bb513885ee7..dceed06cb0efd424ceb9b298d5ca97744e17f5e0 100644 --- a/apimail/static/apimail/assets/vue/components/MessageComposer.vue +++ b/apimail/static/apimail/assets/vue/components/MessageComposer.vue @@ -59,6 +59,13 @@ </b-form-group> </b-col> </b-row> + <b-form-group + id="attachments" + label="attachments:" + class="mb-4" + > + <attachment-list-editable :attachments="form.attachments"></attachment-list-editable> + </b-form-group> <b-form-group id="subject" label="Subject:" @@ -136,12 +143,14 @@ import Cookies from 'js-cookie' import EmailListEditable from './EmailListEditable.vue' +import AttachmentListEditable from './AttachmentListEditable.vue' var csrftoken = Cookies.get('csrftoken'); export default { name: "message-composer", components: { + AttachmentListEditable, EmailListEditable, }, props: { @@ -168,9 +177,11 @@ export default { subject: '', body: '', sanitized_body_html: '', + attachments: [], }, newcc: '', newbcc: '', + newattachment: null, from_account_accesses: [], response: null, response_body_json: null,