1
1
mirror of https://github.com/kokonect-link/cherrypick synced 2025-01-23 02:04:33 +09:00

enhance(frontend): 사용자 페이지와 사용자 팝업 개선

- 사용자 페이지와 사용자 팝업에 `새 노트 알림 켜기` 버튼이 추가됨
  - 사용자 페이지에 `사용자 노트 검색` 버튼이 추가됨
This commit is contained in:
NoriDev 2024-10-31 15:05:44 +09:00
parent 3dffe5fdf3
commit 63991e06c5
3 changed files with 32 additions and 2 deletions

View File

@ -53,6 +53,9 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE
- Enhance: 로그인 시 표시되는 환영 메시지의 표시 유무를 선택할 수 있음
- Ehhance: `텍스트 소스 보기`를 사용하면 자동으로 내용을 펼침
- Enhance: 사용자 메뉴에서 서버 정보 페이지로 갈 수 있는 바로 가기를 추가함
- Enhance: 사용자 페이지와 사용자 팝업 개선
- 사용자 페이지와 사용자 팝업에 `새 노트 알림 켜기` 버튼이 추가됨
- 사용자 페이지에 `사용자 노트 검색` 버튼이 추가됨
- Fix: 임베디드 코드에서 CherryPick의 색상 설정이 반영되지 않음
- Fix: 임베디드 코드에 `fade``Temml(KaTex)`가 반영되지 않음
- Fix: 노트의 QR 코드를 생성했을 때 `링크 복사` 버튼을 누르면 잘못된 토스트 알림이 표시됨

View File

@ -45,6 +45,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</div>
<button class="_button" :class="$style.menu" @click="showMenu"><i class="ti ti-dots"></i></button>
<button v-tooltip="user.notify === 'none' ? i18n.ts.notifyNotes : i18n.ts.unnotifyNotes" class="_button" :class="$style.notify" @click="toggleNotify"><i :class="user.notify === 'none' ? 'ti ti-bell-plus' : 'ti ti-bell-minus'"></i></button>
<MkFollowButton v-model:user="user" :class="$style.follow" mini/>
</div>
<div v-else>
@ -92,6 +93,15 @@ function showMenu(ev: MouseEvent) {
os.popupMenu(menu, ev.currentTarget ?? ev.target).finally(cleanup);
}
async function toggleNotify() {
os.apiWithDialog('following/update', {
userId: user.value.id,
notify: user.value.notify === 'normal' ? 'none' : 'normal',
}).then(() => {
user.value.notify = user.value.notify === 'normal' ? 'none' : 'normal';
});
}
onMounted(() => {
if (typeof props.q === 'object') {
user.value = props.q;
@ -240,15 +250,20 @@ onMounted(() => {
color: var(--fgTransparentWeak);
}
.menu {
.menu,
.notify {
position: absolute;
top: 8px;
right: 44px;
right: 80px;
padding: 6px;
background: var(--panel);
border-radius: 999px;
}
.notify {
right: 44px;
}
.follow {
position: absolute !important;
top: 8px;

View File

@ -36,6 +36,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<span v-if="$i && $i.id != user.id && user.isFollowed" class="followed">{{ i18n.ts.followsYou }}</span>
<div class="actions">
<button class="menu _button" @click="menu"><i class="ti ti-dots"></i></button>
<button v-if="notesSearchAvailable && (user.host == null || canSearchNonLocalNotes)" v-tooltip="i18n.ts.searchThisUsersNotes" class="menu _button" @click="router.push(`/search?username=${encodeURIComponent(user.username)}${user.host != null ? '&host=' + encodeURIComponent(user.host) : ''}`);"><i class="ti ti-search"></i></button>
<button v-tooltip="user.notify === 'none' ? i18n.ts.notifyNotes : i18n.ts.unnotifyNotes" class="menu _button" @click="toggleNotify"><i :class="user.notify === 'none' ? 'ti ti-bell-plus' : 'ti ti-bell-minus'"></i></button>
<MkFollowButton v-if="$i?.id != user.id" v-model:user="user" :inline="true" :transparent="false" :full="true" class="koudoku"/>
</div>
</div>
@ -204,6 +206,7 @@ import { editNickname } from '@/scripts/edit-nickname.js';
import { vibrate } from '@/scripts/vibrate.js';
import detectLanguage from '@/scripts/detect-language.js';
import { globalEvents } from '@/events.js';
import { notesSearchAvailable, canSearchNonLocalNotes } from '@/scripts/check-permissions.js';
function calcAge(birthdate: string): number {
const date = new Date(birthdate);
@ -346,6 +349,15 @@ function resetTimer() {
playAnimationTimer = setTimeout(() => playAnimation.value = false, 5000);
}
async function toggleNotify() {
os.apiWithDialog('following/update', {
userId: props.user.id,
notify: props.user.notify === 'normal' ? 'none' : 'normal',
}).then(() => {
user.value.notify = user.value.notify === 'normal' ? 'none' : 'normal';
});
}
watch([props.user], () => {
memoDraft.value = props.user.memo;
});