diff --git a/infrastructure/control-panel/src/routes/+page.svelte b/infrastructure/control-panel/src/routes/+page.svelte index bdb5de62..8f22a37c 100644 --- a/infrastructure/control-panel/src/routes/+page.svelte +++ b/infrastructure/control-panel/src/routes/+page.svelte @@ -19,12 +19,81 @@ let platformsError = $state(null); let mappedData = $state([]); + // Pagination for eVaults + let currentPage = $state(1); + let itemsPerPage = $state(10); + let totalPages = $state(1); + // Track selected items let selectedEVaults = $state([]); let selectedPlatforms = $state([]); - const mappedPlatformsData = $derived( - platforms.map((platform) => ({ + // Filtered data for search + let filteredEVaults = $derived(() => { + if (!evaultsSearchValue.trim()) return evaults; + return evaults.filter( + (evault) => + evault.name.toLowerCase().includes(evaultsSearchValue.toLowerCase()) || + evault.evaultId.toLowerCase().includes(evaultsSearchValue.toLowerCase()) || + evault.namespace.toLowerCase().includes(evaultsSearchValue.toLowerCase()) + ); + }); + + let filteredPlatforms = $derived(() => { + if (!platformsSearchQuery.trim()) return platforms; + return platforms.filter( + (platform) => + platform.name.toLowerCase().includes(platformsSearchQuery.toLowerCase()) || + platform.status.toLowerCase().includes(platformsSearchQuery.toLowerCase()) + ); + }); + + // Paginated eVaults + let paginatedEVaults = $derived(() => { + const startIndex = (currentPage - 1) * itemsPerPage; + const endIndex = startIndex + itemsPerPage; + const filtered = filteredEVaults(); + return filtered.slice(startIndex, endIndex); + }); + + // Update total pages when filtered data changes + $effect(() => { + const filtered = filteredEVaults(); + totalPages = Math.ceil(filtered.length / itemsPerPage); + if (currentPage > totalPages && totalPages > 0) { + currentPage = totalPages; + } + }); + + // Mapped data for eVaults table + let mappedEVaultsData = $derived(() => { + const paginated = paginatedEVaults(); + return paginated.map((evault) => ({ + eName: { + type: 'text', + value: evault.evaultId, + className: 'cursor-pointer text-blue-600 hover:text-blue-800 hover:underline' + }, + Uptime: { + type: 'text', + value: evault.age + }, + IP: { + type: 'text', + value: evault.ip + }, + URI: { + type: 'link', + value: evault.serviceUrl || 'N/A', + link: evault.serviceUrl || '#', + external: true + } + })); + }); + + const mappedPlatformsData = $derived(() => { + const filtered = filteredPlatforms(); + return filtered.map((platform) => ({ Name: { type: 'text', value: platform.name @@ -43,15 +112,19 @@ link: platform.url, external: true } - })) - ); + })); + }); const handlePreviousPage = async () => { - alert('Previous btn clicked. Make a call to your server to fetch data.'); + if (currentPage > 1) { + currentPage--; + } }; const handleNextPage = async () => { - alert('Next btn clicked. Make a call to your server to fetch data.'); + if (currentPage < totalPages) { + currentPage++; + } }; const tableHeadings = ['eName', 'Uptime', 'IP', 'URI']; @@ -249,92 +322,124 @@ }); -
- - 0 - ? `${selectedEVaults.length} eVault${selectedEVaults.length === 1 ? '' : 's'} selected` - : 'Monitoring all eVault pods across Kubernetes clusters'} - showClearSelection={selectedEVaults.length > 0} - onClearSelection={clearEVaultSelection} - /> - - {#if isLoading} -
-
-
- {:else if error} -
- {error} - -
- {:else if evaults.length === 0} -
- No eVault pods found. Make sure kubectl is configured and eVault pods are running. -
- {:else} - + +
+ + 0 + ? `${selectedEVaults.length} eVault${selectedEVaults.length === 1 ? '' : 's'} selected` + : 'Monitoring all eVault pods across Kubernetes clusters'} + showClearSelection={selectedEVaults.length > 0} + onClearSelection={clearEVaultSelection} /> - {/if} - - - - 0 - ? `${selectedPlatforms.length} platform${selectedPlatforms.length === 1 ? '' : 's'} selected` - : 'No platform selected. Select a platform to monitor logs'} - showClearSelection={selectedPlatforms.length > 0} - onClearSelection={clearPlatformSelection} - /> - {#if platformsLoading} -
-
-
- {:else if platformsError} -
- {platformsError} - -
- {:else if platforms.length === 0} -
- No platforms found. Make sure the registry service is running. -
- {:else} -
+
+ + {:else if error} +
+ {error} + +
+ {:else if evaults.length === 0} +
+ No eVault pods found. Make sure kubectl is configured and eVault pods are + running. +
+ {:else} +
+ + +
+
+ Showing {(currentPage - 1) * itemsPerPage + 1} - {Math.min( + currentPage * itemsPerPage, + filteredEVaults().length + )} of {filteredEVaults().length} eVaults +
+
+ + Page {currentPage} of {totalPages} + +
+
+ {/if} + + + + +
+ + 0 + ? `${selectedPlatforms.length} platform${selectedPlatforms.length === 1 ? '' : 's'} selected` + : 'No platform selected. Select a platform to monitor logs'} + showClearSelection={selectedPlatforms.length > 0} + onClearSelection={clearPlatformSelection} /> - {/if} - + {#if platformsLoading} +
+
+
+ {:else if platformsError} +
+ {platformsError} + +
+ {:else if platforms.length === 0} +
+ No platforms found. Make sure the registry service is running. +
+ {:else} +
+ {/if} + +