diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-17 01:33:15 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-17 01:33:15 +0900 |
| commit | 835aad44bbf7245e039227ffa48e611b3bc330f2 (patch) | |
| tree | b2432eb3f5e59b7835205eef6bad6d7bfa1802d4 /src/client | |
| parent | 12.92.0 (diff) | |
| download | sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.tar.gz sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.tar.bz2 sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.zip | |
feat: ユーザーのリアクション一覧を見れるように
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/pages/user/index.vue | 7 | ||||
| -rw-r--r-- | src/client/pages/user/reactions.vue | 81 |
2 files changed, 88 insertions, 0 deletions
diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue index 0ddf73d572..6811dff2db 100644 --- a/src/client/pages/user/index.vue +++ b/src/client/pages/user/index.vue @@ -181,6 +181,7 @@ </template> <XFollowList v-else-if="page === 'following'" type="following" :user="user" class="_content _gap"/> <XFollowList v-else-if="page === 'followers'" type="followers" :user="user" class="_content _gap"/> + <XReactions v-else-if="page === 'reactions'" :user="user" class="_gap"/> <XClips v-else-if="page === 'clips'" :user="user" class="_gap"/> <XPages v-else-if="page === 'pages'" :user="user" class="_gap"/> <XGallery v-else-if="page === 'gallery'" :user="user" class="_gap"/> @@ -223,6 +224,7 @@ export default defineComponent({ MkTab, MkInfo, XFollowList: defineAsyncComponent(() => import('./follow-list.vue')), + XReactions: defineAsyncComponent(() => import('./reactions.vue')), XClips: defineAsyncComponent(() => import('./clips.vue')), XPages: defineAsyncComponent(() => import('./pages.vue')), XGallery: defineAsyncComponent(() => import('./gallery.vue')), @@ -269,6 +271,11 @@ export default defineComponent({ icon: 'fas fa-home', onClick: () => { this.$router.push('/@' + getAcct(this.user)); }, }, { + active: this.page === 'reactions', + title: this.$ts.reaction, + icon: 'fas fa-laugh', + onClick: () => { this.$router.push('/@' + getAcct(this.user) + '/reactions'); }, + }, { active: this.page === 'clips', title: this.$ts.clips, icon: 'fas fa-paperclip', diff --git a/src/client/pages/user/reactions.vue b/src/client/pages/user/reactions.vue new file mode 100644 index 0000000000..5ac7e01027 --- /dev/null +++ b/src/client/pages/user/reactions.vue @@ -0,0 +1,81 @@ +<template> +<div> + <MkPagination :pagination="pagination" #default="{items}" ref="list"> + <div v-for="item in items" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _gap afdcfbfb"> + <div class="header"> + <MkAvatar class="avatar" :user="user"/> + <MkReactionIcon class="reaction" :reaction="item.type" :custom-emojis="item.note.emojis" :no-style="true"/> + <MkTime :time="item.createdAt" class="createdAt"/> + </div> + <MkNote :note="item.note" @update:note="updated(note, $event)" :key="item.id"/> + </div> + </MkPagination> +</div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import MkPagination from '@client/components/ui/pagination.vue'; +import MkNote from '@client/components/note.vue'; +import MkReactionIcon from '@client/components/reaction-icon.vue'; + +export default defineComponent({ + components: { + MkPagination, + MkNote, + MkReactionIcon, + }, + + props: { + user: { + type: Object, + required: true + }, + }, + + data() { + return { + pagination: { + endpoint: 'users/reactions', + limit: 20, + params: { + userId: this.user.id, + } + }, + }; + }, + + watch: { + user() { + this.$refs.list.reload(); + } + }, +}); +</script> + +<style lang="scss" scoped> +.afdcfbfb { + > .header { + display: flex; + align-items: center; + padding: 8px 16px; + margin-bottom: 8px; + border-bottom: solid 2px var(--divider); + + > .avatar { + width: 24px; + height: 24px; + margin-right: 8px; + } + + > .reaction { + width: 32px; + height: 32px; + } + + > .createdAt { + margin-left: auto; + } + } +} +</style> |