Browse Source

fix: components

Muhammad Iqbal Afandi 3 years ago
parent
commit
1ad42d62eb

+ 14
- 22
resources/js/components/AppDateRangeFilter.vue View File

@@ -9,10 +9,15 @@ const props = defineProps({
9 9
     type: Object,
10 10
     required: true,
11 11
   },
12
-  refreshData: {
12
+  url: {
13 13
     type: String,
14 14
     required: true,
15 15
   },
16
+  refreshData: {
17
+    type: Array,
18
+    default: [],
19
+    required: false,
20
+  },
16 21
 })
17 22
 
18 23
 const filters = reactive({
@@ -47,31 +52,19 @@ watch(
47 52
       filters.endDate = null
48 53
     }
49 54
 
50
-    Inertia.reload({
51
-      data: pickBy({
55
+    Inertia.get(
56
+      props.url,
57
+      pickBy({
52 58
         start_date: filters.startDate,
53 59
         end_date: filters.endDate,
54 60
       }),
55
-      only: [props.refreshData],
56
-    })
61
+      {
62
+        preserveState: true,
63
+        only: [...props.refreshData],
64
+      }
65
+    )
57 66
   }
58 67
 )
59
-
60
-const removeParams = (...params) => {
61
-  const urlParams = new URLSearchParams(location.search)
62
-
63
-  params.forEach((value) => urlParams.delete(value))
64
-
65
-  history.replaceState({}, '', `${location.pathname}?${urlParams}`)
66
-}
67
-
68
-const dateSelect = () => {
69
-  if (filters.dates[0]) {
70
-    removeParams('end_date')
71
-  }
72
-
73
-  removeParams('page')
74
-}
75 68
 </script>
76 69
 
77 70
 <template>
@@ -80,7 +73,6 @@ const dateSelect = () => {
80 73
     selection-mode="range"
81 74
     date-format="dd/mm/yy"
82 75
     :manual-input="false"
83
-    @date-select="dateSelect"
84 76
     v-model="filters.dates"
85 77
   />
86 78
 </template>

+ 18
- 0
resources/js/components/AppResetFilter.vue View File

@@ -0,0 +1,18 @@
1
+<script setup>
2
+import { Inertia } from '@inertiajs/inertia'
3
+
4
+const props = defineProps({
5
+  url: {
6
+    type: String,
7
+    required: true,
8
+  },
9
+})
10
+
11
+const reset = () => {
12
+  Inertia.get(props.url)
13
+}
14
+</script>
15
+
16
+<template>
17
+  <Button label="reset" class="p-button-link" @click="reset()" />
18
+</template>

+ 10
- 4
resources/js/components/AppSearchFilter.vue View File

@@ -4,20 +4,26 @@ import { Inertia } from '@inertiajs/inertia'
4 4
 import { pickBy } from 'lodash'
5 5
 
6 6
 const props = defineProps({
7
+  initialSearch: {
8
+    required: true,
9
+  },
7 10
   url: {
8 11
     type: String,
9 12
     required: true,
10 13
   },
11
-  initialSearch: {
12
-    required: true,
14
+  refreshData: {
15
+    type: Array,
16
+    default: [],
17
+    required: false,
13 18
   },
14 19
 })
15 20
 
16 21
 const search = ref(props.initialSearch)
17 22
 
18
-watch(search, () => {
19
-  Inertia.get(props.url, pickBy({ search: search.value }), {
23
+watch(search, (value) => {
24
+  Inertia.get(props.url, pickBy({ search: value }), {
20 25
     preserveState: true,
26
+    only: [...props.refreshData],
21 27
   })
22 28
 })
23 29
 </script>

+ 1
- 1
resources/js/pages/Products/Index.vue View File

@@ -48,7 +48,7 @@ const onDelete = (data) => {
48 48
               <AppSearchFilter
49 49
                 class="w-full md:w-27rem"
50 50
                 placeholder="nomor, nama"
51
-                url="/products"
51
+                :url="route('products.index')"
52 52
                 :initial-search="initialSearch"
53 53
               />
54 54
             </div>

+ 1
- 1
resources/js/pages/Purchases/Index.vue View File

@@ -28,7 +28,7 @@ defineProps({
28 28
             <AppSearchFilter
29 29
               class="w-full md:w-27rem"
30 30
               placeholder="nama, email, no hp, status"
31
-              url="/purchases"
31
+              :url="route('purchases.index')"
32 32
               :initial-search="initialSearch"
33 33
             />
34 34
           </div>

+ 1
- 1
resources/js/pages/Sales/Index.vue View File

@@ -29,7 +29,7 @@ defineProps({
29 29
               <AppSearchFilter
30 30
                 class="w-full md:w-27rem"
31 31
                 placeholder="nama, no hp, status"
32
-                url="/sales"
32
+                :url="route('sales.index')"
33 33
                 :initial-search="initialSearch"
34 34
               />
35 35
             </div>

+ 8
- 2
resources/js/pages/Sales/Report.vue View File

@@ -4,6 +4,7 @@ import AppDateRangeFilter from '@/components/AppDateRangeFilter.vue'
4 4
 import AppButtonLink from '@/components/AppButtonLink.vue'
5 5
 import AppPagination from '@/components/AppPagination.vue'
6 6
 import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
7
+import AppResetFilter from '@/components/AppResetFilter.vue'
7 8
 
8 9
 defineProps({
9 10
   filters: Object,
@@ -18,7 +19,7 @@ defineProps({
18 19
 })
19 20
 
20 21
 const exportExcel = () => {
21
-  return `/sales/excel/report${location.search}`
22
+  return route('sales.report.excel', location.search)
22 23
 }
23 24
 </script>
24 25
 
@@ -38,11 +39,16 @@ const exportExcel = () => {
38 39
           <div class="col-12 sm:col-6 lg:col-4">
39 40
             <AppDateRangeFilter
40 41
               placeholder="filter waktu..."
41
-              refresh-data="sales"
42
+              :url="route('sales.report')"
43
+              :refresh-data="['sales']"
42 44
               :initial-filter="filters"
43 45
             />
44 46
           </div>
45 47
 
48
+          <div class="col-12 sm:col-6 lg:col-4">
49
+            <AppResetFilter :url="route('sales.report')" />
50
+          </div>
51
+
46 52
           <div class="col-12">
47 53
             <AppButtonLink
48 54
               v-if="sales.total"

+ 1
- 1
resources/js/pages/StockProducts/Index.vue View File

@@ -25,7 +25,7 @@ defineProps({
25 25
         <AppSearchFilter
26 26
           class="w-full md:w-27rem"
27 27
           placeholder="nama"
28
-          url="/stock-products"
28
+          :url="route('stock-products.index')"
29 29
           :initial-search="initialSearch"
30 30
         />
31 31
       </template>

+ 1
- 1
resources/js/pages/Suppliers/Index.vue View File

@@ -48,7 +48,7 @@ const onDelete = (data) => {
48 48
               <AppSearchFilter
49 49
                 class="w-full md:w-27rem"
50 50
                 placeholder="nama, no hp, npwp"
51
-                url="/suppliers"
51
+                :url="route('suppliers.index')"
52 52
                 :initial-search="initialSearch"
53 53
               />
54 54
             </div>

+ 1
- 1
resources/js/pages/Users/Index.vue View File

@@ -65,7 +65,7 @@ const onDelete = (data) => {
65 65
               <AppSearchFilter
66 66
                 class="w-full md:w-27rem"
67 67
                 placeholder="nama, nama pengguna"
68
-                url="/users"
68
+                :url="route('users.index')"
69 69
                 :initialSearch="initialSearch"
70 70
               />
71 71
             </div>

+ 9
- 4
routes/web.php View File

@@ -64,10 +64,10 @@ Route::middleware(["auth", "verified", "checkBlocked"])->group(function () {
64 64
         "deliveryOrder",
65 65
     ])->name("purchases.pdf.do");
66 66
 
67
-    Route::get("/purchases/excel/report", [
67
+    Route::get("/purchases/report/excel", [
68 68
         PurchaseController::class,
69 69
         "reportExcel",
70
-    ]);
70
+    ])->name("purchases.report.excel");
71 71
 
72 72
     Route::get("/purchases/report", [PurchaseController::class, "report"]);
73 73
 
@@ -83,9 +83,14 @@ Route::middleware(["auth", "verified", "checkBlocked"])->group(function () {
83 83
         "deliveryOrder",
84 84
     ])->name("sales.pdf.do");
85 85
 
86
-    Route::get("/sales/excel/report", [SalesController::class, "reportExcel"]);
86
+    Route::get("/sales/report/excel", [
87
+        SalesController::class,
88
+        "reportExcel",
89
+    ])->name("sales.report.excel");
87 90
 
88
-    Route::get("/sales/report", [SalesController::class, "report"]);
91
+    Route::get("/sales/report", [SalesController::class, "report"])->name(
92
+        "sales.report"
93
+    );
89 94
 
90 95
     Route::resource("/sales", SalesController::class);
91 96