feat(front): add external links in the NavBar menu

Related to #1764
This commit is contained in:
Massedil
2025-07-02 21:33:13 +02:00
parent 5b77cc17d2
commit 960b2ca4f7
4 changed files with 40 additions and 1 deletions

View File

@@ -66,6 +66,19 @@
>{{ t("Register") }}</router-link >{{ t("Register") }}</router-link
> >
</li> </li>
<li
class="m-auto"
v-for="(link, index) in externalURLSConfig"
:key="index"
>
<a
:href="link.url"
rel="noopener noreferrer ugc"
target="_blank"
class="block py-2 pr-4 pl-3 text-zinc-700 border-b border-gray-100 hover:bg-zinc-50 md:hover:bg-transparent md:border-0 md:hover:text-mbz-purple-700 md:p-0 dark:text-zinc-400 md:dark:hover:text-white dark:hover:bg-zinc-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700"
>{{ link.label }}</a
>
</li>
</ul> </ul>
</div> </div>
<div <div
@@ -268,7 +281,10 @@ import {
import { useLazyQuery, useMutation } from "@vue/apollo-composable"; import { useLazyQuery, useMutation } from "@vue/apollo-composable";
import { UPDATE_DEFAULT_ACTOR } from "@/graphql/actor"; import { UPDATE_DEFAULT_ACTOR } from "@/graphql/actor";
import { changeIdentity } from "@/utils/identity"; import { changeIdentity } from "@/utils/identity";
import { useRegistrationConfig } from "@/composition/apollo/config"; import {
useExternalURLSConfig,
useRegistrationConfig,
} from "@/composition/apollo/config";
import { useOruga } from "@oruga-ui/oruga-next"; import { useOruga } from "@oruga-ui/oruga-next";
import { import {
UNREAD_ACTOR_CONVERSATIONS, UNREAD_ACTOR_CONVERSATIONS,
@@ -283,6 +299,7 @@ const { identities } = useCurrentUserIdentities();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const { externalURLSConfig } = useExternalURLSConfig();
const { registrationsOpen, registrationsAllowlist, databaseLogin } = const { registrationsOpen, registrationsAllowlist, databaseLogin } =
useRegistrationConfig(); useRegistrationConfig();

View File

@@ -32,6 +32,22 @@ export function useAnonymousParticipationConfig() {
return { anonymousParticipationConfig, error, loading }; return { anonymousParticipationConfig, error, loading };
} }
export function useExternalURLSConfig() {
const {
result: configResult,
error,
loading,
} = useQuery<{
config: Pick<IConfig, "externalUrls">;
}>(CONFIG);
const externalURLSConfig = computed(
() => configResult.value?.config?.externalUrls
);
return { externalURLSConfig, error, loading };
}
export function useAnonymousReportsConfig() { export function useAnonymousReportsConfig() {
const { const {
result: configResult, result: configResult,

View File

@@ -20,6 +20,11 @@ export const CONFIG = gql`
languages languages
primaryColor primaryColor
secondaryColor secondaryColor
externalUrls {
label
url
enabled
}
instanceLogo { instanceLogo {
url url
} }

View File

@@ -37,6 +37,7 @@ export interface IConfig {
longDescription: string; longDescription: string;
contact: string; contact: string;
slogan: string; slogan: string;
externalUrls: { url: string; label: string; enabled: boolean }[];
instanceLogo: { url: string }; instanceLogo: { url: string };
defaultPicture: { url: string }; defaultPicture: { url: string };
primaryColor: string; primaryColor: string;