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});
}}
>
}
>
)}
{event.isintake ? (
) : (
)}
{event.isintake ? (
) : null}
);
const RegularEvent = event.isintake ? (
{event.note && }
{`${event.job.ro_number || t("general.labels.na")}`}
{`${(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.labhrs.aggregate.sum.mod_lb_hrs) || "0"} / ${
(event.job && event.job.larhrs.aggregate.sum.mod_lb_hrs) || "0"
})`}
{event.job && event.job.alt_transport && (
{event.job.alt_transport}
)}
) : (
{`${event.title || ""}`}
);
return (
!event.vacation && setOpen(vis)}
trigger="click"
content={event.block ? blockContent : popoverContent}
style={{
height: "100%",
width: "100%",
backgroundColor:
event.color && event.color.hex ? event.color.hex : event.color,
}}
>
{RegularEvent}
);
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(ScheduleEventComponent);