フロントエンドの実装

This commit is contained in:
samunohito 2024-06-11 21:51:53 +09:00
parent fdf2b8cd0b
commit de238b70d7
1 changed files with 75 additions and 7 deletions

View File

@ -119,22 +119,25 @@ const featuredPagination = computed(() => ({
})); }));
watch(() => props.channelId, async () => { watch(() => props.channelId, async () => {
channel.value = await misskeyApi('channels/show', { const _channel = await misskeyApi('channels/show', {
channelId: props.channelId, channelId: props.channelId,
}); });
favorited.value = channel.value.isFavorited ?? false;
if (favorited.value || channel.value.isFollowing) { favorited.value = _channel.isFavorited ?? false;
if (favorited.value || _channel.isFollowing) {
tab.value = 'timeline'; tab.value = 'timeline';
} }
if ((favorited.value || channel.value.isFollowing) && channel.value.lastNotedAt) { if ((favorited.value || _channel.isFollowing) && _channel.lastNotedAt) {
const lastReadedAt: number = miLocalStorage.getItemAsJson(`channelLastReadedAt:${channel.value.id}`) ?? 0; const lastReadedAt: number = miLocalStorage.getItemAsJson(`channelLastReadedAt:${_channel.id}`) ?? 0;
const lastNotedAt = Date.parse(channel.value.lastNotedAt); const lastNotedAt = Date.parse(_channel.lastNotedAt);
if (lastNotedAt > lastReadedAt) { if (lastNotedAt > lastReadedAt) {
miLocalStorage.setItemAsJson(`channelLastReadedAt:${channel.value.id}`, lastNotedAt); miLocalStorage.setItemAsJson(`channelLastReadedAt:${_channel.id}`, lastNotedAt);
} }
} }
channel.value = _channel;
}, { immediate: true }); }, { immediate: true });
function edit() { function edit() {
@ -174,6 +177,53 @@ async function unfavorite() {
}); });
} }
async function mute() {
if (!channel.value) return;
const _channel = channel.value;
const { canceled, result: period } = await os.select({
title: i18n.ts.mutePeriod,
items: [{
value: 'indefinitely', text: i18n.ts.indefinitely,
}, {
value: 'tenMinutes', text: i18n.ts.tenMinutes,
}, {
value: 'oneHour', text: i18n.ts.oneHour,
}, {
value: 'oneDay', text: i18n.ts.oneDay,
}, {
value: 'oneWeek', text: i18n.ts.oneWeek,
}],
default: 'indefinitely',
});
if (canceled) return;
const expiresAt = period === 'indefinitely' ? null
: period === 'tenMinutes' ? Date.now() + (1000 * 60 * 10)
: period === 'oneHour' ? Date.now() + (1000 * 60 * 60)
: period === 'oneDay' ? Date.now() + (1000 * 60 * 60 * 24)
: period === 'oneWeek' ? Date.now() + (1000 * 60 * 60 * 24 * 7)
: null;
os.apiWithDialog('channels/mute/create', {
channelId: _channel.id,
expiresAt,
}).then(() => {
_channel.isMuting = true;
});
}
async function unmute() {
if (!channel.value) return;
const _channel = channel.value;
os.apiWithDialog('channels/mute/delete', {
channelId: _channel.id,
}).then(() => {
_channel.isMuting = false;
});
}
async function search() { async function search() {
if (!channel.value) return; if (!channel.value) return;
@ -229,6 +279,24 @@ const headerActions = computed(() => {
}); });
} }
if (!channel.value.isMuting) {
headerItems.push({
icon: 'ti ti-volume',
text: i18n.ts.mute,
handler: async (): Promise<void> => {
await mute();
},
});
} else {
headerItems.push({
icon: 'ti ti-volume-off',
text: i18n.ts.unmute,
handler: async (): Promise<void> => {
await unmute();
},
});
}
if (($i && $i.id === channel.value.userId) || iAmModerator) { if (($i && $i.id === channel.value.userId) || iAmModerator) {
headerItems.push({ headerItems.push({
icon: 'ti ti-settings', icon: 'ti ti-settings',