import { connect } from 'react-redux' import PropTypes from 'prop-types' import PermissionApproval from './permissions-connect.component' import { getPermissionsRequests, getNativeCurrency, getAccountsWithLabels, getLastConnectedInfo, getPermissionsDomains, } from '../../selectors/selectors' import { formatDate } from '../../helpers/utils/util' import { approvePermissionsRequest, rejectPermissionsRequest, showModal, getCurrentWindowTab, getRequestAccountTabIds } from '../../store/actions' import { CONNECT_ROUTE, CONNECT_CONFIRM_PERMISSIONS_ROUTE, } from '../../helpers/constants/routes' const mapStateToProps = (state, ownProps) => { const { match: { params: { id: permissionsRequestId } }, location: { pathname }, } = ownProps const permissionsRequests = getPermissionsRequests(state) const permissionsRequest = permissionsRequests .find((permissionsRequest) => permissionsRequest.metadata.id === permissionsRequestId) const { metadata = {} } = permissionsRequest || {} const { origin } = metadata const nativeCurrency = getNativeCurrency(state) const accountsWithLabels = getAccountsWithLabels(state) const { requestAccountTabs = {} } = state.appState const lastConnectedInfo = getLastConnectedInfo(state) || {} const addressLastConnectedMap = lastConnectedInfo[origin] || {} Object.keys(addressLastConnectedMap).forEach((key) => { addressLastConnectedMap[key] = formatDate(addressLastConnectedMap[key], 'yyyy-M-d') }) const connectPath = `${CONNECT_ROUTE}/${permissionsRequestId}` const confirmPermissionPath = `${CONNECT_ROUTE}/${permissionsRequestId}${CONNECT_CONFIRM_PERMISSIONS_ROUTE}` let page = '' if (pathname === connectPath) { page = '1' } else if (pathname === confirmPermissionPath) { page = '2' } else { throw new Error('Incorrect path for permissions-connect component') } return { permissionsRequest, permissionsRequestId, accounts: accountsWithLabels, originName: origin, newAccountNumber: accountsWithLabels.length + 1, nativeCurrency, requestAccountTabs, addressLastConnectedMap, domains: getPermissionsDomains(state), connectPath, confirmPermissionPath, page, } } const mapDispatchToProps = (dispatch) => { return { approvePermissionsRequest: (request, accounts) => dispatch(approvePermissionsRequest(request, accounts)), rejectPermissionsRequest: (requestId) => dispatch(rejectPermissionsRequest(requestId)), showNewAccountModal: ({ onCreateNewAccount, newAccountNumber }) => { return dispatch(showModal({ name: 'NEW_ACCOUNT', onCreateNewAccount, newAccountNumber, })) }, getRequestAccountTabIds: () => dispatch(getRequestAccountTabIds()), getCurrentWindowTab: () => dispatch(getCurrentWindowTab()), } } const PermissionApprovalContainer = connect(mapStateToProps, mapDispatchToProps)(PermissionApproval) PermissionApprovalContainer.propTypes = { history: PropTypes.object.isRequired, match: PropTypes.shape({ params: PropTypes.shape({ id: PropTypes.string, }).isRequired, }).isRequired, } export default PermissionApprovalContainer