<ModalDialog {id} {label} {title} background="var(--main-bg)" > <GenericDialogList selectable={false} {items} on:click="onClick(event)"/> </ModalDialog> <script> import ModalDialog from './ModalDialog.html' import { store } from '../../../_store/store' import GenericDialogList from './GenericDialogList.html' import { setAccountFollowed } from '../../../_actions/follow' import { doDeleteStatus } from '../../../_actions/delete' import { show } from '../helpers/showDialog' import { close } from '../helpers/closeDialog' import { oncreate } from '../helpers/onCreateDialog' import { setAccountBlocked } from '../../../_actions/block' import { setAccountMuted } from '../../../_actions/mute' import { setStatusPinnedOrUnpinned } from '../../../_actions/pin' import { setConversationMuted } from '../../../_actions/muteConversation' import { copyText } from '../../../_actions/copyText' export default { oncreate, computed: { relationship: ({ $currentAccountRelationship }) => $currentAccountRelationship, account: ({ $currentAccountProfile }) => $currentAccountProfile, verifyCredentials: ({ $currentVerifyCredentials }) => $currentVerifyCredentials, statusId: ({ status }) => status.id, pinned: ({ statusId, $currentStatusModifications, status }) => { if ($currentStatusModifications && statusId in $currentStatusModifications.pins) { return $currentStatusModifications.pins[statusId] } return status.pinned }, // // begin copypasta (StatusOptionsDialog.html / AccountProfileOptionsDialog.html) // verifyCredentialsId: ({ verifyCredentials }) => verifyCredentials.id, following: ({ relationship }) => relationship && relationship.following, followRequested: ({ relationship }) => relationship && relationship.requested, accountId: ({ account }) => account && account.id, acct: ({ account }) => account.acct, muting: ({ relationship }) => relationship.muting, blocking: ({ relationship }) => relationship.blocking, followLabel: ({ following, followRequested, account, acct }) => { if (typeof following === 'undefined' || !account) { return '' } return (following || followRequested) ? `Unfollow @${acct}` : `Follow @${acct}` }, followIcon: ({ following, followRequested }) => ( following ? '#fa-user-times' : followRequested ? '#fa-hourglass' : '#fa-user-plus' ), blockLabel: ({ blocking, acct }) => ( blocking ? `Unblock @${acct}` : `Block @${acct}` ), blockIcon: ({ blocking }) => blocking ? '#fa-unlock' : '#fa-ban', muteLabel: ({ muting, acct }) => ( muting ? `Unmute @${acct}` : `Mute @${acct}` ), muteIcon: ({ muting }) => muting ? '#fa-volume-up' : '#fa-volume-off', isUser: ({ accountId, verifyCredentialsId }) => accountId === verifyCredentialsId, // // end copypasta (StatusOptionsDialog.html / AccountProfileOptionsDialog.html) // pinLabel: ({ pinned, isUser }) => isUser ? (pinned ? 'Unpin from profile' : 'Pin to profile') : '', visibility: ({ status }) => status.visibility, mentions: ({ status }) => status.mentions || [], mentionsUser: ({ mentions, verifyCredentialsId }) => !!mentions.find(_ => _.id === verifyCredentialsId), mutingConversation: ({ status }) => !!status.muted, muteConversationLabel: ({ mutingConversation }) => mutingConversation ? `Unmute conversation` : `Mute conversation`, muteConversationIcon: ({ mutingConversation }) => mutingConversation ? '#fa-volume-up' : '#fa-volume-off', items: ({ blockLabel, blocking, blockIcon, muteLabel, muteIcon, followLabel, followIcon, following, followRequested, pinLabel, isUser, visibility, mentionsUser, mutingConversation, muteConversationLabel, muteConversationIcon }) => ([ isUser && { key: 'delete', label: 'Delete', icon: '#fa-trash' }, visibility !== 'private' && visibility !== 'direct' && isUser && { key: 'pin', label: pinLabel, icon: '#fa-thumb-tack' }, !isUser && !blocking && { key: 'follow', label: followLabel, icon: followIcon }, !isUser && { key: 'block', label: blockLabel, icon: blockIcon }, !isUser && !blocking && { key: 'mute', label: muteLabel, icon: muteIcon }, (isUser || mentionsUser) && { key: 'muteConversation', label: muteConversationLabel, icon: muteConversationIcon }, { key: 'copy', label: 'Copy link to toot', icon: '#fa-link' } ].filter(Boolean)) }, components: { ModalDialog, GenericDialogList }, store: () => store, methods: { show, close, onClick (item) { switch (item.key) { case 'delete': return this.onDeleteClicked() case 'pin': return this.onPinClicked() case 'follow': return this.onFollowClicked() case 'block': return this.onBlockClicked() case 'mute': return this.onMuteClicked() case 'copy': return this.onCopyClicked() case 'muteConversation': return this.onMuteConversationClicked() } }, async onDeleteClicked () { let { statusId } = this.get() this.close() await doDeleteStatus(statusId) }, async onPinClicked () { let { statusId, pinned } = this.get() this.close() await setStatusPinnedOrUnpinned(statusId, !pinned, true) }, async onFollowClicked () { let { accountId, following } = this.get() this.close() await setAccountFollowed(accountId, !following, true) }, async onBlockClicked () { let { accountId, blocking } = this.get() this.close() await setAccountBlocked(accountId, !blocking, true) }, async onMuteClicked () { let { accountId, muting } = this.get() this.close() await setAccountMuted(accountId, !muting, true) }, async onMuteConversationClicked () { let { statusId, mutingConversation } = this.get() this.close() await setConversationMuted(statusId, !mutingConversation, true) }, async onCopyClicked () { let { status } = this.get() let { url } = status await copyText(url) this.close() } } } </script>