Skip to content

Commit a4d6663

Browse files
author
Jeffrey Biles
committed
Global non-persisted state with useEmailSelection composition function
1 parent c481ec8 commit a4d6663

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

src/components/BulkActionBar.vue

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<template>
2+
<div>
3+
{{emailSelection.emails.size}}
4+
</div>
5+
</template>
6+
7+
<script>
8+
import { useEmailSelection } from '../composition/useEmailSelection';
9+
10+
export default {
11+
setup(){
12+
let { emailSelection } = useEmailSelection();
13+
14+
return { emailSelection }
15+
}
16+
}
17+
</script>
18+
19+
<style scoped>
20+
21+
</style>

src/components/MailTable.vue

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<table class="mail-table">
3-
{{emailSelection.emails.size}}
3+
<BulkActionBar />
4+
45
<tbody>
56
<tr v-for="email in unarchivedEmails"
67
:key="email.id"
@@ -33,25 +34,16 @@
3334
import axios from 'axios';
3435
import MailView from '@/components/MailView.vue';
3536
import ModalView from '@/components/ModalView.vue';
36-
import { reactive } from 'vue';
37+
import BulkActionBar from '@/components/BulkActionBar.vue';
38+
import { useEmailSelection } from '../composition/useEmailSelection';
3739
3840
export default {
3941
async setup(){
4042
let response = await axios.get('http://localhost:3000/emails');
4143
let emails = response.data;
4244
let openedEmail = null;
4345
44-
45-
let emailSelection = reactive({
46-
emails: new Set(),
47-
toggle(id) {
48-
if(this.emails.has(id)) {
49-
this.emails.delete(id)
50-
} else {
51-
this.emails.add(id);
52-
}
53-
},
54-
})
46+
let { emailSelection } = useEmailSelection();
5547
5648
return {
5749
format,
@@ -62,7 +54,8 @@
6254
},
6355
components: {
6456
MailView,
65-
ModalView
57+
ModalView,
58+
BulkActionBar
6659
},
6760
computed: {
6861
unarchivedEmails(){
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { reactive } from 'vue';
2+
3+
let emails = new Set()
4+
export const useEmailSelection = function(){
5+
let emailSelection = reactive({
6+
emails: emails,
7+
toggle(id) {
8+
if(this.emails.has(id)) {
9+
this.emails.delete(id)
10+
} else {
11+
this.emails.add(id);
12+
}
13+
},
14+
})
15+
16+
return { emailSelection }
17+
}
18+
19+
export default useEmailSelection;

0 commit comments

Comments
 (0)