|
144 | 144 | </template>
|
145 | 145 |
|
146 | 146 | <script setup>
|
147 |
| -import axios from 'axios'; |
148 |
| -import {ref, onMounted, watch, computed} from 'vue' |
149 |
| -import {useRoute, useRouter} from "vue-router"; |
| 147 | +import {watch} from 'vue' |
| 148 | +import {useRoute} from "vue-router"; |
| 149 | +import useActivityLogs from '@/composables/activityLogs.js' |
150 | 150 |
|
151 |
| -const route = useRoute(); |
152 |
| -const router = useRouter(); |
153 |
| -const activities = ref(); |
154 |
| -const activeFilter = ref(route.query.filter || 'all'); |
155 |
| -const searchTerm = ref(route.query.search || ''); |
156 |
| -
|
157 |
| -// Pagination |
158 |
| -const currentPage = ref(parseInt(route.query.page) || 1); // Current page |
159 |
| -const perPage = ref(15); // Items per page |
160 |
| -const total = ref(0); // Total number of items |
161 |
| -
|
162 |
| -// Pagination Helpers |
163 |
| -const totalPages = computed(() => Math.ceil(total.value / perPage.value)); |
164 |
| -const rangeStart = computed(() => (currentPage.value - 1) * perPage.value + 1); |
165 |
| -const rangeEnd = computed(() => |
166 |
| - Math.min(currentPage.value * perPage.value, total.value) |
167 |
| -); |
168 |
| -
|
169 |
| -const loadActivityLogs = (() => { |
170 |
| - const params = { |
171 |
| - filter: activeFilter.value !== 'all' ? activeFilter.value : undefined, |
172 |
| - search: searchTerm.value || undefined, |
173 |
| - page: currentPage.value, |
174 |
| - per_page: perPage.value, |
175 |
| - }; |
| 151 | +const {activities, getActivityLogs, activeFilter, searchTerm, currentPage, rangeStart, rangeEnd, totalPages, total, updateFilter, applyFilters, changePage} = useActivityLogs() |
176 | 152 |
|
177 |
| - axios.get(`/api/activity-logs/`, { params }) |
178 |
| - .then(({data}) => { |
179 |
| - activities.value = data; |
180 |
| - total.value = data.meta.total |
181 |
| - }) |
182 |
| -}); |
183 |
| -
|
184 |
| -// Update query parameters and refetch data when page changes |
185 |
| -const changePage = (page) => { |
186 |
| - if (page >= 1 && page <= totalPages.value) { |
187 |
| - currentPage.value = page; |
188 |
| - applyFilters(); |
189 |
| - } |
190 |
| -}; |
191 |
| -
|
192 |
| -const updateFilter = (filter) => { |
193 |
| - activeFilter.value = filter; |
194 |
| - applyFilters(); |
195 |
| -}; |
196 |
| -
|
197 |
| -const applyFilters = () => { |
198 |
| - router.push({ |
199 |
| - query: { |
200 |
| - filter: activeFilter.value !== 'all' ? activeFilter.value : undefined, |
201 |
| - search: searchTerm.value || undefined, |
202 |
| - page: currentPage.value, |
203 |
| - }, |
204 |
| - }); |
205 |
| -}; |
| 153 | +const route = useRoute(); |
206 | 154 |
|
207 | 155 | watch(
|
208 | 156 | () => route.query,
|
209 | 157 | (newQuery) => {
|
210 | 158 | activeFilter.value = newQuery?.filter || 'all';
|
211 | 159 | searchTerm.value = newQuery?.search || '';
|
212 | 160 | currentPage.value = parseInt(newQuery.page) || 1;
|
213 |
| - loadActivityLogs(activeFilter.value) |
| 161 | + getActivityLogs() |
214 | 162 | },
|
215 | 163 | {
|
216 | 164 | deep: true,
|
217 | 165 | immediate: true
|
218 | 166 | }
|
219 | 167 | );
|
220 | 168 |
|
221 |
| -onMounted(() => { |
222 |
| - loadActivityLogs() |
223 |
| -}) |
224 | 169 | </script>
|
0 commit comments