mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-03-23 12:33:38 +00:00
* wip * bump misskey-dev/eslint-plugin * lint fixes (backend) * lint fixes (frontend) * lint fixes (frontend-embed) * rollback nsfwjs to 4.2.0 ref: infinitered/nsfwjs#904 * rollback openapi-typescript to v6 v7でOpenAPIのバリデーションが入るようになった関係でスコープ外での変更が避けられないため一時的に戻した * lint fixes (misskey-js) * temporarily disable errored lint rule (frontend-shared) * fix lint * temporarily ignore errored file for lint (frontend-shared) * rollback simplewebauthn/server to 12.0.0 v13 contains breaking changes that require some decision making * lint fixes (frontend-shared) * build misskey-js with types * fix(backend): migrate simplewebauthn/server to v12 * fix(misskey-js/autogen): ignore indent rules to generate consistent output * attempt to fix test changes due to capricorn86/happy-dom#1617 (XMLSerializer now produces valid XML) * attempt to fix test changes due to capricorn86/happy-dom#1617 (XMLSerializer now produces valid XML) * fix test * fix test * fix test * Apply suggestions from code review Co-authored-by: anatawa12 <anatawa12@icloud.com> * bump summaly to v5.2.0 * update tabler-icons to v3.30.0-based --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Co-authored-by: anatawa12 <anatawa12@icloud.com>
80 lines
2.1 KiB
Vue
80 lines
2.1 KiB
Vue
<!--
|
|
SPDX-FileCopyrightText: syuilo and misskey-project
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
-->
|
|
|
|
<template>
|
|
<MkModalWindow
|
|
ref="dialog"
|
|
:width="400"
|
|
:height="450"
|
|
:withOkButton="true"
|
|
:okButtonDisabled="false"
|
|
@ok="ok()"
|
|
@close="dialog?.close()"
|
|
@closed="emit('closed')"
|
|
>
|
|
<template #header>{{ i18n.ts.notificationSetting }}</template>
|
|
|
|
<MkSpacer :marginMin="20" :marginMax="28">
|
|
<div class="_gaps_m">
|
|
<MkInfo>{{ i18n.ts.notificationSettingDesc }}</MkInfo>
|
|
<div class="_buttons">
|
|
<MkButton inline @click="disableAll">{{ i18n.ts.disableAll }}</MkButton>
|
|
<MkButton inline @click="enableAll">{{ i18n.ts.enableAll }}</MkButton>
|
|
</div>
|
|
<MkSwitch v-for="ntype in notificationTypes" :key="ntype" v-model="typesMap[ntype].value">{{ i18n.ts._notification._types[ntype] }}</MkSwitch>
|
|
</div>
|
|
</MkSpacer>
|
|
</MkModalWindow>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { ref, shallowRef } from 'vue';
|
|
import type { Ref } from 'vue';
|
|
import MkSwitch from './MkSwitch.vue';
|
|
import MkInfo from './MkInfo.vue';
|
|
import MkButton from './MkButton.vue';
|
|
import MkModalWindow from '@/components/MkModalWindow.vue';
|
|
import { notificationTypes } from '@@/js/const.js';
|
|
import { i18n } from '@/i18n.js';
|
|
|
|
type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>;
|
|
|
|
const emit = defineEmits<{
|
|
(ev: 'done', v: { excludeTypes: string[] }): void,
|
|
(ev: 'closed'): void,
|
|
}>();
|
|
|
|
const props = withDefaults(defineProps<{
|
|
excludeTypes?: typeof notificationTypes[number][];
|
|
}>(), {
|
|
excludeTypes: () => [],
|
|
});
|
|
|
|
const dialog = shallowRef<InstanceType<typeof MkModalWindow>>();
|
|
|
|
const typesMap = notificationTypes.reduce((p, t) => ({ ...p, [t]: ref<boolean>(!props.excludeTypes.includes(t)) }), {} as TypesMap);
|
|
|
|
function ok() {
|
|
emit('done', {
|
|
excludeTypes: (Object.keys(typesMap) as typeof notificationTypes[number][])
|
|
.filter(type => !typesMap[type].value),
|
|
});
|
|
|
|
if (dialog.value) dialog.value.close();
|
|
}
|
|
|
|
function disableAll() {
|
|
for (const type of notificationTypes) {
|
|
typesMap[type].value = false;
|
|
}
|
|
}
|
|
|
|
function enableAll() {
|
|
for (const type of notificationTypes) {
|
|
typesMap[type].value = true;
|
|
}
|
|
}
|
|
</script>
|