diff --git a/CHANGELOG.md b/CHANGELOG.md index b60fd7cfa..cf5621fc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,13 +8,14 @@ --> ## 12.x.x (unreleased) -- ActivityPub: deliverキューのメモリ使用量を削減 ### Improvements - ActivityPub: リモートユーザーのDeleteアクティビティに対応 - ActivityPub: add resolver check for blocked instance +- ActivityPub: deliverキューのメモリ使用量を削減 - アカウントが凍結された場合に、凍結された旨を表示してからログアウトするように - 凍結されたアカウントにログインしようとしたときに、凍結されている旨を表示するように +- リスト、アンテナタイムラインを個別ページとして分割 - UIの改善 ### Bugfixes diff --git a/src/client/components/ui/menu.vue b/src/client/components/ui/menu.vue index d652d9b84..26b4b04b1 100644 --- a/src/client/components/ui/menu.vue +++ b/src/client/components/ui/menu.vue @@ -41,7 +41,7 @@ + + diff --git a/src/client/pages/timeline.vue b/src/client/pages/timeline.vue index 4b5b90e6a..9dda82462 100644 --- a/src/client/pages/timeline.vue +++ b/src/client/pages/timeline.vue @@ -6,11 +6,8 @@
({ title: this.$ts.timeline, @@ -116,32 +109,10 @@ export default defineComponent({ src() { this.showNav = false; }, - list(x) { - this.showNav = false; - if (x != null) this.antenna = null; - if (x != null) this.channel = null; - }, - antenna(x) { - this.showNav = false; - if (x != null) this.list = null; - if (x != null) this.channel = null; - }, - channel(x) { - this.showNav = false; - if (x != null) this.antenna = null; - if (x != null) this.list = null; - }, }, created() { this.src = this.$store.state.tl.src; - if (this.src === 'list') { - this.list = this.$store.state.tl.arg; - } else if (this.src === 'antenna') { - this.antenna = this.$store.state.tl.arg; - } else if (this.src === 'channel') { - this.channel = this.$store.state.tl.arg; - } }, methods: { @@ -164,12 +135,9 @@ export default defineComponent({ async chooseList(ev) { const lists = await os.api('users/lists/list'); const items = lists.map(list => ({ + type: 'link', text: list.name, - action: () => { - this.list = list; - this.src = 'list'; - this.saveSrc(); - } + to: `/timeline/list/${list.id}` })); os.popupMenu(items, ev.currentTarget || ev.target); }, @@ -177,13 +145,10 @@ export default defineComponent({ async chooseAntenna(ev) { const antennas = await os.api('antennas/list'); const items = antennas.map(antenna => ({ + type: 'link', text: antenna.name, indicate: antenna.hasUnreadNote, - action: () => { - this.antenna = antenna; - this.src = 'antenna'; - this.saveSrc(); - } + to: `/timeline/antenna/${antenna.id}` })); os.popupMenu(items, ev.currentTarget || ev.target); }, @@ -191,15 +156,10 @@ export default defineComponent({ async chooseChannel(ev) { const channels = await os.api('channels/followed'); const items = channels.map(channel => ({ + type: 'link', text: channel.name, indicate: channel.hasUnreadNote, - action: () => { - // NOTE: チャンネルタイムラインをこのコンポーネントで表示するようにすると投稿フォームはどうするかなどの問題が生じるのでとりあえずページ遷移で - //this.channel = channel; - //this.src = 'channel'; - //this.saveSrc(); - this.$router.push(`/channels/${channel.id}`); - } + to: `/channels/${channel.id}` })); os.popupMenu(items, ev.currentTarget || ev.target); }, @@ -207,10 +167,6 @@ export default defineComponent({ saveSrc() { this.$store.set('tl', { src: this.src, - arg: - this.src === 'list' ? this.list : - this.src === 'antenna' ? this.antenna : - this.channel }); }, diff --git a/src/client/pages/user-list-timeline.vue b/src/client/pages/user-list-timeline.vue new file mode 100644 index 000000000..491fe948c --- /dev/null +++ b/src/client/pages/user-list-timeline.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/client/router.ts b/src/client/router.ts index 225ee44e3..573f285c7 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -48,6 +48,8 @@ const defaultRoutes = [ { path: '/channels/:channelId/edit', component: page('channel-editor'), props: true }, { path: '/channels/:channelId', component: page('channel'), props: route => ({ channelId: route.params.channelId }) }, { path: '/clips/:clipId', component: page('clip'), props: route => ({ clipId: route.params.clipId }) }, + { path: '/timeline/list/:listId', component: page('user-list-timeline'), props: route => ({ listId: route.params.listId }) }, + { path: '/timeline/antenna/:antennaId', component: page('antenna-timeline'), props: route => ({ antennaId: route.params.antennaId }) }, { path: '/my/notifications', component: page('notifications') }, { path: '/my/favorites', component: page('favorites') }, { path: '/my/messages', component: page('messages') }, diff --git a/src/client/ui/_common_/sidebar.vue b/src/client/ui/_common_/sidebar.vue index 43b64d133..65f3d7dbd 100644 --- a/src/client/ui/_common_/sidebar.vue +++ b/src/client/ui/_common_/sidebar.vue @@ -19,7 +19,7 @@