mirror of
https://github.com/kevin-DL/build-gmail-clone-with-vue-3.git
synced 2026-01-12 02:55:17 +00:00
43 lines
912 B
JavaScript
43 lines
912 B
JavaScript
import { reactive } from 'vue';
|
|
import axios from 'axios';
|
|
|
|
let emails = reactive(new Set())
|
|
|
|
export const useEmailSelection = function(){
|
|
let toggle = function(email) {
|
|
if(emails.has(email)) {
|
|
emails.delete(email)
|
|
} else {
|
|
emails.add(email)
|
|
}
|
|
}
|
|
let clear = () => {
|
|
emails.clear()
|
|
}
|
|
let addMultiple = (newEmails) => {
|
|
newEmails.forEach((email) => {
|
|
emails.add(email)
|
|
})
|
|
}
|
|
let forSelected = (fn) => {
|
|
emails.forEach((email) => {
|
|
fn(email);
|
|
axios.put(`http://localhost:3000/emails/${email.id}`, email)
|
|
})
|
|
}
|
|
let markRead = () => forSelected(e => e.read = true)
|
|
let markUnread = () => forSelected(e => e.read = false)
|
|
let archive = () => { forSelected(e => e.archived = true); clear() }
|
|
|
|
return {
|
|
emails,
|
|
toggle,
|
|
clear,
|
|
addMultiple,
|
|
markRead,
|
|
markUnread,
|
|
archive
|
|
}
|
|
}
|
|
|
|
export default useEmailSelection |