Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/laciasmara.com/public_html/shop/application/views/account/ |
Upload File : |
<?php defined('BASEPATH') or exit('No direct script access allowed'); ?> <div class="account-wishlist-container"> <h1><?= ucfirst(lang('wishlist_title')) ?></h1> <p><?= ucfirst(lang('wishlist_sub_title')) ?></p> <ul class="wishlist-list" id="wishlistList"> <?php if (!empty($wishlists)): ?> <?php foreach ($wishlists as $wishlist): ?> <li class="wishlist-item"> <div class="wishlist-header"> <span class="wishlist-date"><?= lang('wishlist_liked_on') ?> <?= date('d M Y', strtotime($wishlist->created_at)) ?></span> <!-- <span class="wishlist-id">Wishlist ID: <?= $wishlist->id_wishlists ?></span> --> </div> <div class="wishlist-detail"> <a href="<?= base_url('product/' . $wishlist->alias) ?>"> <img src="<?= base_url('uploads/product/' . $wishlist->product_image) ?>" alt="<?= $wishlist->product_title ?>" class="wishlist-product-thumbnail" /> </a> <div class="wishlist-product-details" data-product-id="<?= $wishlist->product_id ?>" data-product-detail-id="<?= $wishlist->product_detail_id ?>"> <span class="wishlist-item-name"><a href="<?= base_url('product/' . $wishlist->alias) ?>"><?= $wishlist->product_title ?></a></span> <!-- <span class="wishlist-item-variant"><?= $wishlist->variant ?></span> --> </div> </div> <div class="wishlist-actions"> <button class="wishlist-remove-btn"> <i data-feather="trash"></i> </button> <!-- <button class="wishlist-add-to-cart-btn"> <?= lang('product_add_to_cart') ?> </button> --> </div> </li> <?php endforeach; ?> <?php else: ?> <li class="empty-wishlist"> <p class="empty-wishlist-text">Belum ada wishlist.</p> </li> <?php endif; ?> </ul> </div> <script> $(document).ready(function() { const notyf = new Notyf({ duration: 3000, position: { x: 'right', y: 'top' }, types: [{ type: 'success', background: '#7A4397', icon: { className: 'fas fa-check', tagName: 'i', color: 'white' } }, { type: 'error', background: '#dc3545', icon: { className: 'fas fa-times', tagName: 'i', color: 'white' } } ] }); // Fungsi untuk menangani animasi dan removal dari DOM function handleWishlistItemRemoval($item) { $item.fadeOut(300, function() { $(this).remove(); if ($('.wishlist-item').length === 0) { const emptyTemplate = ` <li class="empty-wishlist"> <p class="empty-wishlist-text">Belum ada wishlist.</p> </li> `; $('#wishlistList').html(emptyTemplate); } }); } // Handler untuk tombol remove $('.wishlist-remove-btn').on('click', function(e) { e.preventDefault(); const $button = $(this); const $wishlistItem = $button.closest('.wishlist-item'); const $icon = $button.find('i[data-feather="trash"]'); // Ambil product id dan detail id dari dataset const productId = $wishlistItem.find('.wishlist-product-details').data('product-id'); const productDetailId = $wishlistItem.find('.wishlist-product-details').data('product-detail-id'); // Disable button dan tambah loading state $button.prop('disabled', true); // Tambahkan class loading dan ubah opacity untuk indikasi visual $button.css('opacity', '0.7'); $icon.addClass('loading'); const csrfName = '<?= $this->security->get_csrf_token_name(); ?>'; const csrfHash = '<?= $this->security->get_csrf_hash(); ?>'; $.ajax({ url: '<?= base_url("account/remove_from_wishlist") ?>', type: 'POST', dataType: 'json', data: { product_id: productId, product_detail_id: productDetailId, [csrfName]: csrfHash }, success: function(response) { if (response.status === 'success') { notyf.success(response.message); handleWishlistItemRemoval($wishlistItem); } else { notyf.error(response.message); } }, error: function(xhr, status, error) { console.error('Error:', error); notyf.error('Failed to remove item from wishlist'); }, complete: function() { // Reset button state $button.prop('disabled', false); $button.css('opacity', '1'); $icon.removeClass('loading'); } }); }); }); </script>