From 5d5157b905a98a915f07a1b12f308f31c48595e5 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 24 Nov 2025 12:04:01 +0100 Subject: [PATCH] fix: hide calendar when env var FRONTEND_DISABLE_RADICALE is set to true (#1660) * fix: hide calendar when env var FRONTEND_DISABLE_RADICALE is set to true (cherry picked from commit 470caa4918da75b1a25fbd822928487865a30136) --- .woodpecker.env | 2 +- packages/web-client/src/ocs/capabilities.ts | 1 + .../composables/piniaStores/capabilities.ts | 2 ++ packages/web-runtime/src/extensions.ts | 30 ++++++++++++------- .../src/pages/account/accountLayout.vue | 20 +++++++++---- 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/.woodpecker.env b/.woodpecker.env index 89b7f82132..a14ee434a2 100644 --- a/.woodpecker.env +++ b/.woodpecker.env @@ -1,3 +1,3 @@ # The version of OpenCloud to use in pipelines -OPENCLOUD_COMMITID=cca5d1af043531dc84cb0aa3e67f9795b1a1caa3 +OPENCLOUD_COMMITID=a496b6f46b6a37e58bb57e4bfc212ace9428b744 OPENCLOUD_BRANCH=main diff --git a/packages/web-client/src/ocs/capabilities.ts b/packages/web-client/src/ocs/capabilities.ts index 2a91070f33..68b0592824 100644 --- a/packages/web-client/src/ocs/capabilities.ts +++ b/packages/web-client/src/ocs/capabilities.ts @@ -89,6 +89,7 @@ export interface Capabilities { } 'check-for-updates'?: boolean 'support-sse'?: boolean + 'support-radicale'?: boolean 'support-url-signing'?: boolean 'webdav-root'?: string } diff --git a/packages/web-pkg/src/composables/piniaStores/capabilities.ts b/packages/web-pkg/src/composables/piniaStores/capabilities.ts index 3f46579600..6ee2339935 100644 --- a/packages/web-pkg/src/composables/piniaStores/capabilities.ts +++ b/packages/web-pkg/src/composables/piniaStores/capabilities.ts @@ -77,6 +77,7 @@ export const useCapabilityStore = defineStore('capabilities', () => { /** @deprecated the server always supports this */ const supportUrlSigning = computed(() => unref(capabilities).core['support-url-signing']) const supportSSE = computed(() => unref(capabilities).core['support-sse']) + const supportRadicale = computed(() => unref(capabilities).core['support-radicale']) const personalDataExport = computed(() => unref(capabilities).graph['personal-data-export']) const status = computed(() => unref(capabilities).core.status) @@ -151,6 +152,7 @@ export const useCapabilityStore = defineStore('capabilities', () => { status, supportUrlSigning, supportSSE, + supportRadicale, personalDataExport, davReports, davTrashbin, diff --git a/packages/web-runtime/src/extensions.ts b/packages/web-runtime/src/extensions.ts index e7ca0616c9..947ac39a86 100644 --- a/packages/web-runtime/src/extensions.ts +++ b/packages/web-runtime/src/extensions.ts @@ -1,15 +1,21 @@ -import { computed, markRaw } from 'vue' +import { computed, markRaw, unref } from 'vue' import { preferencesPanelExtensionPoint, progressBarExtensionPoint } from './extensionPoints' import AppTokens from './components/Account/AppTokens.vue' import { AccountExtension, AppMenuItemExtension, CustomComponentExtension, - LoadingIndicator + LoadingIndicator, + useCapabilityStore } from '@opencloud-eu/web-pkg' +import { storeToRefs } from 'pinia' + const $gettext = (str: string) => str export const extensions = () => { + const capabilityStore = useCapabilityStore() + const { supportRadicale } = storeToRefs(capabilityStore) + return computed(() => [ { id: 'com.github.opencloud-eu.web.runtime.preferences-panels.app-tokens', @@ -28,13 +34,17 @@ export const extensions = () => { optionLabel: $gettext('Default progress bar') } } as CustomComponentExtension, - { - id: 'com.github.opencloud-eu.web.runtime.app-menu-item.Calendar', - type: 'appMenuItem', - label: () => $gettext('Calendar'), - color: '#0478d4', - icon: 'calendar', - path: '/account/calendar' - } as AppMenuItemExtension + ...(unref(supportRadicale) + ? [ + { + id: 'com.github.opencloud-eu.web.runtime.app-menu-item.Calendar', + type: 'appMenuItem', + label: () => $gettext('Calendar'), + color: '#0478d4', + icon: 'calendar', + path: '/account/calendar' + } as AppMenuItemExtension + ] + : []) ]) } diff --git a/packages/web-runtime/src/pages/account/accountLayout.vue b/packages/web-runtime/src/pages/account/accountLayout.vue index e95ca6f283..73be4e6800 100644 --- a/packages/web-runtime/src/pages/account/accountLayout.vue +++ b/packages/web-runtime/src/pages/account/accountLayout.vue @@ -19,16 +19,20 @@ import { routeToContextQuery, useActiveLocation, useAuthStore, + useCapabilityStore, useExtensionRegistry } from '@opencloud-eu/web-pkg/src' import { computed, nextTick, onBeforeUnmount, onMounted, ref, unref } from 'vue' import { preferencesPanelExtensionPoint } from '../../extensionPoints' import { useRoute } from 'vue-router' +import { storeToRefs } from 'pinia' const { $gettext } = useGettext() const extensionRegistry = useExtensionRegistry() const route = useRoute() const authStore = useAuthStore() +const capabilityStore = useCapabilityStore() +const { supportRadicale } = storeToRefs(capabilityStore) const navBarClosed = ref(false) @@ -73,12 +77,16 @@ const navItems = computed(() => { icon: 'brush-2', active: unref(isAccountExtensionsActive) }, - { - name: $gettext('Calendar'), - route: { name: 'account-calendar' }, - icon: 'calendar', - active: unref(isAccountCalendarActive) - }, + ...(unref(supportRadicale) + ? [ + { + name: $gettext('Calendar'), + route: { name: 'account-calendar' }, + icon: 'calendar', + active: unref(isAccountCalendarActive) + } + ] + : []), { name: $gettext('GDPR'), route: { name: 'account-gdpr' },