easyappointments/assets/js/components/working_plan_exceptions_mod...

1 line
8.9 KiB
JavaScript
Executable File

"use strict";App.Components.WorkingPlanExceptionsModal=function(){function resetModal(){$addBreak.prop("disabled",!1),$date.val(""),$start.val(""),$end.val(""),$breaks.find("tbody").html(renderNoBreaksRow()),$isNonWorkingDay.prop("checked",!1),toggleFieldsByNonWorkingDay(!1)}function renderNoBreaksRow(){return $("\n <tr class=\"no-breaks-row\">\n <td colspan=\"3\" class=\"text-center\">\n ".concat(lang("no_breaks"),"\n </td>\n </tr>\n "))}function toggleFieldsByNonWorkingDay(isNonWorkingDay){$start.prop("disabled",isNonWorkingDay).toggleClass("text-decoration-line-through",isNonWorkingDay),$end.prop("disabled",isNonWorkingDay).toggleClass("text-decoration-line-through",isNonWorkingDay),$addBreak.prop("disabled",isNonWorkingDay),$breaks.find("button").prop("disabled",isNonWorkingDay),$breaks.toggleClass("text-decoration-line-through",isNonWorkingDay)}function validate(){$modal.find(".is-invalid").removeClass("is-invalid");var date=App.Utils.UI.getDateTimePickerValue($date);date||$date.addClass("is-invalid");var start=App.Utils.UI.getDateTimePickerValue($start);start||$start.addClass("is-invalid");var end=App.Utils.UI.getDateTimePickerValue($end);return end||$end.addClass("is-invalid"),!$modal.find(".is-invalid").length}function onModalHidden(){resetModal()}function getBreaks(){var breaks=[];return $breaks.find("tbody tr").not(".no-breaks-row").each(function(index,tr){var $tr=$(tr);if($tr.find("input:text").length)return!0;var start=$tr.find(".working-plan-exceptions-break-start").text(),end=$tr.find(".working-plan-exceptions-break-end").text();breaks.push({start:moment(start,"regular"===vars("time_format")?"h:mm a":"HH:mm").format("HH:mm"),end:moment(end,"regular"===vars("time_format")?"h:mm a":"HH:mm").format("HH:mm")})}),breaks.sort(function(break1,break2){return break1.start.localeCompare(break2.start)}),breaks}function onSaveClick(){if(deferred&&validate()){var date=moment(App.Utils.UI.getDateTimePickerValue($date)).format("YYYY-MM-DD"),isNonWorkingDay=$isNonWorkingDay.prop("checked"),workingPlanException=isNonWorkingDay?null:{start:moment(App.Utils.UI.getDateTimePickerValue($start)).format("HH:mm"),end:moment(App.Utils.UI.getDateTimePickerValue($end)).format("HH:mm"),breaks:getBreaks()};deferred.resolve(date,workingPlanException),$modal.modal("hide"),resetModal()}}function editableTimeCell($target){$target.editable(function(value){return value},{event:"edit",height:"30px",submit:$("<button/>",{type:"button",class:"d-none submit-editable",text:lang("save")}).get(0).outerHTML,cancel:$("<button/>",{type:"button",class:"d-none cancel-editable",text:lang("cancel")}).get(0).outerHTML,onblur:"ignore",onreset:function onreset(){if(!enableCancel)return!1},onsubmit:function onsubmit(){if(!enableSubmit)return!1}})}function resetTimeSelection(){App.Utils.UI.setDateTimePickerValue($start,moment("08:00","HH:mm").toDate()),App.Utils.UI.setDateTimePickerValue($end,moment("20:00","HH:mm").toDate())}function add(){return deferred=$.Deferred(),App.Utils.UI.setDateTimePickerValue($date,new Date),resetTimeSelection(),$isNonWorkingDay.prop("checked",!1),$breaks.find("tbody").html(renderNoBreaksRow()),$modal.modal("show"),deferred.promise()}function edit(date,workingPlanException){deferred=$.Deferred();var isNonWorkingDay=!!!workingPlanException;return App.Utils.UI.setDateTimePickerValue($date,moment(date,"YYYY-MM-DD").toDate()),!1==isNonWorkingDay?(App.Utils.UI.setDateTimePickerValue($start,moment(workingPlanException.start,"HH:mm").toDate()),App.Utils.UI.setDateTimePickerValue($end,moment(workingPlanException.end,"HH:mm").toDate()),!workingPlanException.breaks&&$breaks.find("tbody").html(renderNoBreaksRow()),workingPlanException.breaks.forEach(function(workingPlanExceptionBreak){renderBreakRow(workingPlanExceptionBreak).appendTo($breaks.find("tbody"))}),editableTimeCell($breaks.find("tbody .working-plan-exceptions-break-start, tbody .working-plan-exceptions-break-end"))):(App.Utils.UI.setDateTimePickerValue($start,moment("08:00","HH:mm").toDate()),App.Utils.UI.setDateTimePickerValue($end,moment("20:00","HH:mm").toDate()),$breaks.find("tbody").html(renderNoBreaksRow())),$isNonWorkingDay.prop("checked",isNonWorkingDay),toggleFieldsByNonWorkingDay(isNonWorkingDay),$modal.modal("show"),deferred.promise()}function renderBreakRow(breakPeriod){var timeFormat="regular"===vars("time_format")?"h:mm a":"HH:mm";return $("<tr/>",{html:[$("<td/>",{class:"working-plan-exceptions-break-start editable",text:moment(breakPeriod.start,"HH:mm").format(timeFormat)}),$("<td/>",{class:"working-plan-exceptions-break-end editable",text:moment(breakPeriod.end,"HH:mm").format(timeFormat)}),$("<td/>",{html:[$("<button/>",{type:"button",class:"btn btn-outline-secondary btn-sm me-2 working-plan-exceptions-edit-break",title:lang("edit"),html:[$("<span/>",{class:"fas fa-edit"})]}),$("<button/>",{type:"button",class:"btn btn-outline-secondary btn-sm working-plan-exceptions-delete-break",title:lang("delete"),html:[$("<span/>",{class:"fas fa-trash-alt"})]}),$("<button/>",{type:"button",class:"btn btn-outline-secondary btn-sm me-2 working-plan-exceptions-save-break d-none",title:lang("save"),html:[$("<span/>",{class:"fas fa-check-circle"})]}),$("<button/>",{type:"button",class:"btn btn-outline-secondary btn-sm working-plan-exceptions-cancel-break d-none",title:lang("cancel"),html:[$("<span/>",{class:"fas fa-ban"})]})]})]})}function onAddBreakClick(){var $newBreak=renderBreakRow({start:"12:00",end:"14:00"}).appendTo("#working-plan-exceptions-breaks tbody");editableTimeCell($newBreak.find(".working-plan-exceptions-break-start, .working-plan-exceptions-break-end")),$newBreak.find(".working-plan-exceptions-edit-break").trigger("click"),$addBreak.prop("disabled",!0)}function onEditBreakClick(){var $previousEdits=$(this).closest("table").find(".editable");$previousEdits.each(function(index,editable){editable.reset&&editable.reset()});var $tr=$(this).closest("tr");$tr.children().trigger("edit"),App.Utils.UI.initializeTimePicker($tr.find(".working-plan-exceptions-break-start input, .working-plan-exceptions-break-end input")),$(this).closest("tr").find(".working-plan-exceptions-break-start").focus(),$tr=$(this).closest("tr"),$tr.find(".working-plan-exceptions-edit-break, .working-plan-exceptions-delete-break").addClass("d-none"),$tr.find(".working-plan-exceptions-save-break, .working-plan-exceptions-cancel-break").removeClass("d-none"),$tr.find("select,input:text").addClass("form-control input-sm"),$addBreak.prop("disabled",!0)}function onDeleteBreakClick(){$(this).closest("tr").remove()}function onSaveBreakClick(){var $tr=$(this).closest("tr"),start=moment($tr.find(".working-plan-exceptions-break-start input").val(),"regular"===vars("time_format")?"h:mm a":"HH:mm"),end=moment($tr.find(".working-plan-exceptions-break-end input").val(),"regular"===vars("time_format")?"h:mm a":"HH:mm");start>end&&$tr.find(".working-plan-exceptions-break-end input").val(start.add(1,"hour").format("regular"===vars("time_format")?"h:mm a":"HH:mm")),enableSubmit=!0,$tr.find(".editable .submit-editable").trigger("click"),enableSubmit=!1,$tr.find(".working-plan-exceptions-save-break, .working-plan-exceptions-cancel-break").addClass("d-none"),$tr.closest("table").find(".working-plan-exceptions-edit-break, .working-plan-exceptions-delete-break").removeClass("d-none"),$addBreak.prop("disabled",!1)}function onCancelBreakClick(){var $tr=$(this).closest("tr");enableCancel=!0,$tr.find(".cancel-editable").trigger("click"),enableCancel=!1,$breaks.find(".working-plan-exceptions-edit-break, .working-plan-exceptions-delete-break").removeClass("d-none"),$tr.find(".working-plan-exceptions-save-break, .working-plan-exceptions-cancel-break").addClass("d-none"),$addBreak.prop("disabled",!1)}function onIsNonWorkingDayChange(){var isNonWorkingDay=$isNonWorkingDay.prop("checked");resetTimeSelection(),toggleFieldsByNonWorkingDay(isNonWorkingDay)}var $modal=$("#working-plan-exceptions-modal"),$date=$("#working-plan-exceptions-date"),$start=$("#working-plan-exceptions-start"),$end=$("#working-plan-exceptions-end"),$breaks=$("#working-plan-exceptions-breaks"),$save=$("#working-plan-exceptions-save"),$addBreak=$(".working-plan-exceptions-add-break"),$isNonWorkingDay=$("#working-plan-exceptions-is-non-working-day"),moment=window.moment,deferred=null,enableSubmit=!1,enableCancel=!1;return document.addEventListener("DOMContentLoaded",function initialize(){App.Utils.UI.initializeDatePicker($date),App.Utils.UI.initializeTimePicker($start),App.Utils.UI.initializeTimePicker($end),$modal.on("hidden.bs.modal",onModalHidden).on("click",".working-plan-exceptions-add-break",onAddBreakClick).on("click",".working-plan-exceptions-edit-break",onEditBreakClick).on("click",".working-plan-exceptions-delete-break",onDeleteBreakClick).on("click",".working-plan-exceptions-save-break",onSaveBreakClick).on("click",".working-plan-exceptions-cancel-break",onCancelBreakClick),$save.on("click",onSaveClick),$isNonWorkingDay.on("change",onIsNonWorkingDayChange)}),{add:add,edit:edit}}();