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 380f9bb975
commit 9f32713093

View file

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