diff --git a/packages/frontend/src/components/global/MkTip.vue b/packages/frontend/src/components/global/MkTip.vue index 384511a0ed..231957a232 100644 --- a/packages/frontend/src/components/global/MkTip.vue +++ b/packages/frontend/src/components/global/MkTip.vue @@ -7,7 +7,10 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.tip }}:
- {{ i18n.ts.gotIt }} +
+ {{ i18n.ts.gotIt }} + +
@@ -15,19 +18,30 @@ SPDX-License-Identifier: AGPL-3.0-only import { i18n } from '@/i18n.js'; import { store } from '@/store.js'; import MkButton from '@/components/MkButton.vue'; +import * as os from '@/os.js'; +import { TIPS, hideAllTips, closeTip } from '@/tips.js'; const props = withDefaults(defineProps<{ - k: keyof (typeof store['s']['tips']); + k: typeof TIPS[number]; warn?: boolean; }>(), { warn: false, }); -function closeTip() { - store.set('tips', { - ...store.r.tips.value, - [props.k]: true, - }); +function _closeTip() { + closeTip(props.k); +} + +function showMenu(ev: MouseEvent) { + os.popupMenu([{ + icon: 'ti ti-bulb-off', + text: i18n.ts.hideAllTips, + danger: true, + action: () => { + hideAllTips(); + os.success(); + }, + }], ev.currentTarget ?? ev.target); } diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue index 9459a9b326..ac432e9f32 100644 --- a/packages/frontend/src/pages/settings/other.vue +++ b/packages/frontend/src/pages/settings/other.vue @@ -161,7 +161,7 @@ import { prefer } from '@/preferences.js'; import MkRolePreview from '@/components/MkRolePreview.vue'; import { signout } from '@/signout.js'; import { migrateOldSettings } from '@/pref-migrate.js'; -import { store, TIPS } from '@/store.js'; +import { hideAllTips as _hideAllTips, resetAllTips as _resetAllTips } from '@/tips.js'; const $i = ensureSignin(); @@ -205,16 +205,12 @@ function migrate() { } function resetAllTips() { - store.set('tips', {}); + _resetAllTips(); os.success(); } function hideAllTips() { - const v = {}; - for (const k of TIPS) { - v[k] = true; - } - store.set('tips', v); + _hideAllTips(); os.success(); } diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index b54b4f66ff..9afaf2c9b9 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -10,23 +10,11 @@ import darkTheme from '@@/themes/d-green-lime.json5'; import { hemisphere } from '@@/js/intl-const.js'; import type { DeviceKind } from '@/utility/device-kind.js'; import type { Plugin } from '@/plugin.js'; +import type { TIPS } from '@/tips.js'; import { miLocalStorage } from '@/local-storage.js'; import { Pizzax } from '@/lib/pizzax.js'; import { DEFAULT_DEVICE_KIND } from '@/utility/device-kind.js'; -export const TIPS = [ - 'drive', - 'uploader', - 'postFormUploader', - 'clips', - 'userLists', - 'tl.home', - 'tl.local', - 'tl.social', - 'tl.global', - 'abuses', -] as const; - /** * 「状態」を管理するストア(not「設定」) */ diff --git a/packages/frontend/src/tips.ts b/packages/frontend/src/tips.ts new file mode 100644 index 0000000000..a6850d0406 --- /dev/null +++ b/packages/frontend/src/tips.ts @@ -0,0 +1,37 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { store } from '@/store.js'; + +export const TIPS = [ + 'drive', + 'uploader', + 'clips', + 'userLists', + 'tl.home', + 'tl.local', + 'tl.social', + 'tl.global', + 'abuses', +] as const; + +export function closeTip(tip: typeof TIPS[number]) { + store.set('tips', { + ...store.r.tips.value, + [tip]: true, + }); +} + +export function resetAllTips() { + store.set('tips', {}); +} + +export function hideAllTips() { + const v = {}; + for (const k of TIPS) { + v[k] = true; + } + store.set('tips', v); +}