client: use new API

This commit is contained in:
Johann150 2022-06-20 22:05:45 +02:00
parent 321bd24b98
commit ab84457c0e
Signed by untrusted user: Johann150
GPG key ID: 9EE6577A2A06F8F1
2 changed files with 38 additions and 12 deletions

View file

@ -28,7 +28,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { notificationTypes } from 'foundkey-js'; import * as foundkey from 'foundkey-js';
import MkSwitch from './form/switch.vue'; import MkSwitch from './form/switch.vue';
import MkInfo from './ui/info.vue'; import MkInfo from './ui/info.vue';
import MkButton from './ui/button.vue'; import MkButton from './ui/button.vue';
@ -41,10 +41,12 @@ const emit = defineEmits<{
}>(); }>();
const props = withDefaults(defineProps<{ const props = withDefaults(defineProps<{
includingTypes?: typeof notificationTypes[number][] | null; includingTypes?: typeof foundkey.notificationTypes[number][] | null;
notificationTypes?: typeof foundkey.notificationTypes[number][] | null;
showGlobalToggle?: boolean; showGlobalToggle?: boolean;
}>(), { }>(), {
includingTypes: () => [], includingTypes: () => [],
notificationTypes: () => [],
showGlobalToggle: true, showGlobalToggle: true,
}); });
@ -52,10 +54,10 @@ let includingTypes = $computed(() => props.includingTypes || []);
const dialog = $ref<InstanceType<typeof XModalWindow>>(); const dialog = $ref<InstanceType<typeof XModalWindow>>();
let typesMap = $ref<Record<typeof notificationTypes[number], boolean>>({}); let typesMap = $ref<Record<typeof foundkey.notificationTypes[number], boolean>>({});
let useGlobalSetting = $ref((includingTypes === null || includingTypes.length === 0) && props.showGlobalToggle); let useGlobalSetting = $ref((includingTypes === null || includingTypes.length === 0) && props.showGlobalToggle);
for (const ntype of notificationTypes) { for (const ntype of props.notificationTypes) {
typesMap[ntype] = includingTypes.includes(ntype); typesMap[ntype] = includingTypes.includes(ntype);
} }
@ -64,7 +66,7 @@ function ok() {
emit('done', { includingTypes: null }); emit('done', { includingTypes: null });
} else { } else {
emit('done', { emit('done', {
includingTypes: (Object.keys(typesMap) as typeof notificationTypes[number][]) includingTypes: (Object.keys(typesMap) as typeof foundkey.notificationTypes[number][])
.filter(type => typesMap[type]), .filter(type => typesMap[type]),
}); });
} }
@ -74,13 +76,13 @@ function ok() {
function disableAll() { function disableAll() {
for (const type in typesMap) { for (const type in typesMap) {
typesMap[type as typeof notificationTypes[number]] = false; typesMap[type as typeof foundkey.notificationTypes[number]] = false;
} }
} }
function enableAll() { function enableAll() {
for (const type in typesMap) { for (const type in typesMap) {
typesMap[type as typeof notificationTypes[number]] = true; typesMap[type as typeof foundkey.notificationTypes[number]] = true;
} }
} }
</script> </script>

View file

@ -65,9 +65,33 @@ export function getNoteMenu(props: {
}); });
} }
function toggleThreadMute(mute: boolean): void { function muteThread(): void {
os.apiWithDialog(mute ? 'notes/thread-muting/create' : 'notes/thread-muting/delete', { // show global settings by default
noteId: appearNote.id, const includingTypes = foundkey.notificationTypes.filter(x => !$i.mutingNotificationTypes.includes(x));
os.popup(defineAsyncComponent(() => import('@/components/notification-setting-window.vue')), {
includingTypes,
showGlobalToggle: false,
message: i18n.ts.threadMuteNotificationsDesc,
notificationTypes: foundkey.noteNotificationTypes,
}, {
done: async (res) => {
const { includingTypes: value } = res;
let mutingNotificationTypes: string[] | undefined;
if (value != null) {
mutingNotificationTypes = foundkey.noteNotificationTypes.filter(x => !value.includes(x))
}
await os.apiWithDialog('notes/thread-muting/create', {
noteId: appearNote.id,
mutingNotificationTypes,
});
}
}, 'closed');
}
function unmuteThread(): void {
os.apiWithDialog('notes/thread-muting/delete', {
noteId: appearNote.id
}); });
} }
@ -251,11 +275,11 @@ export function getNoteMenu(props: {
statePromise.then(state => state.isMutedThread ? { statePromise.then(state => state.isMutedThread ? {
icon: 'fas fa-comment-slash', icon: 'fas fa-comment-slash',
text: i18n.ts.unmuteThread, text: i18n.ts.unmuteThread,
action: () => toggleThreadMute(false), action: () => unmuteThread(),
} : { } : {
icon: 'fas fa-comment-slash', icon: 'fas fa-comment-slash',
text: i18n.ts.muteThread, text: i18n.ts.muteThread,
action: () => toggleThreadMute(true), action: () => muteThread(),
}), }),
appearNote.userId === $i.id ? ($i.pinnedNoteIds || []).includes(appearNote.id) ? { appearNote.userId === $i.id ? ($i.pinnedNoteIds || []).includes(appearNote.id) ? {
icon: 'fas fa-thumbtack', icon: 'fas fa-thumbtack',