martinms

service.js

May 15th, 2024
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.03 KB | None | 0 0
  1. const base_url = "http://localhost/pede/";
  2.  
  3.  
  4. var LoadingCircle = `<div class="spinner-border text-center spinner-border-sm" role="status">
  5. <span class="visually-hidden">Mengirim...</span>
  6. </div>`;
  7.  
  8. const getSession = async () => {
  9.     const response = await fetch(`${base_url}auth/getsession`);
  10.     const data = response.json();
  11.     return data;
  12. }
  13.  
  14. async function fetchData(url, elementId) {
  15.     try {
  16.         const response = await fetch(base_url + url);
  17.         if (!response.ok) {
  18.             throw new Error(`HTTP error! Status: ${response.status}`);
  19.         }
  20.  
  21.         const data = await response.text();
  22.         document.getElementById(elementId).innerHTML = data;
  23.     } catch (error) {
  24.         console.error('Fetch error:', error);
  25.         throw error;
  26.     }
  27. }
  28.  
  29. async function getData(url) {
  30.     try {
  31.         const response = await fetch(base_url + url);
  32.         if (!response.ok) {
  33.             throw new Error(`HTTP error! Status: ${response.status}`);
  34.         }
  35.         const data = await response.json();
  36.  
  37.         if (typeof data.success !== 'undefined') {
  38.             if (data.success == false) {
  39.                 cekLogin(data.data);
  40.             }
  41.         }
  42.         return data;
  43.     } catch (error) {
  44.         // console.error(error);
  45.         // throw error;
  46.     }
  47. }
  48.  
  49. function bulatinKoma(number) {
  50.     var angka = parseFloat(number);
  51.     if (angka % 1 !== 0) { // Jika ada bagian desimal
  52.         angka = angka.toFixed(2); // Memastikan ada dua angka di belakang koma
  53.     }
  54.     return angka;
  55. }
  56.  
  57. async function dataPOST(url, data) {
  58.     await fetch(base_url + url, {
  59.         method: 'POST',
  60.         headers: {
  61.             'Content-Type': 'application/x-www-form-urlencoded', // Adjust content type as needed
  62.         },
  63.         body: new URLSearchParams(data).toString(),
  64.     })
  65.         .then(response => response.json())
  66.         .then(data => {
  67.             if (data.success === false) {
  68.                 cekLogin(data.data);
  69.             }
  70.             return JSON.stringify(data);
  71.         })
  72.         .catch(error => {
  73.             toastr.error('Error:', error);
  74.         });
  75. }
  76.  
  77. function cekLogin(data) {
  78.     if (data != null) {
  79.         if ('pesanError' in data) {
  80.             if (data.pesanError == 'Token tidak valid dan tidak terdaftar') {
  81.                 window.location.href = `${base_url}/auth/forcelogout`;
  82.                 return;
  83.             } else if (data.pesanError == 'Token sudah kadaluarsa, silahakn generate ulang') {
  84.                 window.location.href = `${base_url}/auth/forcelogout`;
  85.                 return;
  86.             }
  87.         }
  88.     }
  89. }
  90.  
  91. function updateProgressBar(percentage) {
  92.     const progressBar = document.getElementById('progress-bar');
  93.     progressBar.style.width = percentage.toFixed(2) + '%';
  94.  
  95.     if (percentage !== 0) {
  96.         localStorage.setItem('loadStatus', percentage.toFixed(2));
  97.     } else {
  98.         localStorage.removeItem('loadStatus')
  99.     }
  100. }
  101.  
  102. function hurufBesar(str) {
  103.     return str.charAt(0).toUpperCase() + str.slice(1);
  104. }
  105.  
  106. function enterKata(text, wordsPerLine = 5) {
  107.     var words = text.split(" ");
  108.     var result = [];
  109.  
  110.     for (var i = 0; i < words.length; i++) {
  111.         result.push(words[i] + " ");
  112.  
  113.         if ((i + 1) % wordsPerLine === 0) {
  114.             result.push("</br>");
  115.         }
  116.     }
  117.     return result.join('');
  118. }
  119.  
  120. async function paginasiList(keyword = '', total, page, functionList, id, totalData = 0) {
  121.     var paginator = document.getElementById(id);
  122.     var nav = document.createElement('nav');
  123.     nav.className = "Page navigation example";
  124.  
  125.     var ul = document.createElement('ul');
  126.     ul.className = "pagination";
  127.  
  128.     var back = document.createElement('li');
  129.     back.className = `page-item ${page == 1 ? 'disabled' : ''}`;
  130.     back.innerHTML = `<a class="page-link link" href="javascript:void(0)" id="paginateBack"
  131.                             onclick="${functionList}'${page - 1}'), spiner(this.id)" aria-label="Previous">
  132.                             <span aria-hidden="true">
  133.                                 <i class="ti ti-chevrons-left fs-4"></i>
  134.                             </span>
  135.                         </a>`
  136.     ul.appendChild(back)
  137.     for (i = 1; i <= total; i++) {
  138.         var list = document.createElement('li');
  139.         list.className = 'page-item';
  140.         list.innerHTML = `<a class="page-link link ${page == i ? 'active' : ''}" id="paginate${i}"
  141.                             href="javascript:void(0)" onclick="${functionList}${i}, '${keyword}'), spiner(this.id);">
  142.                             ${i}
  143.                         </a>`;
  144.         ul.appendChild(list);
  145.     }
  146.  
  147.     var next = document.createElement('li');
  148.     next.className = `page-item ${page == total ? 'disabled' : ''}`;
  149.     next.innerHTML = ` <a class="page-link link" href="javascript:void(0)" id="paginateNext"
  150.                             onclick="${functionList}'${page + 1}'), spiner(this.id)" aria-label="Next">
  151.                             <span aria-hidden="true">
  152.                                 <i class="ti ti-chevrons-right fs-4"></i>
  153.                             </span>
  154.                         </a>`
  155.     ul.appendChild(next);
  156.     nav.appendChild(ul);
  157.     paginator.innerHTML = '';
  158.     paginator.appendChild(nav);
  159.     paginator.innerHTML += `</br>
  160.                             <p class="ms-2 mt-2">
  161.                                 Data: <span id="totalDataPagination">${totalData}<span>
  162.                             </p>`;
  163. }
  164.  
  165.  
  166. function formatJadwal(date) {
  167.     const formattedDate = new Date(date).toLocaleDateString('en-US', {
  168.         year: 'numeric',
  169.         month: 'short',
  170.         day: '2-digit',
  171.         hour: '2-digit',
  172.         minute: '2-digit',
  173.         second: '2-digit',
  174.         hour12: false
  175.     });
  176.     return formattedDate;
  177. }
  178.  
  179. function spiner(id, text = '') {
  180.     var btn = document.getElementById(id);
  181.     btn.innerHTML = `<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> ${text}`;
  182.     btn.disabled = true;
  183. }
  184.  
  185. function afterSpiner(id, text = null, icon = null) {
  186.     var btn = document.getElementById(id);
  187.     btn.innerHTML = icon !== null ? `<i class="ti ti-${icon}"></i> ${text}` : `${text}`;
  188.     btn.disabled = false;
  189. }
  190.  
  191. async function opdSelect2(selector, modal = null, multi = null) {
  192.     try {
  193.         const res = await fetch(`${base_url}admin_opd/list/all`);
  194.         if (!res.ok) {
  195.             throw new Error("500 | Internal server error");
  196.         }
  197.  
  198.         const data = await res.json();
  199.         const newData = data.map(item => {
  200.             return {id: item.opdId, text: item.namaOpd}
  201.         })
  202.         $(selector).select2({
  203.             data: newData,
  204.             placeholder: 'Cari opd...',
  205.             dropdownParent: modal !== null ? $(modal) : '',
  206.             placeholder: 'Pilih OPD',
  207.             minimumInputLength: 0,
  208.         });
  209.     } catch (error) {
  210.         console.log(error);
  211.     }
  212. }
  213.  
  214. async function opdSelect(selectedOpdIds = null, selector, modal = null, multi = null) {
  215.     try {
  216.         let selected = [];
  217.         selectedOpdIds.forEach(function (opd) {
  218.             selected.push(opd.opd);
  219.         });
  220.  
  221.         const res = await fetch(`${base_url}admin_opd/list/all`);
  222.         if (!res.ok) {
  223.             throw new Error("500 | Internal server error");
  224.         }
  225.  
  226.         // empty select2 except "Pilih Semua"
  227.         $(selector).empty().append('<option value="semua">Pilih Semua</option>');
  228.  
  229.         const data = await res.json();
  230.         const newData = data.map(item => {
  231.             return {
  232.                 id: item.opdId,
  233.                 text: item.namaOpd,
  234.                 selected: selected.includes(item.opdId),
  235.             }
  236.         });
  237.         $(selector).select2({
  238.             data: newData,
  239.             placeholder: 'Cari opd...',
  240.             dropdownParent: modal !== null ? $(modal) : '',
  241.             placeholder: 'Pilih OPD',
  242.             minimumInputLength: 0,
  243.         });
  244.     } catch (error) {
  245.         console.log(error);
  246.     }
  247. }
  248.  
  249. function opdEditSelect2(selectedOpdIds, selector, page = 1) {
  250.     $.ajax({
  251.         url: `${base_url}admin_opd/list/${page}`,
  252.         dataType: 'json',
  253.         success: function (data) {
  254.             var results = data.data.dataOpd.map(opdList => ({
  255.                 id: opdList.opdId,
  256.                 text: opdList.namaOpd
  257.             }));
  258.  
  259.             // Select the options that match the selectedOpdIds
  260.             selectedOpdIds.forEach(function (opdId) {
  261.                 var option = results.find(result => result.id == opdId.opd);
  262.                 if (option) {
  263.                     $(selector).append(new Option(option.text, option.id, true, true)).trigger('change');
  264.                 }
  265.             });
  266.  
  267.             // If there are more pages, load the next one
  268.             if ((page + 1) * 20 < data.jumlahData) {
  269.                 opdEditSelect2(page + 1);
  270.             }
  271.         }
  272.     });
  273. }
  274.  
  275. function buatSelect2(id, data) {
  276.     $(id).select2({
  277.         data: data
  278.     });
  279. }
  280.  
  281.  
  282. function countDown(elementId, endTime) {
  283.     var countDownDate = new Date(endTime).getTime();
  284.  
  285.     var x = setInterval(function () {
  286.         var now = new Date().getTime();
  287.         var distance = countDownDate - now;
  288.  
  289.         var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  290.         var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  291.         var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  292.         var seconds = Math.floor((distance % (1000 * 60)) / 1000);
  293.  
  294.         var countdownElement = document.getElementById(elementId);
  295.         if (countdownElement) {
  296.             countdownElement.innerHTML = `<span class='text-danger fw-semibold'>${days} Hari ${hours}:${minutes}:${seconds}</span>`;
  297.  
  298.             if (distance < 0) {
  299.                 clearInterval(x);
  300.                 countdownElement.innerHTML = "<span class='text-danger'>Berakhir</span>";
  301.             }
  302.         } else {
  303.             console.error("Element with ID '" + elementId + "' not found.");
  304.         }
  305.     }, 1000);
  306. }
  307.  
  308. function multipleSelect2(selector, modal = null, placeholder = "Pilih ...") {
  309.     $(selector).select2({
  310.         ajax: {
  311.             url: function (params) {
  312.                 return `${base_url}admin_opd/list/${params.page || 1}/${params.term || ''}`;
  313.             },
  314.             dataType: 'json',
  315.             delay: 250,
  316.             processResults: function (data, params) {
  317.                 console.log(data);
  318.                 if (data.success == false) {
  319.                     cekLogin(data.data);
  320.                     return {
  321.                         results: [{
  322.                             id: 'placeholder',
  323.                             text: 'Data tidak ditemukan'
  324.                         }]
  325.                     };
  326.                 } else {
  327.                     params.page = params.page || 1;
  328.                     return {
  329.                         results: data.data.dataOpd.map(opdList => ({
  330.                             id: opdList.opdId,
  331.                             text: opdList.namaOpd
  332.                         })),
  333.                         pagination: {
  334.                             more: (params.page * 20) < data.data.jumlahData
  335.                         }
  336.                     };
  337.                 }
  338.             },
  339.             cache: true
  340.         },
  341.         placeholder: placeholder,
  342.         dropdownParent: $(`#${modal}`),
  343.        allowClear: true,
  344.     });
  345. }
  346.  
  347. function fBiasa(input) {
  348.     var rupiahValue = input.value;
  349.     if (rupiahValue.indexOf(',') === -1) {
  350.         rupiahValue += ',00';
  351.     }
  352.  
  353.     var numericValue = parseFloat(rupiahValue.replace(/[^\d,]/g, '').replace(',', '.'));
  354.     input.value = numericValue;
  355. }
  356.  
  357. function fRupiah(input) {
  358.     var numericValue = input.value;
  359.     var roundedValue = Math.round(numericValue);
  360.  
  361.     var rupiahFormat = new Intl.NumberFormat('id-ID', {
  362.         style: 'currency',
  363.         currency: 'IDR',
  364.         minimumFractionDigits: 0,
  365.         maximumFractionDigits: 0
  366.     }).format(roundedValue);
  367.  
  368.     input.value = rupiahFormat;
  369. }
  370.  
  371. function convertRupiah(input) {
  372.     var numericValue = input;
  373.     var roundedValue = Math.round(numericValue);
  374.     var rupiahFormat = new Intl.NumberFormat('id-ID', {
  375.         style: 'currency',
  376.         currency: 'IDR',
  377.         minimumFractionDigits: 0,
  378.         maximumFractionDigits: 0
  379.     }).format(roundedValue);
  380.  
  381.     return rupiahFormat;
  382. }
  383.  
  384. function inputTable(input) {
  385.     input.style.width = input.scrollWidth + "px"; // Set width based on scrollWidth
  386. }
  387.  
  388. function rpNone(input) {
  389.     var numericValue = input;
  390.     var roundedValue = Math.round(numericValue);
  391.     var formattedValue = new Intl.NumberFormat('id-ID', {
  392.         style: 'decimal',
  393.         minimumFractionDigits: 0,
  394.         maximumFractionDigits: 0
  395.     }).format(roundedValue);
  396.  
  397.     return formattedValue;
  398. }
  399.  
  400. function triggerTab() {
  401.     const event = new KeyboardEvent('keydown', {
  402.         key: 'Tab',
  403.         keyCode: 9,
  404.         which: 9,
  405.         shiftKey: false,
  406.         ctrlKey: false,
  407.         altKey: false,
  408.     });
  409.  
  410.     document.activeElement.dispatchEvent(event);
  411. }
  412.  
  413.  
  414.  
Add Comment
Please, Sign In to add comment