From 7d4e89b8d131a7cb7309a568bf3f1088775ae280 Mon Sep 17 00:00:00 2001 From: canove Date: Thu, 1 Oct 2020 14:21:23 -0300 Subject: [PATCH] fix: ignoring stickers on messages --- .../WbotServices/wbotMessageListener.ts | 3 +- .../src/components/NewTicketModal/index.js | 2 - frontend/src/components/Ticket/index.js | 89 +++++++++++++++++-- 3 files changed, 86 insertions(+), 8 deletions(-) diff --git a/backend/src/services/WbotServices/wbotMessageListener.ts b/backend/src/services/WbotServices/wbotMessageListener.ts index f3b0927..71bc689 100644 --- a/backend/src/services/WbotServices/wbotMessageListener.ts +++ b/backend/src/services/WbotServices/wbotMessageListener.ts @@ -209,7 +209,8 @@ const isValidMsg = (msg: WbotMessage): boolean => { msg.type === "video" || msg.type === "image" || msg.type === "document" || - msg.type === "vcard" + msg.type === "vcard" || + msg.type === "sticker" ) return true; return false; diff --git a/frontend/src/components/NewTicketModal/index.js b/frontend/src/components/NewTicketModal/index.js index f995319..db8b060 100644 --- a/frontend/src/components/NewTicketModal/index.js +++ b/frontend/src/components/NewTicketModal/index.js @@ -42,9 +42,7 @@ const useStyles = makeStyles(theme => ({ })); const filterOptions = createFilterOptions({ - matchFrom: "start", trim: true, - stringify: option => option.name, }); const NewTicketModal = ({ modalOpen, onClose }) => { diff --git a/frontend/src/components/Ticket/index.js b/frontend/src/components/Ticket/index.js index a8829ac..c7cd041 100644 --- a/frontend/src/components/Ticket/index.js +++ b/frontend/src/components/Ticket/index.js @@ -15,7 +15,16 @@ import DoneIcon from "@material-ui/icons/Done"; import DoneAllIcon from "@material-ui/icons/DoneAll"; import Paper from "@material-ui/core/Paper"; -import { IconButton } from "@material-ui/core"; +import { + Avatar, + Button, + Card, + CardActions, + CardContent, + CardHeader, + IconButton, + Typography, +} from "@material-ui/core"; import { Block, ExpandMore } from "@material-ui/icons"; import api from "../../services/api"; @@ -222,6 +231,11 @@ const useStyles = makeStyles(theme => ({ verticalAlign: "middle", marginLeft: 4, }, + + vcard: { + // display: "flex", + marginBottom: 10, + }, })); const reducer = (state, action) => { @@ -402,6 +416,50 @@ const Ticket = () => { } }; + const parseVcard = vcard => { + var Re1 = /^(version|fn|title|org):(.+)$/i; + var Re2 = /^([^:;]+);([^:]+):(.+)$/; + var ReKey = /item\d{1,2}\./; + var fields = {}; + + vcard.split(/\r\n|\r|\n/).forEach(function (line) { + var results, key; + + if (Re1.test(line)) { + results = line.match(Re1); + key = results[1].toLowerCase(); + fields[key] = results[2]; + } else if (Re2.test(line)) { + results = line.match(Re2); + key = results[1].replace(ReKey, "").toLowerCase(); + + var meta = {}; + results[2] + .split(";") + .map(function (p, i) { + var match = p.match(/([a-z]+)=(.*)/i); + if (match) { + return [match[1], match[2]]; + } else { + return ["TYPE" + (i === 0 ? "" : i), p]; + } + }) + .forEach(function (p) { + meta[p[0]] = p[1]; + }); + + if (!fields[key]) fields[key] = []; + + fields[key].push({ + meta: meta, + value: results[3].split(";"), + }); + } + }); + + return fields; + }; + const checkMessaageMedia = message => { if (message.mediaType === "image") { return ( @@ -430,6 +488,25 @@ const Ticket = () => { controls /> ); + } + if (message.mediaType === "vcard") { + const contactVcard = parseVcard(message.body); + + console.log(contactVcard); + + return ( + + } + // action={} + title={contactVcard.fn} + subheader={contactVcard.tel[0].meta.waid} + /> + + + + + ); } else { return ( @@ -527,9 +604,10 @@ const Ticket = () => { {renderDailyTimestamps(message, index)} {renderMessageDivider(message, index)}
- {message.mediaUrl && checkMessaageMedia(message)} + {(message.mediaUrl || message.mediaType === "vcard") && + checkMessaageMedia(message)}
- {message.body} + {message.mediaType !== "vcard" && message.body} {format(parseISO(message.createdAt), "HH:mm")} @@ -553,7 +631,8 @@ const Ticket = () => { > - {message.mediaUrl && checkMessaageMedia(message)} + {(message.mediaUrl || message.mediaType === "vcard") && + checkMessaageMedia(message)}
{ className={classes.deletedIcon} /> )} - {message.body} + {message.mediaType !== "vcard" && message.body} {format(parseISO(message.createdAt), "HH:mm")} {renderMessageAck(message)}