MINI PROJECT 5 MODUL 8

 MINI PROJECT 5 MODUL 8


Paging Inventory 
Jika di project sebelumnya hanya ada satu inventory data, nah sekarang inventory dapat dibuat menjadi beberapa page. 

berikut codenya: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .highlight {
    background-color: yellow;
  }

  .pagination {
    display: flex;
    list-style: none;
  }

  .pagination li {
    margin-right: 5px;
    cursor: pointer;
  }

  .pagination li.active {
    font-weight: bold;
  }
</style>
<body>
    <input type="text" id="namaBarang" placeholder="Nama Barang">
  <input type="number" id="berat" placeholder="Berat (kg)">
  <input type="text" id="gambar" placeholder="URL Gambar">
  <button onclick="tambahData()">Tambah</button>

  <table border="1">
    <thead>
      <tr>
        <th>No</th>
        <th>Nama Barang</th>
        <th>Berat</th>
        <th>Gambar</th>
        <th>Aksi</th>
      </tr>
    </thead>
    <tbody id="barangBody"></tbody>
  </table>

  <ul class="pagination" id="pagination"></ul>
  <script>
    var dataStore = [];
    var itemsPerPage = 5;
    var currentPage = 1;

    function tambahData() {
        var namaBarangInput = document.getElementById("namaBarang");
        var beratInput = document.getElementById("berat");
        var gambarInput = document.getElementById("gambar");
        var barangBody = document.getElementById("barangBody");

        var namaBarang = namaBarangInput.value;
        var berat = parseFloat(beratInput.value);
        var gambar = gambarInput.value;

        if (berat > 5) {
            var backgroundColorClass = "highlight";
        }

        var newRow = barangBody.insertRow();
        var cellNo = newRow.insertCell(0);
        var cellNamaBarang = newRow.insertCell(1);
        var cellBerat = newRow.insertCell(2);
        var cellGambar = newRow.insertCell(3);
        var cellAksi = newRow.insertCell(4);

        var data = {
            namaBarang: namaBarang,
            berat: berat,
            gambar: gambar
        };

        dataStore.push(data);

        cellNo.textContent = dataStore.length;
        cellNamaBarang.textContent = data.namaBarang;
        cellBerat.textContent = data.berat + " kg";
        cellBerat.classList.add(backgroundColorClass);
        cellGambar.innerHTML = '<img src="' + data.gambar + '" alt="' + data.namaBarang + '" style="max-width: 100px;">';

        var btnEdit = document.createElement("button");
        btnEdit.textContent = "Edit";
        btnEdit.onclick = function() {
            editBaris(newRow, data);
        };
        cellAksi.appendChild(btnEdit);

        var btnHapus = document.createElement("button");
        btnHapus.textContent = "Hapus";
        btnHapus.onclick = function() {
            hapusBaris(newRow);
        };
        cellAksi.appendChild(btnHapus);

        // Mengosongkan nilai input setelah menambahkan data baru.
        namaBarangInput.value = "";
        beratInput.value = "";
        gambarInput.value = "";

        // Memuat ulang halaman saat menambahkan data baru.
        tampilkanData();
    }

    function editBaris(row, data) {
        var cells = row.cells;

        // Simpan nilai awal sebelum diubah
        var originalValues = {
            namaBarang: data.namaBarang,
            berat: data.berat,
            gambar: data.gambar
        };

        // Ubah sel menjadi input untuk diedit
        cells[1].innerHTML = '<input type="text" id="editNamaBarang" value="' + originalValues.namaBarang + '">';
        cells[2].innerHTML = '<input type="number" id="editBerat" value="' + parseFloat(originalValues.berat) + '">';
        cells[3].innerHTML = '<input type="text" id="editGambar" value="' + originalValues.gambar + '">';

        // Ganti tombol Edit menjadi Save
        cells[4].innerHTML = '<button onclick="saveBaris(this.parentNode.parentNode, ' + dataStore.indexOf(data) + ')">Save</button>';

        // Hapus tombol hapus
        cells[4].removeChild(cells[4].getElementsByTagName('button')[1]);
    }

    function saveBaris(row, dataIndex) {
        var cells = row.cells;

        // Ambil nilai yang diedit
        var editedValues = {
            namaBarang: document.getElementById("editNamaBarang").value,
            berat: parseFloat(document.getElementById("editBerat").value),
            gambar: document.getElementById("editGambar").value,
        };

        // Perbarui data di array
        dataStore[dataIndex] = editedValues;

        // Kembalikan sel menjadi text
        cells[1].textContent = editedValues.namaBarang;
        cells[2].textContent = editedValues.berat + " kg";
        cells[3].innerHTML = '<img src="' + editedValues.gambar + '" alt="' + editedValues.namaBarang + '" style="max-width: 100px;">';

        // Ganti tombol Save menjadi Edit
        cells[4].innerHTML = '<button onclick="editBaris(this.parentNode.parentNode, ' + dataIndex + ')">Edit</button>';

        // Tambahkan tombol hapus
        var btnHapus = document.createElement("button");
        btnHapus.textContent = "Hapus";
        btnHapus.onclick = function() {
            hapusBaris(row);
        };
        cells[4].appendChild(btnHapus);

        tampilkanData();
    }

    function hapusBaris(row) {
        var barangBody = document.getElementById("barangBody");
        var dataIndex = Array.from(barangBody.rows).indexOf(row);
       
        // Hapus data dari array
        dataStore.splice(dataIndex, 1);

        barangBody.removeChild(row);

        // Perbarui nomor pada kolom "No"
        for (var i = 0; i < barangBody.rows.length; i++) {
            barangBody.rows[i].cells[0].textContent = i + 1;
        }
       
        tampilkanData();
    }

    function tampilkanData() {
      var barangBody = document.getElementById("barangBody");
      var pagination = document.getElementById("pagination");

      // Menghapus semua data sebelum memuat data baru.
      barangBody.innerHTML = "";
      pagination.innerHTML = "";

      // Menentukan indeks data yang akan ditampilkan berdasarkan halaman.
      var startIndex = (currentPage - 1) * itemsPerPage;
      var endIndex = startIndex + itemsPerPage;

      // Mendapatkan data yang akan ditampilkan pada halaman saat ini.
      var currentData = dataStore.slice(startIndex, endIndex);

      // Menambahkan baris baru ke tabel dengan informasi yang diambil dari data.
      for (var i = 0; i < currentData.length; i++) {
        var data = currentData[i];

        var newRow = barangBody.insertRow();
        var cellNo = newRow.insertCell(0);
        var cellNamaBarang = newRow.insertCell(1);
        var cellBerat = newRow.insertCell(2);
        var cellGambar = newRow.insertCell(3);
        var cellAksi = newRow.insertCell(4);

        cellNo.textContent = startIndex + i + 1;
        cellNamaBarang.textContent = data.namaBarang;
        cellBerat.textContent = data.berat + " kg";
        cellGambar.innerHTML = '<img src="' + data.gambar + '" alt="' + data.namaBarang + '" style="max-width: 100px;">';

        var btnEdit = document.createElement("button");
        btnEdit.textContent = "Edit";
        btnEdit.onclick = function() {
          editBaris(newRow, data);
        };
        cellAksi.appendChild(btnEdit);

        var btnHapus = document.createElement("button");
        btnHapus.textContent = "Hapus";
        btnHapus.onclick = function() {
          hapusBaris(newRow);
        };
        cellAksi.appendChild(btnHapus);
      }

      // Menampilkan tombol navigasi "Sebelumnya" dan "Berikutnya".
      var totalPages = Math.ceil(dataStore.length / itemsPerPage);

      for (var i = 1; i <= totalPages; i++) {
        var li = document.createElement("li");
        li.textContent = i;
        li.onclick = function() {
          currentPage = parseInt(this.textContent);
          tampilkanData();
        };
        if (i === currentPage) {
          li.classList.add("active");
        }
        pagination.appendChild(li);
      }
    }

    // Menampilkan data saat halaman dimuat.
    tampilkanData();
  </script>
</body>
</html>

Dan output yg dihasilkan akan seperti berikut: 


Comments