diff --git a/frontend/composables/useShareStatus.ts b/frontend/composables/useShareStatus.ts new file mode 100644 index 0000000..92c734a --- /dev/null +++ b/frontend/composables/useShareStatus.ts @@ -0,0 +1,23 @@ +import { useShareService } from '~/services/share' + +export function useShareStatus() { + const enabled = useState('share-enabled', () => null) + const { getStatus } = useShareService() + + async function refresh() { + try { + const status = await getStatus() + enabled.value = status.enabled + } catch { + enabled.value = false + } + } + + async function ensureLoaded() { + if (enabled.value === null) { + await refresh() + } + } + + return { enabled, refresh, ensureLoaded } +} diff --git a/frontend/layouts/default.vue b/frontend/layouts/default.vue index 491e5da..70ec12b 100644 --- a/frontend/layouts/default.vue +++ b/frontend/layouts/default.vue @@ -100,6 +100,14 @@ :collapsed="sidebarIsCollapsed" @click="ui.closeMobileSidebar()" /> +
{ return roles.includes('ROLE_USER') || roles.includes('ROLE_ADMIN') }) +const { enabled: shareEnabled, ensureLoaded: ensureShareStatus } = useShareStatus() +const isDocumentsVisible = computed(() => shareEnabled.value === true) + // On mobile, sidebar is always expanded (not collapsed icon mode) const sidebarIsCollapsed = computed(() => { if (ui.sidebarOpen) return false @@ -267,13 +278,17 @@ onMounted(() => { if (isMailVisible.value) { mailStore.startPolling() } + ensureShareStatus() }) watch(() => auth.user, (user) => { if (!user) { mailStore.stopPolling() - } else if (isMailVisible.value) { - mailStore.startPolling() + } else { + if (isMailVisible.value) { + mailStore.startPolling() + } + ensureShareStatus() } })