bb7d7e7953
LST-67 (2.5) front. Completes the Mail module. - New frontend/modules/mail/ layer (auto-detected): /mail page (3 columns), 7 components, mail service + DTO, mail store (folders/messages/unread polling). - sanitizeMailHtml util and useSystemFolderLabel composable stay global; AdminMailTab stays in /admin (service import repointed). - Consumers repointed: AdminMailTab and PM TaskModal -> ~/modules/mail/...; the store is auto-imported (Pinia storesDirs) so the layout badge/polling is unchanged. - /mail gated by the mail module: sidebar.php item with module=mail (so SidebarFilter disables /mail when the module is off); the layout filters /mail from the API sections to avoid a visual duplicate. ROLE_CLIENT exclusion kept. - i18n key sidebar.general.mail added. nuxt build passes; /mail and all other routes preserved.
25 lines
544 B
Vue
25 lines
544 B
Vue
<script setup lang="ts">
|
|
import { useMailStore } from '~/modules/mail/stores/mail'
|
|
|
|
const store = useMailStore()
|
|
const { syncing } = storeToRefs(store)
|
|
|
|
const { t } = useI18n()
|
|
|
|
async function handleRefresh(): Promise<void> {
|
|
await store.triggerSync()
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<MalioButton
|
|
:label="t('mail.actions.refresh')"
|
|
variant="secondary"
|
|
icon-name="material-symbols:refresh"
|
|
icon-position="left"
|
|
:icon-size="16"
|
|
:disabled="syncing"
|
|
@click="handleRefresh"
|
|
/>
|
|
</template>
|