// This file is shared between rails 6 and 7 version $(document).on( "keypress keyup blur", "[data-behaviour='decimal-only'], [data-behaviour='filter'][data-filter-type='range']", function (e) { var charCode = e.which ? e.which : e.keyCode; if (charCode > 31 && charCode != 46 && (charCode < 48 || charCode > 57)) return false; return true; } ); $(document).on( "keypress keyup blur", "[data-behaviour='integer-only']", function (event) { $(this).val( $(this) .val() .replace(/[^\d].+/, "") ); if (event.which < 48 || event.which > 57) { event.preventDefault(); } } ); $(document).on("click", ".row-action-cell", function (e) { e.stopPropagation(); if ($(this).find(".table-export-popup").hasClass("hidden")) { return $(this).find(".table-export-popup").removeClass("hidden"); } else { return $(this).find(".table-export-popup").addClass("hidden"); } }); $(document).on("mouseleave", ".row-action-cell", function () { $(this).find(".table-export-popup").addClass("hidden"); }); $(document).on("click", '[data-behaviour="offcanvas"]', function (e) { const drawerFetchUrl = $(this).attr("data-drawer-fetch-url"); const drawerContainer = $("[data-behaviour='cm-drawer-container']"); if (!drawerFetchUrl || !drawerContainer) return; $.ajax({ url: drawerFetchUrl, method: "GET", success: function (response) { drawerContainer.html(response); const drawerForm = new bootstrap.Offcanvas( drawerContainer.children().first() ); drawerForm.show(); initializeComponents(); handleDrawerFormSubmission(drawerForm); }, error: function (error) { console.error("Error:", error); }, }); }); $(document).on("click", '[data-bs-dismiss="offcanvas"]', function (e) { $(document).off("submit", "[data-is-drawer-form='true']"); }); function handleDrawerFormSubmission(drawerForm) { $(document).on("submit", "[data-is-drawer-form='true']", function (e) { e.preventDefault(); let url = $(this).attr("action"); if (url.charAt(url.length - 1) === "/") { url = url.slice(0, -1); } url = `${url}.json`; $.ajaxSetup({ headers: { "X-CSRF-Token": $('meta[name="csrf-token"]').attr("content"), }, }); const isMultipart = $(this).attr("enctype") === "multipart/form-data"; const ajaxOptions = { url: url, method: $(this).attr("method"), data: null, success: function (response) { $('[data-behavior="flag-alert"]').addClass("hidden"); drawerForm.hide(); $(document).off("submit", "[data-is-drawer-form='true']"); const fromFieldId = $('[data-behavior="cm-drawer"]').attr( "data-from-field-id" ); const fromField = $(`#${fromFieldId}`); toastMessage(response?.message); const bsToast = $('[data-behaviour="drawer-toast"]')[0]; if (bsToast) { const toast = new bootstrap.Toast(bsToast); toast.show(); } fromField.append( `` ); fromField.val(response?.data?.id).change(); }, error: function (error) { $('[data-behavior="flag-alert"]').removeClass("hidden"); $('[data-behavior="error-list"]').html(error?.responseJSON?.message); }, }; if (isMultipart) { ajaxOptions["data"] = new FormData($(this)[0]); ajaxOptions["contentType"] = false; ajaxOptions["processData"] = false; $.ajax(ajaxOptions); } else { ajaxOptions["data"] = $(this).serialize(); $.ajax(ajaxOptions); } }); } function toastMessage(message) { const toastHtml = `