diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-10-13 00:54:30 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-10-13 00:54:30 +0900 |
| commit | 719fac6480f8bd39498f2e92c83cac0fa26fb282 (patch) | |
| tree | e671e7b5e59777563f6799736a6d4a8fe45695e1 /src | |
| parent | 10.10.1 (diff) | |
| download | sharkey-719fac6480f8bd39498f2e92c83cac0fa26fb282.tar.gz sharkey-719fac6480f8bd39498f2e92c83cac0fa26fb282.tar.bz2 sharkey-719fac6480f8bd39498f2e92c83cac0fa26fb282.zip | |
お気に入りを解除できるように
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/app/common/views/components/note-menu.vue | 30 | ||||
| -rw-r--r-- | src/models/favorite.ts | 4 | ||||
| -rw-r--r-- | src/models/note.ts | 15 |
3 files changed, 42 insertions, 7 deletions
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue index 6030e4fd30..21713e56a0 100644 --- a/src/client/app/common/views/components/note-menu.vue +++ b/src/client/app/common/views/components/note-menu.vue @@ -22,11 +22,21 @@ export default Vue.extend({ icon: '%fa:link%', text: '%i18n:@copy-link%', action: this.copyLink - }, null, { - icon: '%fa:star%', - text: '%i18n:@favorite%', - action: this.favorite - }]; + }, null]; + + if (this.note.isFavorited) { + items.push({ + icon: '%fa:star%', + text: '%i18n:@unfavorite%', + action: this.unfavorite + }); + } else { + items.push({ + icon: '%fa:star%', + text: '%i18n:@favorite%', + action: this.favorite + }); + } if (this.note.userId == this.$store.state.i.id) { if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) { @@ -45,6 +55,7 @@ export default Vue.extend({ } if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) { + items.push(null); items.push({ icon: '%fa:trash-alt R%', text: '%i18n:@delete%', @@ -110,6 +121,15 @@ export default Vue.extend({ }); }, + unfavorite() { + (this as any).api('notes/favorites/delete', { + noteId: this.note.id + }).then(() => { + (this as any).os.new(Ok); + this.destroyDom(); + }); + }, + closed() { this.$nextTick(() => { this.destroyDom(); diff --git a/src/models/favorite.ts b/src/models/favorite.ts index 4824a6dbaa..9acaec5c59 100644 --- a/src/models/favorite.ts +++ b/src/models/favorite.ts @@ -75,7 +75,9 @@ export const pack = ( delete _favorite._id; // Populate note - _favorite.note = await packNote(_favorite.noteId, me); + _favorite.note = await packNote(_favorite.noteId, me, { + detail: true + }); // (データベースの不具合などで)投稿が見つからなかったら if (_favorite.note == null) { diff --git a/src/models/note.ts b/src/models/note.ts index a47fd098c7..e6bdbe0b8b 100644 --- a/src/models/note.ts +++ b/src/models/note.ts @@ -358,8 +358,8 @@ export const pack = async ( })(_note.poll); } - // Fetch my reaction if (meId) { + // Fetch my reaction _note.myReaction = (async () => { const reaction = await Reaction .findOne({ @@ -374,6 +374,19 @@ export const pack = async ( return null; })(); + + // isFavorited + _note.isFavorited = (async () => { + const favorite = await Favorite + .count({ + userId: meId, + noteId: id + }, { + limit: 1 + }); + + return favorite === 1; + })(); } } |