@@ -59,12 +59,12 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/global/MkMfm.ts b/packages/frontend/src/components/global/MkMfm.ts
index 424150e9a3..7ec2b34751 100644
--- a/packages/frontend/src/components/global/MkMfm.ts
+++ b/packages/frontend/src/components/global/MkMfm.ts
@@ -66,7 +66,7 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
- {{ i18n.tsx._aboutMisskey.thisIsModifiedVersion({ name: instance.name }) }}
+ {{ i18n.tsx._aboutMisskey.thisIsModifiedVersion({ name: instance.name ?? '' }) }}
@@ -91,7 +91,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/use/use-note-capture.ts b/packages/frontend/src/use/use-note-capture.ts
index 9cc4778edf..54d0e128e1 100644
--- a/packages/frontend/src/use/use-note-capture.ts
+++ b/packages/frontend/src/use/use-note-capture.ts
@@ -4,11 +4,11 @@
*/
import { onUnmounted } from 'vue';
-import type { Ref, ShallowRef } from 'vue';
import * as Misskey from 'misskey-js';
+import type { Ref, ShallowRef } from 'vue';
import { useStream } from '@/stream.js';
import { $i } from '@/i.js';
-import { misskeyApi } from './misskey-api.js';
+import { misskeyApi } from '@/utility/misskey-api.js';
export function useNoteCapture(props: {
rootEl: ShallowRef;
diff --git a/packages/frontend/src/utility/boost-quote.ts b/packages/frontend/src/utility/boost-quote.ts
index feb949772b..b5d2c7e6fe 100644
--- a/packages/frontend/src/utility/boost-quote.ts
+++ b/packages/frontend/src/utility/boost-quote.ts
@@ -3,11 +3,13 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { ref, Ref, computed, ComputedRef } from 'vue';
+import { ref, computed } from 'vue';
import * as Misskey from 'misskey-js';
+import type { Ref, ComputedRef } from 'vue';
+import type { MenuItem } from '@/types/menu.js';
import { i18n } from '@/i18n.js';
-import { defaultStore } from '@/store.js';
-import { MenuItem } from '@/types/menu.js';
+import { prefer } from '@/preferences';
+import { store } from '@/store.js';
/*
this script should eventually contain all Sharkey-specific bits of
@@ -30,7 +32,7 @@ export function visibilityIsAtLeast(a: Visibility | string, b: Visibility | stri
}
export function boostMenuItems(appearNote: Ref, renote: (v: Visibility, l: boolean) => void): MenuItem[] {
- const localOnly = ref(defaultStore.state.rememberNoteVisibility ? defaultStore.state.localOnly : defaultStore.state.defaultNoteLocalOnly);
+ const localOnly = ref(prefer.s.rememberNoteVisibility ? store.s.localOnly : prefer.s.defaultNoteLocalOnly);
const effectiveVisibility = (
appearNote.value.channel?.isSensitive
? smallerVisibility(appearNote.value.visibility, 'home')
@@ -83,7 +85,7 @@ export function boostMenuItems(appearNote: Ref, renote: (
export function computeRenoteTooltip(renoted: Ref): ComputedRef {
return computed(() => {
if (renoted.value) return i18n.ts.unrenote;
- if (defaultStore.state.showVisibilitySelectorOnBoost) return i18n.ts.renote;
+ if (prefer.s.showVisibilitySelectorOnBoost) return i18n.ts.renote;
return i18n.ts.renoteShift;
});
}
diff --git a/packages/frontend/src/utility/deep-equal.ts b/packages/frontend/src/utility/deep-equal.ts
index 2859641dc7..09d2ff289e 100644
--- a/packages/frontend/src/utility/deep-equal.ts
+++ b/packages/frontend/src/utility/deep-equal.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-type JsonLike = string | number | boolean | null | undefined | JsonLike[] | { [key: string]: JsonLike } | Map;
+type JsonLike = string | number | boolean | null | undefined | JsonLike[] | { [key: string]: JsonLike | undefined } | Map;
export function deepEqual(a: JsonLike, b: JsonLike): boolean {
if (a === b) return true;
diff --git a/packages/frontend/src/utility/following-feed-utils.ts b/packages/frontend/src/utility/following-feed-utils.ts
index 4d1e81a183..47692aaacf 100644
--- a/packages/frontend/src/utility/following-feed-utils.ts
+++ b/packages/frontend/src/utility/following-feed-utils.ts
@@ -10,7 +10,7 @@ import type { MenuItem } from '@/types/menu.js';
import { deepMerge } from '@/utility/merge.js';
import { i18n } from '@/i18n.js';
import { popupMenu } from '@/os.js';
-import { prefer } from '@/preferences';
+import { prefer } from '@/preferences.js';
export const followingTab = 'following' as const;
export const mutualsTab = 'mutuals' as const;
@@ -37,7 +37,7 @@ export type FollowingFeedModel = {
[Key in keyof FollowingFeedState]: WritableComputedRef;
};
-export interface FollowingFeedState {
+export type FollowingFeedState = {
withNonPublic: boolean,
withQuotes: boolean,
withBots: boolean,
@@ -45,7 +45,7 @@ export interface FollowingFeedState {
onlyFiles: boolean,
userList: FollowingFeedTab,
remoteWarningDismissed: boolean,
-}
+};
export const defaultFollowingFeedState: FollowingFeedState = {
withNonPublic: false,
@@ -169,9 +169,9 @@ export function createModel(storage?: Ref): FollowingFeedModel
};
}
-function createDefaultStorage() {
+function createDefaultStorage(): Ref {
return computed(() => ({
- state: prefer.s.followingFeed,
+ state: prefer.r.followingFeed,
save(updated: typeof prefer.s.followingFeed) {
prefer.s.followingFeed = updated;
},
diff --git a/packages/frontend/src/utility/get-note-menu.ts b/packages/frontend/src/utility/get-note-menu.ts
index 6762ce7e43..3e09c74647 100644
--- a/packages/frontend/src/utility/get-note-menu.ts
+++ b/packages/frontend/src/utility/get-note-menu.ts
@@ -196,7 +196,7 @@ export function getNoteMenu(props: {
noteId: appearNote.id,
});
- if (Date.now() - new Date(appearNote.createdAt).getTime() < 1000 * 60 && appearNote.userId === $i.id) {
+ if (Date.now() - new Date(appearNote.createdAt).getTime() < 1000 * 60 && appearNote.userId === $i?.id) {
claimAchievement('noteDeletedWithin1min');
}
});
@@ -541,7 +541,7 @@ export function getNoteMenu(props: {
};
return {
- menu: menuItems,
+ popupMenu: menuItems,
cleanup,
};
}
diff --git a/packages/frontend/src/utility/get-note-versions-menu.ts b/packages/frontend/src/utility/get-note-versions-menu.ts
index 345cec9018..f5182b1193 100644
--- a/packages/frontend/src/utility/get-note-versions-menu.ts
+++ b/packages/frontend/src/utility/get-note-versions-menu.ts
@@ -3,13 +3,19 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { Ref, defineAsyncComponent } from 'vue';
+import { defineAsyncComponent } from 'vue';
import * as Misskey from 'misskey-js';
-import { i18n } from '@/i18n.js';
-import * as os from '@/os.js';
import { misskeyApi } from './misskey-api.js';
-import { MenuItem } from '@/types/menu.js';
import { dateTimeFormat } from './intl-const.js';
+import type { Ref } from 'vue';
+import type { MenuItem } from '@/types/menu.js';
+import * as os from '@/os.js';
+
+interface NoteEdit {
+ oldDate: string;
+ updatedAt: string;
+ text: string | null;
+}
export async function getNoteVersionsMenu(props: {
note: Misskey.entities.Note;
@@ -18,7 +24,7 @@ export async function getNoteVersionsMenu(props: {
const isRenote = (
props.note.renote != null &&
props.note.text == null &&
- props.note.fileIds.length === 0 &&
+ !props.note.fileIds?.length &&
props.note.poll == null
);
@@ -26,11 +32,11 @@ export async function getNoteVersionsMenu(props: {
const cleanups = [] as (() => void)[];
- function openVersion(info): void {
+ function openVersion(info: NoteEdit): void {
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/SkOldNoteWindow.vue')), {
note: appearNote,
- oldText: info.text,
- updatedAt: info.oldDate ? info.oldDate : info.updatedAt,
+ oldText: info.text ?? '',
+ updatedAt: info.updatedAt,
}, {
closed: () => dispose(),
});
@@ -43,9 +49,7 @@ export async function getNoteVersionsMenu(props: {
await statePromise.then((versions) => {
for (const edit of versions) {
- const _time = edit.oldDate == null ? NaN :
- typeof edit.oldDate === 'number' ? edit.oldDate :
- (edit.oldDate instanceof Date ? edit.oldDate : new Date(edit.oldDate)).getTime();
+ const _time = new Date(edit.oldDate).getTime();
menu.push({
icon: 'ph-pencil-simple ph-bold ph-lg',
diff --git a/packages/frontend/src/utility/merge.ts b/packages/frontend/src/utility/merge.ts
index 6fd28bb314..6ad1577353 100644
--- a/packages/frontend/src/utility/merge.ts
+++ b/packages/frontend/src/utility/merge.ts
@@ -6,7 +6,7 @@
import { deepClone } from './clone.js';
import type { Cloneable } from './clone.js';
-export type DeepPartial = {
+export type DeepPartial = T | {
[P in keyof T]?: T[P] extends Record ? DeepPartial : T[P];
};
@@ -18,7 +18,7 @@ function isPureObject(value: unknown): value is Record {
* valueにないキーをdefからもらう(再帰的)\
* nullはそのまま、undefinedはdefの値
**/
-export function deepMerge>(value: DeepPartial, def: X): X {
+export function deepMerge>(value: DeepPartial, def: X): X {
if (isPureObject(value) && isPureObject(def)) {
const result = deepClone(value as Cloneable) as X;
for (const [k, v] of Object.entries(def) as [keyof X, X[keyof X]][]) {