Lesson 13, pt 2 - interactive select-all button

This commit is contained in:
Jeffrey Biles
2020-08-17 22:38:15 -07:00
parent 41bff32ad8
commit f094e5db1a
3 changed files with 24 additions and 5 deletions

View File

@@ -2,7 +2,8 @@
<div> <div>
<input type="checkbox" <input type="checkbox"
:checked="allEmailsSelected" :checked="allEmailsSelected"
:class="[someEmailsSelected ? 'partial-check' : '']" /> :class="[someEmailsSelected ? 'partial-check' : '']"
@click="bulkSelect" />
</div> </div>
</template> </template>
@@ -17,10 +18,18 @@
let allEmailsSelected = computed(() => numberSelected.value === numberEmails) let allEmailsSelected = computed(() => numberSelected.value === numberEmails)
let someEmailsSelected = computed(() => { let someEmailsSelected = computed(() => {
return numberSelected.value > 0 && numberSelected.value < numberEmails return numberSelected.value > 0 && numberSelected.value < numberEmails
}) })
let bulkSelect = function(){
if(allEmailsSelected.value) {
emailSelection.clear()
} else {
emailSelection.addMultiple(props.emails)
}
}
return { return {
allEmailsSelected, allEmailsSelected,
someEmailsSelected someEmailsSelected,
bulkSelect
} }
}, },
props: { props: {

View File

@@ -8,7 +8,7 @@
<td> <td>
<input type="checkbox" <input type="checkbox"
@click="emailSelection.toggle(email)" @click="emailSelection.toggle(email)"
:selected="emailSelection.emails.has(email)" /> :checked="emailSelection.emails.has(email)" />
</td> </td>
<td @click="openEmail(email)">{{email.from}}</td> <td @click="openEmail(email)">{{email.from}}</td>
<td @click="openEmail(email)"> <td @click="openEmail(email)">

View File

@@ -10,10 +10,20 @@ export const useEmailSelection = function(){
emails.add(email) emails.add(email)
} }
} }
let clear = () => {
emails.clear()
}
let addMultiple = (newEmails) => {
newEmails.forEach((email) => {
emails.add(email)
})
}
return { return {
emails, emails,
toggle toggle,
clear,
addMultiple
} }
} }