From ed8bf87a43bc15c19da2c0f0ffd028e125a4be4a Mon Sep 17 00:00:00 2001
From: unknown <13521043@std.stei.itb.ac.id>
Date: Tue, 24 Oct 2023 14:03:22 +0700
Subject: [PATCH] fix: filter and search homepage admin

---
 src/admin/index.php                         | 58 +++++++++------------
 src/public/javascript/gym/gym_card_admin.js | 46 ++++++++++++++++
 2 files changed, 71 insertions(+), 33 deletions(-)
 create mode 100644 src/public/javascript/gym/gym_card_admin.js

diff --git a/src/admin/index.php b/src/admin/index.php
index d203264..3683995 100644
--- a/src/admin/index.php
+++ b/src/admin/index.php
@@ -12,8 +12,6 @@ AuthMiddleware::getInstance()->secureRoute(true);
 
 
 $searching = [
-    // 'name' => $_GET["name"] ?? null,
-    // 'description' => $_GET["description"] ?? null
 ];
 
 $itemInPage = 6;
@@ -23,19 +21,6 @@ $selectedCity = $_GET["city"] ?? null;
 $selectedPriceRange = $_GET["price-range"] ?? null;
 $selectedSorting = $_GET["sorting"] ?? null;
 
-$gymsFiltered = GymService::getInstance()->getFiltered(
-    [
-        'page' => $currentPage,
-        'cityId' => $selectedCity,
-        'sorting' => $selectedSorting,
-        'priceRange' => $selectedPriceRange,
-        'sortingOption' => $sortingOption,
-        'priceRangeOption' => $priceRangeOption,
-        'gymCountInPage' => $itemInPage,
-        'searching' => $searching
-    ]
-);
-
 ?>
 
 <!DOCTYPE html>
@@ -51,6 +36,17 @@ $gymsFiltered = GymService::getInstance()->getFiltered(
 
 <body>
     <div class="app">
+        <script>
+            const gym_name = <?php echo json_encode($_GET["gym_name"] ?? null) ?>;
+            const page = <?php echo json_encode($currentPage) ?>;
+            const selectedCity = <?php echo json_encode($selectedCity) ?>;
+            const selectedSorting = <?php echo json_encode($selectedSorting) ?>;
+            const selectedPriceRange = <?php echo json_encode($selectedPriceRange) ?>;
+            const sortingOption = <?php echo json_encode($sortingOption) ?>;
+            const priceRangeOption = <?php echo json_encode($priceRangeOption) ?>;
+            const itemInPage = <?php echo json_encode($itemInPage) ?>;
+            const searching = <?php echo json_encode($searching) ?>;
+        </script>
         <?php
         echo NavbarAdmin();
         ?>
@@ -77,38 +73,34 @@ $gymsFiltered = GymService::getInstance()->getFiltered(
             <?php
                 echo FilterForm($selectedCity, $selectedPriceRange, $selectedSorting);
             ?>
-            <div class="form-search">
-                <input id="input-search" class="input-search" type="text" name="name" onChange={handleChange}
-                    placeholder="Search a gym" />
-                <button class="button-search" id="button-search">
+            <form class="form-search">
+                <input id="input-search" class="input-search" type="text" name="gym_name" placeholder="Search Gym">
+                <button type="button" class="button-search" id="button-search" onclick="buttonSearch(event)">
                     <img src="/public/icon/vector_search.svg" alt="Search Icon">
                 </button>
-            </div>
+            </form>
             <a class="button-add-gym" id="add-gym" href="/admin/add">
                 <img src="/public/icon/add-gym.svg" alt="Add Gym Icon">
             </a>
 
         </div>
 
-        <div class="gym-card-container">
-            <?php 
-            if (sizeof($gymsFiltered['gyms']) == 0) {
-                ?>
-                <?= "No Gym Found" ?>
-                <?php
-            }
-            foreach ($gymsFiltered['gyms'] as $gym) {
-                echo GymCardAdmin($gym);
-            }
-            ?>
+        <div class="gym-card-container" id="gym-card-container">
+            <div class="space"></div>
+                Loading...
         </div>
+        <div class="pagination-container" id="pagination-container">
 
-        <div class="pagination-container">
-            <?php echo generatePagination($gymsFiltered['itemCount'], $itemInPage, $currentPage, $maxPages); ?>
         </div>
     </div>
     <script src="/public/javascript/admin.js"></script>
+
+    <script src="/public/javascript/gym/format_card.js"></script>
+    <script src="/public/javascript/gym/gym_card_admin.js"></script>
+    <script src="/public/javascript/pagination.js"></script>
     <script src="/public/javascript/gym/filter.js"></script>
+    <script src="/public/javascript/gym/search.js"></script>
+
     <script src="/public/javascript/popup_with_id.js"></script>
 </body>
 
diff --git a/src/public/javascript/gym/gym_card_admin.js b/src/public/javascript/gym/gym_card_admin.js
new file mode 100644
index 0000000..b8986ae
--- /dev/null
+++ b/src/public/javascript/gym/gym_card_admin.js
@@ -0,0 +1,46 @@
+function GymCard(gym) {
+    let truncated_name = truncateText(gym.name, 16);
+    let formatted_price = formatPrice(gym.monthly_price);
+
+    let gym_card = `
+    <div class="gym-card" id="gym-card-${gym.gym_id}">
+        <a class="content-gym-card" id="content-gym-card" href="/admin/gym?gym_id=${gym.gym_id}">
+            <img class="gym-card-picture" src="/public/image/gym/${gym.picture_id}.png" alt="Gym Image-${gym.picture_id}">
+            <div class="gym-card-text-admin">
+                <div class="gym-card-name">
+                    ${truncated_name}
+                </div>
+                <div class="gym-card-text-bottom">
+                    <div class="gym-card-text-bottom-left">
+                        ${gym.average_rating}
+                        <img src="/public/icon/star.svg" alt="Star Icon">
+                    </div>
+                    <div class="gym-card-text-bottom-right">
+                        ${formatted_price}
+                    </div>
+                </div>
+            </div>
+            <div class="button-gym-card">
+                <a class="button-edit-delete-gym" id="edit-gym" href="/admin/edit?gym_id=${gym.gym_id}">
+                    <img src="/public/icon/edit.svg" alt="Edit Gym Icon">
+                </a>
+                <button class="button-edit-delete-gym" id="delete-gym-${gym.gym_id}" onclick="event.stopPropagation();showPopupDel(${gym.gym_id});">
+                    <img src="/public/icon/trash.svg" alt="Trash Gym Icon">
+                </button>
+            </div>
+        </a>
+    </div>
+    <div class="popup" id="pop-up-delete-${gym.gym_id}" onclick="hidePopupDel(${gym.gym_id});">
+        <div class="popup-content" onclick="event.stopPropagation();">
+            <div class="popup-title" id="pop-up-title-edit-delete">
+                Do you want to delete ${gym.name}
+            </div>
+            <div class="space2"></div>
+            <button class="search-filter" onclick="deleteGymCall(${gym.gym_id});" id="yes-btn-del">Yes</button>
+            <div class="space3"></div>
+            <button class="cancel-filter" id="cancel-btn-del" onclick="hidePopupDel(${gym.gym_id});">Cancel</button>
+        </div>
+    </div>
+    `;
+    return gym_card;
+}
-- 
GitLab