fix: remove machine selector
This commit is contained in:
parent
30bc9c96da
commit
ee8c46b51e
8 changed files with 32 additions and 132 deletions
|
|
@ -8,21 +8,18 @@ const getCustomMessages = () => {
|
||||||
it => ({
|
it => ({
|
||||||
id: it.id,
|
id: it.id,
|
||||||
event: _.camelCase(it.event),
|
event: _.camelCase(it.event),
|
||||||
deviceId: it.device_id,
|
|
||||||
message: it.message
|
message: it.message
|
||||||
}), res))
|
}), res))
|
||||||
}
|
}
|
||||||
|
|
||||||
const createCustomMessage = (event, deviceId, message) => {
|
const createCustomMessage = (event, message) => {
|
||||||
const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId
|
const sql = `INSERT INTO custom_messages (id, event, message) VALUES ($1, $2, $3)`
|
||||||
const sql = `INSERT INTO custom_messages (id, event, device_id, message) VALUES ($1, $2, $3, $4)`
|
return db.none(sql, [uuid.v4(), _.snakeCase(event), message])
|
||||||
return db.none(sql, [uuid.v4(), _.snakeCase(event), machineId, message])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const editCustomMessage = (id, event, deviceId, message) => {
|
const editCustomMessage = (id, event, message) => {
|
||||||
const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId
|
const sql = `UPDATE custom_messages SET event=$2, message=$3 WHERE id=$1`
|
||||||
const sql = `UPDATE custom_messages SET event=$2, device_id=$3, message=$4 WHERE id=$1`
|
return db.none(sql, [id, _.snakeCase(event), message])
|
||||||
return db.none(sql, [id, _.snakeCase(event), machineId, message])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const deleteCustomMessage = id => {
|
const deleteCustomMessage = id => {
|
||||||
|
|
@ -30,21 +27,15 @@ const deleteCustomMessage = id => {
|
||||||
return db.none(sql, [id])
|
return db.none(sql, [id])
|
||||||
}
|
}
|
||||||
|
|
||||||
const getCommonCustomMessages = event => {
|
const getCustomMessage = event => {
|
||||||
const sql = `SELECT * FROM custom_messages WHERE event=$1 AND device_id IS NULL LIMIT 1`
|
const sql = `SELECT * FROM custom_messages WHERE event=$1 LIMIT 1`
|
||||||
return db.oneOrNone(sql, [event])
|
return db.oneOrNone(sql, [event])
|
||||||
}
|
}
|
||||||
|
|
||||||
const getMachineCustomMessages = (event, deviceId) => {
|
|
||||||
const sql = `SELECT * FROM custom_messages WHERE event=$1 AND device_id=$2 LIMIT 1`
|
|
||||||
return db.oneOrNone(sql, [event, deviceId])
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getCustomMessages,
|
getCustomMessages,
|
||||||
createCustomMessage,
|
createCustomMessage,
|
||||||
editCustomMessage,
|
editCustomMessage,
|
||||||
deleteCustomMessage,
|
deleteCustomMessage,
|
||||||
getCommonCustomMessages,
|
getCustomMessage
|
||||||
getMachineCustomMessages
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ const resolvers = {
|
||||||
customMessages: () => customSms.getCustomMessages()
|
customMessages: () => customSms.getCustomMessages()
|
||||||
},
|
},
|
||||||
Mutation: {
|
Mutation: {
|
||||||
createCustomMessage: (...[, { event, deviceId, message }]) => customSms.createCustomMessage(event, deviceId, message),
|
createCustomMessage: (...[, { event, message }]) => customSms.createCustomMessage(event, message),
|
||||||
editCustomMessage: (...[, { id, event, deviceId, message }]) => customSms.editCustomMessage(id, event, deviceId, message),
|
editCustomMessage: (...[, { id, event, message }]) => customSms.editCustomMessage(id, event, message),
|
||||||
deleteCustomMessage: (...[, { id }]) => customSms.deleteCustomMessage(id)
|
deleteCustomMessage: (...[, { id }]) => customSms.deleteCustomMessage(id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ const typeDef = gql`
|
||||||
type CustomMessage {
|
type CustomMessage {
|
||||||
id: ID!
|
id: ID!
|
||||||
event: CustomMessageEvent!
|
event: CustomMessageEvent!
|
||||||
deviceId: String
|
|
||||||
message: String!
|
message: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -18,8 +17,8 @@ const typeDef = gql`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation {
|
type Mutation {
|
||||||
createCustomMessage(event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth
|
createCustomMessage(event: CustomMessageEvent!, message: String!): CustomMessage @auth
|
||||||
editCustomMessage(id: ID!, event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth
|
editCustomMessage(id: ID!, event: CustomMessageEvent!, message: String!): CustomMessage @auth
|
||||||
deleteCustomMessage(id: ID!): CustomMessage @auth
|
deleteCustomMessage(id: ID!): CustomMessage @auth
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
|
||||||
|
|
@ -361,7 +361,7 @@ function plugins (settings, deviceId) {
|
||||||
|
|
||||||
const phone = tx.phone
|
const phone = tx.phone
|
||||||
const timestamp = dateFormat(new Date(), 'UTC:HH:MM Z')
|
const timestamp = dateFormat(new Date(), 'UTC:HH:MM Z')
|
||||||
return sms.getCashOutReadySms(deviceId, phone, timestamp)
|
return sms.getCashOutReadySms(phone, timestamp)
|
||||||
.then(msg => {
|
.then(msg => {
|
||||||
const rec = {
|
const rec = {
|
||||||
sms: msg
|
sms: msg
|
||||||
|
|
@ -723,7 +723,7 @@ function plugins (settings, deviceId) {
|
||||||
? '123'
|
? '123'
|
||||||
: randomCode()
|
: randomCode()
|
||||||
|
|
||||||
return sms.getPhoneCodeSms(deviceId, phone, code)
|
return sms.getPhoneCodeSms(phone, code)
|
||||||
.then(msg => {
|
.then(msg => {
|
||||||
const rec = {
|
const rec = {
|
||||||
sms: msg
|
sms: msg
|
||||||
|
|
|
||||||
42
lib/sms.js
42
lib/sms.js
|
|
@ -5,22 +5,11 @@ const _ = require('lodash/fp')
|
||||||
|
|
||||||
const customSms = require('./custom-sms')
|
const customSms = require('./custom-sms')
|
||||||
|
|
||||||
function getPhoneCodeSms (deviceId, phone, code) {
|
function getPhoneCodeSms (phone, code) {
|
||||||
return Promise.all([
|
return customSms.getCustomMessage('sms_code')
|
||||||
customSms.getCommonCustomMessages('sms_code'),
|
.then(msg => {
|
||||||
customSms.getMachineCustomMessages('sms_code', deviceId)
|
if (!_.isNil(msg)) {
|
||||||
])
|
const messageContent = _.replace('#code', code, msg.message)
|
||||||
.then(([commonMsg, machineMsg]) => {
|
|
||||||
if (!_.isNil(machineMsg)) {
|
|
||||||
const messageContent = _.replace('#code', code, machineMsg.message)
|
|
||||||
return {
|
|
||||||
toNumber: phone,
|
|
||||||
body: messageContent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_.isNil(commonMsg)) {
|
|
||||||
const messageContent = _.replace('#code', code, commonMsg.message)
|
|
||||||
return {
|
return {
|
||||||
toNumber: phone,
|
toNumber: phone,
|
||||||
body: messageContent
|
body: messageContent
|
||||||
|
|
@ -34,22 +23,11 @@ function getPhoneCodeSms (deviceId, phone, code) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCashOutReadySms (deviceId, phone, timestamp) {
|
function getCashOutReadySms (phone, timestamp) {
|
||||||
return Promise.all([
|
return customSms.getCustomMessage('cash_out_dispense_ready')
|
||||||
customSms.getCommonCustomMessages('cash_out_dispense_ready'),
|
.then(msg => {
|
||||||
customSms.getMachineCustomMessages('cash_out_dispense_ready', deviceId)
|
if (!_.isNil(msg)) {
|
||||||
])
|
const messageContent = _.replace('#timestamp', timestamp, msg.message)
|
||||||
.then(([commonMsg, machineMsg]) => {
|
|
||||||
if (!_.isNil(machineMsg)) {
|
|
||||||
const messageContent = _.replace('#timestamp', timestamp, machineMsg.message)
|
|
||||||
return {
|
|
||||||
toNumber: phone,
|
|
||||||
body: messageContent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_.isNil(commonMsg)) {
|
|
||||||
const messageContent = _.replace('#timestamp', timestamp, commonMsg.message)
|
|
||||||
return {
|
return {
|
||||||
toNumber: phone,
|
toNumber: phone,
|
||||||
body: messageContent
|
body: messageContent
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,10 @@ exports.up = function (next) {
|
||||||
`CREATE TYPE custom_message_event AS ENUM('sms_code', 'cash_out_dispense_ready')`,
|
`CREATE TYPE custom_message_event AS ENUM('sms_code', 'cash_out_dispense_ready')`,
|
||||||
`CREATE TABLE custom_messages (
|
`CREATE TABLE custom_messages (
|
||||||
id UUID PRIMARY KEY,
|
id UUID PRIMARY KEY,
|
||||||
event custom_message_event NOT NULL,
|
event custom_message_event UNIQUE NOT NULL,
|
||||||
device_id TEXT REFERENCES devices(device_id),
|
|
||||||
message TEXT NOT NULL,
|
message TEXT NOT NULL,
|
||||||
created TIMESTAMPTZ NOT NULL DEFAULT now()
|
created TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||||
)`,
|
)`
|
||||||
`CREATE UNIQUE INDEX uq_custom_message_per_device ON custom_messages (event, device_id) WHERE device_id IS NOT NULL`,
|
|
||||||
`CREATE UNIQUE INDEX uq_custom_message_all_devices ON custom_messages (event) WHERE device_id IS NULL`
|
|
||||||
]
|
]
|
||||||
|
|
||||||
db.multi(sql, next)
|
db.multi(sql, next)
|
||||||
|
|
|
||||||
|
|
@ -21,19 +21,14 @@ const GET_CUSTOM_MESSAGES = gql`
|
||||||
customMessages {
|
customMessages {
|
||||||
id
|
id
|
||||||
event
|
event
|
||||||
deviceId
|
|
||||||
message
|
message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const CREATE_CUSTOM_MESSAGE = gql`
|
const CREATE_CUSTOM_MESSAGE = gql`
|
||||||
mutation createCustomMessage(
|
mutation createCustomMessage($event: CustomMessageEvent!, $message: String!) {
|
||||||
$event: CustomMessageEvent!
|
createCustomMessage(event: $event, message: $message) {
|
||||||
$deviceId: String!
|
|
||||||
$message: String!
|
|
||||||
) {
|
|
||||||
createCustomMessage(event: $event, deviceId: $deviceId, message: $message) {
|
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -43,15 +38,9 @@ const EDIT_CUSTOM_MESSAGE = gql`
|
||||||
mutation editCustomMessage(
|
mutation editCustomMessage(
|
||||||
$id: ID!
|
$id: ID!
|
||||||
$event: CustomMessageEvent!
|
$event: CustomMessageEvent!
|
||||||
$deviceId: String!
|
|
||||||
$message: String!
|
$message: String!
|
||||||
) {
|
) {
|
||||||
editCustomMessage(
|
editCustomMessage(id: $id, event: $event, message: $message) {
|
||||||
id: $id
|
|
||||||
event: $event
|
|
||||||
deviceId: $deviceId
|
|
||||||
message: $message
|
|
||||||
) {
|
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,15 +54,6 @@ const DELETE_CUSTOM_MESSAGE = gql`
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const GET_MACHINES = gql`
|
|
||||||
{
|
|
||||||
machines {
|
|
||||||
name
|
|
||||||
deviceId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const EVENT_OPTIONS = [
|
const EVENT_OPTIONS = [
|
||||||
{ code: 'smsCode', display: 'On SMS confirmation code' },
|
{ code: 'smsCode', display: 'On SMS confirmation code' },
|
||||||
{ code: 'cashOutDispenseReady', display: 'Cash out dispense ready' }
|
{ code: 'cashOutDispenseReady', display: 'Cash out dispense ready' }
|
||||||
|
|
@ -91,10 +71,6 @@ const CustomSMS = () => {
|
||||||
GET_CUSTOM_MESSAGES
|
GET_CUSTOM_MESSAGES
|
||||||
)
|
)
|
||||||
|
|
||||||
const { data: machinesData, loading: machinesLoading } = useQuery(
|
|
||||||
GET_MACHINES
|
|
||||||
)
|
|
||||||
|
|
||||||
const [createMessage] = useMutation(CREATE_CUSTOM_MESSAGE, {
|
const [createMessage] = useMutation(CREATE_CUSTOM_MESSAGE, {
|
||||||
onError: ({ msg }) => setErrorMsg(msg),
|
onError: ({ msg }) => setErrorMsg(msg),
|
||||||
refetchQueries: () => ['customMessages']
|
refetchQueries: () => ['customMessages']
|
||||||
|
|
@ -110,15 +86,7 @@ const CustomSMS = () => {
|
||||||
refetchQueries: () => ['customMessages']
|
refetchQueries: () => ['customMessages']
|
||||||
})
|
})
|
||||||
|
|
||||||
const loading = messagesLoading && machinesLoading
|
const loading = messagesLoading
|
||||||
|
|
||||||
const machineOptions =
|
|
||||||
(machinesData &&
|
|
||||||
R.map(
|
|
||||||
it => ({ code: it.deviceId, display: it.name }),
|
|
||||||
R.path(['machines'])(machinesData)
|
|
||||||
)) ??
|
|
||||||
[]
|
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
setSelectedSMS(null)
|
setSelectedSMS(null)
|
||||||
|
|
@ -134,21 +102,12 @@ const CustomSMS = () => {
|
||||||
const elements = [
|
const elements = [
|
||||||
{
|
{
|
||||||
header: 'Event',
|
header: 'Event',
|
||||||
width: 400,
|
width: 600,
|
||||||
size: 'sm',
|
size: 'sm',
|
||||||
textAlign: 'left',
|
textAlign: 'left',
|
||||||
view: it =>
|
view: it =>
|
||||||
R.find(ite => R.propEq('event', ite.code, it), EVENT_OPTIONS).display
|
R.find(ite => R.propEq('event', ite.code, it), EVENT_OPTIONS).display
|
||||||
},
|
},
|
||||||
{
|
|
||||||
header: 'Machine',
|
|
||||||
width: 200,
|
|
||||||
size: 'sm',
|
|
||||||
textAlign: 'left',
|
|
||||||
view: it =>
|
|
||||||
R.find(ite => R.propEq('deviceId', ite.code, it), machineOptions)
|
|
||||||
?.display ?? `All Machines`
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
header: 'Edit',
|
header: 'Edit',
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|
@ -195,7 +154,6 @@ const CustomSMS = () => {
|
||||||
<CustomSMSModal
|
<CustomSMSModal
|
||||||
showModal={showModal}
|
showModal={showModal}
|
||||||
onClose={handleClose}
|
onClose={handleClose}
|
||||||
machineOptions={machineOptions}
|
|
||||||
eventOptions={EVENT_OPTIONS}
|
eventOptions={EVENT_OPTIONS}
|
||||||
sms={selectedSMS}
|
sms={selectedSMS}
|
||||||
creationError={errorMsg}
|
creationError={errorMsg}
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,6 @@ import styles from './CustomSMS.styles'
|
||||||
|
|
||||||
const useStyles = makeStyles(styles)
|
const useStyles = makeStyles(styles)
|
||||||
|
|
||||||
const ALL_MACHINES = {
|
|
||||||
code: 'ALL_MACHINES',
|
|
||||||
display: 'All Machines'
|
|
||||||
}
|
|
||||||
|
|
||||||
const getErrorMsg = (formikErrors, formikTouched, mutationError) => {
|
const getErrorMsg = (formikErrors, formikTouched, mutationError) => {
|
||||||
if (!formikErrors || !formikTouched) return null
|
if (!formikErrors || !formikTouched) return null
|
||||||
if (mutationError) return 'Internal server error'
|
if (mutationError) return 'Internal server error'
|
||||||
|
|
@ -67,7 +62,6 @@ const CustomSMSModal = ({
|
||||||
showModal,
|
showModal,
|
||||||
onClose,
|
onClose,
|
||||||
sms,
|
sms,
|
||||||
machineOptions,
|
|
||||||
eventOptions,
|
eventOptions,
|
||||||
creationError,
|
creationError,
|
||||||
submit
|
submit
|
||||||
|
|
@ -78,17 +72,11 @@ const CustomSMSModal = ({
|
||||||
|
|
||||||
const initialValues = {
|
const initialValues = {
|
||||||
event: !R.isNil(sms) ? sms.event : '',
|
event: !R.isNil(sms) ? sms.event : '',
|
||||||
device: !R.isNil(sms)
|
|
||||||
? !R.isNil(sms.deviceId)
|
|
||||||
? sms.deviceId
|
|
||||||
: 'ALL_MACHINES'
|
|
||||||
: '',
|
|
||||||
message: !R.isNil(sms) ? sms.message : ''
|
message: !R.isNil(sms) ? sms.message : ''
|
||||||
}
|
}
|
||||||
|
|
||||||
const validationSchema = Yup.object().shape({
|
const validationSchema = Yup.object().shape({
|
||||||
event: Yup.string().required('An event is required!'),
|
event: Yup.string().required('An event is required!'),
|
||||||
device: Yup.string().required('A machine is required!'),
|
|
||||||
message:
|
message:
|
||||||
prefill[selectedEvent]?.validator ??
|
prefill[selectedEvent]?.validator ??
|
||||||
Yup.string()
|
Yup.string()
|
||||||
|
|
@ -102,14 +90,12 @@ const CustomSMSModal = ({
|
||||||
variables: {
|
variables: {
|
||||||
id: sms.id,
|
id: sms.id,
|
||||||
event: values.event,
|
event: values.event,
|
||||||
deviceId: values.device,
|
|
||||||
message: values.message
|
message: values.message
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
: submit({
|
: submit({
|
||||||
variables: {
|
variables: {
|
||||||
event: values.event,
|
event: values.event,
|
||||||
deviceId: values.device,
|
|
||||||
message: values.message
|
message: values.message
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -146,15 +132,6 @@ const CustomSMSModal = ({
|
||||||
valueProp="code"
|
valueProp="code"
|
||||||
component={Autocomplete}
|
component={Autocomplete}
|
||||||
/>
|
/>
|
||||||
<Field
|
|
||||||
name="device"
|
|
||||||
label="Machine"
|
|
||||||
fullWidth
|
|
||||||
options={[ALL_MACHINES].concat(machineOptions)}
|
|
||||||
labelProp="display"
|
|
||||||
valueProp="code"
|
|
||||||
component={Autocomplete}
|
|
||||||
/>
|
|
||||||
<Field
|
<Field
|
||||||
name="message"
|
name="message"
|
||||||
label="Message content"
|
label="Message content"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue