diff --git a/lib/machine-loader.js b/lib/machine-loader.js index 68748f5b..ac6853e2 100644 --- a/lib/machine-loader.js +++ b/lib/machine-loader.js @@ -43,6 +43,16 @@ function getMachines () { .then(rr => rr.map(toMachineObject)) } +function getUnpairedMachines () { + return db.any('SELECT * FROM unpaired_devices') + .then(_.map(r => + _.flow( + _.set('deviceId', _.get('device_id', r)), + _.unset('device_id') + )(r) + )) +} + function getConfig (defaultConfig) { if (defaultConfig) return Promise.resolve(defaultConfig) @@ -257,6 +267,7 @@ function getNetworkHeartbeatByDevice (deviceId) { module.exports = { getMachineName, getMachines, + getUnpairedMachines, getMachine, getMachineNames, setMachine, diff --git a/lib/new-admin/graphql/resolvers/machine.resolver.js b/lib/new-admin/graphql/resolvers/machine.resolver.js index 85521311..8c0cbe43 100644 --- a/lib/new-admin/graphql/resolvers/machine.resolver.js +++ b/lib/new-admin/graphql/resolvers/machine.resolver.js @@ -15,7 +15,8 @@ const resolvers = { }, Query: { machines: () => machineLoader.getMachineNames(), - machine: (...[, { deviceId }]) => machineLoader.getMachine(deviceId) + machine: (...[, { deviceId }]) => machineLoader.getMachine(deviceId), + unpairedMachines: () => machineLoader.getUnpairedMachines() }, Mutation: { machineAction: (...[, { deviceId, action, cashbox, cassette1, cassette2, cassette3, cassette4, newName }, context]) => diff --git a/lib/new-admin/graphql/types/machine.type.js b/lib/new-admin/graphql/types/machine.type.js index a51a33e4..da409d7b 100644 --- a/lib/new-admin/graphql/types/machine.type.js +++ b/lib/new-admin/graphql/types/machine.type.js @@ -27,6 +27,15 @@ const typeDef = gql` packetLoss: String } + type UnpairedMachine { + id: ID! + deviceId: ID! + name: String + model: String + paired: Date! + unpaired: Date! + } + type MachineEvent { id: ID deviceId: String @@ -51,6 +60,7 @@ const typeDef = gql` type Query { machines: [Machine] @auth machine(deviceId: ID!): Machine @auth + unpairedMachines: [UnpairedMachine!]! @auth } type Mutation { diff --git a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js index f8a01e4d..4770792b 100644 --- a/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js +++ b/new-lamassu-admin/src/pages/Maintenance/CashCassettes.js @@ -98,6 +98,10 @@ const GET_MACHINES_AND_CONFIG = gql` cassette4 numberOfCassettes } + unpairedMachines { + id: deviceId + name + } config bills(filters: $billFilters) { id @@ -160,6 +164,7 @@ const CashCassettes = () => { const [machineId, setMachineId] = useState('') const machines = R.path(['machines'])(data) ?? [] + const unpairedMachines = R.path(['unpairedMachines'])(data) ?? [] const config = R.path(['config'])(data) ?? {} const fillingPercentageSettings = fromNamespace('notifications', config) const [setCassetteBills, { error }] = useMutation(SET_CASSETTE_BILLS, { @@ -356,7 +361,10 @@ const CashCassettes = () => { )} {showHistory && ( - + )} { header: 'Machine', width: 200, textAlign: 'left', - view: it => { - return R.find(R.propEq('id', it.deviceId))(machines).name - } + view: R.pipe( + R.prop('deviceId'), + id => R.find(R.propEq('id', id), machines), + R.defaultTo({ name: Unpaired device }), + R.prop('name') + ) }, { name: 'billCount',