"use strict"; function trans(label) { // return window.languageLabels.hasOwnProperty(label) ? window.languageLabels[label] : label; return window?.languageLabels[label] || label; } function showErrorToast(message) { Toastify({ text: trans(message), duration: 6000, close: !0, style: { background: '#dc3545' } }).showToast(); } function showSuccessToast(message) { Toastify({ text: message, duration: 6000, close: !0, style: { background: "linear-gradient(to right, #00b09b, #96c93d)" } }).showToast(); } function showWarningToast(message) { Toastify({ text: message, duration: 6000, close: !0, style: { background: "linear-gradient(to right, #a7b000, #b08d00)" } }).showToast(); } /** * * @param type * @param url * @param data * @param {function} beforeSendCallback * @param {function} successCallback - This function will be executed if no Error will occur * @param {function} errorCallback - This function will be executed if some error will occur * @param {function} finalCallback - This function will be executed after all the functions are executed * @param processData */ function ajaxRequest(type, url, data, beforeSendCallback = null, successCallback = null, errorCallback = null, finalCallback = null, processData = false) { // Modifying the data attribute here according to the type method if (!["get", "post"].includes(type.toLowerCase())) { if (data instanceof FormData) { data.append("_method", type); } else { data = {...data, "_method": type}; data = JSON.stringify(data); } type = "POST"; } $.ajax({ type: type, url: url, data: data, cache: false, processData: processData, contentType: data instanceof FormData ? false : "application/json", dataType: 'json', beforeSend: function () { if (beforeSendCallback != null) { beforeSendCallback(); } }, success: function (data) { try { if (!data.error) { if (successCallback != null) { successCallback(data); } } else { if (errorCallback != null) { errorCallback(data); } } } finally { if (finalCallback != null) { finalCallback(data); } } }, error: function (jqXHR) { if (jqXHR.responseJSON) { showErrorToast(jqXHR.responseJSON.message); } if (finalCallback != null) { finalCallback(); } } }) } function formAjaxRequest(type, url, data, formElement, submitButtonElement, successCallback = null, errorCallback = null) { // To Remove Red Border from the Validation tag. // formElement.find('.has-danger').removeClass("has-danger"); // formElement.validate(); let parsley = formElement.parsley({ excluded: 'input[type=button], input[type=submit], input[type=reset], :hidden' }); parsley.validate(); if (parsley.isValid()) { let submitButtonText = submitButtonElement.val(); function beforeSendCallback() { submitButtonElement.val('Please Wait...').attr('disabled', true); } function mainSuccessCallback(response) { if (response.warning) { showWarningToast(response.message); } else { showSuccessToast(response.message); } if (successCallback != null) { successCallback(response); } } function mainErrorCallback(response) { showErrorToast(response.message); if (errorCallback != null) { errorCallback(response); } } function finalCallback() { submitButtonElement.val(submitButtonText).attr('disabled', false); } ajaxRequest(type, url, data, beforeSendCallback, mainSuccessCallback, mainErrorCallback, finalCallback) } } function Select2SearchDesignTemplate(repo) { /** * This function is used in Select2 Searching Functionality */ if (repo.loading) { return repo.text; } let $container; if (repo.id && repo.text) { $container = $( "
" + "
" + "
" ); $container.find(".select2-result-repository__title").text(repo.text); } else { $container = $( "
" + "
" + "
" + "" + "
" + "
" + "
" + "
" + "
" + "
" ); $container.find(".select2-result-repository__title").text(repo.first_name + " " + repo.last_name); $container.find(".select2-result-repository__description").text(repo.email); } return $container; } /** * * @param searchElement * @param searchUrl * @param {Object|null} data * @param {number} data.total_count * @param {string} data.email * @param {number} data.page * @param placeHolder * @param templateDesignEvent * @param onTemplateSelectEvent */ function select2Search(searchElement, searchUrl, data, placeHolder, templateDesignEvent, onTemplateSelectEvent) { //Select2 Ajax Searching Functionality function if (!data) { data = {}; } $(searchElement).select2({ tags: true, ajax: { url: searchUrl, dataType: 'json', delay: 250, cache: true, data: function (params) { data.email = params.term; data.page = params.page; return data; }, processResults: function (data, params) { params.page = params.page || 1; return { results: data.data, pagination: { more: (params.page * 30) < data.total_count } }; } }, placeholder: placeHolder, minimumInputLength: 1, templateResult: templateDesignEvent, templateSelection: onTemplateSelectEvent, }); } /** * @param {string} [url] - Ajax URL that will be called when the Confirm button will be clicked * @param {string} [method] - GET / POST / PUT / PATCH / DELETE * @param {Object} [options] - Options to Configure SweetAlert * @param {string} [options.title] - Are you sure * @param {string} [options.text] - You won't be able to revert this * @param {string} [options.icon] - 'warning' * @param {boolean} [options.showCancelButton] - true * @param {string} [options.confirmButtonColor] - '#3085d6' * @param {string} [options.cancelButtonColor] - '#d33' * @param {string} [options.confirmButtonText] - Confirm * @param {string} [options.cancelButtonText] - Cancel * @param {function} [options.successCallBack] - function() * @param {function} [options.errorCallBack] - function() * @param {function} [options.data] - FormData Object / Object */ function showSweetAlertConfirmPopup(url, method, options = {}) { let opt = { title: trans("Are you sure"), text: trans("You wont be able to revert this"), icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: trans("Confirm"), cancelButtonText: trans("Cancel"), successCallBack: function () { }, errorCallBack: function (response) { }, ...options, } Swal.fire({ title: opt.title, text: opt.text, icon: opt.icon, showCancelButton: opt.showCancelButton, confirmButtonColor: opt.showCancelButton, cancelButtonColor: opt.cancelButtonColor, confirmButtonText: opt.confirmButtonText, cancelButtonText: opt.cancelButtonText }).then((result) => { if (result.isConfirmed) { function successCallback(response) { showSuccessToast(response.message); opt.successCallBack(response); } function errorCallback(response) { showErrorToast(response.message); opt.errorCallBack(response); } ajaxRequest(method, url, options.data || null, null, successCallback, errorCallback); } }) } /** * * @param {string} [url] - Ajax URL that will be called when the Delete will be successfully * @param {Object} [options] - Options to Configure SweetAlert * @param {string} [options.text] - "Are you sure?" * @param {string} [options.title] - "You won't be able to revert this!" * @param {string} [options.icon] - "warning" * @param {boolean} [options.showCancelButton] - true * @param {string} [options.confirmButtonColor] - "#3085d6" * @param {string} [options.cancelButtonColor] - "#d33" * @param {string} [options.confirmButtonText] - "Yes, delete it!" * @param {string} [options.cancelButtonText] - "Cancel" * @param {function} [options.successCallBack] - function() * @param {function} [options.errorCallBack] - function() * @param {function} [options.data] - FormData Object / Object */ function showDeletePopupModal(url, options = {}) { // console.log(windows.trans("Are you sure")); // To Preserve OLD let opt = { title: window?.languageLabels["Are you sure"] || "Are you sure", text: window?.languageLabels["You wont be able to revert this"] || "You wont be able to revert this", icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: window?.languageLabels["Yes Delete"] || "Yes Delete", cancelButtonText: window?.languageLabels["Cancel"] || "Cancel", successCallBack: function () { }, errorCallBack: function (response) { }, ...options, } showSweetAlertConfirmPopup(url, 'DELETE', opt); } /** * * @param {string} [url] - Ajax URL that will be called when the Delete will be successfully * @param {Object} [options] - Options to Configure SweetAlert * @param {string} [options.text] - "Are you sure?" * @param {string} [options.title] - "You won't be able to revert this!" * @param {string} [options.icon] - "warning" * @param {boolean} [options.showCancelButton] - true * @param {string} [options.confirmButtonColor] - "#3085d6" * @param {string} [options.cancelButtonColor] - "#d33" * @param {string} [options.confirmButtonText] - "Yes, delete it!" * @param {string} [options.cancelButtonText] - "Cancel" * @param {function} [options.successCallBack] * @param {function} [options.errorCallBack] */ function showRestorePopupModal(url, options = {}) { // To Preserve OLD let opt = { title: trans("Are you sure"), text: trans("You wont be able to revert this"), icon: 'success', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: trans('Yes Restore it'), cancelButtonText: trans('Cancel'), successCallBack: function () { }, errorCallBack: function (response) { }, ...options, } showSweetAlertConfirmPopup(url, 'PUT', opt); } /** * * @param {string} [url] - Ajax URL that will be called when the Delete will be successfully * @param {Object} [options] - Options to Configure SweetAlert * @param {string} [options.text] - "Are you sure?" * @param {string} [options.title] - "You won't be able to revert this!" * @param {string} [options.icon] - "warning" * @param {boolean} [options.showCancelButton] - true * @param {string} [options.confirmButtonColor] - "#3085d6" * @param {string} [options.cancelButtonColor] - "#d33" * @param {string} [options.confirmButtonText] - "Yes, delete it!" * @param {string} [options.cancelButtonText] - "Cancel" * @param {function} [options.successCallBack] * @param {function} [options.errorCallBack] */ function showPermanentlyDeletePopupModal(url, options = {}) { // To Preserve OLD let opt = { title: trans("Are you sure"), text: trans("You are about to Delete this data"), icon: 'error', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: trans("Yes Delete Permanently"), cancelButtonText: trans('Cancel'), successCallBack: function () { }, errorCallBack: function (response) { }, ...options, } showSweetAlertConfirmPopup(url, 'DELETE', opt); } /** * Calculate Discounted price based on the Price and Discount(%) * @param price * @param discount * @returns {string} */ function calculateDiscountedAmount(price, discount) { let finalPrice = price - (price * discount / 100); return finalPrice.toFixed(2); } /** * Calculate Discount(%) * @param price * @param discountedPrice * @returns {string} */ function calculateDiscount(price, discountedPrice) { let finalDiscount = 100 - discountedPrice * 100 / price; return finalDiscount.toFixed(2); } function generateSlug(text){ // Remove non-English and non-number/dash/underscore characters, replace spaces with dash, to lower case return text .toLowerCase() .replace(/[^a-z0-9 -_]/g, '') // Remove non-English chars except dash/underscore .replace(/\s+/g, '-') // Replace spaces with dash .replace(/[-_]+/g, '-') // Collapse multiple - or _ .replace(/^-+|-+$/g, ''); // Remove leading/trailing dash } function showDeleteLanguagePopupModal(url, options = {}) { let opt = { title: trans("Are you sure?"), text: trans("Deleting this language will delete all the language files and translations associated with it."), icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: trans("Yes Delete"), cancelButtonText: trans('Cancel'), successCallBack: function () {}, errorCallBack: function (response) {}, ...options, }; showSweetAlertConfirmPopup(url, 'DELETE', opt); }