Current File : /home/getxxhzo/app.genicards.com/resources/assets/js/appointment/appointment.js |
// document.addEventListener("turbo:load", loadAppointmentCalendar);
document.addEventListener("DOMContentLoaded", loadAppointmentCalendar);
Livewire.hook("element.init", () => {
loadAppimentFilter();
});
let popover;
let popoverState = false;
let calendar;
let data = {
id: "",
uId: "",
eventName: "",
eventDescription: "",
eventStatus: "",
startDate: "",
endDate: "",
vcardName: "",
email: "",
phone: "",
startDateTime: "",
endDateTime: "",
};
// View event variables
let viewEventName,
viewEventDescription,
viewEventStatus,
viewStartDate,
viewEndDate,
viewModal,
viewEditButton,
viewDeleteButton,
viewVcardName,
viewEmail,
viewPhone;
function loadAppointmentCalendar() {
appointmentStatusUpdate();
if (!$("#appointmentCalendar").length) {
return;
}
initCalendarApp();
let calendar = document.getElementById("appointmentCalendar");
if (isEmpty(calendar)) {
return;
}
init();
}
const initCalendarApp = function () {
let calendarEl = document.getElementById("appointmentCalendar");
calendar = new FullCalendar.Calendar(calendarEl, {
buttonText: {
today: Lang.get("js.today"),
month: Lang.get("js.month"),
},
themeSystem: "bootstrap5",
height: 750,
locale: getLoggedInUserLang,
headerToolbar: {
left: "title",
center: "prev,next today",
right: "dayGridMonth",
},
initialDate: new Date(),
timeZone: "UTC",
dayMaxEvents: true,
events: function (info, successCallback, failureCallback) {
$.ajax({
url: route("appointments.calendar"),
type: "GET",
data: info,
success: function (result) {
if (result.success) {
successCallback(result.data);
}
},
error: function (result) {
displayErrorMessage(result.responseJSON.message);
failureCallback();
},
});
},
// MouseEnter event --- more info: https://fullcalendar.io/docs/eventMouseEnter
eventMouseEnter: function (arg) {
formatArgs({
id: arg.event.id,
title: arg.event.title,
startStr: arg.event.startStr,
endStr: arg.event.endStr,
description: arg.event.extendedProps.description,
name: arg.event.extendedProps.name,
vcardName: arg.event.extendedProps.vcardName,
email: arg.event.extendedProps.email,
phone: arg.event.extendedProps.phone,
startDateTime: arg.event.extendedProps.startDateTime,
endDateTime: arg.event.extendedProps.endDateTime,
});
// Show popover preview
initPopovers(arg.el);
},
eventMouseLeave: function () {
hidePopovers();
},
// Click event --- more info: https://fullcalendar.io/docs/eventClick
eventClick: function (arg) {
hidePopovers();
formatArgs({
id: arg.event.id,
title: arg.event.title,
startStr: arg.event.startStr,
endStr: arg.event.endStr,
description: arg.event.extendedProps.description,
name: arg.event.extendedProps.name,
vcardName: arg.event.extendedProps.vcardName,
email: arg.event.extendedProps.email,
phone: arg.event.extendedProps.phone,
startDateTime: arg.event.extendedProps.startDateTime,
endDateTime: arg.event.extendedProps.endDateTime,
});
handleViewEvent();
},
});
calendar.render();
};
const init = () => {
const viewElement = document.getElementById("patientEventModal");
viewModal = new bootstrap.Modal(viewElement);
viewEventName = viewElement.querySelector('[data-calendar="event_name"]');
viewEventDescription = viewElement.querySelector(
'[data-calendar="event_description"]'
);
viewEventStatus = viewElement.querySelector(
'[data-calendar="event_status"]'
);
viewVcardName = viewElement.querySelector(
'[data-calendar="event_vcard_name"]'
);
viewEmail = viewElement.querySelector('[data-calendar="event_email"]');
viewPhone = viewElement.querySelector('[data-calendar="event_phone"]');
viewStartDate = viewElement.querySelector(
'[data-calendar="event_start_date"]'
);
viewEndDate = viewElement.querySelector('[data-calendar="event_end_date"]');
viewEditButton = viewElement.querySelector("#modal_view_event_edit");
viewDeleteButton = viewElement.querySelector("#modal_view_event_delete");
};
// Format FullCalendar responses
const formatArgs = (res) => {
data.id = res.id;
data.eventName = res.title;
data.eventDescription = res.description;
data.startDate = res.startStr;
data.endDate = res.endStr;
data.name = res.name;
data.vcardName = res.vcardName;
data.email = res.email;
data.phone = res.phone;
data.startDateTime = res.startDateTime;
data.endDateTime = res.endDateTime;
};
// Initialize popovers --- more info: https://getbootstrap.com/docs/4.0/components/popovers/
const initPopovers = (element) => {
hidePopovers();
// Generate popover content
const startDate = data.allDay
? moment(data.startDate).format("Do MMM, YYYY")
: moment(data.startDate).format("Do MMM, YYYY - h:mm a");
const endDate = data.allDay
? moment(data.endDate).format("Do MMM, YYYY")
: moment(data.endDate).format("Do MMM, YYYY - h:mm a");
const popoverHtml =
'<div class="fw-bolder mb-2"><b>User</b>: ' +
data.name +
'</div><div class="fs-7"><span class="fw-bold">Start:</span> ' +
startDate +
'</div><div class="fs-7 mb-2"><span class="fw-bold">End:</span> ' +
endDate +
"</div>" +
'<div class="fw-bolder"><b>' +
Lang.get("js.vcard_name") +
"</b>:</span> " +
data.vcardName +
"</div>";
// Popover options
let options = {
container: "body",
trigger: "manual",
boundary: "window",
placement: "auto",
dismiss: true,
html: true,
title: "Appointment Details",
content: popoverHtml,
};
};
// Hide active popovers
const hidePopovers = () => {
if (popoverState) {
popover.dispose();
popoverState = false;
}
};
// Handle view button
const handleViewButton = () => {
const viewButton = document.querySelector("#calendar_event_view_button");
viewButton.addEventListener("click", (e) => {
e.preventDefault();
hidePopovers();
handleViewEvent();
});
};
// Handle view event
const handleViewEvent = () => {
$(".fc-popover").addClass("hide");
viewModal.show();
// Detect all day event
let eventNameMod;
let startDateMod;
let endDateMod;
eventNameMod = "";
startDateMod = data.startDateTime;
endDateMod = data.endDateTime;
viewEndDate.innerText = ": " + endDateMod;
viewStartDate.innerText = ": " + startDateMod;
// Populate view data
viewEventName.innerText = Lang.get("js.user") + ": " + data.name;
$(viewEventStatus).val(data.eventStatus);
viewVcardName.innerText = Lang.get("js.vcard_name") + ": " + data.vcardName;
viewEmail.innerText = Lang.get("js.email") + ": " + data.email;
viewPhone.innerText = Lang.get("js.phone") + ": " + data.phone;
};
function loadAppimentFilter() {
$("#appointmentType,#appointmentStatus1").select2();
}
listen("change", "#appointmentType", function () {
Livewire.dispatch("changeFilter", { type: $(this).val() });
window.hideDropdownManually(
$("#dropdownMenuAppoiment"),
$(".dropdown-menu")
);
});
listen("change", "#appointmentStatus1", function () {
Livewire.dispatch("changeFilterStatus", { status: $(this).val() });
window.hideDropdownManually(
$("#dropdownMenuAppoiment"),
$(".dropdown-menu")
);
});
listen("click", "#appointmentResetFilter", function () {
$("#appointmentType").val(3).change();
$("#appointmentStatus").val(3).change();
Livewire.dispatch("changeFilter", { type: "" });
Livewire.dispatch("changeFilterStatus", { status: "" });
window.hideDropdownManually(
$("#dropdownMenuAppoiment"),
$(".dropdown-menu")
);
});
listen("click", "#appointmentFilterBtn", function () {
openDropdownManually($("#appointmentFilterBtn"), $("#appointmentFilter"));
});
listenClick(".appointment-delete-btn", function (event) {
let recordId = $(event.currentTarget).data("id");
deleteItem(
route("appointments.destroy", recordId),
Lang.get("js.appointment")
);
});
function appointmentStatusUpdate() {
listenClick(".completed-appointment", function (event) {
let appointmentId = $(event.currentTarget).data("id");
let url = route("appointments.update", { appointment: appointmentId });
appointmentItem(url, Lang.get("js.appointments"));
});
function appointmentItem(url, header) {
var callFunction =
arguments.length > 3 && arguments[3] !== undefined
? arguments[3]
: null;
swal({
title: Lang.get("js.completed") + " !",
text: Lang.get("js.are_you_completed"),
buttons: {
confirm: Lang.get("js.Yes_Change"),
cancel: Lang.get("js.no"),
},
reverseButtons: true,
icon: sweetCompletedAlertIcon,
}).then(function (willDelete) {
if (willDelete) {
appointmentItemAjax(url, header, callFunction);
}
});
}
function appointmentItemAjax(url, header, callFunction = null) {
screenLock();
$.ajax({
url: url,
type: "post",
dataType: "json",
success: function (obj) {
screenUnLock();
if (obj.success) {
Livewire.dispatch("resetPageTable");
}
swal({
icon: "success",
title: Lang.get("js.completed") + " !",
text: header + " " + Lang.get("js.has_been_completed"),
timer: 4000,
buttons: {
confirm: Lang.get("js.ok"),
},
});
if (callFunction) {
eval(callFunction);
}
},
error: function (data) {
swal({
title: "Error",
icon: "error",
text: data.responseJSON.message,
type: "error",
timer: 4000,
});
},
});
}
}
listenClick(".appointmentPaymentStatus", function () {
$(this).attr("disabled", true);
let planId = $(this).data("id");
let tenantId = $(this).data("tenant");
let status = $(this).data("status");
let updateStatus = route("payment.status", planId);
$.ajax({
type: "get",
url: updateStatus,
data: {
id: planId,
tenant_id: tenantId,
status: status,
},
success: function (response) {
displaySuccessMessage(response.message);
Livewire.dispatch("resetPageTable");
},
error: function (result) {
displayErrorMessage(result.responseJSON.message);
},
});
});