Преглед на файлове

feat: add review visibility toggle in admin

unknown преди 1 ден
родител
ревизия
a6c518e480
променени са 2 файла, в които са добавени 26 реда и са изтрити 7 реда
  1. 14 7
      src/components/admin/ReviewsSection.vue
  2. 12 0
      src/locales/translations.admin.json

+ 14 - 7
src/components/admin/ReviewsSection.vue

@@ -68,13 +68,17 @@
               <td class="p-4 text-right">
                 <div class="flex items-center justify-end gap-2">
                   <Button 
-                    v-if="!review.review_approved"
                     variant="outline" 
                     size="sm"
-                    class="h-7 px-3 text-[10px] font-bold uppercase rounded-lg border-emerald-500/30 text-emerald-500 hover:bg-emerald-500/10"
-                    @click="handleApprove(review.id)"
+                    :class="[
+                      'h-7 px-3 text-[10px] font-bold uppercase rounded-lg transition-all',
+                      review.review_approved 
+                        ? 'border-amber-500/30 text-amber-500 hover:bg-amber-500/10' 
+                        : 'border-emerald-500/30 text-emerald-500 hover:bg-emerald-500/10'
+                    ]"
+                    @click="handleToggleApprove(review)"
                   >
-                    {{ t('admin.reviews.approve') }}
+                    {{ review.review_approved ? t('admin.reviews.hide') || 'Hide' : t('admin.reviews.approve') }}
                   </Button>
                   <Button 
                     variant="outline" 
@@ -133,10 +137,13 @@ const fetchReviews = async () => {
   }
 };
 
-const handleApprove = async (orderId: number) => {
+const handleToggleApprove = async (review: any) => {
   try {
-    await approveOrderReview(orderId);
-    toast.success(t('admin.reviews.approvedSuccess'));
+    const newStatus = !review.review_approved;
+    await adminUpdateOrder(review.id, {
+      review_approved: newStatus
+    });
+    toast.success(newStatus ? t('admin.reviews.approvedSuccess') : t('admin.reviews.hiddenSuccess'));
     fetchReviews();
   } catch (err) {
     toast.error(t('errors.update_failed'));

+ 12 - 0
src/locales/translations.admin.json

@@ -649,6 +649,12 @@
         "ru": "Удалить",
         "ua": "Видалити"
       },
+      "hide": {
+        "en": "Hide",
+        "me": "Sakrij",
+        "ru": "Скрыть",
+        "ua": "Приховати"
+      },
       "approvedSuccess": {
         "en": "Review approved",
         "me": "Recenzija odobrena",
@@ -741,6 +747,12 @@
         "ru": "Материал сохранен",
         "ua": "Матеріал збережено"
       },
+      "hiddenSuccess": {
+        "en": "Review hidden from public view",
+        "me": "Recenzija sakrivena",
+        "ru": "Отзыв скрыт от публикации",
+        "ua": "Відгук приховано"
+      },
       "noConsent": {
         "en": "User did not consent to portfolio",
         "me": "Korisnik nije dao saglasnost za portfolio",