Implement public profile endorsements in glitch-soc
Port WebUI changes from f2404de871 to glitch-soc
			
			
This commit is contained in:
		
							parent
							
								
									4e66e0ac04
								
							
						
					
					
						commit
						7067b64de3
					
				
					 5 changed files with 100 additions and 0 deletions
				
			
		| 
						 | 
					@ -28,6 +28,14 @@ export const ACCOUNT_UNMUTE_REQUEST = 'ACCOUNT_UNMUTE_REQUEST';
 | 
				
			||||||
export const ACCOUNT_UNMUTE_SUCCESS = 'ACCOUNT_UNMUTE_SUCCESS';
 | 
					export const ACCOUNT_UNMUTE_SUCCESS = 'ACCOUNT_UNMUTE_SUCCESS';
 | 
				
			||||||
export const ACCOUNT_UNMUTE_FAIL    = 'ACCOUNT_UNMUTE_FAIL';
 | 
					export const ACCOUNT_UNMUTE_FAIL    = 'ACCOUNT_UNMUTE_FAIL';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ACCOUNT_PIN_REQUEST = 'ACCOUNT_PIN_REQUEST';
 | 
				
			||||||
 | 
					export const ACCOUNT_PIN_SUCCESS = 'ACCOUNT_PIN_SUCCESS';
 | 
				
			||||||
 | 
					export const ACCOUNT_PIN_FAIL    = 'ACCOUNT_PIN_FAIL';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ACCOUNT_UNPIN_REQUEST = 'ACCOUNT_UNPIN_REQUEST';
 | 
				
			||||||
 | 
					export const ACCOUNT_UNPIN_SUCCESS = 'ACCOUNT_UNPIN_SUCCESS';
 | 
				
			||||||
 | 
					export const ACCOUNT_UNPIN_FAIL    = 'ACCOUNT_UNPIN_FAIL';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const FOLLOWERS_FETCH_REQUEST = 'FOLLOWERS_FETCH_REQUEST';
 | 
					export const FOLLOWERS_FETCH_REQUEST = 'FOLLOWERS_FETCH_REQUEST';
 | 
				
			||||||
export const FOLLOWERS_FETCH_SUCCESS = 'FOLLOWERS_FETCH_SUCCESS';
 | 
					export const FOLLOWERS_FETCH_SUCCESS = 'FOLLOWERS_FETCH_SUCCESS';
 | 
				
			||||||
export const FOLLOWERS_FETCH_FAIL    = 'FOLLOWERS_FETCH_FAIL';
 | 
					export const FOLLOWERS_FETCH_FAIL    = 'FOLLOWERS_FETCH_FAIL';
 | 
				
			||||||
| 
						 | 
					@ -659,3 +667,69 @@ export function rejectFollowRequestFail(id, error) {
 | 
				
			||||||
    error,
 | 
					    error,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function pinAccount(id) {
 | 
				
			||||||
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
 | 
					    dispatch(pinAccountRequest(id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    api(getState).post(`/api/v1/accounts/${id}/pin`).then(response => {
 | 
				
			||||||
 | 
					      dispatch(pinAccountSuccess(response.data));
 | 
				
			||||||
 | 
					    }).catch(error => {
 | 
				
			||||||
 | 
					      dispatch(pinAccountFail(error));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unpinAccount(id) {
 | 
				
			||||||
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
 | 
					    dispatch(unpinAccountRequest(id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    api(getState).post(`/api/v1/accounts/${id}/unpin`).then(response => {
 | 
				
			||||||
 | 
					      dispatch(unpinAccountSuccess(response.data));
 | 
				
			||||||
 | 
					    }).catch(error => {
 | 
				
			||||||
 | 
					      dispatch(unpinAccountFail(error));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function pinAccountRequest(id) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_PIN_REQUEST,
 | 
				
			||||||
 | 
					    id,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function pinAccountSuccess(relationship) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_PIN_SUCCESS,
 | 
				
			||||||
 | 
					    relationship,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function pinAccountFail(error) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_PIN_FAIL,
 | 
				
			||||||
 | 
					    error,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unpinAccountRequest(id) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_UNPIN_REQUEST,
 | 
				
			||||||
 | 
					    id,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unpinAccountSuccess(relationship) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_UNPIN_SUCCESS,
 | 
				
			||||||
 | 
					    relationship,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unpinAccountFail(error) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: ACCOUNT_UNPIN_FAIL,
 | 
				
			||||||
 | 
					    error,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,8 @@ const messages = defineMessages({
 | 
				
			||||||
  unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
 | 
					  unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
 | 
				
			||||||
  hideReblogs: { id: 'account.hide_reblogs', defaultMessage: 'Hide boosts from @{name}' },
 | 
					  hideReblogs: { id: 'account.hide_reblogs', defaultMessage: 'Hide boosts from @{name}' },
 | 
				
			||||||
  showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show boosts from @{name}' },
 | 
					  showReblogs: { id: 'account.show_reblogs', defaultMessage: 'Show boosts from @{name}' },
 | 
				
			||||||
 | 
					  endorse: { id: 'account.endorse', defaultMessage: 'Feature on profile' },
 | 
				
			||||||
 | 
					  unendorse: { id: 'account.unendorse', defaultMessage: 'Don\'t feature on profile' },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@injectIntl
 | 
					@injectIntl
 | 
				
			||||||
| 
						 | 
					@ -39,6 +41,7 @@ export default class ActionBar extends React.PureComponent {
 | 
				
			||||||
    onMute: PropTypes.func.isRequired,
 | 
					    onMute: PropTypes.func.isRequired,
 | 
				
			||||||
    onBlockDomain: PropTypes.func.isRequired,
 | 
					    onBlockDomain: PropTypes.func.isRequired,
 | 
				
			||||||
    onUnblockDomain: PropTypes.func.isRequired,
 | 
					    onUnblockDomain: PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    onEndorseToggle: PropTypes.func.isRequired,
 | 
				
			||||||
    intl: PropTypes.object.isRequired,
 | 
					    intl: PropTypes.object.isRequired,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,6 +75,9 @@ export default class ActionBar extends React.PureComponent {
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle });
 | 
					          menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        menu.push({ text: intl.formatMessage(account.getIn(['relationship', 'endorsed']) ? messages.unendorse : messages.endorse), action: this.props.onEndorseToggle });
 | 
				
			||||||
 | 
					        menu.push(null);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (account.getIn(['relationship', 'muting'])) {
 | 
					      if (account.getIn(['relationship', 'muting'])) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@ export default class Header extends ImmutablePureComponent {
 | 
				
			||||||
    onMute: PropTypes.func.isRequired,
 | 
					    onMute: PropTypes.func.isRequired,
 | 
				
			||||||
    onBlockDomain: PropTypes.func.isRequired,
 | 
					    onBlockDomain: PropTypes.func.isRequired,
 | 
				
			||||||
    onUnblockDomain: PropTypes.func.isRequired,
 | 
					    onUnblockDomain: PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    onEndorseToggle: PropTypes.func.isRequired,
 | 
				
			||||||
    hideTabs: PropTypes.bool,
 | 
					    hideTabs: PropTypes.bool,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,6 +74,10 @@ export default class Header extends ImmutablePureComponent {
 | 
				
			||||||
    this.props.onUnblockDomain(domain);
 | 
					    this.props.onUnblockDomain(domain);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleEndorseToggle = () => {
 | 
				
			||||||
 | 
					    this.props.onEndorseToggle(this.props.account);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    const { account, hideTabs } = this.props;
 | 
					    const { account, hideTabs } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,6 +105,7 @@ export default class Header extends ImmutablePureComponent {
 | 
				
			||||||
          onMute={this.handleMute}
 | 
					          onMute={this.handleMute}
 | 
				
			||||||
          onBlockDomain={this.handleBlockDomain}
 | 
					          onBlockDomain={this.handleBlockDomain}
 | 
				
			||||||
          onUnblockDomain={this.handleUnblockDomain}
 | 
					          onUnblockDomain={this.handleUnblockDomain}
 | 
				
			||||||
 | 
					          onEndorseToggle={this.handleEndorseToggle}
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        {!hideTabs && (
 | 
					        {!hideTabs && (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,8 @@ import {
 | 
				
			||||||
  blockAccount,
 | 
					  blockAccount,
 | 
				
			||||||
  unblockAccount,
 | 
					  unblockAccount,
 | 
				
			||||||
  unmuteAccount,
 | 
					  unmuteAccount,
 | 
				
			||||||
 | 
					  pinAccount,
 | 
				
			||||||
 | 
					  unpinAccount,
 | 
				
			||||||
} from 'flavours/glitch/actions/accounts';
 | 
					} from 'flavours/glitch/actions/accounts';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  mentionCompose,
 | 
					  mentionCompose,
 | 
				
			||||||
| 
						 | 
					@ -86,6 +88,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onEndorseToggle (account) {
 | 
				
			||||||
 | 
					    if (account.getIn(['relationship', 'endorsed'])) {
 | 
				
			||||||
 | 
					      dispatch(unpinAccount(account.get('id')));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      dispatch(pinAccount(account.get('id')));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onReport (account) {
 | 
					  onReport (account) {
 | 
				
			||||||
    dispatch(initReport(account));
 | 
					    dispatch(initReport(account));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,8 @@ import {
 | 
				
			||||||
  ACCOUNT_UNBLOCK_SUCCESS,
 | 
					  ACCOUNT_UNBLOCK_SUCCESS,
 | 
				
			||||||
  ACCOUNT_MUTE_SUCCESS,
 | 
					  ACCOUNT_MUTE_SUCCESS,
 | 
				
			||||||
  ACCOUNT_UNMUTE_SUCCESS,
 | 
					  ACCOUNT_UNMUTE_SUCCESS,
 | 
				
			||||||
 | 
					  ACCOUNT_PIN_SUCCESS,
 | 
				
			||||||
 | 
					  ACCOUNT_UNPIN_SUCCESS,
 | 
				
			||||||
  RELATIONSHIPS_FETCH_SUCCESS,
 | 
					  RELATIONSHIPS_FETCH_SUCCESS,
 | 
				
			||||||
} from 'flavours/glitch/actions/accounts';
 | 
					} from 'flavours/glitch/actions/accounts';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
| 
						 | 
					@ -41,6 +43,8 @@ export default function relationships(state = initialState, action) {
 | 
				
			||||||
  case ACCOUNT_UNBLOCK_SUCCESS:
 | 
					  case ACCOUNT_UNBLOCK_SUCCESS:
 | 
				
			||||||
  case ACCOUNT_MUTE_SUCCESS:
 | 
					  case ACCOUNT_MUTE_SUCCESS:
 | 
				
			||||||
  case ACCOUNT_UNMUTE_SUCCESS:
 | 
					  case ACCOUNT_UNMUTE_SUCCESS:
 | 
				
			||||||
 | 
					  case ACCOUNT_PIN_SUCCESS:
 | 
				
			||||||
 | 
					  case ACCOUNT_UNPIN_SUCCESS:
 | 
				
			||||||
    return normalizeRelationship(state, action.relationship);
 | 
					    return normalizeRelationship(state, action.relationship);
 | 
				
			||||||
  case RELATIONSHIPS_FETCH_SUCCESS:
 | 
					  case RELATIONSHIPS_FETCH_SUCCESS:
 | 
				
			||||||
    return normalizeRelationships(state, action.relationships);
 | 
					    return normalizeRelationships(state, action.relationships);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue