2023-05-24 01:15:17 +10:00
import { defineMessages , injectIntl } from 'react-intl' ;
2019-01-17 05:47:46 +11:00
import { connect } from 'react-redux' ;
2023-05-24 01:15:17 +10:00
import { showAlertForError } from '../../../actions/alerts' ;
import { initBlockModal } from '../../../actions/blocks' ;
2019-01-17 05:47:46 +11:00
import {
replyCompose ,
mentionCompose ,
directCompose ,
} from '../../../actions/compose' ;
import {
2024-07-23 01:45:07 +10:00
toggleReblog ,
toggleFavourite ,
2019-01-17 05:47:46 +11:00
pin ,
unpin ,
} from '../../../actions/interactions' ;
2023-05-24 01:15:17 +10:00
import { openModal } from '../../../actions/modal' ;
import { initMuteModal } from '../../../actions/mutes' ;
import { initReport } from '../../../actions/reports' ;
2019-01-17 05:47:46 +11:00
import {
muteStatus ,
unmuteStatus ,
deleteStatus ,
2024-07-23 02:03:58 +10:00
toggleStatusSpoilers ,
2019-01-17 05:47:46 +11:00
} from '../../../actions/statuses' ;
2024-07-23 01:45:07 +10:00
import { deleteModal } from '../../../initial_state' ;
2023-05-24 01:15:17 +10:00
import { makeGetStatus , makeGetPictureInPicture } from '../../../selectors' ;
import DetailedStatus from '../components/detailed_status' ;
2019-01-17 05:47:46 +11:00
const messages = defineMessages ( {
deleteConfirm : { id : 'confirmations.delete.confirm' , defaultMessage : 'Delete' } ,
deleteMessage : { id : 'confirmations.delete.message' , defaultMessage : 'Are you sure you want to delete this status?' } ,
redraftConfirm : { id : 'confirmations.redraft.confirm' , defaultMessage : 'Delete & redraft' } ,
2023-07-22 03:09:13 +10:00
redraftMessage : { id : 'confirmations.redraft.message' , defaultMessage : 'Are you sure you want to delete this status and re-draft it? Favorites and boosts will be lost, and replies to the original post will be orphaned.' } ,
2019-01-17 05:47:46 +11:00
replyConfirm : { id : 'confirmations.reply.confirm' , defaultMessage : 'Reply' } ,
replyMessage : { id : 'confirmations.reply.message' , defaultMessage : 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' } ,
} ) ;
const makeMapStateToProps = ( ) => {
const getStatus = makeGetStatus ( ) ;
2020-12-09 14:33:33 +11:00
const getPictureInPicture = makeGetPictureInPicture ( ) ;
2019-01-17 05:47:46 +11:00
const mapStateToProps = ( state , props ) => ( {
status : getStatus ( state , props ) ,
domain : state . getIn ( [ 'meta' , 'domain' ] ) ,
2020-12-09 14:33:33 +11:00
pictureInPicture : getPictureInPicture ( state , props ) ,
2019-01-17 05:47:46 +11:00
} ) ;
return mapStateToProps ;
} ;
const mapDispatchToProps = ( dispatch , { intl } ) => ( {
2024-07-20 01:26:44 +10:00
onReply ( status ) {
2019-01-17 05:47:46 +11:00
dispatch ( ( _ , getState ) => {
let state = getState ( ) ;
if ( state . getIn ( [ 'compose' , 'text' ] ) . trim ( ) . length !== 0 ) {
2023-05-25 23:42:37 +10:00
dispatch ( openModal ( {
modalType : 'CONFIRM' ,
modalProps : {
message : intl . formatMessage ( messages . replyMessage ) ,
confirm : intl . formatMessage ( messages . replyConfirm ) ,
2024-07-20 01:26:44 +10:00
onConfirm : ( ) => dispatch ( replyCompose ( status ) ) ,
2023-05-25 23:42:37 +10:00
} ,
2019-01-17 05:47:46 +11:00
} ) ) ;
} else {
2024-07-20 01:26:44 +10:00
dispatch ( replyCompose ( status ) ) ;
2019-01-17 05:47:46 +11:00
}
} ) ;
} ,
onReblog ( status , e ) {
2024-07-23 01:45:07 +10:00
dispatch ( toggleReblog ( status . get ( 'id' ) , e . shiftKey ) ) ;
2019-01-17 05:47:46 +11:00
} ,
onFavourite ( status ) {
2024-07-23 01:45:07 +10:00
dispatch ( toggleFavourite ( status . get ( 'id' ) ) ) ;
2019-01-17 05:47:46 +11:00
} ,
onPin ( status ) {
if ( status . get ( 'pinned' ) ) {
dispatch ( unpin ( status ) ) ;
} else {
dispatch ( pin ( status ) ) ;
}
} ,
onEmbed ( status ) {
2023-05-25 23:42:37 +10:00
dispatch ( openModal ( {
modalType : 'EMBED' ,
modalProps : {
2023-07-13 23:53:03 +10:00
id : status . get ( 'id' ) ,
2023-05-25 23:42:37 +10:00
onError : error => dispatch ( showAlertForError ( error ) ) ,
} ,
2019-01-17 05:47:46 +11:00
} ) ) ;
} ,
2024-07-20 01:26:44 +10:00
onDelete ( status , withRedraft = false ) {
2019-01-17 05:47:46 +11:00
if ( ! deleteModal ) {
2024-07-20 01:26:44 +10:00
dispatch ( deleteStatus ( status . get ( 'id' ) , withRedraft ) ) ;
2019-01-17 05:47:46 +11:00
} else {
2023-05-25 23:42:37 +10:00
dispatch ( openModal ( {
modalType : 'CONFIRM' ,
modalProps : {
message : intl . formatMessage ( withRedraft ? messages . redraftMessage : messages . deleteMessage ) ,
confirm : intl . formatMessage ( withRedraft ? messages . redraftConfirm : messages . deleteConfirm ) ,
2024-07-20 01:26:44 +10:00
onConfirm : ( ) => dispatch ( deleteStatus ( status . get ( 'id' ) , withRedraft ) ) ,
2023-05-25 23:42:37 +10:00
} ,
2019-01-17 05:47:46 +11:00
} ) ) ;
}
} ,
2024-07-20 01:26:44 +10:00
onDirect ( account ) {
dispatch ( directCompose ( account ) ) ;
2019-01-17 05:47:46 +11:00
} ,
2024-07-20 01:26:44 +10:00
onMention ( account ) {
dispatch ( mentionCompose ( account ) ) ;
2019-01-17 05:47:46 +11:00
} ,
2023-05-11 20:41:55 +10:00
onOpenMedia ( media , index , lang ) {
2023-05-25 23:42:37 +10:00
dispatch ( openModal ( {
modalType : 'MEDIA' ,
modalProps : { media , index , lang } ,
} ) ) ;
2019-01-17 05:47:46 +11:00
} ,
2023-05-11 20:41:55 +10:00
onOpenVideo ( media , lang , options ) {
2023-05-25 23:42:37 +10:00
dispatch ( openModal ( {
modalType : 'VIDEO' ,
modalProps : { media , lang , options } ,
} ) ) ;
2019-01-17 05:47:46 +11:00
} ,
2019-03-27 03:34:02 +11:00
onBlock ( status ) {
const account = status . get ( 'account' ) ;
2019-09-30 05:46:05 +10:00
dispatch ( initBlockModal ( account ) ) ;
2019-01-17 05:47:46 +11:00
} ,
onReport ( status ) {
dispatch ( initReport ( status . get ( 'account' ) , status ) ) ;
} ,
onMute ( account ) {
dispatch ( initMuteModal ( account ) ) ;
} ,
onMuteConversation ( status ) {
if ( status . get ( 'muted' ) ) {
dispatch ( unmuteStatus ( status . get ( 'id' ) ) ) ;
} else {
dispatch ( muteStatus ( status . get ( 'id' ) ) ) ;
}
} ,
onToggleHidden ( status ) {
2024-07-23 02:03:58 +10:00
dispatch ( toggleStatusSpoilers ( status . get ( 'id' ) ) ) ;
2019-01-17 05:47:46 +11:00
} ,
} ) ;
export default injectIntl ( connect ( makeMapStateToProps , mapDispatchToProps ) ( DetailedStatus ) ) ;