filterElement.blade.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <div class="dropdown-menu" style="width: 170px;" aria-labelledby="{{$id}}">
  2. <div class="px-1">
  3. <form class="dropdown-filter_{{$id}}">
  4. @if($type === 'filters')
  5. @include('partials.select', [
  6. 'name' => 'filters[' . $id . ']',
  7. 'title' => false,
  8. 'options' => $data['values'] ?? [],
  9. 'value' => request()->filters[$id] ?? '',
  10. 'right' => true,
  11. ])
  12. @elseif($type === 'ranges')
  13. @include('partials.input', [
  14. 'name' => 'filters[' . $id . '_from]',
  15. 'type' => 'range',
  16. 'title' => 'с:',
  17. 'min' => $data['min'],
  18. 'max' => $data['max'],
  19. 'value' => request()->filters[$id . '_from'] ?? '', // $range['min']
  20. ])
  21. @include('partials.input', [
  22. 'name' => 'filters[' . $id . '_to]',
  23. 'type' => 'range',
  24. 'title' => 'по:',
  25. 'min' => $data['min'],
  26. 'max' => $data['max'],
  27. 'value' => request()->filters[$id . '_to'] ?? '', // $range['max']
  28. ])
  29. @elseif($type === 'dates')
  30. @include('partials.input', [
  31. 'name' => 'filters[' . $id . '_from]',
  32. 'type' => 'date',
  33. 'title' => 'с:',
  34. 'min' => $data['min'],
  35. 'max' => $data['max'],
  36. 'right' => true,
  37. 'value' => request()->filters[$id . '_from'] ?? '',
  38. ])
  39. @include('partials.input', [
  40. 'name' => 'filters[' . $id . '_to]',
  41. 'type' => 'date',
  42. 'title' => 'по:',
  43. 'min' => $data['min'],
  44. 'max' => $data['max'],
  45. 'right' => true,
  46. 'value' => request()->filters[$id . '_to'] ?? '',
  47. ])
  48. @endif
  49. </form>
  50. <div class="modal-footer d-flex justify-content-between">
  51. <button type="button" class="btn btn-primary accept-filter_{{$id}} btn-sm">Применить</button>
  52. <button type="button" class="btn btn-outline-secondary reset-filters_{{$id}} btn-sm">Сбросить</button>
  53. </div>
  54. </div>
  55. </div>
  56. @push('scripts')
  57. <script type="module">
  58. $('.accept-filter_{{$id}}').on('click', function () {
  59. let filters = $('.dropdown-filter_{{$id}}').serializeArray();
  60. let currentUrl = new URL(document.location.href);
  61. $.each(filters, function (id, filter) {
  62. if (filter.value !== '') {
  63. currentUrl.searchParams.set(filter.name, filter.value);
  64. } else {
  65. currentUrl.searchParams.delete(filter.name);
  66. }
  67. });
  68. currentUrl.searchParams.delete('page');
  69. document.location.href = currentUrl.href;
  70. });
  71. $('.reset-filters_{{$id}}').on('click', function () {
  72. let filters = $('.dropdown-filter_{{$id}}').serializeArray();
  73. let currentUrl = new URL(document.location.href);
  74. $.each(filters, function (id, filter) {
  75. currentUrl.searchParams.delete(filter.name);
  76. });
  77. currentUrl.searchParams.delete('page');
  78. document.location.href = currentUrl.href;
  79. });
  80. </script>
  81. @endpush