1
0
forked from mirror/misskey
misskey/packages/frontend/src/scripts/page-metadata.ts
かっこかり ac4089f37d
enhance(frontend): ウィジェットを非表示にできるPageMetaを追加 (#12456)
* (enhance) ウィジェットを非表示にできるPageMetaを追加

* fix lint

* rename

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
2023-12-08 13:06:42 +09:00

47 lines
1.2 KiB
TypeScript

/*
* 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<PageMetadata | null> | ComputedRef<PageMetadata | null>): 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<PageMetadata>) => void): void {
provide(setPageMetadata, callback);
}
export function injectPageMetadata(): PageMetadata | undefined {
return inject(pageMetadataProvider);
}