543 lines
26 KiB
JavaScript
543 lines
26 KiB
JavaScript
$(document).ready(function () {
|
|
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
if (cart.length > 0) {
|
|
$('#floatingCartButton').removeClass('d-none');
|
|
$('#menuBtn').removeClass('d-none');
|
|
}
|
|
});
|
|
|
|
|
|
|
|
function fetchMenu(filter = {}) {
|
|
const containerGuest = $("#order_guest_id");
|
|
$("#tanggal-filter").removeClass('d-none');
|
|
if(filter.jenis_menu === "konsultasi"){
|
|
$("#tanggal-filter").addClass('d-none');
|
|
const jadwalList = [
|
|
{
|
|
nama_dokter: "dr. Andi exp, Sp.A",
|
|
spesialis: "Spesialis Anak",
|
|
hari: "Senin - Rabu",
|
|
jam: "08.00 - 11.00"
|
|
},
|
|
{
|
|
nama_dokter: "dr. Siti exp, Sp.GK",
|
|
spesialis: "Spesialis Gizi Klinik",
|
|
hari: "Kamis - Jumat",
|
|
jam: "09.00 - 12.00"
|
|
},
|
|
{
|
|
nama_dokter: "dr. Dimas exp, Sp.PD",
|
|
spesialis: "Spesialis Penyakit Dalam",
|
|
hari: "Sabtu",
|
|
jam: "10.00 - 13.00"
|
|
}
|
|
];
|
|
|
|
let html = `
|
|
<div class="container">
|
|
<h4 class="mb-4">Jadwal Konsultasi</h4>
|
|
<div class="list-group">
|
|
`;
|
|
|
|
jadwalList.forEach(jadwal => {
|
|
html += `
|
|
<div class="list-group-item border rounded-3 mb-3 p-3 shadow-sm">
|
|
<h5 class="mb-1">${jadwal.nama_dokter}</h5>
|
|
<p class="mb-1 text-muted">${jadwal.spesialis}</p>
|
|
<p class="mb-1"><strong>Hari:</strong> ${jadwal.hari}</p>
|
|
<p class="mb-2"><strong>Jam:</strong> ${jadwal.jam}</p>
|
|
</div>
|
|
`;
|
|
});
|
|
|
|
html += `</div></div>`;
|
|
return containerGuest.html(html);
|
|
|
|
}
|
|
|
|
|
|
let params = new URLSearchParams({
|
|
page: filter.page || 1,
|
|
per_page: filter.per_page || 12,
|
|
search: filter.search || '',
|
|
jenis_menu: filter.jenis_menu || '',
|
|
tanggal_awal: filter.tanggal_awal || '',
|
|
tanggal_akhir: filter.tanggal_akhir || '',
|
|
}).toString();
|
|
|
|
containerGuest.html('<p class="text-muted">Memuat data....</p>');
|
|
|
|
|
|
fetch(`/datamenu?${params}`)
|
|
.then(res => res.json())
|
|
.then(res => {
|
|
|
|
if (!res.status){
|
|
return containerGuest.html('<p class="text-danger">Gagal Memuat Data...</p>');
|
|
}
|
|
const session = JSON.parse(sessionStorage.getItem('customerData') || '{}')
|
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
if(cart.length > 0){
|
|
updateCartCount(cart.length)
|
|
}
|
|
if(session.nama_customer){
|
|
$("#welcomeMessage").html(`Selamat Datang, <strong>${session.nama_customer}</strong> !`)
|
|
}
|
|
|
|
|
|
const menus = res.data.data || [];
|
|
|
|
if (menus.length === 0){
|
|
return containerGuest.html(`
|
|
<div class="d-flex flex-column align-items-center justify-content-center text-center py-4">
|
|
<img src="/assets/img/404.png" alt="Tidak ada menu" style="max-width: 180px;" class="mb-3 mt-3">
|
|
<h6 class="text-muted mb-1">Belum ada menu yang tersedia untuk saat ini.</h6>
|
|
</div>
|
|
`);
|
|
}
|
|
|
|
let html = '<div class="container"><div class="row row-cols-2 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-3">';
|
|
menus?.forEach(menu => {
|
|
|
|
html += `
|
|
<div class="col-6 col-xs-12 col-sm-6 col-md-4 col-lg-3 mb-2">
|
|
<div class="card h-80 shadow-sm p-2 rounded-4 mb-3">
|
|
<!-- GAMBAR + NAMA DI DALAM GAMBAR -->
|
|
<div class="position-relative">
|
|
<img src="gambar/${menu.foto || '3.jpeg'}"
|
|
class="rounded shadow-sm object-fit-cover w-100" height="150"
|
|
alt="${menu.nama_menu}">
|
|
|
|
<!-- Overlay gelap bawah -->
|
|
<div class="position-absolute bottom-0 start-0 w-100"
|
|
style="height:50%; background:linear-gradient(transparent, rgba(0,0,0,.6)); border-radius:0 0 .5rem .5rem;"></div>
|
|
|
|
<!-- di dalam .position-relative (gambar) -->
|
|
<!-- Nama + kalori di dalam gambar (bawah) -->
|
|
<div class="position-absolute bottom-0 start-0 p-2 w-100">
|
|
<h6 class="fw-bold text-white mb-0 lh-1" style="font-size:.9rem">${menu.nama}</h6>
|
|
${menu?.kalori.length > 0 ? `
|
|
<small class="text-white badge bg-success">${(menu.kalori || []).slice(0,1).map(k=>k.nilai_kalori||0).join('')} kkal</small>`: ''}
|
|
</div>
|
|
|
|
<!-- Kategori Diet -->
|
|
<div class="position-absolute bottom-0 start-0">
|
|
${(menu.klasifikasiMenu || [])
|
|
.slice(0, 2)
|
|
.map(tag => {
|
|
const name = tag.nama_kategori_diet || '';
|
|
const truncated = name.length > 12 ? name.substring(0, 12) + '...' : name;
|
|
return `<span class="badge bg-info me-1 mb-1" title="${name}">${truncated}</span>`;
|
|
}).join('')}
|
|
${(menu.klasifikasiMenu || []).length > 2
|
|
? `<span class="badge bg-secondary">+${menu.klasifikasiMenu.length - 2} lainnya</span>`
|
|
: ''}
|
|
</div>
|
|
<!-- badge someday/normal (kiri-atas) -->
|
|
<div class="position-absolute top-0 start-0 m-2">
|
|
${menu.apakah_someday
|
|
? '<span class="badge bg-success">Someday</span>'
|
|
: '<span class="badge bg-warning text-dark">Normal</span>'}
|
|
</div>
|
|
|
|
<!-- Label siang / sore (kanan-bawah gambar) -->
|
|
<div class="position-absolute bottom-0 end-0 m-1 d-flex gap-1">
|
|
${menu.apakah_menu_siang
|
|
? '<div class="badge bg-warning text-dark d-flex align-items-center px-1" style="font-size:.55rem"><i class="fa fa-sun me-1" style="font-size:.5rem"></i>Siang</div>'
|
|
: ''}
|
|
${menu.apakah_menu_sore
|
|
? '<div class="badge bg-info text-dark d-flex align-items-center px-1" style="font-size:.55rem"><i class="fa fa-moon me-1" style="font-size:.5rem"></i>Sore</div>'
|
|
: ''}
|
|
${!menu.apakah_menu_siang && !menu.apakah_menu_sore
|
|
? '<div class="badge bg-danger d-flex align-items-center px-1" style="font-size:.55rem"><i class="fa fa-times-circle me-1" style="font-size:.5rem"></i>Tutup</div>'
|
|
: ''}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tanggal tersedia (chip scroll) -->
|
|
<div class="d-flex align-items-center gap-1 mt-2 px-1">
|
|
<small class="text-muted fw-semibold">Tersedia:</small>
|
|
|
|
<div class="flex-fill" style="min-width:0; max-width:100%;">
|
|
<div class="d-flex gap-1 overflow-auto"
|
|
style="font-size:.75rem; scrollbar-width:none; -ms-overflow-style:none;">
|
|
${menu.apakah_someday
|
|
? '<span class="badge bg-success" style="font-size:.75rem">Setiap hari</span>'
|
|
: (Array.isArray(menu.dmph) && menu.dmph.length > 0
|
|
? menu.dmph.slice(0, 6).map(d =>
|
|
`<span class="badge text-success border" style="font-size:.75rem">${d.tgl_harian}</span>`
|
|
).join('')
|
|
: '<span class="badge bg-danger" style="font-size:.75rem">Tutup</span>')}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Harga -->
|
|
<!-- Harga 1 baris -->
|
|
<div class="d-flex justify-content-between align-items-center text-muted small mt-1 px-1">
|
|
<small>Karyawan</small>
|
|
<strong class="text-success">Rp ${parseInt(menu.harga_karyawan).toLocaleString('id-ID')}</strong>
|
|
</div>
|
|
<div class="d-flex justify-content-between align-items-center text-muted small px-1">
|
|
<small>Public</small>
|
|
<strong class="text-success">Rp ${parseInt(menu.harga_public).toLocaleString('id-ID')}</strong>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- Tombol -->
|
|
<div class="d-flex p-2 mt-auto ">
|
|
<button class="btn btn-outline-success w-50 me-2"
|
|
onclick="orderMenu(this)"
|
|
data-id="${menu.master_menu_id || menu.master_paket_menu_id}"
|
|
data-nama_menu="${menu.nama}"
|
|
data-harga_karyawan="${menu.harga_karyawan}"
|
|
data-harga_public="${menu.harga_public}"
|
|
data-jenis_menu="${menu.jenis_menu}"
|
|
data-deskripsi="${menu.deskripsi}"
|
|
data-klasifikasi_menu="${(menu.klasifikasiMenu || []).map(tag => tag.nama_kategori_diet).join(', ')}"
|
|
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
|
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
|
data-foto="${menu.foto}"
|
|
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
|
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
|
data-apakah_someday="${menu.apakah_someday}">
|
|
<i class="fa-solid fa-circle-info"></i> Detail
|
|
</button>
|
|
<button class="btn btn-success w-50 "
|
|
onclick="handleClick(this)"
|
|
data-id="${menu.master_menu_id ?? menu.master_paket_menu_id}"
|
|
data-nama_menu="${menu.nama}"
|
|
data-harga_karyawan="${menu.harga_karyawan}"
|
|
data-harga_public="${menu.harga_public}"
|
|
data-jenis_menu="${menu.jenis_menu}"
|
|
data-deskripsi="${menu.deskripsi}"
|
|
data-klasifikasi_menu="${(menu.klasifikasiMenu || []).map(tag => tag.nama_kategori_diet).join(', ')}"
|
|
data-tgl_tersedia="${(menu.dmph || []).map(tgl => tgl.tgl_harian).join(', ')}"
|
|
data-kalori="${(menu.kalori || []).map(kkal => kkal.nilai_kalori).join(', ')}"
|
|
data-foto="${menu.foto}"
|
|
data-apakah_menu_sore="${menu.apakah_menu_sore}"
|
|
data-apakah_menu_siang="${menu.apakah_menu_siang}"
|
|
data-apakah_someday="${menu.apakah_someday}">
|
|
<i class="fas fa-shopping-cart me-1"></i> Order
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
`;
|
|
});
|
|
|
|
html += '</div></div>';
|
|
|
|
html += `<div class="col-md-12 d-flex justify-content-between align-items-center mt-3">`;
|
|
|
|
if(res.data.total > 12){
|
|
html +=`<div>
|
|
<label for="perPageSelect" class="me-2">Tampilkan:</label>
|
|
<select id="perPageSelect" class="form-select form-select-sm d-inline-block w-auto" onchange="changePerPage(this)">
|
|
<option value="12" ${filter.per_page == 12 ? 'selected' : ''}>12</option>
|
|
<option value="24" ${filter.per_page == 24 ? 'selected' : ''}>24</option>
|
|
<option value="50" ${filter.per_page == 50 ? 'selected' : ''}>50</option>
|
|
</select>
|
|
</div>`
|
|
}
|
|
// Pagination buttons
|
|
if (res.data.last_page > 1) {
|
|
html += `
|
|
<div class="d-flex gap-2">`;
|
|
for (let i = 1; i <= res.data.last_page; i++) {
|
|
html += `
|
|
<button class="btn btn-outline-success btn-sm ${res.data.current_page === i ? 'active' : ''}"
|
|
onclick='fetchMenu(${JSON.stringify({...filter, page: i})})'>${i}</button>`;
|
|
}
|
|
html += `</div>`;
|
|
}
|
|
containerGuest.html(html);
|
|
})
|
|
.catch(err => {
|
|
containerGuest.html('<p class="text-danger">Terjadi kesalahan saat memuat data.</p>');
|
|
console.error(err);
|
|
});
|
|
}
|
|
|
|
const modalCheckout = $("#checkoutModal")
|
|
function orderMenu(e) {
|
|
const el = $(e);
|
|
|
|
$("#scroll-top").addClass('d-none');
|
|
const tags = (el.data('klasifikasi_menu') || '').split(',').filter(Boolean).map(tag => tag.trim());
|
|
const kaloriRaw = el.data('kalori');
|
|
let kalori = [];
|
|
if(Array.isArray(kaloriRaw)){
|
|
kalori = kaloriRaw.map(k => String(k))
|
|
}else if(typeof kaloriRaw === 'string'){
|
|
kalori = kaloriRaw.split(',').map(k => k.trim())
|
|
}else if(kaloriRaw !== undefined && kaloriRaw !== null){
|
|
kalori = [String(kaloriRaw)]
|
|
}
|
|
const someday = el.data('apakah_someday');
|
|
const siang = el.data('apakah_menu_siang');
|
|
const sore = el.data('apakah_menu_sore');
|
|
|
|
const klasifikasiMenu = tags.map(tag => `
|
|
<span class="badge bg-secondary me-1 mb-1">${tag}</span>
|
|
`).join('');
|
|
|
|
const resultKkal = kalori.length > 0
|
|
? kalori.map(kkal => `<small class="badge bg-success me-1 mb-1 fs-6">${kkal ? kkal + ' Kkal' : ''}</small>`).join('')
|
|
: '';
|
|
|
|
const tglMenuTersedia = `
|
|
<div class="mb-1 small text-muted">
|
|
<i class="fa fa-calendar-check me-1"></i>
|
|
${someday ? 'Tersedia setiap hari (Senin - Minggu)' :
|
|
el.data('tgl_tersedia') ? `Tersedia pada tanggal: ${el.data('tgl_tersedia')}` :
|
|
'Tidak ada info tanggal tersedia'}
|
|
</div>
|
|
<div class="mb-1 small text-muted">
|
|
<i class="fa fa-utensils me-1"></i> Menu: <strong>${someday ? 'Someday' : 'Menu Normal'}</strong>
|
|
</div>
|
|
<div class="mb-1 small text-muted">
|
|
${
|
|
siang && sore
|
|
? '<i class="fa fa-clock me-1 text-success"></i> Tersedia untuk makan siang dan sore'
|
|
: siang
|
|
? '<i class="fa fa-sun me-1 text-warning"></i> Tersedia untuk makan siang'
|
|
: sore
|
|
? '<i class="fa fa-moon me-1 text-info"></i> Tersedia untuk makan sore'
|
|
: '<i class="fa fa-ban me-1 text-danger"></i> Tidak tersedia untuk waktu makan apapun'
|
|
}
|
|
</div>
|
|
`;
|
|
|
|
$('#checkoutModal').modal('show');
|
|
$('#cathering_order_photo').attr('src', `/gambar/${el.data('foto') || 'default.jpg'}`);
|
|
|
|
$('#cathering_order_name').html(`
|
|
<div>${el.data('nama_menu')}
|
|
${resultKkal}
|
|
</div>`);
|
|
$('#cathering_order_menu_id').val(el.data('id'));
|
|
$('#cathering_order_jenis_menu').val(el.data('jenis_menu'));
|
|
$('#cathering_order_deskripsi').text(el.data('deskripsi') || '');
|
|
$('#cathering_order_price_karyawan').text("Rp " + parseInt(el.data('harga_karyawan') || 0).toLocaleString('id-ID'));
|
|
$('#cathering_order_price_public').text("Rp " + parseInt(el.data('harga_public') || 0).toLocaleString('id-ID'));
|
|
$('#tag_klasifikasi_menu').html(klasifikasiMenu);
|
|
$('#tgl_menu_tersedia').html(tglMenuTersedia);
|
|
$('#apakah_someday').val(someday ? 1 : 0);
|
|
$('#apakah_menu_siang').val(siang ? 1 : 0);
|
|
$('#apakah_menu_sore').val(sore ? 1 : 0);
|
|
$('#tgl_tersedia').val(el.data('tgl_tersedia'));
|
|
}
|
|
|
|
|
|
function updateCartCount(count) {
|
|
const $cartCount = $('#cartCount');
|
|
if (count > 0) {
|
|
$cartCount.text(count).show();
|
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
|
|
let menuNames = cart.map(item => item.nama_menu).join(', ');
|
|
const maxLength = 50;
|
|
|
|
if (menuNames.length > maxLength) {
|
|
menuNames = menuNames.substring(0, maxLength).trim() + '...';
|
|
}
|
|
$('#menuBtn').removeClass('d-none');
|
|
$('#floatingCartButton').removeClass('d-none');
|
|
$('#floatingCartCount').text(cart.length);
|
|
$('#floatingCartDesc').text(menuNames);
|
|
$("#scroll-top").addClass('d-none');
|
|
} else {
|
|
$cartCount.hide();
|
|
$('#floatingCartButton').addClass('d-none');
|
|
$('#menuBtn').addClass('d-none');
|
|
}
|
|
}
|
|
|
|
function parseRupiahToNumber(rpText) {
|
|
return parseInt(rpText.replace(/[^\d]/g, ''), 10) || 0;
|
|
}
|
|
|
|
|
|
$("#checkoutForm").on('submit', function(e){
|
|
e.preventDefault();
|
|
|
|
|
|
let order_id = sessionStorage.getItem('order_id') || null;
|
|
if(order_id){
|
|
Swal.fire({
|
|
icon: 'warning',
|
|
title: 'Pesanan Belum Selesai',
|
|
text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.',
|
|
timer: 2500,
|
|
}).then(() => {
|
|
window.location.href = '/checkout';
|
|
});
|
|
}
|
|
|
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
const now = new Date();
|
|
const todayFormatted = now.getFullYear() + '-' + (now.getMonth() + 1).toString().padStart(2, '0') + '-' + now.getDate().toString().padStart(2, '0')
|
|
|
|
const orders = [{
|
|
tgl: todayFormatted,
|
|
jumlah: 1,
|
|
kategoriPemesanan: $('#apakah_menu_sore').val() === "1" ? 'Makan Sore' : 'Makan Siang'
|
|
}];
|
|
let idText = $("#cathering_order_menu_id").val();
|
|
let idMenu = parseInt(idText.replace(/[^\d]/g, ''), 10);
|
|
|
|
let foto = $('#cathering_order_photo').attr('src')
|
|
let resultFoto = foto.replace('/gambar', '');
|
|
|
|
let namaMenu = $("#cathering_order_name").text();
|
|
|
|
console.log(cart);
|
|
let existingItem = cart.find(item => item.id_menu === idMenu);
|
|
|
|
if(!existingItem){
|
|
const orderItem ={
|
|
id:Date.now(),
|
|
id_menu :idMenu,
|
|
nama_menu : $("#cathering_order_name").text(),
|
|
harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()),
|
|
harga_public : parseRupiahToNumber($("#cathering_order_price_public").text()),
|
|
foto: resultFoto,
|
|
jenis_menu: $('#cathering_order_jenis_menu').text(),
|
|
deskripsi:$("#cathering_order_deskripsi").text(),
|
|
apakah_menu_siang: $('#apakah_menu_siang').val() === "1" ? true: false,
|
|
apakah_menu_sore: $('#apakah_menu_sore').val() === "1" ? true: false,
|
|
apakah_someday: $('#apakah_someday').val() === "1" ? true: false,
|
|
tgl_tersedia: $('#tgl_tersedia').val(),
|
|
kalori: $('#kalori').text(),
|
|
pesanan : orders
|
|
}
|
|
cart.push(orderItem)
|
|
}
|
|
|
|
sessionStorage.setItem('cart', JSON.stringify(cart))
|
|
updateCartCount(cart.length)
|
|
modalCheckout.modal('hide')
|
|
})
|
|
|
|
function saveItem(e){
|
|
let cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
const orders = [{
|
|
tgl: '',
|
|
jumlah: 1,
|
|
kategoriPemesanan: $(e).data('apakah_menu_sore') ? 'Makan Sore' : 'Makan Siang'
|
|
}];
|
|
|
|
let idMenu = $(e).data('id');
|
|
let namaMenu = $(e).data('nama_menu');
|
|
let existingItem = cart.find(item => item.id_menu === idMenu);
|
|
if(existingItem){
|
|
orders.forEach(newOrder => {
|
|
const existingOrder =existingItem.pesanan.find(p => p.tgl === newOrder.tgl)
|
|
if(existingOrder){
|
|
existingOrder.jumlah += newOrder.jumlah;
|
|
}else{
|
|
existingItem.pesanan.push(newOrder)
|
|
}
|
|
})
|
|
}else{
|
|
const orderItem ={
|
|
id:Date.now(),
|
|
id_menu : idMenu,
|
|
nama_menu : namaMenu,
|
|
harga_karyawan : $(e).data('harga_karyawan'),
|
|
harga_public : $(e).data('harga_public'),
|
|
foto: $(e).data('foto'),
|
|
jenis_menu: $(e).data('jenis_menu'),
|
|
deskripsi: $(e).data('deskripsi'),
|
|
apakah_menu_siang: $(e).data('apakah_menu_siang'),
|
|
apakah_menu_sore: $(e).data('apakah_menu_sore'),
|
|
apakah_someday: $(e).data('apakah_someday'),
|
|
tgl_tersedia: $(e).data('tgl_tersedia'),
|
|
kalori: $(e).data('kalori'),
|
|
pesanan : orders
|
|
}
|
|
cart.push(orderItem)
|
|
}
|
|
sessionStorage.setItem('cart', JSON.stringify(cart))
|
|
updateCartCount(cart.length)
|
|
}
|
|
|
|
function checkout(){
|
|
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
if(cart.length > 0){
|
|
window.location.href = '/checkout'
|
|
}else{
|
|
alert("Pilih Menu terlebih dahulu yang ingin dipesan !");
|
|
return
|
|
}
|
|
}
|
|
|
|
function handleClick(e){
|
|
const order_id = sessionStorage.getItem('order_id') || null;
|
|
if(order_id){
|
|
Swal.fire({
|
|
icon: 'warning',
|
|
title: 'Pesanan Belum Selesai',
|
|
text: 'Silakan selesaikan pesanan Anda terlebih dahulu sebelum melanjutkan.',
|
|
timer: 2500,
|
|
}).then(() => {
|
|
window.location.href = '/checkout';
|
|
});
|
|
}else{
|
|
saveItem(e)
|
|
}
|
|
}
|
|
|
|
function toggleCartList() {
|
|
const list = document.getElementById('cartList');
|
|
list.classList.toggle('d-none');
|
|
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
renderCart(cart);
|
|
|
|
// jika baru dibuka, render & pasang listener
|
|
if (!list.classList.contains('d-none')) {
|
|
setTimeout(() => document.addEventListener('click', closeOnOutside, { once: true }), 0);
|
|
}
|
|
}
|
|
|
|
function renderCart(cart) {
|
|
const body = document.getElementById('cartListBody');
|
|
body.innerHTML = cart.length
|
|
? cart.map((it, i) => `
|
|
<div class="d-flex justify-content-between align-items-center mb-1">
|
|
<span class="small">${it.nama_menu}</span>
|
|
<button class="btn btn-danger btn-sm" onclick="removeItem(${i})">
|
|
<i class="fa-solid fa-xmark"></i>
|
|
</button>
|
|
</div>
|
|
`).join('')
|
|
: '<p class="text-center text-muted m-0 py-2">Keranjang kosong</p>';
|
|
if (cart.length === 0) {
|
|
document.getElementById('cartList').classList.add('d-none');
|
|
}
|
|
}
|
|
|
|
function removeItem(index) {
|
|
const cart = JSON.parse(sessionStorage.getItem('cart') || '[]');
|
|
cart.splice(index, 1);
|
|
sessionStorage.setItem('cart', JSON.stringify(cart));
|
|
renderCart(cart);
|
|
updateCartCount(cart.length);
|
|
}
|
|
|
|
function closeOnOutside(e) {
|
|
const list = document.getElementById('cartList');
|
|
const removeButton = e.target.closest('button[onclick^="removeItem"]')
|
|
if (!list.contains(e.target) && !document.getElementById('menuBtn').contains(e.target) && !removeButton) {
|
|
list.classList.add('d-none');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|