Skip to content

Commit e1cba79

Browse files
author
Jeffrey Biles
committed
Refactor lots of non-table functionality from MailTable to MailScreen
1 parent b8dfde8 commit e1cba79

File tree

3 files changed

+54
-28
lines changed

3 files changed

+54
-28
lines changed

src/App.vue

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
<template>
2-
<div id="app">
3-
<h1>VMail Inbox</h1>
4-
2+
<div id="app">
53
<Suspense>
64
<template #default>
7-
<MailTable />
5+
<MailScreen />
86
</template>
97
<template #fallback>
108
Loading...
@@ -14,12 +12,12 @@
1412
</template>
1513

1614
<script>
17-
import MailTable from '@/components/MailTable.vue';
15+
import MailScreen from '@/components/MailScreen.vue';
1816
1917
export default {
2018
name: 'App',
2119
components: {
22-
MailTable
20+
MailScreen
2321
}
2422
};
2523
</script>

src/components/MailScreen.vue

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<template>
2+
<h1>VMail Inbox</h1>
3+
4+
<BulkActionBar :emails="unarchivedEmails" />
5+
6+
<MailTable :emails="unarchivedEmails" />
7+
</template>
8+
9+
<script>
10+
import axios from 'axios';
11+
12+
import MailTable from '@/components/MailTable.vue';
13+
import BulkActionBar from '@/components/BulkActionBar.vue';
14+
15+
export default {
16+
async setup(){
17+
let response = await axios.get('http://localhost:3000/emails');
18+
let emails = response.data;
19+
20+
return { emails }
21+
},
22+
components: {
23+
BulkActionBar,
24+
MailTable
25+
},
26+
computed: {
27+
sortedEmails(){
28+
return this.emails.sort((e1, e2) => {
29+
return e1.sentAt < e2.sentAt ? 1 : -1
30+
})
31+
},
32+
unarchivedEmails(){
33+
return this.sortedEmails.filter(e => !e.archived)
34+
},
35+
}
36+
}
37+
</script>
38+
39+
<style scoped>
40+
41+
</style>

src/components/MailTable.vue

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<template>
2-
<BulkActionBar :emails="unarchivedEmails" />
32
<table class="mail-table">
43
<tbody>
5-
<tr v-for="email in unarchivedEmails"
4+
<tr v-for="email in emails"
65
:key="email.id"
76
:class="[email.read ? 'read': '', 'clickable']"
87
@click="openEmail(email)">
@@ -30,41 +29,24 @@
3029

3130
<script>
3231
import { format } from 'date-fns';
33-
import axios from 'axios';
3432
import MailView from '@/components/MailView.vue';
3533
import ModalView from '@/components/ModalView.vue';
36-
import BulkActionBar from '@/components/BulkActionBar.vue';
3734
import { useEmailSelection } from '../composition/useEmailSelection';
3835
3936
export default {
4037
async setup(){
41-
let response = await axios.get('http://localhost:3000/emails');
42-
let emails = response.data;
4338
let openedEmail = null;
44-
4539
let { emailSelection } = useEmailSelection();
4640
4741
return {
4842
format,
49-
emails,
5043
openedEmail,
5144
emailSelection
5245
}
5346
},
5447
components: {
5548
MailView,
5649
ModalView,
57-
BulkActionBar
58-
},
59-
computed: {
60-
unarchivedEmails(){
61-
return this.sortedEmails.filter(e => !e.archived)
62-
},
63-
sortedEmails(){
64-
return this.emails.sort((e1, e2) => {
65-
return e1.sentAt < e2.sentAt ? 1 : -1
66-
})
67-
}
6850
},
6951
methods: {
7052
openEmail(email){
@@ -86,11 +68,16 @@
8668
if(closeModal) { this.openedEmail = null; return null; }
8769
8870
if(indexChange) {
89-
let emails = this.unarchivedEmails
90-
let index = emails.findIndex(e => e == email);
91-
this.openEmail(emails[index + indexChange])
71+
let index = this.emails.findIndex(e => e == email);
72+
this.openEmail(this.emails[index + indexChange])
9273
}
9374
}
75+
},
76+
props: {
77+
emails: {
78+
type: Array,
79+
required: true
80+
}
9481
}
9582
}
9683
</script>

0 commit comments

Comments
 (0)