mirror of
https://github.com/kevin-DL/build-gmail-clone-with-vue-3.git
synced 2026-01-24 07:55:34 +00:00
Archived Emails Screen
This commit is contained in:
@@ -30,10 +30,10 @@
|
|||||||
setup(props){
|
setup(props){
|
||||||
let emailSelection = useEmailSelection();
|
let emailSelection = useEmailSelection();
|
||||||
let numberSelected = computed(() => emailSelection.emails.size)
|
let numberSelected = computed(() => emailSelection.emails.size)
|
||||||
let numberEmails = props.emails.length
|
let numberEmails = computed(() => props.emails.length)
|
||||||
let allEmailsSelected = computed(() => numberSelected.value === numberEmails)
|
let allEmailsSelected = computed(() => numberSelected.value === numberEmails.value)
|
||||||
let someEmailsSelected = computed(() => {
|
let someEmailsSelected = computed(() => {
|
||||||
return numberSelected.value > 0 && numberSelected.value < numberEmails
|
return numberSelected.value > 0 && numberSelected.value < numberEmails.value
|
||||||
})
|
})
|
||||||
let bulkSelect = function(){
|
let bulkSelect = function(){
|
||||||
if(allEmailsSelected.value) {
|
if(allEmailsSelected.value) {
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<BulkActionBar :emails="unarchivedEmails" />
|
<button @click="selectedScreen = 'inbox'"
|
||||||
|
:disabled="selectedScreen == 'inbox'">Inbox</button>
|
||||||
|
<button @click="selectedScreen = 'archive'"
|
||||||
|
:disabled="selectedScreen == 'archive'">Archived</button>
|
||||||
|
|
||||||
|
<BulkActionBar :emails="filteredEmails" />
|
||||||
|
|
||||||
<table class="mail-table">
|
<table class="mail-table">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr v-for="email in unarchivedEmails"
|
<tr v-for="email in filteredEmails"
|
||||||
:key="email.id"
|
:key="email.id"
|
||||||
:class="['clickable', email.read ? 'read' : '']">
|
:class="['clickable', email.read ? 'read' : '']">
|
||||||
<td>
|
<td>
|
||||||
@@ -21,6 +27,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ModalView v-if="openedEmail" @closeModal="openedEmail = null">
|
<ModalView v-if="openedEmail" @closeModal="openedEmail = null">
|
||||||
<MailView :email="openedEmail" @changeEmail="changeEmail" />
|
<MailView :email="openedEmail" @changeEmail="changeEmail" />
|
||||||
</ModalView>
|
</ModalView>
|
||||||
@@ -43,13 +50,14 @@
|
|||||||
emailSelection: useEmailSelection(),
|
emailSelection: useEmailSelection(),
|
||||||
format,
|
format,
|
||||||
emails: ref(emails),
|
emails: ref(emails),
|
||||||
openedEmail: ref(null)
|
openedEmail: ref(null),
|
||||||
|
selectedScreen: ref('inbox')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
MailView,
|
MailView,
|
||||||
ModalView,
|
ModalView,
|
||||||
BulkActionBar
|
BulkActionBar,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
sortedEmails() {
|
sortedEmails() {
|
||||||
@@ -57,11 +65,19 @@
|
|||||||
return e1.sentAt < e2.sentAt ? 1 : -1
|
return e1.sentAt < e2.sentAt ? 1 : -1
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
unarchivedEmails() {
|
filteredEmails() {
|
||||||
return this.sortedEmails.filter(e => !e.archived)
|
if(this.selectedScreen == 'inbox') {
|
||||||
|
return this.sortedEmails.filter(e => !e.archived)
|
||||||
|
} else {
|
||||||
|
return this.sortedEmails.filter(e => e.archived)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
selectScreen(newScreen) {
|
||||||
|
this.selectedScreen = newScreen
|
||||||
|
this.emailSelection.clear()
|
||||||
|
},
|
||||||
openEmail(email) {
|
openEmail(email) {
|
||||||
this.openedEmail = email
|
this.openedEmail = email
|
||||||
|
|
||||||
@@ -82,7 +98,7 @@
|
|||||||
if(closeModal) { this.openedEmail = null }
|
if(closeModal) { this.openedEmail = null }
|
||||||
|
|
||||||
if(changeIndex) {
|
if(changeIndex) {
|
||||||
let emails = this.unarchivedEmails
|
let emails = this.filteredEmails
|
||||||
let currentIndex = emails.indexOf(this.openedEmail)
|
let currentIndex = emails.indexOf(this.openedEmail)
|
||||||
let newEmail = emails[currentIndex + changeIndex]
|
let newEmail = emails[currentIndex + changeIndex]
|
||||||
this.openEmail(newEmail)
|
this.openEmail(newEmail)
|
||||||
|
|||||||
Reference in New Issue
Block a user