From ebaf4a0aa025acc049f49faf689d9ce96b72df22 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 2 Apr 2025 18:09:27 +0200 Subject: [PATCH] feat(settings): show extra settings links on user settings page --- frontend/src/components/misc/Icon.ts | 2 ++ frontend/src/modelTypes/IUserSettings.ts | 10 ++++++++++ frontend/src/models/userSettings.ts | 1 + frontend/src/views/user/Settings.vue | 22 ++++++++++++++++++++++ pkg/routes/api/v1/user_settings.go | 2 ++ pkg/routes/api/v1/user_show.go | 1 + 6 files changed, 38 insertions(+) diff --git a/frontend/src/components/misc/Icon.ts b/frontend/src/components/misc/Icon.ts index db615628f..db333c0dd 100644 --- a/frontend/src/components/misc/Icon.ts +++ b/frontend/src/components/misc/Icon.ts @@ -6,6 +6,7 @@ import { faArchive, faArrowLeft, faArrowUpFromBracket, + faArrowUpRightFromSquare, faBold, faItalic, faStrikethrough, @@ -195,6 +196,7 @@ library.add(faRulerHorizontal) library.add(faUnderline) library.add(faFaceLaugh) library.add(faExclamation) +library.add(faArrowUpRightFromSquare) // overwriting the wrong types export default FontAwesomeIcon as unknown as FontAwesomeIconFixedTypes diff --git a/frontend/src/modelTypes/IUserSettings.ts b/frontend/src/modelTypes/IUserSettings.ts index 263a0f41a..53c106b9d 100644 --- a/frontend/src/modelTypes/IUserSettings.ts +++ b/frontend/src/modelTypes/IUserSettings.ts @@ -19,6 +19,15 @@ export interface IFrontendSettings { dateDisplay: DateDisplay } +export interface IExtraSettingsLink { + text: string + url: string +} + +export interface IExtraSettingsLinks { + [key: string]: IExtraSettingsLink +} + export interface IUserSettings extends IAbstract { name: string emailRemindersEnabled: boolean @@ -31,4 +40,5 @@ export interface IUserSettings extends IAbstract { timezone: string language: SupportedLocale | null frontendSettings: IFrontendSettings + extraSettingsLinks: IExtraSettingsLinks } diff --git a/frontend/src/models/userSettings.ts b/frontend/src/models/userSettings.ts index a37374492..2dd3b9d29 100644 --- a/frontend/src/models/userSettings.ts +++ b/frontend/src/models/userSettings.ts @@ -27,6 +27,7 @@ export default class UserSettingsModel extends AbstractModel impl minimumPriority: PRIORITIES.MEDIUM, dateDisplay: DATE_DISPLAY.RELATIVE, } + extraSettingsLinks = {} constructor(data: Partial = {}) { super() diff --git a/frontend/src/views/user/Settings.vue b/frontend/src/views/user/Settings.vue index 40e1a64d8..24fd56e20 100644 --- a/frontend/src/views/user/Settings.vue +++ b/frontend/src/views/user/Settings.vue @@ -15,6 +15,24 @@ {{ title }} +
  • + + + {{ text }} + + + + + +
  • @@ -32,6 +50,8 @@ import { useConfigStore } from '@/stores/config' import { useAuthStore } from '@/stores/auth' import {useRoute} from 'vue-router' +import BaseButton from '@/components/base/BaseButton.vue' + const { t } = useI18n({useScope: 'global'}) useTitle(() => t('user.settings.title')) @@ -97,6 +117,8 @@ const navigationItems = computed(() => { return items.filter(({condition}) => condition !== false) }) + +const extraSettingsLinks = computed(() => authStore.settings.extraSettingsLinks)