Jelajahi Sumber

Add bulk report actions

Daniel Supernault 6 tahun lalu
induk
melakukan
a9b7117db9
1 mengubah file dengan 111 tambahan dan 3 penghapusan
  1. 111 3
      resources/views/admin/reports/home.blade.php

+ 111 - 3
resources/views/admin/reports/home.blade.php

@@ -17,9 +17,39 @@
 
 
   <hr>
   <hr>
 
 
+  <div class="mb-3 bulk-actions d-none">
+    <div class="d-flex justify-content-between">
+      <span>
+        <span class="bulk-count font-weight-bold" data-count="0">
+          0
+        </span>
+        <span class="bulk-desc"> items selected</span>
+      </span>
+      <span class="d-inline-flex">
+        <select class="custom-select custom-select-sm font-weight-bold bulk-action">
+          <option selected disabled="">Select Bulk Action</option>
+          <option value="1">Ignore</option>
+          <option value="2">Add C/W</option>
+          <option value="3">Unlist from timelines</option>
+        </select>
+        <a class="btn btn-outline-primary btn-sm ml-3 font-weight-bold apply-bulk" href="#">
+          Apply
+        </a>
+      </span>
+    </div>
+  </div>
+
   <table class="table table-responsive">
   <table class="table table-responsive">
-    <thead class="thead-dark">
+    <thead class="bg-light">
       <tr>
       <tr>
+        <th scope="col">
+          <div class="">
+            <div class="custom-control custom-checkbox table-check">
+              <input type="checkbox" class="custom-control-input" id="row-check-all">
+              <label class="custom-control-label" for="row-check-all"></label>
+            </div>
+          </div>
+        </th>
         <th scope="col">#</th>
         <th scope="col">#</th>
         <th scope="col">Reporter</th>
         <th scope="col">Reporter</th>
         <th scope="col">Type</th>
         <th scope="col">Type</th>
@@ -31,11 +61,18 @@
     <tbody>
     <tbody>
       @foreach($reports as $report)
       @foreach($reports as $report)
       <tr>
       <tr>
-        <th scope="row">
+        <td class="py-0">
+          <div class="custom-control custom-checkbox">
+            <input type="checkbox" class="custom-control-input row-check-item" id="row-check-{{$report->id}}" data-resolved="{{$report->admin_seen?'true':'false'}}" data-id="{{$report->id}}">
+            <label class="custom-control-label" for="row-check-{{$report->id}}"></label>
+          </div>
+        </td>
+        <td>
           <a href="{{$report->url()}}" class="btn btn-sm btn-outline-primary">
           <a href="{{$report->url()}}" class="btn btn-sm btn-outline-primary">
             {{$report->id}}
             {{$report->id}}
           </a>
           </a>
-        </th>
+          
+        </td>
         <td class="font-weight-bold"><a href="{{$report->reporter->url()}}">{{$report->reporter->username}}</a></td>
         <td class="font-weight-bold"><a href="{{$report->reporter->url()}}">{{$report->reporter->username}}</a></td>
         <td class="font-weight-bold">{{$report->type}}</td>
         <td class="font-weight-bold">{{$report->type}}</td>
         <td class="font-weight-bold"><a href="{{$report->reported()->url()}}">{{str_limit($report->reported()->url(), 25)}}</a></td>
         <td class="font-weight-bold"><a href="{{$report->reported()->url()}}">{{str_limit($report->reported()->url(), 25)}}</a></td>
@@ -54,9 +91,80 @@
   </div>
   </div>
 @endsection
 @endsection
 
 
+@push('styles')
+<style type="text/css">
+  .custom-control-label:after, .custom-control-label:before {
+    top: auto;
+    bottom: auto;
+  }
+  .table-check .custom-control-label {
+    top: -11px;
+  }
+</style>
+@endpush
+
 @push('scripts')
 @push('scripts')
   <script type="text/javascript">
   <script type="text/javascript">
     $(document).ready(function() {
     $(document).ready(function() {
+
+      $(document).on('click', '#row-check-all', function(e) {
+        let el = $(this);
+        let attr = el.attr('checked');
+
+        if (typeof attr !== typeof undefined && attr !== false) {
+          $('.bulk-actions').addClass('d-none');
+          $('.row-check-item[data-resolved=false]').removeAttr('checked').prop('checked', false);
+          el.removeAttr('checked').prop('checked', false);
+        } else {
+          $('.bulk-actions').removeClass('d-none');
+          el.attr('checked', '').prop('checked', true);
+          $('.row-check-item[data-resolved=false]').attr('checked', '').prop('checked', true);
+        }
+
+        let len = $('.row-check-item[checked]').length;
+        $('.bulk-count').text(len).attr('data-count', len);
+      });
+
+      $(document).on('click', '.row-check-item', function(e) {
+        var el = $(this)[0];
+        let len = $('.bulk-count').attr('data-count');
+        if(el.checked == true) {
+          len++;
+          $('.bulk-count').text(len).attr('data-count', len);
+        } else {
+          len--;
+          $('.bulk-count').text(len).attr('data-count', len);   
+        }
+        if(len == 0) {
+          $('.bulk-actions').addClass('d-none');
+          $('#row-check-all').prop('checked', false);
+        } else {
+          $('.bulk-actions').removeClass('d-none');
+        }
+      });
+
+      $(document).on('click', '.apply-bulk', function(e) {
+        e.preventDefault();
+        let ids = $('.row-check-item:checked').map(function(i,k) {
+          return $(this).attr('data-id');
+        }).get();
+        let action = $('.bulk-action option:selected').val();
+        if(action == 'Select Bulk Action') {
+          swal('Error', 'You need to select a bulk action first.', 'error');
+          $('.bulk-action').focus();
+          return;
+        }
+        axios.post('/i/admin/reports/bulk',{
+          'action': action,
+          'ids': ids
+        }).then(function(res) {
+          swal('Success', 'Bulk Update was successful!', 'success');
+          window.location.href = window.location.href;
+        }).catch(function(res) {
+          swal('Ooops!', 'Something went wrong', 'error');
+        });
+      });
+
       $('.human-size').each(function(d,a) {
       $('.human-size').each(function(d,a) {
         let el = $(a);
         let el = $(a);
         let size = el.data('bytes');
         let size = el.data('bytes');