From a5657d0a2f60a2d1cd18d40be31261b5e0d24ff9 Mon Sep 17 00:00:00 2001 From: adriano Date: Wed, 3 Apr 2024 14:10:53 -0300 Subject: [PATCH] feat: Enable reception of multiple vCards sent via WhatsApp --- .../WbotServices/wbotMessageListener.ts | 104 +++++-- .../ContactCreateTicketModal/index.js | 2 +- frontend/src/components/MessageInput/index.js | 12 +- frontend/src/components/MessagesList/index.js | 289 ++++++++++-------- frontend/src/components/VcardPreview/index.js | 63 ++-- frontend/src/pages/Report/index.js | 3 +- 6 files changed, 264 insertions(+), 209 deletions(-) diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index ffa650e..1cf3016 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -46,7 +46,7 @@ import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketServi import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService"; import { debounce } from "../../helpers/Debounce"; import UpdateTicketService from "../TicketServices/UpdateTicketService"; -import { date } from "faker"; +import { date, name } from "faker"; import ShowQueueService from "../QueueService/ShowQueueService"; import ShowTicketMessage from "../TicketServices/ShowTicketMessage"; @@ -101,6 +101,7 @@ import ShowTicketService from "../TicketServices/ShowTicketService"; import ShowQueuesByUser from "../UserServices/ShowQueuesByUser"; import ListWhatsappQueuesByUserQueue from "../UserServices/ListWhatsappQueuesByUserQueue"; import CreateContactService from "../ContactServices/CreateContactService"; +import { number } from "yup"; var lst: any[] = getWhatsappIds(); @@ -316,6 +317,14 @@ const verifyMessage = async ( await ticket.update({ lastMessage: msg.body }); + if (!msg?.fromMe && msg?.vCards && msg?.vCards?.length > 0) { + if (msg.vCards.length == 1) { + messageData = { ...messageData, body: msg.vCards[0] }; + } else { + messageData = { ...messageData, body: JSON.stringify(msg.vCards) }; + } + } + await CreateMessageService({ messageData }); }; @@ -504,7 +513,7 @@ const isValidMsg = (msg: any): boolean => { msg.type === "image" || msg.type === "document" || msg.type === "vcard" || - // msg.type === "multi_vcard" || + msg.type === "multi_vcard" || msg.type === "sticker" ) return true; @@ -550,7 +559,7 @@ const transferTicket = async ( } if (queue) await botTransferTicket(queue, ticket, sendGreetingMessage); - io.emit('notifyPeding', {data: {ticket, queue}}); + io.emit("notifyPeding", { data: { ticket, queue } }); }; const botTransferTicket = async ( @@ -586,7 +595,7 @@ const botTransferTicketToUser = async ( }; const botSendMessage = (ticket: Ticket, msg: string) => { - const { phoneNumberId } = ticket; + const { phoneNumberId } = ticket; const debouncedSentMessage = debounce( async () => { @@ -644,9 +653,9 @@ const handleMessage = async ( let msgContact: any = wbot.msgContact; // let groupContact: Contact | undefined; - if (msg.fromMe) { + if (msg.fromMe) { // messages sent automatically by wbot have a special character in front of it - // if so, this message was already been stored in database; + // if so, this message was already been stored in database; if (/\u200e/.test(msg.body[0])) return; // media messages sent from me from cell phone, first comes with "hasMedia = false" and type = "image/ptt/etc" @@ -787,32 +796,8 @@ const handleMessage = async ( await verifyQueue(wbot, msg, ticket, contact); } - if (msg.type === "vcard") { - try { - const array = msg.body.split("\n"); - const obj = []; - let contact = ""; - for (let index = 0; index < array.length; index++) { - const v = array[index]; - const values = v.split(":"); - for (let ind = 0; ind < values.length; ind++) { - if (values[ind].indexOf("+") !== -1) { - obj.push({ number: values[ind] }); - } - if (values[ind].indexOf("FN") !== -1) { - contact = values[ind + 1]; - } - } - } - for await (const ob of obj) { - const cont = await CreateContactService({ - name: contact, - number: ob.number.replace(/\D/g, "") - }); - } - } catch (error) { - console.log(error); - } + if (msg.type === "vcard" || msg.type === "multi_vcard") { + await vcard(msg); } const botInfo = await BotIsOnQueue("botqueue"); @@ -977,7 +962,7 @@ const handleMessage = async ( if (ticket?.queueId) { ticketHasQueue = true; } - + if (ticketHasQueue && ticket.status != "open") { let whatsapp: any = await whatsappInfo(ticket?.whatsappId); @@ -1258,6 +1243,59 @@ export { mediaTypeWhatsappOfficial, botSendMessage }; +async function vcard(msg: any) { + let array: any[] = []; + let contact: any; + let obj: any[] = []; + + try { + const multi_vcard = msg?.vCards?.length === 0 ? false : true; + + if (multi_vcard) { + array = msg?.vCards; + contact = []; + } else { + array = msg.body.split("\n"); + contact = ""; + } + + for (let index = 0; index < array.length; index++) { + const v = array[index]; + const values = v.split(":"); + for (let ind = 0; ind < values.length; ind++) { + if (values[ind].indexOf("+") !== -1) { + obj.push({ number: values[ind] }); + } + if (values[ind].indexOf("FN") !== -1) { + if (multi_vcard) + contact.push({ name: values[ind + 1].split("\n")[0] }); + else contact = values[ind + 1]; + } + } + } + + for (const i in obj) { + let data: any = {}; + + if (multi_vcard) { + data = { + name: contact[i].name, + number: obj[i].number.replace(/\D/g, "") + }; + } else { + data = { + name: contact, + number: obj[i].number.replace(/\D/g, "") + }; + } + + const cont = await CreateContactService(data); + } + } catch (error) { + console.log(error); + } +} + async function backUra(whatsappId: any, contactId: any, data: any) { let uraOptionSelected = await findObject(whatsappId, contactId, "ura"); diff --git a/frontend/src/components/ContactCreateTicketModal/index.js b/frontend/src/components/ContactCreateTicketModal/index.js index 3681c6c..3ba9281 100644 --- a/frontend/src/components/ContactCreateTicketModal/index.js +++ b/frontend/src/components/ContactCreateTicketModal/index.js @@ -157,7 +157,7 @@ const ContactCreateTicketModal = ({ modalOpen, onClose, contactId }) => { const { data } = await api.get("/whatsapp/official/matchQueue", { params: { userId: user.id, queueId: selectedQueue }, }) - console.log('WHATSAPP DATA: ', data) + // console.log('WHATSAPP DATA: ', data) setWhatsQueue(data) diff --git a/frontend/src/components/MessageInput/index.js b/frontend/src/components/MessageInput/index.js index 9773517..e710ab2 100644 --- a/frontend/src/components/MessageInput/index.js +++ b/frontend/src/components/MessageInput/index.js @@ -311,9 +311,7 @@ const MessageInput = ({ ticketStatus }) => { } const handleSendMessage = async (templateParams = null) => { - - console.log('templateParams: ', templateParams, ' | inputMessage: ', inputMessage) - + if (inputMessage.trim() === "") return setLoading(true) @@ -323,9 +321,7 @@ const MessageInput = ({ ticketStatus }) => { if (templateParams) { for (let key in templateParams) { - if (templateParams.hasOwnProperty(key)) { - // let value = templateParams[key] - // console.log('key: ', key, ' | ', 'VALUE: ', value) + if (templateParams.hasOwnProperty(key)) { if (key === '_reactName') { templateParams = null @@ -348,9 +344,7 @@ const MessageInput = ({ ticketStatus }) => { } - try { - - console.log('kkkkkkkkkkkkkkkkkkk message: ', message) + try { const { data } = await api.post(`/messages/${ticketId}`, message) setParams(null) diff --git a/frontend/src/components/MessagesList/index.js b/frontend/src/components/MessagesList/index.js index 9d25471..5a99c79 100644 --- a/frontend/src/components/MessagesList/index.js +++ b/frontend/src/components/MessagesList/index.js @@ -1,18 +1,18 @@ -import React, { useContext, useState, useEffect, useReducer, useRef } from "react"; +import React, { useContext, useState, useEffect, useReducer, useRef } from "react" -import { isSameDay, parseISO, format } from "date-fns"; -import openSocket from "socket.io-client"; -import clsx from "clsx"; -import { AuthContext } from "../../context/Auth/AuthContext"; +import { isSameDay, parseISO, format } from "date-fns" +import openSocket from "socket.io-client" +import clsx from "clsx" +import { AuthContext } from "../../context/Auth/AuthContext" -import { green } from "@material-ui/core/colors"; +import { green } from "@material-ui/core/colors" import { Button, CircularProgress, Divider, IconButton, makeStyles, -} from "@material-ui/core"; +} from "@material-ui/core" import { AccessTime, Block, @@ -20,20 +20,20 @@ import { DoneAll, ExpandMore, GetApp, -} from "@material-ui/icons"; +} from "@material-ui/icons" -import MarkdownWrapper from "../MarkdownWrapper"; -import VcardPreview from "../VcardPreview"; -import LocationPreview from "../LocationPreview"; -import Audio from "../Audio"; +import MarkdownWrapper from "../MarkdownWrapper" +import VcardPreview from "../VcardPreview" +import LocationPreview from "../LocationPreview" +import Audio from "../Audio" -import ModalImageCors from "../ModalImageCors"; -import MessageOptionsMenu from "../MessageOptionsMenu"; -import whatsBackground from "../../assets/wa-background.png"; +import ModalImageCors from "../ModalImageCors" +import MessageOptionsMenu from "../MessageOptionsMenu" +import whatsBackground from "../../assets/wa-background.png" -import api from "../../services/api"; -import toastError from "../../errors/toastError"; +import api from "../../services/api" +import toastError from "../../errors/toastError" const useStyles = makeStyles((theme) => ({ messagesListWrapper: { @@ -262,78 +262,78 @@ const useStyles = makeStyles((theme) => ({ backgroundColor: "inherit", padding: 10, }, -})); +})) const reducer = (state, action) => { if (action.type === "LOAD_MESSAGES") { - const messages = action.payload; - const newMessages = []; + const messages = action.payload + const newMessages = [] messages.forEach((message) => { - const messageIndex = state.findIndex((m) => m.id === message.id); + const messageIndex = state.findIndex((m) => m.id === message.id) if (messageIndex !== -1) { - state[messageIndex] = message; + state[messageIndex] = message } else { - newMessages.push(message); + newMessages.push(message) } - }); + }) - return [...newMessages, ...state]; + return [...newMessages, ...state] } if (action.type === "ADD_MESSAGE") { - const newMessage = action.payload; - const messageIndex = state.findIndex((m) => m.id === newMessage.id); + const newMessage = action.payload + const messageIndex = state.findIndex((m) => m.id === newMessage.id) if (messageIndex !== -1) { - state[messageIndex] = newMessage; + state[messageIndex] = newMessage } else { - state.push(newMessage); + state.push(newMessage) } - return [...state]; + return [...state] } if (action.type === "UPDATE_MESSAGE") { - const messageToUpdate = action.payload; - const messageIndex = state.findIndex((m) => m.id === messageToUpdate.id); + const messageToUpdate = action.payload + const messageIndex = state.findIndex((m) => m.id === messageToUpdate.id) if (messageIndex !== -1) { - state[messageIndex] = messageToUpdate; + state[messageIndex] = messageToUpdate } - return [...state]; + return [...state] } if (action.type === "RESET") { - return []; + return [] } -}; +} const MessagesList = ({ ticketId, isGroup }) => { - const classes = useStyles(); + const classes = useStyles() - const [messagesList, dispatch] = useReducer(reducer, []); - const [pageNumber, setPageNumber] = useState(1); - const [hasMore, setHasMore] = useState(false); - const [loading, setLoading] = useState(false); - const lastMessageRef = useRef(); + const [messagesList, dispatch] = useReducer(reducer, []) + const [pageNumber, setPageNumber] = useState(1) + const [hasMore, setHasMore] = useState(false) + const [loading, setLoading] = useState(false) + const lastMessageRef = useRef() - const [selectedMessage, setSelectedMessage] = useState({}); - const [anchorEl, setAnchorEl] = useState(null); - const messageOptionsMenuOpen = Boolean(anchorEl); - const currentTicketId = useRef(ticketId); + const [selectedMessage, setSelectedMessage] = useState({}) + const [anchorEl, setAnchorEl] = useState(null) + const messageOptionsMenuOpen = Boolean(anchorEl) + const currentTicketId = useRef(ticketId) const [sendSeen, setSendSeen] = useState(false) - const { user } = useContext(AuthContext); + const { user } = useContext(AuthContext) useEffect(() => { - dispatch({ type: "RESET" }); - setPageNumber(1); + dispatch({ type: "RESET" }) + setPageNumber(1) - currentTicketId.current = ticketId; - }, [ticketId]); + currentTicketId.current = ticketId + }, [ticketId]) useEffect(() => { @@ -359,7 +359,7 @@ const MessagesList = ({ ticketId, isGroup }) => { try { const { data } = await api.get("/messages/" + ticketId, { params: { pageNumber }, - }); + }) setSendSeen(false) @@ -382,116 +382,116 @@ const MessagesList = ({ ticketId, isGroup }) => { } } catch (err) { - setLoading(false); - toastError(err); + setLoading(false) + toastError(err) } - }; - sendSeenMessage(); - }, 500); + } + sendSeenMessage() + }, 500) return () => { - clearTimeout(delayDebounceFn); - }; + clearTimeout(delayDebounceFn) + } - }, [sendSeen, pageNumber, ticketId, user.id]); + }, [sendSeen, pageNumber, ticketId, user.id]) useEffect(() => { - setLoading(true); + setLoading(true) const delayDebounceFn = setTimeout(() => { const fetchMessages = async () => { try { const { data } = await api.get("/messages/" + ticketId, { params: { pageNumber }, - }); + }) if (currentTicketId.current === ticketId) { - dispatch({ type: "LOAD_MESSAGES", payload: data.messages }); - setHasMore(data.hasMore); - setLoading(false); + dispatch({ type: "LOAD_MESSAGES", payload: data.messages }) + setHasMore(data.hasMore) + setLoading(false) } if (pageNumber === 1 && data.messages.length > 1) { - scrollToBottom(); + scrollToBottom() } } catch (err) { - setLoading(false); - toastError(err); + setLoading(false) + toastError(err) } - }; - fetchMessages(); - }, 500); + } + fetchMessages() + }, 500) return () => { - clearTimeout(delayDebounceFn); - }; - }, [pageNumber, ticketId]); + clearTimeout(delayDebounceFn) + } + }, [pageNumber, ticketId]) useEffect(() => { - const socket = openSocket(process.env.REACT_APP_BACKEND_URL); + const socket = openSocket(process.env.REACT_APP_BACKEND_URL) - socket.on("connect", () => socket.emit("joinChatBox", ticketId)); + socket.on("connect", () => socket.emit("joinChatBox", ticketId)) socket.on("appMessage", (data) => { if (data.action === "create") { - dispatch({ type: "ADD_MESSAGE", payload: data.message }); + dispatch({ type: "ADD_MESSAGE", payload: data.message }) - scrollToBottom(); + scrollToBottom() } if (data.action === "update") { - dispatch({ type: "UPDATE_MESSAGE", payload: data.message }); + dispatch({ type: "UPDATE_MESSAGE", payload: data.message }) } - }); + }) return () => { - socket.disconnect(); - }; - }, [ticketId]); + socket.disconnect() + } + }, [ticketId]) const loadMore = () => { - setPageNumber((prevPageNumber) => prevPageNumber + 1); - }; + setPageNumber((prevPageNumber) => prevPageNumber + 1) + } const scrollToBottom = () => { if (lastMessageRef.current) { setSendSeen(true) - lastMessageRef.current.scrollIntoView({}); + lastMessageRef.current.scrollIntoView({}) } - }; + } const handleScroll = (e) => { - if (!hasMore) return; - const { scrollTop } = e.currentTarget; + if (!hasMore) return + const { scrollTop } = e.currentTarget if (scrollTop === 0) { - document.getElementById("messagesList").scrollTop = 1; + document.getElementById("messagesList").scrollTop = 1 } if (loading) { - return; + return } if (scrollTop < 50) { - loadMore(); + loadMore() } - }; + } const handleOpenMessageOptionsMenu = (e, message) => { - setAnchorEl(e.currentTarget); - setSelectedMessage(message); - }; + setAnchorEl(e.currentTarget) + setSelectedMessage(message) + } const handleCloseMessageOptionsMenu = (e) => { - setAnchorEl(null); - }; + setAnchorEl(null) + } // const checkMessageMedia = (message) => { // if (message.mediaType === "image") { @@ -548,8 +548,6 @@ const MessagesList = ({ ticketId, isGroup }) => { return } else if (message.mediaType === "vcard") { - //console.log("vcard") - //console.log(message) let array = message.body.split("\n") let obj = [] let contact = "" @@ -567,23 +565,44 @@ const MessagesList = ({ ticketId, isGroup }) => { } return } - /*else if (message.mediaType === "multi_vcard") { - console.log("multi_vcard") - console.log(message) - - if(message.body !== null && message.body !== "") { + else if (message.mediaType === "multi_vcard") { + if (message.body !== null && message.body !== "") { let newBody = JSON.parse(message.body) + + let multi_vcard = newBody.map(v => { + let array = v.split("\n") + let obj = [] + let contact = "" + for (let index = 0; index < array.length; index++) { + const v = array[index] + let values = v.split(":") + for (let ind = 0; ind < values.length; ind++) { + if (values[ind].indexOf("+") !== -1) { + obj.push({ number: values[ind] }) + } + if (values[ind].indexOf("FN") !== -1) { + contact = values[ind + 1] + } + } + } + + return { name: contact, number: obj[0]?.number } + }) return ( <> { - newBody.map(v => ( - - )) + multi_vcard.map((v, index) => ( + <> + + + {((index + 1) <= multi_vcard.length - 1) && } + + )) } ) } else return (<>) - }*/ + } else if (/^.*\.(jpe?g|png|gif)?$/i.exec(message.mediaUrl) && message.mediaType === "image") { return } else if (message.mediaType === "audio") { @@ -614,22 +633,22 @@ const MessagesList = ({ ticketId, isGroup }) => { ) } - }; + } const renderMessageAck = (message) => { if (message.ack === 0) { - return ; + return } if (message.ack === 1) { - return ; + return } if (message.ack === 2) { - return ; + return } if (message.ack === 3 || message.ack === 4) { - return ; + return } - }; + } const renderDailyTimestamps = (message, index) => { if (index === 0) { @@ -642,12 +661,12 @@ const MessagesList = ({ ticketId, isGroup }) => { {format(parseISO(messagesList[index].createdAt), "dd/MM/yyyy")} - ); + ) } if (index < messagesList.length - 1) { - let messageDay = parseISO(messagesList[index].createdAt); - let previousMessageDay = parseISO(messagesList[index - 1].createdAt); + let messageDay = parseISO(messagesList[index].createdAt) + let previousMessageDay = parseISO(messagesList[index - 1].createdAt) if (!isSameDay(messageDay, previousMessageDay)) { @@ -660,14 +679,14 @@ const MessagesList = ({ ticketId, isGroup }) => { {format(parseISO(messagesList[index].createdAt), "dd/MM/yyyy")} - ); + ) } } if (index === messagesList.length - 1) { - let messageDay = parseISO(messagesList[index].createdAt); - let previousMessageDay = parseISO(messagesList[index - 1].createdAt); + let messageDay = parseISO(messagesList[index].createdAt) + let previousMessageDay = parseISO(messagesList[index - 1].createdAt) return ( <> @@ -687,24 +706,24 @@ const MessagesList = ({ ticketId, isGroup }) => { style={{ float: "left", clear: "both" }} /> - ); + ) } - }; + } const renderMessageDivider = (message, index) => { if (index < messagesList.length && index > 0) { - let messageUser = messagesList[index].fromMe; - let previousMessageUser = messagesList[index - 1].fromMe; + let messageUser = messagesList[index].fromMe + let previousMessageUser = messagesList[index - 1].fromMe if (messageUser !== previousMessageUser) { return ( - ); + ) } } - }; + } const renderQuotedMessage = (message) => { return ( @@ -727,8 +746,8 @@ const MessagesList = ({ ticketId, isGroup }) => { {message.quotedMsg?.body} - ); - }; + ) + } // const renderMessages = () => { // if (messagesList.length > 0) { @@ -837,7 +856,7 @@ const MessagesList = ({ ticketId, isGroup }) => { )} {(message.mediaUrl || message.mediaType === "location" || message.mediaType === "vcard" - //|| message.mediaType === "multi_vcard" + || message.mediaType === "multi_vcard" ) && checkMessageMedia(message)}
{message.quotedMsg && renderQuotedMessage(message)} @@ -866,7 +885,7 @@ const MessagesList = ({ ticketId, isGroup }) => { {(message.mediaUrl || message.mediaType === "location" || message.mediaType === "vcard" - //|| message.mediaType === "multi_vcard" + // || message.mediaType === "multi_vcard" ) && checkMessageMedia(message)}
{ } else { return
Say hello to your new contact!
} - }; + } return (
@@ -919,7 +938,7 @@ const MessagesList = ({ ticketId, isGroup }) => {
)}
- ); -}; + ) +} -export default MessagesList; \ No newline at end of file +export default MessagesList \ No newline at end of file diff --git a/frontend/src/components/VcardPreview/index.js b/frontend/src/components/VcardPreview/index.js index f2a63be..8f5d0b6 100644 --- a/frontend/src/components/VcardPreview/index.js +++ b/frontend/src/components/VcardPreview/index.js @@ -1,29 +1,29 @@ -import React, { useEffect, useState, useContext } from 'react'; -import { useHistory } from "react-router-dom"; -import toastError from "../../errors/toastError"; -import api from "../../services/api"; +import React, { useEffect, useState, useContext } from 'react' +import { useHistory } from "react-router-dom" +import toastError from "../../errors/toastError" +import api from "../../services/api" -import Avatar from "@material-ui/core/Avatar"; -import Typography from "@material-ui/core/Typography"; -import Grid from "@material-ui/core/Grid"; +import Avatar from "@material-ui/core/Avatar" +import Typography from "@material-ui/core/Typography" +import Grid from "@material-ui/core/Grid" -import { AuthContext } from "../../context/Auth/AuthContext"; +import { AuthContext } from "../../context/Auth/AuthContext" -import { Button, Divider, } from "@material-ui/core"; +import { Button, Divider, } from "@material-ui/core" -const VcardPreview = ({ contact, numbers }) => { - const history = useHistory(); - const { user } = useContext(AuthContext); +const VcardPreview = ({ contact, numbers, multi_vCard }) => { + const history = useHistory() + const { user } = useContext(AuthContext) const [selectedContact, setContact] = useState({ name: "", number: 0, profilePicUrl: "" - }); + }) useEffect(() => { const delayDebounceFn = setTimeout(() => { - const fetchContacts = async () => { + const fetchContacts = async () => { try { let contactObj = { name: contact, @@ -31,19 +31,20 @@ const VcardPreview = ({ contact, numbers }) => { number: numbers !== undefined && numbers.replace(/\D/g, ""), email: "" } - - const { data } = await api.post("/contact", contactObj); + + const { data } = await api.post("/contact", contactObj) + setContact(data) } catch (err) { console.log(err) - toastError(err); + toastError(err) } - }; - fetchContacts(); - }, 500); - return () => clearTimeout(delayDebounceFn); - }, [contact, numbers]); + } + fetchContacts() + }, 500) + return () => clearTimeout(delayDebounceFn) + }, [contact, numbers]) const handleNewChat = async () => { try { @@ -51,10 +52,10 @@ const VcardPreview = ({ contact, numbers }) => { contactId: selectedContact.id, userId: user.id, status: "open", - }); - history.push(`/tickets/${ticket.id}`); + }) + history.push(`/tickets/${ticket.id}`) } catch (err) { - toastError(err); + toastError(err) } } @@ -73,19 +74,23 @@ const VcardPreview = ({ contact, numbers }) => { - + {!multi_vCard && } + + + {/* {multi_vCard && } */} +
- ); + ) -}; +} -export default VcardPreview; \ No newline at end of file +export default VcardPreview \ No newline at end of file diff --git a/frontend/src/pages/Report/index.js b/frontend/src/pages/Report/index.js index 1724682..95083fe 100644 --- a/frontend/src/pages/Report/index.js +++ b/frontend/src/pages/Report/index.js @@ -460,8 +460,7 @@ const Report = () => { } // Get from report type option - const reportTypeValue = (data) => { - console.log('DATA: ', data) + const reportTypeValue = (data) => { let type = '1' if (data === '1') type = 'default' if (data === '2') type = 'synthetic'