Skip to content

Commit

Permalink
feat(ui): implement activity item error dialog
Browse files Browse the repository at this point in the history
resolves LN-Zap#2580
  • Loading branch information
korhaliv committed Jul 15, 2019
1 parent c8802c3 commit 8eb644d
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 11 deletions.
17 changes: 16 additions & 1 deletion renderer/components/Activity/Activity.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { Box } from 'rebass'
import { Bar, Heading, Panel } from 'components/UI'
import ActivityActions from 'containers/Activity/ActivityActions'
import ActivityListItem from './ActivityListItem'
import ErrorDetailsDialog from './ErrorDetailsDialog'

const StyledList = styled(List)`
${space}
Expand Down Expand Up @@ -82,19 +83,33 @@ class Activity extends Component {
}

render() {
const { isErrorDialogOpen, hideErrorDetailsDialog, errorDialogDetails } = this.props

return (
<Panel>
<Panel.Header my={3} px={4}>
<ActivityActions />
</Panel.Header>
<Panel.Body>{this.renderActivityList()}</Panel.Body>
<Panel.Body>
<>
{this.renderActivityList()}
<ErrorDetailsDialog
error={errorDialogDetails}
isOpen={isErrorDialogOpen}
onOk={hideErrorDetailsDialog}
/>
</>
</Panel.Body>
</Panel>
)
}
}

Activity.propTypes = {
currentActivity: PropTypes.array.isRequired,
errorDialogDetails: PropTypes.object,
hideErrorDetailsDialog: PropTypes.func.isRequired,
isErrorDialogOpen: PropTypes.bool,
}

export default Activity
10 changes: 6 additions & 4 deletions renderer/components/Activity/Payment/Payment.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const getDisplayNodeName = (payment, intl) => {
return intl.formatMessage({ ...messages.unknown })
}

const Payment = ({ payment, showActivityModal, cryptoUnitName, intl }) => {
const Payment = ({ payment, showActivityModal, cryptoUnitName, showErrorDetailsDialog, intl }) => {
return (
<Flex
alignItems="center"
Expand All @@ -54,10 +54,11 @@ const Payment = ({ payment, showActivityModal, cryptoUnitName, intl }) => {
</Message>
)}
{payment.status === 'failed' && (
<Message variant="error">
<Message
onClick={() => showErrorDetailsDialog({ details: payment.error })}
variant="error"
>
<FormattedMessage {...messages.status_error} />
{` `}
{payment.error}
</Message>
)}
</>
Expand Down Expand Up @@ -93,6 +94,7 @@ Payment.propTypes = {
intl: intlShape.isRequired,
payment: PropTypes.object.isRequired,
showActivityModal: PropTypes.func.isRequired,
showErrorDetailsDialog: PropTypes.func.isRequired,
}

export default injectIntl(Payment)
2 changes: 1 addition & 1 deletion renderer/components/Activity/Transaction/Transaction.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const Transaction = ({ transaction, showActivityModal, cryptoUnitName, intl }) =
)}
{transaction.status === 'failed' && (
<Message variant="error">
<FormattedMessage {...messages.status_error} /> {transaction.error}
<FormattedMessage {...messages.status_error} />
</Message>
)}
</>
Expand Down
13 changes: 11 additions & 2 deletions renderer/containers/Activity/Activity.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
import { connect } from 'react-redux'
import { activitySelectors } from 'reducers/activity'
import { activitySelectors, hideErrorDetailsDialog } from 'reducers/activity'
import Activity from 'components/Activity'

const mapStateToProps = state => ({
currentActivity: activitySelectors.currentActivity(state)(state),
isErrorDialogOpen: activitySelectors.isErrorDialogOpen(state),
errorDialogDetails: activitySelectors.errorDialogDetailsSelector(state),
})

export default connect(mapStateToProps)(Activity)
const mapDispatchToProps = {
hideErrorDetailsDialog,
}

export default connect(
mapStateToProps,
mapDispatchToProps
)(Activity)
3 changes: 2 additions & 1 deletion renderer/containers/Activity/Invoice.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { connect } from 'react-redux'
import { tickerSelectors } from 'reducers/ticker'
import { showActivityModal } from 'reducers/activity'
import { showErrorDetailsDialog, showActivityModal } from 'reducers/activity'

import Invoice from 'components/Activity/Invoice'

const mapDispatchToProps = {
showActivityModal,
showErrorDetailsDialog,
}

const mapStateToProps = state => ({
Expand Down
3 changes: 2 additions & 1 deletion renderer/containers/Activity/Payment.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { connect } from 'react-redux'
import { tickerSelectors } from 'reducers/ticker'
import { showActivityModal } from 'reducers/activity'
import { showActivityModal, showErrorDetailsDialog } from 'reducers/activity'

import Payment from 'components/Activity/Payment'

const mapDispatchToProps = {
showActivityModal,
showErrorDetailsDialog,
}

const mapStateToProps = state => ({
Expand Down
3 changes: 2 additions & 1 deletion renderer/containers/Activity/Transaction.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { connect } from 'react-redux'
import { tickerSelectors } from 'reducers/ticker'
import { showActivityModal } from 'reducers/activity'
import { showActivityModal, showErrorDetailsDialog } from 'reducers/activity'

import Transaction from 'components/Activity/Transaction'

const mapDispatchToProps = {
showActivityModal,
showErrorDetailsDialog,
}

const mapStateToProps = state => ({
Expand Down
41 changes: 41 additions & 0 deletions renderer/reducers/activity.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const initialState = {
itemType: null,
itemId: null,
},
errorDialogDetails: null,
searchText: null,
isActivityLoading: false,
activityLoadingError: null,
Expand All @@ -42,6 +43,8 @@ export const UPDATE_SEARCH_TEXT = 'UPDATE_SEARCH_TEXT'
export const FETCH_ACTIVITY_HISTORY = 'FETCH_ACTIVITY_HISTORY'
export const FETCH_ACTIVITY_HISTORY_SUCCESS = 'FETCH_ACTIVITY_HISTORY_SUCCESS'
export const FETCH_ACTIVITY_HISTORY_FAILURE = 'FETCH_ACTIVITY_HISTORY_FAILURE'
export const OPEN_ERROR_DETAILS_DIALOG = 'OPEN_ERROR_DETAILS_DIALOG'
export const CLOSE_ERROR_DETAILS_DIALOG = 'CLOSE_ERROR_DETAILS_DIALOG'

// ------------------------------------
// Helpers
Expand Down Expand Up @@ -162,6 +165,30 @@ const prepareData = (data, searchText) => {
// Actions
// ------------------------------------

/**
* showErrorDetailsDialog - Show the activity error detail dialog.
*
* @param {object} error Error description
* @returns {object} Action
*/
export function showErrorDetailsDialog(error) {
return {
type: OPEN_ERROR_DETAILS_DIALOG,
error,
}
}

/**
* hideErrorDetailsDialog - Hide the activity error detail dialog.
*
* @returns {object} Action
*/
export function hideErrorDetailsDialog() {
return {
type: CLOSE_ERROR_DETAILS_DIALOG,
}
}

/**
* showActivityModal - Show the activity modal with a given activity item.
*
Expand Down Expand Up @@ -257,6 +284,12 @@ const ACTION_HANDLERS = {
state.isActivityLoading = false
state.activityLoadingError = error
},
[OPEN_ERROR_DETAILS_DIALOG]: (state, { error }) => {
state.errorDialogDetails = error
},
[CLOSE_ERROR_DETAILS_DIALOG]: state => {
state.errorDialogDetails = null
},
}

// ------------------------------------
Expand All @@ -265,6 +298,7 @@ const ACTION_HANDLERS = {

const activitySelectors = {}
const filterSelector = state => state.activity.filter
const errorDialogDetailsSelector = state => state.activity.errorDialogDetails
const filtersSelector = state => state.activity.filters
const searchTextSelector = state => state.activity.searchText
const modalItemTypeSelector = state => state.activity.modal.itemType
Expand Down Expand Up @@ -474,6 +508,13 @@ const FILTERS = {
INTERNAL_ACTIVITY: internalActivity,
}

activitySelectors.isErrorDialogOpen = createSelector(
errorDialogDetailsSelector,
error => Boolean(error)
)

activitySelectors.errorDialogDetailsSelector = errorDialogDetailsSelector

activitySelectors.currentActivity = createSelector(
filterSelector,
filter => FILTERS[filter]
Expand Down

0 comments on commit 8eb644d

Please # to comment.