diff --git a/js/components/FolderContent.vue b/js/components/FolderContent.vue index cfd37746e2f5a27d2780fb269d4bf17cd03f8184..34ed53bdfde5e86f9b5f279dae76ded7a47e6d97 100644 --- a/js/components/FolderContent.vue +++ b/js/components/FolderContent.vue @@ -2,19 +2,17 @@ <div id="app-content"> <div id="app-content-wrapper"> <MessageList/> - <Message/> + <slot/> </div> </div> </template> <script> - import Message from "./Message"; import MessageList from "./MessageList"; export default { name: "FolderContent", components: { - Message, MessageList } } diff --git a/js/components/NewMessageDetail.vue b/js/components/NewMessageDetail.vue new file mode 100644 index 0000000000000000000000000000000000000000..2e890a0748ca7aa2e214bda5cb96db8bc44e0cb8 --- /dev/null +++ b/js/components/NewMessageDetail.vue @@ -0,0 +1,28 @@ +<template> + <div class="app-content-details"> + <Composer :draft="saveDraft" + :send="sendMessage"/> + </div> +</template> + +<script> + import Composer from "./Composer"; + + export default { + name: "NewMessageDetail", + components: { + Composer + }, + methods: { + saveDraft () { + console.info('saving new draft'); + return Promise.resolve(); + }, + sendMessage () { + console.info('sending message'); + console.info('sending message'); + return Promise.resolve(); + } + } + } +</script> diff --git a/js/mixins/SidebarItems.js b/js/mixins/SidebarItems.js new file mode 100644 index 0000000000000000000000000000000000000000..30f3088b4e4cef9be68b18ebbf4919d730d5e048 --- /dev/null +++ b/js/mixins/SidebarItems.js @@ -0,0 +1,60 @@ +import chain from "ramda/es/chain"; + +export default { + methods: { + buildMenu (accounts) { + const items = chain(account => { + let items = [] + + if (account.visible !== false) { + items.push({ + id: 'account' + account.id, + key: 'account' + account.id, + text: account.name, + bullet: account.bullet // TODO + }) + } + + return items.concat(account.folders.map(folder => { + let icon = 'folder'; + if (folder.specialUse) { + icon = folder.specialUse; + } + + return { + id: 'account' + account.id + '_' + folder.id, + key: 'account' + account.id + '_' + folder.id, + text: folder.name, + icon: 'icon-' + icon, + router: { + name: 'folder', + params: { + accountId: account.id, + folderId: folder.id, + } + }, + utils: { + counter: folder.unread, + } + } + })) + }, accounts); + + return { + id: 'accounts-list', + new: { + 'id': 'mail_new_message', + text: t('mail', 'New message'), + icon: 'icon-add', + action: () => { + this.$router.push('/new'); + } + }, + items: items, + utils: { + counter: 0 + } + } + } + } +} diff --git a/js/router.js b/js/router.js index 666e9b65d6445b70040725e9ea8475c0faf8368e..d4faa957b53e791c1e512ab9def22089b8f7ba94 100644 --- a/js/router.js +++ b/js/router.js @@ -2,6 +2,7 @@ import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home' +import NewMessage from './views/NewMessage'; import Setup from './views/Setup'; Vue.use(Router) @@ -15,6 +16,11 @@ export default new Router({ name: 'home', component: Home }, + { + path: '/new', + name: 'newMessage', + component: NewMessage + }, { path: '/accounts/:accountId/folders/:folderId', name: 'folder', @@ -26,4 +32,4 @@ export default new Router({ component: Setup } ] -}) +}); diff --git a/js/views/Home.vue b/js/views/Home.vue index 6309b163a8319b59e76a750688ed2f2a09b733b4..32756d3fb2f4d89f0f78abaae43a1e12ed264986 100644 --- a/js/views/Home.vue +++ b/js/views/Home.vue @@ -1,84 +1,35 @@ <template> <div id="content" class="mail"> <app-navigation :menu="menu"> - <AppSettingsMenu slot="settings-content" /> + <AppSettingsMenu slot="settings-content"/> </app-navigation> - <FolderContent /> + <FolderContent> + <Message/> + </FolderContent> </div> </template> <script> - import chain from "ramda/es/chain"; - import AppNavigation from "../components/core/appNavigation"; import AppSettingsMenu from "../components/AppSettingsMenu"; - import FolderContent from "../components/FolderContent" + import FolderContent from "../components/FolderContent"; + import Message from "../components/Message"; + + import SidebarItems from "../mixins/SidebarItems"; export default { name: 'home', + extends: SidebarItems, components: { + AppNavigation, AppSettingsMenu, FolderContent, - AppNavigation + Message, }, computed: { menu () { - const items = chain(account => { - let items = [] - - if (account.visible !== false) { - items.push({ - id: 'account' + account.id, - key: 'account' + account.id, - text: account.name, - bullet: account.bullet // TODO - }) - } - - return items.concat(account.folders.map(folder => { - let icon = 'folder'; - if (folder.specialUse) { - icon = folder.specialUse; - } - - return { - id: 'account' + account.id + '_' + folder.id, - key: 'account' + account.id + '_' + folder.id, - text: folder.name, - icon: 'icon-' + icon, - router: { - name: 'folder', - params: { - accountId: account.id, - folderId: folder.id, - } - }, - utils: { - counter: folder.unread, - } - } - })) - }, this.$store.state.accounts); - - return { - id: 'accounts-list', - new: { - 'id': 'mail_new_message', - text: t('mail', 'New message'), - icon: 'icon-add', - action: this.newMessage - }, - items: items, - utils: { - counter: 0 - } - } - } - }, - methods: { - newMessage () { - console.info('New message clicked'); + return this.buildMenu(this.$store.state.accounts); } } - } + }; </script> diff --git a/js/views/NewMessage.vue b/js/views/NewMessage.vue new file mode 100644 index 0000000000000000000000000000000000000000..00f788ab1e3a3b0b192dd86174d49ae934edf684 --- /dev/null +++ b/js/views/NewMessage.vue @@ -0,0 +1,35 @@ +<template> + <div id="content" class="mail"> + <app-navigation :menu="menu"> + <AppSettingsMenu slot="settings-content"/> + </app-navigation> + <FolderContent> + <NewMessageDetail/> + </FolderContent> + </div> +</template> + +<script> + import AppNavigation from "../components/core/appNavigation"; + import AppSettingsMenu from "../components/AppSettingsMenu"; + import FolderContent from "../components/FolderContent"; + + import SidebarItems from "../mixins/SidebarItems"; + import NewMessageDetail from "../components/NewMessageDetail"; + + export default { + name: 'home', + extends: SidebarItems, + components: { + NewMessageDetail, + AppNavigation, + AppSettingsMenu, + FolderContent, + }, + computed: { + menu () { + return this.buildMenu(this.$store.state.accounts); + } + } + }; +</script>