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
1 changed files with 50 additions and 65 deletions

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', icon: 'info-circle',
text: this.$t('detail'), text: this.$t('detail'),
action: this.detail action: this.detail
}, { }], [{
icon: 'link', icon: 'link',
text: this.$t('copy-link'), text: this.$t('copy-link'),
action: this.copyLink action: this.copyLink
}]; }], this.note.uri ? [{
if (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');
} }
}); }] : []
} ],
[
items.push(null); this.note.isFavorited ? [{
if (this.note.isFavorited) {
items.push({
icon: 'star', icon: 'star',
text: this.$t('unfavorite'), text: this.$t('unfavorite'),
action: this.unfavorite action: this.unfavorite
}); }] : [{
} else {
items.push({
icon: 'star', icon: 'star',
text: this.$t('favorite'), text: this.$t('favorite'),
action: this.favorite action: this.favorite
}); }], this.note.userId == this.$store.state.i.id ? [
} (this.$store.state.i.pinnedNoteIds || []).includes(this.note.id) ? [{
if (this.note.userId == this.$store.state.i.id) {
if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
items.push({
icon: 'thumbtack', icon: 'thumbtack',
text: this.$t('unpin'), text: this.$t('unpin'),
action: this.unpin action: this.unpin
}); }] : [{
} else {
items.push({
icon: 'thumbtack', icon: 'thumbtack',
text: this.$t('pin'), text: this.$t('pin'),
action: this.pin action: this.pin
}); }]
} ] : []
} ], [
this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin ? [{
if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
items.push(null);
items.push({
icon: ['far', 'trash-alt'], icon: ['far', 'trash-alt'],
text: this.$t('delete'), text: this.$t('delete'),
action: this.del action: this.del
}); }] : []
} ]
].map(concat).filter(x => x.length > 0)));
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() {