import { useApolloClient, useMutation } from "@apollo/client"; import { Menu, notification } from "antd"; import parsePhoneNumber from "libphonenumber-js"; import React from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { Link } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { GET_CURRENT_QUESTIONSET_ID, INSERT_CSI, } from "../../graphql/csi.queries"; import { setEmailOptions } from "../../redux/email/email.actions"; import { openChatByPhone, setMessage, } from "../../redux/messaging/messaging.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { DateTimeFormatter } from "../../utils/DateFormatter"; import { TemplateList } from "../../utils/TemplateConstants"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser' bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ setEmailOptions: (e) => dispatch(setEmailOptions(e)), openChatByPhone: (phone) => dispatch(openChatByPhone(phone)), setMessage: (text) => dispatch(setMessage(text)), }); export function JobsDetailHeaderCsi({ setEmailOptions, bodyshop, job, openChatByPhone, setMessage, ...props }) { const { t } = useTranslation(); const [insertCsi] = useMutation(INSERT_CSI); const client = useApolloClient(); const handleCreateCsi = async (e) => { logImEXEvent("job_create_csi"); //Is tehre already a CSI? if (!job.csiinvites || job.csiinvites.length === 0) { const questionSetResult = await client.query({ query: GET_CURRENT_QUESTIONSET_ID, }); if (questionSetResult.data.csiquestions.length > 0) { const result = await insertCsi({ variables: { csiInput: { jobid: job.id, bodyshopid: bodyshop.id, questionset: questionSetResult.data.csiquestions[0].id, relateddata: { job: { id: job.id, ownr_fn: job.ownr_fn, ro_number: job.ro_number, v_model_yr: job.v_model_yr, v_make_desc: job.v_make_desc, v_model_desc: job.v_model_desc, }, bodyshop: { city: bodyshop.city, email: bodyshop.email, state: bodyshop.state, country: bodyshop.country, address1: bodyshop.address1, address2: bodyshop.address2, shopname: bodyshop.shopname, zip_post: bodyshop.zip_post, logo_img_path: bodyshop.logo_img_path, }, }, }, }, refetchQueries: ["GET_JOB_BY_PK"], awaitRefetchQueries: true, }); if (!!!result.errors) { notification["success"]({ message: t("csi.successes.created") }); } else { notification["error"]({ message: t("csi.errors.creating", { message: JSON.stringify(result.errors), }), }); return; } if (e.key === "email") setEmailOptions({ jobid: job.id, messageOptions: { to: [job.ownr_ea], replyTo: bodyshop.email, }, template: { name: TemplateList("job").csi_invitation.key, variables: { id: result.data.insert_csi.returning[0].id, }, }, }); if (e.key === "text") { const p = parsePhoneNumber(job.ownr_ph1, "CA"); if (p && p.isValid()) { openChatByPhone({ phone_num: p.formatInternational(), jobid: job.id, }); setMessage( `${window.location.protocol}//${window.location.host}/csi/${result.data.insert_csi.returning[0].id}` ); } else { notification["error"]({ message: t("messaging.error.invalidphone"), }); } } if (e.key === "generate") { //copy it to clipboard. navigator.clipboard.writeText( `${window.location.protocol}//${window.location.host}/csi/${result.data.insert_csi.returning[0].id}` ); } } else { notification["error"]({ message: t("csi.errors.notconfigured"), }); } } else { if (e.key === "email") setEmailOptions({ jobid: job.id, messageOptions: { to: [job.ownr_ea], replyTo: bodyshop.email, }, template: { name: TemplateList("job").csi_invitation.key, variables: { id: job.csiinvites[0].id, }, }, }); if (e.key === "text") { const p = parsePhoneNumber(job.ownr_ph1, "CA"); if (p && p.isValid()) { openChatByPhone({ phone_num: p.formatInternational(), jobid: job.id, }); setMessage( `${window.location.protocol}//${window.location.host}/csi/${job.csiinvites[0].id}` ); } else { notification["error"]({ message: t("messaging.error.invalidphone"), }); } } if (e.key === "generate") { //copy it to clipboard. navigator.clipboard.writeText( `${window.location.protocol}//${window.location.host}/csi/${job.csiinvites[0].id}` ); } } }; return (