import {AlertFilled} from "@ant-design/icons"; import { Button, Divider, Dropdown, Form, Input, notification, Popover, Select, Space, } from "antd"; import parsePhoneNumber from "libphonenumber-js"; import dayjs from "../../utils/day"; import queryString from "query-string"; import React, {useState} from "react"; import {useTranslation} from "react-i18next"; import {connect} from "react-redux"; import {Link, useNavigate, useLocation} from "react-router-dom"; import {createStructuredSelector} from "reselect"; import { openChatByPhone, setMessage, } from "../../redux/messaging/messaging.actions"; import {setModalContext} from "../../redux/modals/modals.actions"; import {selectBodyshop} from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import {GenerateDocument} from "../../utils/RenderTemplate"; import {TemplateList} from "../../utils/TemplateConstants"; import ChatOpenButton from "../chat-open-button/chat-open-button.component"; import DataLabel from "../data-label/data-label.component"; import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; import ScheduleManualEvent from "../schedule-manual-event/schedule-manual-event.component"; import ScheduleAtChange from "./job-at-change.component"; import ScheduleEventColor from "./schedule-event.color.component"; import ScheduleEventNote from "./schedule-event.note.component"; import {useMutation} from "@apollo/client"; import {UPDATE_APPOINTMENT} from "../../graphql/appointments.queries"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ setScheduleContext: (context) => dispatch(setModalContext({context: context, modal: "schedule"})), openChatByPhone: (phone) => dispatch(openChatByPhone(phone)), setMessage: (text) => dispatch(setMessage(text)), }); export function ScheduleEventComponent({ bodyshop, setMessage, openChatByPhone, event, refetch, handleCancel, setScheduleContext, }) { const {t} = useTranslation(); const [open, setOpen] = useState(false); const history = useNavigate(); const searchParams = queryString.parse(useLocation().search); const [updateAppointment] = useMutation(UPDATE_APPOINTMENT); const [title, setTitle] = useState(event.title); const blockContent = ( setTitle(e.currentTarget.value)} onBlur={async () => { await updateAppointment({ variables: { appid: event.id, app: { title: title, }, }, optimisticResponse: { update_appointments: { __typename: "appointments_mutation_response", returning: [ { ...event, title: title, __typename: "appointments", }, ], }, }, }); }} /> ); const popoverContent = (
{!event.isintake ? ( {event.title} ) : ( {`${(event.job && event.job.v_model_yr) || ""} ${ (event.job && event.job.v_make_desc) || "" } ${(event.job && event.job.v_model_desc) || ""}`} )} {event.job ? (
{(event.job && event.job.ro_number) || ""} {(event.job && event.job.clm_total) || ""} {(event.job && event.job.ins_co_nm) || ""} {(event.job && event.job.clm_no) || ""} {(event.job && event.job.ownr_ea) || ""} {(event.job && event.job.alt_transport) || ""}
) : (
{event.note || ""}
)} {event.job ? ( ) : null} {event.job ? ( ) : null} {event.job ? ( { const Template = TemplateList("job").appointment_reminder; GenerateDocument( { name: Template.key, variables: {id: event.job.id}, }, { to: event.job && event.job.ownr_ea, subject: Template.subject, }, "e", event.job && event.job.id ); }, }, { key: "sms", label: t("general.labels.sms"), disabled: event.arrived || !bodyshop.messagingservicesid, onClick: () => { const p = parsePhoneNumber(event.job.ownr_ph1, "CA"); if (p && p.isValid()) { openChatByPhone({ phone_num: p.formatInternational(), jobid: event.job.id, }); setMessage( t("appointments.labels.reminder", { shopname: bodyshop.shopname, date: dayjs(event.start).format("MM/DD/YYYY"), time: dayjs(event.start).format("HH:mm a"), }) ); setOpen(false); } else { notification["error"]({ message: t("messaging.error.invalidphone"), }); } }, }, ] }} > ) : null} {event.arrived ? ( ) : ( { handleCancel({id: event.id, lost_sale_reason}); }} >