Eliminate mutable variable to construct menu items (#3183)

This commit is contained in:
Aya Morisawa 2018-11-09 22:35:33 +09:00 committed by syuilo
parent 5f9b82438b
commit 05c549b0ab

View File

@ -10,84 +10,69 @@ import i18n from '../../../i18n';
import { url } from '../../../config';
import copyToClipboard from '../../../common/scripts/copy-to-clipboard';
import Ok from './ok.vue';
import { concat, intersperse } from '../../../../../prelude/array';
export default Vue.extend({
i18n: i18n('common/views/components/note-menu.vue'),
props: ['note', 'source', 'compact'],
computed: {
items() {
const items = [{
icon: 'info-circle',
text: this.$t('detail'),
action: this.detail
}, {
icon: 'link',
text: this.$t('copy-link'),
action: this.copyLink
}];
if (this.note.uri) {
items.push({
icon: 'external-link-square-alt',
text: this.$t('remote'),
action: () => {
window.open(this.note.uri, '_blank');
}
});
}
items.push(null);
if (this.note.isFavorited) {
items.push({
icon: 'star',
text: this.$t('unfavorite'),
action: this.unfavorite
});
} else {
items.push({
icon: 'star',
text: this.$t('favorite'),
action: this.favorite
});
}
if (this.note.userId == this.$store.state.i.id) {
if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
items.push({
icon: 'thumbtack',
text: this.$t('unpin'),
action: this.unpin
});
} else {
items.push({
icon: 'thumbtack',
text: this.$t('pin'),
action: this.pin
});
}
}
if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
items.push(null);
items.push({
icon: ['far', 'trash-alt'],
text: this.$t('delete'),
action: this.del
});
}
return items;
items(): any[] {
return concat(intersperse([null], [
[
[{
icon: 'info-circle',
text: this.$t('detail'),
action: this.detail
}], [{
icon: 'link',
text: this.$t('copy-link'),
action: this.copyLink
}], this.note.uri ? [{
icon: 'external-link-square-alt',
text: this.$t('remote'),
action: () => {
window.open(this.note.uri, '_blank');
}
}] : []
],
[
this.note.isFavorited ? [{
icon: 'star',
text: this.$t('unfavorite'),
action: this.unfavorite
}] : [{
icon: 'star',
text: this.$t('favorite'),
action: this.favorite
}], this.note.userId == this.$store.state.i.id ? [
(this.$store.state.i.pinnedNoteIds || []).includes(this.note.id) ? [{
icon: 'thumbtack',
text: this.$t('unpin'),
action: this.unpin
}] : [{
icon: 'thumbtack',
text: this.$t('pin'),
action: this.pin
}]
] : []
], [
this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin ? [{
icon: ['far', 'trash-alt'],
text: this.$t('delete'),
action: this.del
}] : []
]
].map(concat).filter(x => x.length > 0)));
}
},
methods: {
detail() {
this.$router.push(`/notes/${ this.note.id }`);
this.$router.push(`/notes/${this.note.id}`);
},
copyLink() {
copyToClipboard(`${url}/notes/${ this.note.id }`);
copyToClipboard(`${url}/notes/${this.note.id}`);
},
pin() {