enhance(frontend): 古いアンテナ・通知が削除されていくことを明記
This commit is contained in:
parent
2f4e2a7cca
commit
da502b6bb1
|
@ -5254,6 +5254,14 @@ export interface Locale extends ILocale {
|
||||||
* このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。
|
* このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。
|
||||||
*/
|
*/
|
||||||
"federationDisabled": string;
|
"federationDisabled": string;
|
||||||
|
/**
|
||||||
|
* 古い通知は自動的に削除されます。{here}から手動でリセットすることもできます。
|
||||||
|
*/
|
||||||
|
"oldNotificationsWillBeDeleted": ParameterizedString<"here">;
|
||||||
|
/**
|
||||||
|
* こちら
|
||||||
|
*/
|
||||||
|
"oldNotificationsWillBeDeletedPlaceholderHere": string;
|
||||||
"_accountSettings": {
|
"_accountSettings": {
|
||||||
/**
|
/**
|
||||||
* コンテンツの表示にログインを必須にする
|
* コンテンツの表示にログインを必須にする
|
||||||
|
@ -5766,6 +5774,10 @@ export interface Locale extends ILocale {
|
||||||
* グローバルタイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。
|
* グローバルタイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。
|
||||||
*/
|
*/
|
||||||
"global": string;
|
"global": string;
|
||||||
|
/**
|
||||||
|
* アンテナに保存されている投稿は古いものから削除されていきます。必要に応じてクリップなどに移動させてください。
|
||||||
|
*/
|
||||||
|
"antenna": string;
|
||||||
};
|
};
|
||||||
"_serverRules": {
|
"_serverRules": {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1309,6 +1309,8 @@ availableRoles: "利用可能なロール"
|
||||||
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
|
acknowledgeNotesAndEnable: "注意事項を理解した上でオンにします。"
|
||||||
federationSpecified: "このサーバーはホワイトリスト連合で運用されています。管理者が指定したサーバー以外とやり取りすることはできません。"
|
federationSpecified: "このサーバーはホワイトリスト連合で運用されています。管理者が指定したサーバー以外とやり取りすることはできません。"
|
||||||
federationDisabled: "このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。"
|
federationDisabled: "このサーバーは連合が無効化されています。他のサーバーのユーザーとやり取りすることはできません。"
|
||||||
|
oldNotificationsWillBeDeleted: "古い通知は自動的に削除されます。{here}から手動でリセットすることもできます。"
|
||||||
|
oldNotificationsWillBeDeletedPlaceholderHere: "こちら"
|
||||||
|
|
||||||
_accountSettings:
|
_accountSettings:
|
||||||
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
|
requireSigninToViewContents: "コンテンツの表示にログインを必須にする"
|
||||||
|
@ -1456,6 +1458,7 @@ _timelineDescription:
|
||||||
local: "ローカルタイムラインでは、このサーバーにいるユーザー全員の投稿を見られます。"
|
local: "ローカルタイムラインでは、このサーバーにいるユーザー全員の投稿を見られます。"
|
||||||
social: "ソーシャルタイムラインには、ホームタイムラインとローカルタイムラインの投稿が両方表示されます。"
|
social: "ソーシャルタイムラインには、ホームタイムラインとローカルタイムラインの投稿が両方表示されます。"
|
||||||
global: "グローバルタイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。"
|
global: "グローバルタイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。"
|
||||||
|
antenna: "アンテナに保存されている投稿は古いものから削除されていきます。必要に応じてクリップなどに移動させてください。"
|
||||||
|
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "新規登録前に表示する、サーバーの簡潔なルールを設定します。内容は利用規約の要約とすることを推奨します。"
|
description: "新規登録前に表示する、サーバーの簡潔なルールを設定します。内容は利用規約の要約とすることを推奨します。"
|
||||||
|
|
|
@ -38,7 +38,7 @@ import MkPullToRefresh from '@/components/MkPullToRefresh.vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
excludeTypes?: typeof notificationTypes[number][];
|
excludeTypes?: typeof notificationTypes[number][] | null;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const pagingComponent = shallowRef<InstanceType<typeof MkPagination>>();
|
const pagingComponent = shallowRef<InstanceType<typeof MkPagination>>();
|
||||||
|
|
|
@ -8,6 +8,9 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template>
|
<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template>
|
||||||
<MkSpacer :contentMax="800">
|
<MkSpacer :contentMax="800">
|
||||||
<div ref="rootEl">
|
<div ref="rootEl">
|
||||||
|
<MkInfo v-if="!defaultStore.reactiveState.timelineTutorials.value.antenna" style="margin-bottom: var(--MI-margin);" closable @close="closeTutorial()">
|
||||||
|
{{ i18n.ts._timelineDescription.antenna }}
|
||||||
|
</MkInfo>
|
||||||
<div v-if="queue > 0" :class="$style.new"><button class="_buttonPrimary" :class="$style.newButton" @click="top()">{{ i18n.ts.newNoteRecived }}</button></div>
|
<div v-if="queue > 0" :class="$style.new"><button class="_buttonPrimary" :class="$style.newButton" @click="top()">{{ i18n.ts.newNoteRecived }}</button></div>
|
||||||
<div :class="$style.tl">
|
<div :class="$style.tl">
|
||||||
<MkTimeline
|
<MkTimeline
|
||||||
|
@ -27,11 +30,13 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
import { computed, watch, ref, shallowRef } from 'vue';
|
import { computed, watch, ref, shallowRef } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import MkTimeline from '@/components/MkTimeline.vue';
|
import MkTimeline from '@/components/MkTimeline.vue';
|
||||||
|
import MkInfo from '@/components/MkInfo.vue';
|
||||||
import { scroll } from '@@/js/scroll.js';
|
import { scroll } from '@@/js/scroll.js';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { misskeyApi } from '@/scripts/misskey-api.js';
|
import { misskeyApi } from '@/scripts/misskey-api.js';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
|
import { defaultStore } from '@/store.js';
|
||||||
import { useRouter } from '@/router/supplier.js';
|
import { useRouter } from '@/router/supplier.js';
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -45,6 +50,13 @@ const queue = ref(0);
|
||||||
const rootEl = shallowRef<HTMLElement>();
|
const rootEl = shallowRef<HTMLElement>();
|
||||||
const tlEl = shallowRef<InstanceType<typeof MkTimeline>>();
|
const tlEl = shallowRef<InstanceType<typeof MkTimeline>>();
|
||||||
|
|
||||||
|
function closeTutorial() {
|
||||||
|
defaultStore.set('timelineTutorials', {
|
||||||
|
...defaultStore.state.timelineTutorials,
|
||||||
|
antenna: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function queueUpdated(q) {
|
function queueUpdated(q) {
|
||||||
queue.value = q;
|
queue.value = q;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,14 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<MkSpacer :contentMax="800">
|
<MkSpacer :contentMax="800">
|
||||||
<MkHorizontalSwipe v-model:tab="tab" :tabs="headerTabs">
|
<MkHorizontalSwipe v-model:tab="tab" :tabs="headerTabs">
|
||||||
<div v-if="tab === 'all'" key="all">
|
<div v-if="tab === 'all'" key="all">
|
||||||
|
<MkInfo v-if="!defaultStore.reactiveState.notificationTutorial.value" style="margin-bottom: var(--MI-margin);" closable @close="closeTutorial()">
|
||||||
|
<I18n :src="i18n.ts.oldNotificationsWillBeDeleted" tag="span">
|
||||||
|
<template #here>
|
||||||
|
<MkA class="_link" to="/settings/notifications">{{ i18n.ts.oldNotificationsWillBeDeletedPlaceholderHere }}</MkA>
|
||||||
|
</template>
|
||||||
|
</I18n>
|
||||||
|
</MkInfo>
|
||||||
|
|
||||||
<XNotifications :class="$style.notifications" :excludeTypes="excludeTypes"/>
|
<XNotifications :class="$style.notifications" :excludeTypes="excludeTypes"/>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="tab === 'mentions'" key="mention">
|
<div v-else-if="tab === 'mentions'" key="mention">
|
||||||
|
@ -25,17 +33,24 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import XNotifications from '@/components/MkNotifications.vue';
|
import XNotifications from '@/components/MkNotifications.vue';
|
||||||
|
import MkInfo from '@/components/MkInfo.vue';
|
||||||
import MkNotes from '@/components/MkNotes.vue';
|
import MkNotes from '@/components/MkNotes.vue';
|
||||||
import MkHorizontalSwipe from '@/components/MkHorizontalSwipe.vue';
|
import MkHorizontalSwipe from '@/components/MkHorizontalSwipe.vue';
|
||||||
import * as os from '@/os.js';
|
import * as os from '@/os.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
|
import { defaultStore } from '@/store.js';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||||
import { notificationTypes } from '@@/js/const.js';
|
import { notificationTypes } from '@@/js/const.js';
|
||||||
|
import I18n from '@/components/global/I18n.vue';
|
||||||
|
|
||||||
const tab = ref('all');
|
const tab = ref('all');
|
||||||
const includeTypes = ref<string[] | null>(null);
|
const includeTypes = ref<string[] | null>(null);
|
||||||
const excludeTypes = computed(() => includeTypes.value ? notificationTypes.filter(t => !includeTypes.value.includes(t)) : null);
|
const excludeTypes = computed(() => includeTypes.value ? notificationTypes.filter(t => !includeTypes.value.includes(t)) : null);
|
||||||
|
|
||||||
|
function closeTutorial() {
|
||||||
|
defaultStore.set('notificationTutorial', false);
|
||||||
|
}
|
||||||
|
|
||||||
const mentionsPagination = {
|
const mentionsPagination = {
|
||||||
endpoint: 'notes/mentions' as const,
|
endpoint: 'notes/mentions' as const,
|
||||||
limit: 10,
|
limit: 10,
|
||||||
|
|
|
@ -78,12 +78,17 @@ export const defaultStore = markRaw(new Storage('base', {
|
||||||
local: false,
|
local: false,
|
||||||
social: false,
|
social: false,
|
||||||
global: false,
|
global: false,
|
||||||
|
antenna: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
abusesTutorial: {
|
abusesTutorial: {
|
||||||
where: 'account',
|
where: 'account',
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
notificationTutorial: {
|
||||||
|
where: 'account',
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
keepCw: {
|
keepCw: {
|
||||||
where: 'account',
|
where: 'account',
|
||||||
default: true,
|
default: true,
|
||||||
|
|
Loading…
Reference in New Issue