mirror of
https://github.com/axllent/mailpit.git
synced 2025-02-03 13:12:03 +02:00
56d61ae24b
See #185
140 lines
4.0 KiB
Vue
140 lines
4.0 KiB
Vue
<script>
|
|
import NavSelected from '../components/NavSelected.vue'
|
|
import AjaxLoader from "./AjaxLoader.vue"
|
|
import CommonMixins from '../mixins/CommonMixins'
|
|
import { mailbox } from '../stores/mailbox'
|
|
import { pagination } from '../stores/pagination'
|
|
|
|
export default {
|
|
mixins: [CommonMixins],
|
|
|
|
components: {
|
|
NavSelected,
|
|
AjaxLoader,
|
|
},
|
|
|
|
props: {
|
|
modals: {
|
|
type: Boolean,
|
|
default: false,
|
|
}
|
|
},
|
|
|
|
emits: ['loadMessages'],
|
|
|
|
data() {
|
|
return {
|
|
mailbox,
|
|
pagination,
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
reloadInbox: function () {
|
|
pagination.start = 0
|
|
this.loadMessages()
|
|
},
|
|
|
|
|
|
loadMessages: function () {
|
|
this.hideNav() // hide mobile menu
|
|
this.$emit('loadMessages')
|
|
},
|
|
|
|
markAllRead: function () {
|
|
let self = this
|
|
self.put(self.resolve(`/api/v1/messages`), { 'read': true }, function (response) {
|
|
window.scrollInPlace = true
|
|
self.loadMessages()
|
|
})
|
|
},
|
|
|
|
deleteAllMessages: function () {
|
|
let self = this
|
|
self.delete(self.resolve(`/api/v1/messages`), false, function (response) {
|
|
pagination.start = 0
|
|
self.loadMessages()
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<template v-if="!modals">
|
|
<div class="list-group my-2">
|
|
<button @click="reloadInbox" class="list-group-item list-group-item-action active">
|
|
<i class="bi bi-envelope-fill me-1" v-if="mailbox.connected"></i>
|
|
<i class="bi bi-arrow-clockwise me-1" v-else></i>
|
|
<span class="ms-1">Inbox</span>
|
|
<span class="badge rounded-pill ms-1 float-end text-bg-secondary" title="Unread messages"
|
|
v-if="mailbox.unread">
|
|
{{ formatNumber(mailbox.unread) }}
|
|
</span>
|
|
</button>
|
|
|
|
<template v-if="!mailbox.selected.length">
|
|
<button class="list-group-item list-group-item-action" data-bs-toggle="modal"
|
|
data-bs-target="#MarkAllReadModal" :disabled="!mailbox.unread">
|
|
<i class="bi bi-eye-fill me-1"></i>
|
|
Mark all read
|
|
</button>
|
|
|
|
<button class="list-group-item list-group-item-action" data-bs-toggle="modal"
|
|
data-bs-target="#DeleteAllModal" :disabled="!mailbox.total">
|
|
<i class="bi bi-trash-fill me-1 text-danger"></i>
|
|
Delete all
|
|
</button>
|
|
</template>
|
|
|
|
<NavSelected @loadMessages="loadMessages" />
|
|
</div>
|
|
</template>
|
|
|
|
<template v-else>
|
|
<!-- Modals -->
|
|
<div class="modal fade" id="MarkAllReadModal" tabindex="-1" aria-labelledby="MarkAllReadModalLabel"
|
|
aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="MarkAllReadModalLabel">Mark all messages as read?</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
This will mark {{ formatNumber(mailbox.unread) }}
|
|
message<span v-if="mailbox.unread > 1">s</span> as read.
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="button" class="btn btn-success" data-bs-dismiss="modal"
|
|
v-on:click="markAllRead">Confirm</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="DeleteAllModal" tabindex="-1" aria-labelledby="DeleteAllModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="DeleteAllModalLabel">Delete all messages?</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
This will permanently delete {{ formatNumber(mailbox.count) }}
|
|
message<span v-if="mailbox.count > 1">s</span>.
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="button" class="btn btn-danger" data-bs-dismiss="modal"
|
|
v-on:click="deleteAllMessages">Delete</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<AjaxLoader :loading="loading" />
|
|
</template>
|