/* * SPDX-FileCopyrightText: syuilo and other misskey contributors * SPDX-License-Identifier: AGPL-3.0-only */ import * as Misskey from 'misskey-js'; import { ComputedRef, inject, isRef, onActivated, onMounted, provide, ref, Ref } from 'vue'; export const setPageMetadata = Symbol('setPageMetadata'); export const pageMetadataProvider = Symbol('pageMetadataProvider'); export type PageMetadata = { title: string; subtitle?: string; icon?: string | null; avatar?: Misskey.entities.User | null; userName?: Misskey.entities.User | null; needWideArea?: boolean; }; export function definePageMetadata(metadata: PageMetadata | null | Ref | ComputedRef): void { const _metadata = isRef(metadata) ? metadata : ref(metadata); provide(pageMetadataProvider, _metadata); const set = inject(setPageMetadata) as any; if (set) { set(_metadata); onMounted(() => { set(_metadata); }); onActivated(() => { set(_metadata); }); } } export function provideMetadataReceiver(callback: (info: ComputedRef) => void): void { provide(setPageMetadata, callback); } export function injectPageMetadata(): PageMetadata | undefined { return inject(pageMetadataProvider); }