diff --git a/new-lamassu-admin/src/pages/Customers/CustomerProfile.js b/new-lamassu-admin/src/pages/Customers/CustomerProfile.js index 631e51cf..2458da66 100644 --- a/new-lamassu-admin/src/pages/Customers/CustomerProfile.js +++ b/new-lamassu-admin/src/pages/Customers/CustomerProfile.js @@ -192,6 +192,7 @@ const CustomerProfile = memo(() => { )} diff --git a/new-lamassu-admin/src/pages/Customers/components/TransactionsList.js b/new-lamassu-admin/src/pages/Customers/components/TransactionsList.js index 6d5d39fc..eb978cd4 100644 --- a/new-lamassu-admin/src/pages/Customers/components/TransactionsList.js +++ b/new-lamassu-admin/src/pages/Customers/components/TransactionsList.js @@ -1,6 +1,5 @@ import { makeStyles, Box } from '@material-ui/core' import BigNumber from 'bignumber.js' -import moment from 'moment' import * as R from 'ramda' import React from 'react' @@ -10,17 +9,20 @@ import { ReactComponent as TxInIcon } from 'src/styling/icons/direction/cash-in. import { ReactComponent as TxOutIcon } from 'src/styling/icons/direction/cash-out.svg' import { toUnit } from 'src/utils/coin' import { ifNotNull } from 'src/utils/nullCheck' +import { formatDate } from 'src/utils/timezones' import CopyToClipboard from '../../Transactions/CopyToClipboard' import mainStyles from '../CustomersList.styles' const useStyles = makeStyles(mainStyles) -const TransactionsList = ({ customer, data, loading }) => { +const TransactionsList = ({ customer, data, loading, locale }) => { const classes = useStyles() const LastTxIcon = customer.lastTxClass === 'cashOut' ? TxOutIcon : TxInIcon const hasData = !(R.isEmpty(data) || R.isNil(data)) + const timezone = locale.timezone + const summaryElements = [ { header: 'Transactions', @@ -41,10 +43,12 @@ const TransactionsList = ({ customer, data, loading }) => { { header: 'Last active', size: 142, - value: ifNotNull( - customer.lastActive, - moment.utc(customer.lastActive).format('YYYY-MM-D') - ) + value: + !R.isNil(timezone) && + ifNotNull( + customer.lastActive, + formatDate(customer.lastActive, timezone.dstOffset, 'YYYY-MM-D') + ) }, { header: 'Last transaction', @@ -109,12 +113,12 @@ const TransactionsList = ({ customer, data, loading }) => { { header: 'Date', width: 157, - view: it => moment.utc(it.created).format('YYYY-MM-D') + view: it => formatDate(it.created, timezone.dstOffset, 'YYYY-MM-D') }, { header: 'Time (h:m:s)', width: 134, - view: it => moment.utc(it.created).format('hh:mm:ss') + view: it => formatDate(it.created, timezone.dstOffset, 'HH:mm:ss') } ] diff --git a/new-lamassu-admin/src/pages/MachineLogs.js b/new-lamassu-admin/src/pages/MachineLogs.js index e26555b8..e35c2bc8 100644 --- a/new-lamassu-admin/src/pages/MachineLogs.js +++ b/new-lamassu-admin/src/pages/MachineLogs.js @@ -1,7 +1,6 @@ import { useQuery } from '@apollo/react-hooks' import { makeStyles } from '@material-ui/core/styles' import gql from 'graphql-tag' -import moment from 'moment' import * as R from 'ramda' import React, { useState } from 'react' @@ -17,6 +16,7 @@ import { TableCell } from 'src/components/table' import { Info3, H4 } from 'src/components/typography' +import { formatDate } from 'src/utils/timezones' import styles from './Logs.styles' @@ -70,9 +70,11 @@ const GET_MACHINE_LOGS = gql` } ` -const formatDate = date => { - return moment(date).format('YYYY-MM-DD HH:mm') -} +const GET_DATA = gql` + query getData { + config + } +` const Logs = () => { const classes = useStyles() @@ -84,6 +86,9 @@ const Logs = () => { const { data: machineResponse } = useQuery(GET_MACHINES) + const { data: configResponse } = useQuery(GET_DATA) + const timezone = R.path(['config', 'locale_timezone'], configResponse) + const { data: logsResponse, loading } = useQuery(GET_MACHINE_LOGS, { variables: { deviceId, limit: NUM_LOG_RESULTS }, skip: !selected, @@ -137,7 +142,14 @@ const Logs = () => { {logsResponse && logsResponse.machineLogs.map((log, idx) => ( - {formatDate(log.timestamp)} + + {timezone && + formatDate( + log.timestamp, + timezone.dstOffset, + 'YYYY-MM-DD HH:mm' + )} + {log.logLevel} {log.message} diff --git a/new-lamassu-admin/src/pages/Machines/MachineComponents/Details.js b/new-lamassu-admin/src/pages/Machines/MachineComponents/Details.js index a47adfc7..ff615aa8 100644 --- a/new-lamassu-admin/src/pages/Machines/MachineComponents/Details.js +++ b/new-lamassu-admin/src/pages/Machines/MachineComponents/Details.js @@ -1,13 +1,14 @@ import { makeStyles } from '@material-ui/core/styles' -import moment from 'moment' import React from 'react' import { Label3, P } from 'src/components/typography' +import { formatDate } from 'src/utils/timezones' import styles from '../Machines.styles' const useStyles = makeStyles(styles) -const Details = ({ data }) => { +const Details = ({ data, timezone }) => { + console.log(timezone) const classes = useStyles() return (
@@ -15,7 +16,11 @@ const Details = ({ data }) => { Paired at

{data.pairedAt - ? moment(data.pairedAt).format('YYYY-MM-DD HH:mm:ss') + ? formatDate( + data.pairedAt, + timezone.dstOffset, + 'YYYY-MM-DD HH:mm:ss' + ) : ''}

diff --git a/new-lamassu-admin/src/pages/Machines/Machines.js b/new-lamassu-admin/src/pages/Machines/Machines.js index a3b73814..79082773 100644 --- a/new-lamassu-admin/src/pages/Machines/Machines.js +++ b/new-lamassu-admin/src/pages/Machines/Machines.js @@ -53,6 +53,7 @@ const Machines = () => { const machines = getMachines(data) ?? [] const machineInfo = getMachineInfo(selectedMachine)(machines) ?? {} + const timezone = R.path(['config', 'locale_timezone'], data) ?? {} // pre-selects first machine from the list, if there is a machine configured. useEffect(() => { @@ -98,7 +99,7 @@ const Machines = () => {
{'Details'} -
+
{'Cash cassettes'} diff --git a/new-lamassu-admin/src/pages/Maintenance/MachineDetailsCard.js b/new-lamassu-admin/src/pages/Maintenance/MachineDetailsCard.js index 22134dd9..3c61a6db 100644 --- a/new-lamassu-admin/src/pages/Maintenance/MachineDetailsCard.js +++ b/new-lamassu-admin/src/pages/Maintenance/MachineDetailsCard.js @@ -2,7 +2,6 @@ import { useMutation, useLazyQuery } from '@apollo/react-hooks' import { Grid /*, Divider */ } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import gql from 'graphql-tag' -import moment from 'moment' import React, { useState } from 'react' import { ConfirmDialog } from 'src/components/ConfirmDialog' @@ -18,6 +17,7 @@ import { ReactComponent as ShutdownIcon } from 'src/styling/icons/button/shut do import { ReactComponent as UnpairReversedIcon } from 'src/styling/icons/button/unpair/white.svg' import { ReactComponent as UnpairIcon } from 'src/styling/icons/button/unpair/zodiac.svg' import { modelPrettifier } from 'src/utils/machine' +import { formatDate } from 'src/utils/timezones' import { labelStyles, machineDetailsStyles } from './MachineDetailsCard.styles' @@ -101,7 +101,7 @@ const getState = machineEventsLazy => JSON.parse(machineEventsLazy.machine.latestEvent?.note ?? '{"state": null}') .state -const MachineDetailsRow = ({ it: machine, onActionSuccess }) => { +const MachineDetailsRow = ({ it: machine, onActionSuccess, timezone }) => { const [action, setAction] = useState({ command: null }) const [errorMessage, setErrorMessage] = useState(null) const classes = useMDStyles() @@ -214,7 +214,12 @@ const MachineDetailsRow = ({ it: machine, onActionSuccess }) => { - {moment(machine.pairedAt).format('YYYY-MM-DD HH:mm:ss')} + {timezone && + formatDate( + machine.pairedAt, + timezone.dstOffset, + 'YYYY-MM-DD HH:mm:ss' + )} diff --git a/new-lamassu-admin/src/pages/Maintenance/MachineStatus.js b/new-lamassu-admin/src/pages/Maintenance/MachineStatus.js index 8ecd2adc..39da4c0b 100644 --- a/new-lamassu-admin/src/pages/Maintenance/MachineStatus.js +++ b/new-lamassu-admin/src/pages/Maintenance/MachineStatus.js @@ -38,6 +38,12 @@ const GET_MACHINES = gql` } ` +const GET_DATA = gql` + query getData { + config + } +` + const useStyles = makeStyles(mainStyles) const MachineStatus = () => { @@ -46,6 +52,8 @@ const MachineStatus = () => { const { state } = useLocation() const addedMachineId = state?.id const { data: machinesResponse, refetch, loading } = useQuery(GET_MACHINES) + const { data: configResponse, configLoading } = useQuery(GET_DATA) + const timezone = R.path(['config', 'locale_timezone'], configResponse) const elements = [ { @@ -95,7 +103,7 @@ const MachineStatus = () => { ) const InnerMachineDetailsRow = ({ it }) => ( - + ) return ( @@ -116,7 +124,7 @@ const MachineStatus = () => {
{ - return moment(date).format('YYYY-MM-DD HH:mm') -} - const NUM_LOG_RESULTS = 500 const GET_CSV = gql` @@ -66,7 +62,7 @@ const GET_CSV = gql` } ` -const GET_DATA = gql` +const GET_SERVER_DATA = gql` query ServerData($limit: Int, $from: DateTime, $until: DateTime) { serverVersion uptime { @@ -83,6 +79,12 @@ const GET_DATA = gql` } ` +const GET_DATA = gql` + query getData { + config + } +` + const Logs = () => { const classes = useStyles() @@ -91,12 +93,14 @@ const Logs = () => { const [saveMessage, setSaveMessage] = useState(null) const [logLevel, setLogLevel] = useState(SHOW_ALL) - const { data, loading } = useQuery(GET_DATA, { + const { data, loading } = useQuery(GET_SERVER_DATA, { onCompleted: () => setSaveMessage(''), variables: { limit: NUM_LOG_RESULTS } }) + const { data: configResponse, configLoading } = useQuery(GET_DATA) + const timezone = R.path(['config', 'locale_timezone'], configResponse) const defaultLogLevels = [ { code: 'error', display: 'Error' }, @@ -181,15 +185,22 @@ const Logs = () => { ) .map((log, idx) => ( - {formatDate(log.timestamp)} + + {timezone && + formatDate( + log.timestamp, + timezone.dstOffset, + 'YYYY-MM-DD HH:mm' + )} + {log.logLevel} {log.message} ))} - {loading &&

{'Loading...'}

} - {!loading && !data?.serverLogs?.length && ( + {loading && configLoading &&

{'Loading...'}

} + {!loading && !configLoading && !data?.serverLogs?.length && (

{'No activity so far'}

)} diff --git a/new-lamassu-admin/src/pages/Transactions/Transactions.js b/new-lamassu-admin/src/pages/Transactions/Transactions.js index d79531bd..7469090d 100644 --- a/new-lamassu-admin/src/pages/Transactions/Transactions.js +++ b/new-lamassu-admin/src/pages/Transactions/Transactions.js @@ -2,7 +2,6 @@ import { useQuery } from '@apollo/react-hooks' import { makeStyles } from '@material-ui/core' import BigNumber from 'bignumber.js' import gql from 'graphql-tag' -import moment from 'moment' import * as R from 'ramda' import React from 'react' import { useHistory } from 'react-router-dom' @@ -14,6 +13,7 @@ import { ReactComponent as TxInIcon } from 'src/styling/icons/direction/cash-in. import { ReactComponent as TxOutIcon } from 'src/styling/icons/direction/cash-out.svg' import { ReactComponent as CustomerLinkIcon } from 'src/styling/icons/month arrows/right.svg' import { toUnit, formatCryptoAddress } from 'src/utils/coin' +import { formatDate } from 'src/utils/timezones' import DetailsRow from './DetailsCard' import { mainStyles } from './Transactions.styles' @@ -23,6 +23,12 @@ const useStyles = makeStyles(mainStyles) const NUM_LOG_RESULTS = 1000 +const GET_DATA = gql` + query getData { + config + } +` + const GET_TRANSACTIONS_CSV = gql` query transactions($limit: Int, $from: DateTime, $until: DateTime) { transactionsCsv(limit: $limit, from: $from, until: $until) @@ -73,6 +79,9 @@ const Transactions = () => { pollInterval: 10000 }) + const { data: configResponse, configLoading } = useQuery(GET_DATA) + const timezone = R.path(['config', 'locale_timezone'], configResponse) + const redirect = customerId => { return history.push(`/compliance/customer/${customerId}`) } @@ -143,7 +152,9 @@ const Transactions = () => { }, { header: 'Date (UTC)', - view: it => moment.utc(it.created).format('YYYY-MM-DD HH:mm:ss'), + view: it => + timezone && + formatDate(it.created, timezone.dstOffset, 'YYYY-MM-DD HH:mm:ss'), textAlign: 'right', size: 'sm', width: 195 @@ -185,7 +196,7 @@ const Transactions = () => { @@ -73,4 +74,10 @@ const getTzLabels = timezones => getFinalTimezones(timezones) ) -export { getTzLabels } +const formatDate = (date, offset, format) => + moment + .utc(date) + .utcOffset(offset) + .format(format) + +export { getTzLabels, formatDate }