// State Management import { reactive, watch } from 'vue' // global mailbox info export const mailbox = reactive({ total: 0, // total number of messages in database unread: 0, // total unread messages in database count: 0, // total in mailbox or search messages: [], // current messages tags: [], // all tags selected: [], // currently selected connected: false, // websocket connection searching: false, // current search, false for none refresh: false, // to listen from MessagesMixin autoPaginating: true, // allows temporary bypass of loadMessages() via auto-pagination notificationsSupported: false, notificationsEnabled: false, appInfo: {}, // application information uiConfig: {}, // configuration for UI lastMessage: false, // return scrolling // settings showTagColors: !localStorage.getItem('hideTagColors') == '1', showHTMLCheck: !localStorage.getItem('hideHTMLCheck') == '1', showLinkCheck: !localStorage.getItem('hideLinkCheck') == '1', showSpamCheck: !localStorage.getItem('hideSpamCheck') == '1', timeZone: localStorage.getItem('timeZone') ? localStorage.getItem('timeZone') : Intl.DateTimeFormat().resolvedOptions().timeZone, }) watch( () => mailbox.count, (v) => { mailbox.selected = [] } ) watch( () => mailbox.showTagColors, (v) => { if (v) { localStorage.removeItem('hideTagColors') } else { localStorage.setItem('hideTagColors', '1') } } ) watch( () => mailbox.showHTMLCheck, (v) => { if (v) { localStorage.removeItem('hideHTMLCheck') } else { localStorage.setItem('hideHTMLCheck', '1') } } ) watch( () => mailbox.showLinkCheck, (v) => { if (v) { localStorage.removeItem('hideLinkCheck') } else { localStorage.setItem('hideLinkCheck', '1') } } ) watch( () => mailbox.showSpamCheck, (v) => { if (v) { localStorage.removeItem('hideSpamCheck') } else { localStorage.setItem('hideSpamCheck', '1') } } ) watch( () => mailbox.timeZone, (v) => { if (v == Intl.DateTimeFormat().resolvedOptions().timeZone) { localStorage.removeItem('timeZone') } else { localStorage.setItem('timeZone', v) } } )