Skip to content
This repository has been archived by the owner on Oct 29, 2018. It is now read-only.

Commit

Permalink
Show nodal status in transaction status cell
Browse files Browse the repository at this point in the history
  • Loading branch information
notdrone committed Apr 12, 2018
1 parent 1617957 commit 50c3e53
Show file tree
Hide file tree
Showing 7 changed files with 115 additions and 31 deletions.
12 changes: 7 additions & 5 deletions src/api/transaction-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export enum nodalStatusEnum {
initiates = 1,
authorized = 2,
failed = 3,
captureSuccess = 4,
paymentArrived = 4,
dispute = 5,
}

Expand All @@ -51,6 +51,11 @@ export interface ISplitTransaction {
updatedTimestamp: string
}

export interface INodal {
id: string
status: nodalStatusEnum
}

export interface ITransaction {
actionStatus: transactionActionEnum
id: string
Expand All @@ -69,10 +74,7 @@ export interface ITransaction {
createdTimestamp: string
updatedTimestamp: string
transactionDetails?: ISplitTransaction[]
nodal: {
id: string
status: nodalStatusEnum
}
nodal: INodal
}

const getAllTransactionsFormData = (limit: number, offset: number) => {
Expand Down
21 changes: 20 additions & 1 deletion src/helpers/color-helper.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { customerStatus } from '../api/customer-api'
import { splitTransactionStatus } from '../api/transaction-api'
import { nodalStatusEnum, splitTransactionStatus } from '../api/transaction-api'
import {
alertPending,
alertRed,
Expand All @@ -8,6 +8,7 @@ import {
grey,
identity,
positiveGreen,
white,
} from '../styles/colors'

export const getColorBasedOnCustomerStatus = (status: customerStatus) => {
Expand Down Expand Up @@ -51,3 +52,21 @@ export const getSplitTransactionColor = (
return identity
}
}

export const getNodalTransactionColor = (status: nodalStatusEnum): string => {
switch (status) {
case nodalStatusEnum.notInitiated:
return fog
case nodalStatusEnum.paymentArrived:
return positiveGreen
case nodalStatusEnum.dispute:
case nodalStatusEnum.failed:
return alertRed
case nodalStatusEnum.authorized:
return identity
case nodalStatusEnum.initiates:
return alertPending
case nodalStatusEnum.noop:
return white
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ class CustomerTransactionItem extends React.Component<IProps> {
{!isPhoneOrTable() && (
<TimeCell time={transaction.createdTimestamp} space={SpaceEnum.s} />
)}
<TransactionStatusCell splits={transaction.transactionDetails} />
<TransactionStatusCell
splits={transaction.transactionDetails}
nodal={transaction.nodal}
/>
</Container>
)
}
Expand Down
34 changes: 34 additions & 0 deletions src/screens/TransactionDetail/NodalStatus.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import * as React from 'react'
import styled from 'styled-components'
import { nodalStatusEnum } from '../../api/transaction-api'
import { getNodalTransactionColor } from '../../helpers/color-helper'
import { white } from '../../styles/colors'
import { normalizeSplitTransactionStatus } from '../Transactions/TransactionStatusCell'

interface IProps {
status: nodalStatusEnum
}
const NodalStatus: React.SFC<IProps> = ({ status }: IProps) => (
<Container status={status}>
<Text>
Nodal: {normalizeSplitTransactionStatus(nodalStatusEnum[status])}
</Text>
</Container>
)

const Text = styled.p`
padding: 0.2rem 0.7rem;
color: ${white};
font-size: 0.9rem;
font-weight: 600;
font-style: italic;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
`

const Container: any = styled.div`
background: ${(props: any) => getNodalTransactionColor(props.status)};
border-radius: 0.2rem;
display: flex;
`

export default NodalStatus
4 changes: 2 additions & 2 deletions src/screens/TransactionDetail/SplitStatus.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as React from 'react'
import styled from 'styled-components'
import { splitTransactionStatus } from '../../api/transaction-api'
import { nodalStatusEnum, splitTransactionStatus } from '../../api/transaction-api'
import { getSplitTransactionColor } from '../../helpers/color-helper'
import { white } from '../../styles/colors'
import { normalizeSplitTransactionStatus } from '../Transactions/TransactionStatusCell'

interface IProps {
status: splitTransactionStatus
status: splitTransactionStatus| nodalStatusEnum
count?: number
}
const SplitStatus: React.SFC<IProps> = ({ status, count }: IProps) => (
Expand Down
65 changes: 44 additions & 21 deletions src/screens/Transactions/TransactionStatusCell.tsx
Original file line number Diff line number Diff line change
@@ -1,40 +1,63 @@
import { default as React, Fragment } from 'react'
import { ISplitTransaction } from '../../api/transaction-api'
import styled from 'styled-components'
import {
INodal,
ISplitTransaction,
nodalStatusEnum,
} from '../../api/transaction-api'
import Space, { SpaceEnum } from '../../components/Space'
import {
getSplitsWithCount,
ISplitsWithCount,
} from '../../helpers/transaction-helper'
import NodalStatus from '../TransactionDetail/NodalStatus'
import SplitStatus from '../TransactionDetail/SplitStatus'

interface IProps {
splits: ISplitTransaction[] | undefined
nodal: INodal
}

function splitStatusContainer(splits: ISplitTransaction[]) {
return getSplitsWithCount(splits).map(
(splitWithCount: ISplitsWithCount, index) => (
<Fragment key={index}>
<SplitStatus
status={splitWithCount.status}
count={splitWithCount.count}
/>
<Space width={SpaceEnum.s} />
</Fragment>
),
)
}

const TransactionStatusCell: React.SFC<IProps> = props => {
const TransactionStatusCell: React.SFC<IProps> = ({
splits,
nodal,
}: IProps) => {
return (
<div
style={{
display: 'flex',
width: '100%',
}}
>
{props.splits &&
getSplitsWithCount(props.splits).map(
(splitWithCount: ISplitsWithCount, index) => (
<Fragment key={index}>
<SplitStatus
status={splitWithCount.status}
count={splitWithCount.count}
/>
<Space width={SpaceEnum.s} />
</Fragment>
),
)}
</div>
<Container>
{nodal.status !== nodalStatusEnum.noop && (
<>
<NodalStatus status={nodal.status} />
<Space width={SpaceEnum.l} />
</>
)}

{splits && splitStatusContainer(splits)}
</Container>
)
}

const Container = styled.div`
display: flex;
height: 100%;
width: 100%;
align-items: center;
padding-right: 0.5rem;
`

export const normalizeSplitTransactionStatus = (status: string) => {
return status.split('').map(char => {
if (char === char.toUpperCase()) {
Expand Down
5 changes: 4 additions & 1 deletion src/screens/Transactions/TransactionsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,10 @@ class TransactionsList extends Component<IProps, {}> {
<TimeCell time={rowData.updateTimestamp} />
)
private handleStatus = ({ rowData }: any) => (
<TransactionStatusCell splits={rowData.transactionDetails} />
<TransactionStatusCell
splits={rowData.transactionDetails}
nodal={rowData.nodal}
/>
)

private handleRowClick = ({ rowData }: any) => {
Expand Down

0 comments on commit 50c3e53

Please sign in to comment.