summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-06-03 07:37:08 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2025-06-03 07:37:08 +0900
commit93d17aff6ce80b4fdd29f2038087b2e18614772d (patch)
treeffbc687c0bb358f9fd00d836882d5c5152b692bf /packages/frontend
parentenhance(frontend): IDにUUIDを使うのをやめる (#16138) (diff)
downloadmisskey-93d17aff6ce80b4fdd29f2038087b2e18614772d.tar.gz
misskey-93d17aff6ce80b4fdd29f2038087b2e18614772d.tar.bz2
misskey-93d17aff6ce80b4fdd29f2038087b2e18614772d.zip
refactor(frontend): ID生成処理を統一
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/components/MkInput.vue3
-rw-r--r--packages/frontend/src/components/MkSparkle.vue3
-rw-r--r--packages/frontend/src/components/MkTutorialDialog.Note.vue3
-rw-r--r--packages/frontend/src/pages/admin/announcements.vue3
-rw-r--r--packages/frontend/src/pages/admin/federation-job-queue.chart.vue3
-rw-r--r--packages/frontend/src/pages/admin/overview.queue.vue3
-rw-r--r--packages/frontend/src/pages/admin/overview.vue3
-rw-r--r--packages/frontend/src/pages/reversi/game.board.vue3
-rw-r--r--packages/frontend/src/pages/settings/navbar.vue7
-rw-r--r--packages/frontend/src/pages/settings/preferences.vue3
-rw-r--r--packages/frontend/src/pages/settings/profile.vue5
-rw-r--r--packages/frontend/src/utility/drive.ts3
-rw-r--r--packages/frontend/src/widgets/WidgetAiscript.vue5
-rw-r--r--packages/frontend/src/widgets/WidgetJobQueue.vue3
-rw-r--r--packages/frontend/src/widgets/server-metric/cpu-mem.vue2
-rw-r--r--packages/frontend/src/widgets/server-metric/net.vue3
16 files changed, 35 insertions, 20 deletions
diff --git a/packages/frontend/src/components/MkInput.vue b/packages/frontend/src/components/MkInput.vue
index b34b7aaf60..cc7ad8bb78 100644
--- a/packages/frontend/src/components/MkInput.vue
+++ b/packages/frontend/src/components/MkInput.vue
@@ -52,6 +52,7 @@ import type { SuggestionType } from '@/utility/autocomplete.js';
import MkButton from '@/components/MkButton.vue';
import { i18n } from '@/i18n.js';
import { Autocomplete } from '@/utility/autocomplete.js';
+import { genId } from '@/utility/id.js';
const props = defineProps<{
modelValue: string | number | null;
@@ -87,7 +88,7 @@ const emit = defineEmits<{
const { modelValue, type, autofocus } = toRefs(props);
const v = ref(modelValue.value);
-const id = Math.random().toString(); // TODO: uuid?
+const id = genId();
const focused = ref(false);
const changed = ref(false);
const invalid = ref(false);
diff --git a/packages/frontend/src/components/MkSparkle.vue b/packages/frontend/src/components/MkSparkle.vue
index 2400c5ec7f..47955a7fd7 100644
--- a/packages/frontend/src/components/MkSparkle.vue
+++ b/packages/frontend/src/components/MkSparkle.vue
@@ -57,6 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { onMounted, onUnmounted, ref, useTemplateRef } from 'vue';
+import { genId } from '@/utility/id.js';
const particles = ref<{
id: string,
@@ -86,7 +87,7 @@ onMounted(() => {
const y = (Math.random() * (height.value - 64));
const sizeFactor = Math.random();
const particle = {
- id: Math.random().toString(),
+ id: genId(),
x,
y,
size: 0.2 + ((sizeFactor / 10) * 3),
diff --git a/packages/frontend/src/components/MkTutorialDialog.Note.vue b/packages/frontend/src/components/MkTutorialDialog.Note.vue
index 95f53e7635..b77e67e9c6 100644
--- a/packages/frontend/src/components/MkTutorialDialog.Note.vue
+++ b/packages/frontend/src/components/MkTutorialDialog.Note.vue
@@ -29,6 +29,7 @@ import { i18n } from '@/i18n.js';
import { globalEvents } from '@/events.js';
import { $i } from '@/i.js';
import MkNote from '@/components/MkNote.vue';
+import { genId } from '@/utility/id.js';
const props = defineProps<{
phase: 'aboutNote' | 'howToReact';
@@ -83,7 +84,7 @@ function doNotification(emoji: string): void {
if (!$i || !emoji) return;
const notification: Misskey.entities.Notification = {
- id: Math.random().toString(),
+ id: genId(),
createdAt: new Date().toUTCString(),
type: 'reaction',
reaction: emoji,
diff --git a/packages/frontend/src/pages/admin/announcements.vue b/packages/frontend/src/pages/admin/announcements.vue
index b2d7b4889a..e5903d6257 100644
--- a/packages/frontend/src/pages/admin/announcements.vue
+++ b/packages/frontend/src/pages/admin/announcements.vue
@@ -97,6 +97,7 @@ import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js';
import MkFolder from '@/components/MkFolder.vue';
import MkTextarea from '@/components/MkTextarea.vue';
+import { genId } from '@/utility/id.js';
const announcementsStatus = ref<'active' | 'archived'>('active');
@@ -117,7 +118,7 @@ watch(announcementsStatus, (to) => {
function add() {
announcements.value.unshift({
- _id: Math.random().toString(36),
+ _id: genId(),
id: null,
title: 'New announcement',
text: '',
diff --git a/packages/frontend/src/pages/admin/federation-job-queue.chart.vue b/packages/frontend/src/pages/admin/federation-job-queue.chart.vue
index 4b10d682a5..b17eceadde 100644
--- a/packages/frontend/src/pages/admin/federation-job-queue.chart.vue
+++ b/packages/frontend/src/pages/admin/federation-job-queue.chart.vue
@@ -57,6 +57,7 @@ import { misskeyApi } from '@/utility/misskey-api.js';
import { useStream } from '@/stream.js';
import { i18n } from '@/i18n.js';
import MkFolder from '@/components/MkFolder.vue';
+import { genId } from '@/utility/id.js';
const connection = markRaw(useStream().useChannel('queueStats'));
@@ -113,7 +114,7 @@ onMounted(() => {
connection.on('stats', onStats);
connection.on('statsLog', onStatsLog);
connection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 200,
});
});
diff --git a/packages/frontend/src/pages/admin/overview.queue.vue b/packages/frontend/src/pages/admin/overview.queue.vue
index cf07cddced..e7e139b74d 100644
--- a/packages/frontend/src/pages/admin/overview.queue.vue
+++ b/packages/frontend/src/pages/admin/overview.queue.vue
@@ -41,6 +41,7 @@ import XChart from './overview.queue.chart.vue';
import type { ApQueueDomain } from '@/pages/admin/queue.vue';
import number from '@/filters/number.js';
import { useStream } from '@/stream.js';
+import { genId } from '@/utility/id.js';
const connection = markRaw(useStream().useChannel('queueStats'));
@@ -92,7 +93,7 @@ onMounted(() => {
connection.on('stats', onStats);
connection.on('statsLog', onStatsLog);
connection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 100,
});
});
diff --git a/packages/frontend/src/pages/admin/overview.vue b/packages/frontend/src/pages/admin/overview.vue
index caa888b51d..2ad5173618 100644
--- a/packages/frontend/src/pages/admin/overview.vue
+++ b/packages/frontend/src/pages/admin/overview.vue
@@ -84,6 +84,7 @@ import { useStream } from '@/stream.js';
import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js';
import MkFoldableSection from '@/components/MkFoldableSection.vue';
+import { genId } from '@/utility/id.js';
const rootEl = useTemplateRef('rootEl');
const serverInfo = ref<Misskey.entities.ServerInfoResponse | null>(null);
@@ -170,7 +171,7 @@ onMounted(async () => {
nextTick(() => {
queueStatsConnection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 100,
});
});
diff --git a/packages/frontend/src/pages/reversi/game.board.vue b/packages/frontend/src/pages/reversi/game.board.vue
index c0c90cb993..69429728d0 100644
--- a/packages/frontend/src/pages/reversi/game.board.vue
+++ b/packages/frontend/src/pages/reversi/game.board.vue
@@ -158,6 +158,7 @@ import { userPage } from '@/filters/user.js';
import * as sound from '@/utility/sound.js';
import * as os from '@/os.js';
import { confetti } from '@/utility/confetti.js';
+import { genId } from '@/utility/id.js';
const $i = ensureSignin();
@@ -273,7 +274,7 @@ function putStone(pos: number) {
playbackRate: 1,
});
- const id = Math.random().toString(36).slice(2);
+ const id = genId();
props.connection!.send('putStone', {
pos: pos,
id,
diff --git a/packages/frontend/src/pages/settings/navbar.vue b/packages/frontend/src/pages/settings/navbar.vue
index ef698fcd6e..e57195c8a2 100644
--- a/packages/frontend/src/pages/settings/navbar.vue
+++ b/packages/frontend/src/pages/settings/navbar.vue
@@ -70,11 +70,12 @@ import { definePage } from '@/page.js';
import { prefer } from '@/preferences.js';
import { PREF_DEF } from '@/preferences/def.js';
import { getInitialPrefValue } from '@/preferences/manager.js';
+import { genId } from '@/utility/id.js';
const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
const items = ref(prefer.s.menu.map(x => ({
- id: Math.random().toString(),
+ id: genId(),
type: x,
})));
@@ -93,7 +94,7 @@ async function addItem() {
});
if (canceled) return;
items.value = [...items.value, {
- id: Math.random().toString(),
+ id: genId(),
type: item,
}];
}
@@ -108,7 +109,7 @@ async function save() {
function reset() {
items.value = getInitialPrefValue('menu').map(x => ({
- id: Math.random().toString(),
+ id: genId(),
type: x,
}));
}
diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue
index 05e491ae37..678cfb93c0 100644
--- a/packages/frontend/src/pages/settings/preferences.vue
+++ b/packages/frontend/src/pages/settings/preferences.vue
@@ -796,6 +796,7 @@ import { globalEvents } from '@/events.js';
import { claimAchievement } from '@/utility/achievements.js';
import { instance } from '@/instance.js';
import { ensureSignin } from '@/i.js';
+import { genId } from '@/utility/id.js';
const $i = ensureSignin();
@@ -1009,7 +1010,7 @@ let smashTimer: number | null = null;
function testNotification(): void {
const notification: Misskey.entities.Notification = {
- id: Math.random().toString(),
+ id: genId(),
createdAt: new Date().toUTCString(),
isRead: false,
type: 'test',
diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue
index cd1565f39e..ce7f31cd23 100644
--- a/packages/frontend/src/pages/settings/profile.vue
+++ b/packages/frontend/src/pages/settings/profile.vue
@@ -171,6 +171,7 @@ import { claimAchievement } from '@/utility/achievements.js';
import { store } from '@/store.js';
import MkInfo from '@/components/MkInfo.vue';
import MkTextarea from '@/components/MkTextarea.vue';
+import { genId } from '@/utility/id.js';
const $i = ensureSignin();
@@ -199,12 +200,12 @@ watch(() => profile, () => {
deep: true,
});
-const fields = ref($i.fields.map(field => ({ id: Math.random().toString(), name: field.name, value: field.value })) ?? []);
+const fields = ref($i.fields.map(field => ({ id: genId(), name: field.name, value: field.value })) ?? []);
const fieldEditMode = ref(false);
function addField() {
fields.value.push({
- id: Math.random().toString(),
+ id: genId(),
name: '',
value: '',
});
diff --git a/packages/frontend/src/utility/drive.ts b/packages/frontend/src/utility/drive.ts
index fcc847653d..0e10f80145 100644
--- a/packages/frontend/src/utility/drive.ts
+++ b/packages/frontend/src/utility/drive.ts
@@ -15,6 +15,7 @@ import { $i } from '@/i.js';
import { instance } from '@/instance.js';
import { globalEvents } from '@/events.js';
import { getProxiedImageUrl } from '@/utility/media-proxy.js';
+import { genId } from '@/utility/id.js';
type UploadReturnType = {
filePromise: Promise<Misskey.entities.DriveFile>;
@@ -195,7 +196,7 @@ export function chooseFileFromUrl(): Promise<Misskey.entities.DriveFile> {
}).then(({ canceled, result: url }) => {
if (canceled) return;
- const marker = Math.random().toString(); // TODO: UUIDとか使う
+ const marker = genId();
// TODO: no websocketモード対応
const connection = useStream().useChannel('main');
diff --git a/packages/frontend/src/widgets/WidgetAiscript.vue b/packages/frontend/src/widgets/WidgetAiscript.vue
index c46fd81466..da71dcad29 100644
--- a/packages/frontend/src/widgets/WidgetAiscript.vue
+++ b/packages/frontend/src/widgets/WidgetAiscript.vue
@@ -29,6 +29,7 @@ import MkContainer from '@/components/MkContainer.vue';
import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
import { $i } from '@/i.js';
import { i18n } from '@/i18n.js';
+import { genId } from '@/utility/id.js';
const name = 'aiscript';
@@ -73,7 +74,7 @@ const run = async () => {
in: aiScriptReadline,
out: (value) => {
logs.value.push({
- id: Math.random().toString(),
+ id: genId(),
text: value.type === 'str' ? value.value : utils.valToString(value),
print: true,
});
@@ -81,7 +82,7 @@ const run = async () => {
log: (type, params) => {
switch (type) {
case 'end': logs.value.push({
- id: Math.random().toString(),
+ id: genId(),
text: utils.valToString(params.val, true),
print: false,
}); break;
diff --git a/packages/frontend/src/widgets/WidgetJobQueue.vue b/packages/frontend/src/widgets/WidgetJobQueue.vue
index 485e532d51..84fd4669cd 100644
--- a/packages/frontend/src/widgets/WidgetJobQueue.vue
+++ b/packages/frontend/src/widgets/WidgetJobQueue.vue
@@ -60,6 +60,7 @@ import kmg from '@/filters/kmg.js';
import * as sound from '@/utility/sound.js';
import { deepClone } from '@/utility/clone.js';
import { prefer } from '@/preferences.js';
+import { genId } from '@/utility/id.js';
const name = 'jobQueue';
@@ -144,7 +145,7 @@ connection.on('stats', onStats);
connection.on('statsLog', onStatsLog);
connection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 1,
});
diff --git a/packages/frontend/src/widgets/server-metric/cpu-mem.vue b/packages/frontend/src/widgets/server-metric/cpu-mem.vue
index 1f22e14a70..d8a876f936 100644
--- a/packages/frontend/src/widgets/server-metric/cpu-mem.vue
+++ b/packages/frontend/src/widgets/server-metric/cpu-mem.vue
@@ -106,7 +106,7 @@ onMounted(() => {
props.connection.on('stats', onStats);
props.connection.on('statsLog', onStatsLog);
props.connection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 50,
});
});
diff --git a/packages/frontend/src/widgets/server-metric/net.vue b/packages/frontend/src/widgets/server-metric/net.vue
index d78494b8d2..5e08a47100 100644
--- a/packages/frontend/src/widgets/server-metric/net.vue
+++ b/packages/frontend/src/widgets/server-metric/net.vue
@@ -52,6 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
import { onMounted, onBeforeUnmount, ref } from 'vue';
import * as Misskey from 'misskey-js';
import bytes from '@/filters/bytes.js';
+import { genId } from '@/utility/id.js';
const props = defineProps<{
connection: Misskey.ChannelConnection<Misskey.Channels['serverStats']>,
@@ -76,7 +77,7 @@ onMounted(() => {
props.connection.on('stats', onStats);
props.connection.on('statsLog', onStatsLog);
props.connection.send('requestLog', {
- id: Math.random().toString().substring(2, 10),
+ id: genId(),
length: 50,
});
});