|
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