diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2019-02-05 01:24:44 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2019-02-05 01:24:44 +0900 |
| commit | 1d814ba0e124e97ec72361254f42a76f6a0449ae (patch) | |
| tree | ae18ea8043b73b6cd3dd0d5804d48b5b02869550 /src | |
| parent | [API] お気に入り状態は投稿情報に含めないように統一 (diff) | |
| download | misskey-1d814ba0e124e97ec72361254f42a76f6a0449ae.tar.gz misskey-1d814ba0e124e97ec72361254f42a76f6a0449ae.tar.bz2 misskey-1d814ba0e124e97ec72361254f42a76f6a0449ae.zip | |
個別に投稿のウォッチ/ウォッチ解除をできるように
Resolve #161
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/app/common/views/components/note-menu.vue | 39 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/state.ts | 24 |
2 files changed, 54 insertions, 9 deletions
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue index ecea08b756..b83d5c3259 100644 --- a/src/client/app/common/views/components/note-menu.vue +++ b/src/client/app/common/views/components/note-menu.vue @@ -10,14 +10,15 @@ import i18n from '../../../i18n'; import { url } from '../../../config'; import copyToClipboard from '../../../common/scripts/copy-to-clipboard'; import { concat, intersperse } from '../../../../../prelude/array'; -import { faCopy } from '@fortawesome/free-regular-svg-icons'; +import { faCopy, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; export default Vue.extend({ i18n: i18n('common/views/components/note-menu.vue'), props: ['note', 'source'], data() { return { - isFavorited: false + isFavorited: false, + isWatching: false }; }, computed: { @@ -55,6 +56,15 @@ export default Vue.extend({ text: this.$t('favorite'), action: this.favorite }, + this.note.userId != this.$store.state.i.id ? this.isWatching ? { + icon: faEyeSlash, + text: this.$t('unwatch'), + action: this.unwatch + } : { + icon: faEye, + text: this.$t('watch'), + action: this.watch + } : undefined, this.note.userId == this.$store.state.i.id ? (this.$store.state.i.pinnedNoteIds || []).includes(this.note.id) ? { icon: 'thumbtack', text: this.$t('unpin'), @@ -78,6 +88,7 @@ export default Vue.extend({ noteId: this.note.id }).then(state => { this.isFavorited = state.isFavorited; + this.isWatching = state.isWatching; }); }, @@ -166,6 +177,30 @@ export default Vue.extend({ }); }, + watch() { + this.$root.api('notes/watching/create', { + noteId: this.note.id + }).then(() => { + this.$root.dialog({ + type: 'success', + splash: true + }); + this.destroyDom(); + }); + }, + + unwatch() { + this.$root.api('notes/watching/delete', { + noteId: this.note.id + }).then(() => { + this.$root.dialog({ + type: 'success', + splash: true + }); + this.destroyDom(); + }); + }, + closed() { this.$nextTick(() => { this.destroyDom(); diff --git a/src/server/api/endpoints/notes/state.ts b/src/server/api/endpoints/notes/state.ts index d8adc48c94..e9db12ead7 100644 --- a/src/server/api/endpoints/notes/state.ts +++ b/src/server/api/endpoints/notes/state.ts @@ -1,6 +1,7 @@ import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import define from '../../define'; import Favorite from '../../../../models/favorite'; +import NoteWatching from '../../../../models/note-watching'; export const meta = { stability: 'stable', @@ -25,14 +26,23 @@ export const meta = { }; export default define(meta, (ps, user) => new Promise(async (res, rej) => { - const favorite = await Favorite.count({ - userId: user._id, - noteId: ps.noteId - }, { - limit: 1 - }); + const [favorite, watching] = await Promise.all([ + Favorite.count({ + userId: user._id, + noteId: ps.noteId + }, { + limit: 1 + }), + NoteWatching.count({ + userId: user._id, + noteId: ps.noteId + }, { + limit: 1 + }) + ]); res({ - isFavorited: favorite !== 0 + isFavorited: favorite !== 0, + isWatching: watching !== 0 }); })); |