[API] お気に入り状態は投稿情報に含めないように統一
This commit is contained in:
parent
06707705bf
commit
c107333f56
3 changed files with 99 additions and 71 deletions
|
@ -15,68 +15,72 @@ import { faCopy } from '@fortawesome/free-regular-svg-icons';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('common/views/components/note-menu.vue'),
|
i18n: i18n('common/views/components/note-menu.vue'),
|
||||||
props: ['note', 'source'],
|
props: ['note', 'source'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isFavorited: false
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
items(): any[] {
|
items(): any[] {
|
||||||
return concat(intersperse([null], [
|
return [{
|
||||||
[
|
icon: 'at',
|
||||||
[{
|
text: this.$t('mention'),
|
||||||
icon: 'at',
|
action: this.mention
|
||||||
text: this.$t('mention'),
|
}, null, {
|
||||||
action: this.mention
|
icon: 'info-circle',
|
||||||
}]
|
text: this.$t('detail'),
|
||||||
],
|
action: this.detail
|
||||||
[
|
}, {
|
||||||
[{
|
icon: faCopy,
|
||||||
icon: 'info-circle',
|
text: this.$t('copy-content'),
|
||||||
text: this.$t('detail'),
|
action: this.copyContent
|
||||||
action: this.detail
|
}, {
|
||||||
}], [{
|
icon: 'link',
|
||||||
icon: faCopy,
|
text: this.$t('copy-link'),
|
||||||
text: this.$t('copy-content'),
|
action: this.copyLink
|
||||||
action: this.copyContent
|
}, this.note.uri ? {
|
||||||
}], [{
|
icon: 'external-link-square-alt',
|
||||||
icon: 'link',
|
text: this.$t('remote'),
|
||||||
text: this.$t('copy-link'),
|
action: () => {
|
||||||
action: this.copyLink
|
window.open(this.note.uri, '_blank');
|
||||||
}], this.note.uri ? [{
|
}
|
||||||
icon: 'external-link-square-alt',
|
} : undefined,
|
||||||
text: this.$t('remote'),
|
null,
|
||||||
action: () => {
|
this.isFavorited ? {
|
||||||
window.open(this.note.uri, '_blank');
|
icon: 'star',
|
||||||
}
|
text: this.$t('unfavorite'),
|
||||||
}] : []
|
action: this.unfavorite
|
||||||
],
|
} : {
|
||||||
[
|
icon: 'star',
|
||||||
this.note.isFavorited ? [{
|
text: this.$t('favorite'),
|
||||||
icon: 'star',
|
action: this.favorite
|
||||||
text: this.$t('unfavorite'),
|
},
|
||||||
action: this.unfavorite
|
this.note.userId == this.$store.state.i.id ? (this.$store.state.i.pinnedNoteIds || []).includes(this.note.id) ? {
|
||||||
}] : [{
|
icon: 'thumbtack',
|
||||||
icon: 'star',
|
text: this.$t('unpin'),
|
||||||
text: this.$t('favorite'),
|
action: this.unpin
|
||||||
action: this.favorite
|
} : {
|
||||||
}], this.note.userId == this.$store.state.i.id ? [
|
icon: 'thumbtack',
|
||||||
(this.$store.state.i.pinnedNoteIds || []).includes(this.note.id) ? {
|
text: this.$t('pin'),
|
||||||
icon: 'thumbtack',
|
action: this.pin
|
||||||
text: this.$t('unpin'),
|
} : undefined,
|
||||||
action: this.unpin
|
null,
|
||||||
} : {
|
this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin || this.$store.state.i.isModerator ? {
|
||||||
icon: 'thumbtack',
|
icon: ['far', 'trash-alt'],
|
||||||
text: this.$t('pin'),
|
text: this.$t('delete'),
|
||||||
action: this.pin
|
action: this.del
|
||||||
}
|
} : undefined].filter(x => x !== undefined)
|
||||||
] : []
|
|
||||||
], [
|
|
||||||
this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin || this.$store.state.i.isModerator ? [{
|
|
||||||
icon: ['far', 'trash-alt'],
|
|
||||||
text: this.$t('delete'),
|
|
||||||
action: this.del
|
|
||||||
}] : []
|
|
||||||
]
|
|
||||||
].map(concat).filter(x => x.length > 0)));
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
this.$root.api('notes/state', {
|
||||||
|
noteId: this.note.id
|
||||||
|
}).then(state => {
|
||||||
|
this.isFavorited = state.isFavorited;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
mention() {
|
mention() {
|
||||||
this.$post({ mention: this.note.user });
|
this.$post({ mention: this.note.user });
|
||||||
|
|
|
@ -9,7 +9,6 @@ import { pack as packApp } from './app';
|
||||||
import PollVote from './poll-vote';
|
import PollVote from './poll-vote';
|
||||||
import Reaction from './note-reaction';
|
import Reaction from './note-reaction';
|
||||||
import { packMany as packFileMany, IDriveFile } from './drive-file';
|
import { packMany as packFileMany, IDriveFile } from './drive-file';
|
||||||
import Favorite from './favorite';
|
|
||||||
import Following from './following';
|
import Following from './following';
|
||||||
import Emoji from './emoji';
|
import Emoji from './emoji';
|
||||||
|
|
||||||
|
@ -346,19 +345,6 @@ export const pack = async (
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
// isFavorited
|
|
||||||
_note.isFavorited = (async () => {
|
|
||||||
const favorite = await Favorite
|
|
||||||
.count({
|
|
||||||
userId: meId,
|
|
||||||
noteId: id
|
|
||||||
}, {
|
|
||||||
limit: 1
|
|
||||||
});
|
|
||||||
|
|
||||||
return favorite === 1;
|
|
||||||
})();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
src/server/api/endpoints/notes/state.ts
Normal file
38
src/server/api/endpoints/notes/state.ts
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id';
|
||||||
|
import define from '../../define';
|
||||||
|
import Favorite from '../../../../models/favorite';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
stability: 'stable',
|
||||||
|
|
||||||
|
desc: {
|
||||||
|
'ja-JP': '指定した投稿の状態を取得します。',
|
||||||
|
'en-US': 'Get state of a note.'
|
||||||
|
},
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
params: {
|
||||||
|
noteId: {
|
||||||
|
validator: $.type(ID),
|
||||||
|
transform: transform,
|
||||||
|
desc: {
|
||||||
|
'ja-JP': '対象の投稿のID',
|
||||||
|
'en-US': 'Target note ID.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||||
|
const favorite = await Favorite.count({
|
||||||
|
userId: user._id,
|
||||||
|
noteId: ps.noteId
|
||||||
|
}, {
|
||||||
|
limit: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
res({
|
||||||
|
isFavorited: favorite !== 0
|
||||||
|
});
|
||||||
|
}));
|
Loading…
Reference in a new issue