|
1 | 1 | <script>
|
2 |
| - import { page } from '$app/stores'; |
| 2 | + import { page } from '$app/state'; |
3 | 3 | import { goto } from '$app/navigation';
|
4 | 4 | import { Search, Plus, Eye, Edit, Phone, MapPin, Calendar, Users, TrendingUp, Building2, Globe, DollarSign, ChevronUp, ChevronDown, Filter } from '@lucide/svelte';
|
5 | 5 |
|
6 |
| - export let data; |
| 6 | + let { data } = $props(); |
7 | 7 |
|
8 |
| - let { accounts, pagination } = data; |
9 |
| - let sortField = $page.url.searchParams.get('sort') || 'name'; |
10 |
| - let sortOrder = $page.url.searchParams.get('order') || 'asc'; |
11 |
| - let isLoading = false; |
12 |
| - let statusFilter = $page.url.searchParams.get('status') || 'all'; |
13 |
| - let searchQuery = $page.url.searchParams.get('q') || ''; |
| 8 | + let accounts = $state(data.accounts); |
| 9 | + let pagination = $state(data.pagination); |
| 10 | + let sortField = $state(page.url.searchParams.get('sort') || 'name'); |
| 11 | + let sortOrder = $state(page.url.searchParams.get('order') || 'asc'); |
| 12 | + let isLoading = $state(false); |
| 13 | + let statusFilter = $state(page.url.searchParams.get('status') || 'all'); |
| 14 | + let searchQuery = $state(page.url.searchParams.get('q') || ''); |
14 | 15 | /** @type {NodeJS.Timeout | undefined} */
|
15 | 16 | let searchTimeout;
|
16 | 17 |
|
|
21 | 22 | clearTimeout(searchTimeout);
|
22 | 23 | searchTimeout = setTimeout(() => {
|
23 | 24 | // eslint-disable-next-line svelte/prefer-svelte-reactivity
|
24 |
| - const params = new URLSearchParams($page.url.searchParams); |
| 25 | + const params = new URLSearchParams(page.url.searchParams); |
25 | 26 | if (value.trim()) {
|
26 | 27 | params.set('q', value.trim());
|
27 | 28 | } else {
|
|
35 | 36 | function updateQueryParams() {
|
36 | 37 | isLoading = true;
|
37 | 38 | // eslint-disable-next-line svelte/prefer-svelte-reactivity
|
38 |
| - const params = new URLSearchParams($page.url.searchParams); |
| 39 | + const params = new URLSearchParams(page.url.searchParams); |
39 | 40 | params.set('sort', sortField);
|
40 | 41 | params.set('order', sortOrder);
|
41 | 42 | params.set('status', statusFilter);
|
|
51 | 52 | if (newPage < 1 || newPage > pagination.totalPages) return;
|
52 | 53 |
|
53 | 54 | // eslint-disable-next-line svelte/prefer-svelte-reactivity
|
54 |
| - const params = new URLSearchParams($page.url.searchParams); |
| 55 | + const params = new URLSearchParams(page.url.searchParams); |
55 | 56 | params.set('page', newPage.toString());
|
56 | 57 | goto(`?${params.toString()}`, { keepFocus: true });
|
57 | 58 | }
|
|
95 | 96 | }
|
96 | 97 |
|
97 | 98 | // Update data when it changes from the server
|
98 |
| - $: { |
| 99 | + $effect(() => { |
99 | 100 | accounts = data.accounts;
|
100 | 101 | pagination = data.pagination;
|
101 | 102 | isLoading = false;
|
102 |
| - } |
| 103 | + }); |
103 | 104 | </script>
|
104 | 105 |
|
105 | 106 | <div class="p-6 bg-white dark:bg-gray-900 min-h-screen">
|
|
0 commit comments