Loading portal-gui/src/components/data-table/data-table.tsx +15 −1 Changes for portal-gui/src/components/data-table/data-table.tsx: 15 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import { } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Alert } from '@/components/ui/alert'; import { DropdownMenu, DropdownMenuCheckboxItem, Loading @@ -61,7 +62,9 @@ export function DataTable<TData>({ getRowId, noun, filters, showColumnSelection = false, refreshing = false, refreshError, onRefresh, onVisibleRows, }: DataTableProps<TData>) { Loading Loading @@ -129,6 +132,13 @@ export function DataTable<TData>({ return ( <> {refreshError && ( <div className="px-4 lg:px-6"> <Alert> Could not refresh {noun}: {refreshError} </Alert> </div> )} <div className="flex items-center justify-between px-4 lg:px-6"> <div className="relative max-w-sm flex-1"> <SearchIcon className="absolute top-2.5 left-3 h-4 w-4 text-muted-foreground" /> Loading @@ -141,6 +151,7 @@ export function DataTable<TData>({ /> </div> {showColumnSelection && ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="outline" size="sm"> Loading @@ -157,7 +168,9 @@ export function DataTable<TData>({ <DropdownMenuCheckboxItem key={column.id} checked={column.getIsVisible()} onCheckedChange={(value) => column.toggleVisibility(!!value)} onCheckedChange={(value) => column.toggleVisibility(!!value) } > {typeof column.columnDef.header === 'string' ? column.columnDef.header Loading @@ -166,6 +179,7 @@ export function DataTable<TData>({ ))} </DropdownMenuContent> </DropdownMenu> )} </div> <div className="flex flex-wrap items-end gap-3 px-4 lg:px-6"> Loading portal-gui/src/features/api-clients/api-clients.tsx +13 −3 Changes for portal-gui/src/features/api-clients/api-clients.tsx: 13 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -20,8 +20,15 @@ import { import type { ApiClient, CreatedApiClient } from '@/types/api-clients'; export function ApiClientsPage() { const { clients, loading, error, unavailable, retry, removeClient } = useApiClients(); const { clients, loading, refreshing, error, unavailable, retry, removeClient, } = useApiClients(); const [creating, setCreating] = useState(false); const [created, setCreated] = useState<CreatedApiClient | null>(null); const [deleting, setDeleting] = useState<ApiClient | null>(null); Loading Loading @@ -51,9 +58,10 @@ export function ApiClientsPage() { {unavailable === false && <ApiClientsNotice />} <PageState loading={loading} error={error} error={Boolean(error) && clients.length === 0} empty={clients.length === 0} errorTitle="Could not load your API clients" errorDescription={error} emptyTitle="No API clients yet" emptyDescription="Create one to call the APIs from your own application." onRetry={retry} Loading @@ -63,6 +71,8 @@ export function ApiClientsPage() { columns={columns} getRowId={(client) => client.id} noun="API clients" refreshing={refreshing} refreshError={error} onRefresh={retry} /> </PageState> Loading portal-gui/src/features/applications/application-deployments.tsx +5 −2 Changes for portal-gui/src/features/applications/application-deployments.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ export function ApplicationDeploymentsPage() { deployments, visibleDeployments, deploymentsLoading, refreshing, deploymentsError, loadDeployments, refresh, Loading Loading @@ -67,8 +68,8 @@ export function ApplicationDeploymentsPage() { <PageContent> {deploymentsLoading ? ( <LoadingState /> ) : deploymentsError ? ( <ErrorState /> ) : deploymentsError && deployments.length === 0 ? ( <ErrorState description={deploymentsError} onRetry={refresh} /> ) : deployments.length === 0 ? ( <EmptyState /> ) : ( Loading @@ -79,6 +80,8 @@ export function ApplicationDeploymentsPage() { columns={columns} getRowId={(deployment) => deployment.appDeploymentId} noun="deployments" refreshing={refreshing} refreshError={deploymentsError ?? undefined} onRefresh={refresh} filters={() => ( <> Loading portal-gui/src/features/applications/application-instances.tsx +5 −2 Changes for portal-gui/src/features/applications/application-instances.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ export function ApplicationInstancesPage() { edgeZoneId, setEdgeZoneId, loading, refreshing, error, createOpen, Loading Loading @@ -83,8 +84,8 @@ export function ApplicationInstancesPage() { <PageContent> {loading ? ( <LoadingState /> ) : error ? ( <ErrorState /> ) : error && instances.length === 0 ? ( <ErrorState description={error} onRetry={refresh} /> ) : instances.length === 0 ? ( <EmptyState /> ) : ( Loading @@ -95,6 +96,8 @@ export function ApplicationInstancesPage() { columns={columns} getRowId={(instance) => instance.appInstanceId} noun="instances" refreshing={refreshing} refreshError={error} onRefresh={refresh} filters={() => ( <> Loading portal-gui/src/features/applications/application-profiles.tsx +5 −2 Changes for portal-gui/src/features/applications/application-profiles.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ export function ApplicationProfilesPage() { const { apps, appsLoading, refreshing, appsError, appsErrorMessage, addApp, Loading Loading @@ -63,11 +64,11 @@ export function ApplicationProfilesPage() { <PageContent> {appsLoading ? ( <LoadingState /> ) : appsError ? ( ) : appsError && apps.length === 0 ? ( <ErrorState title="Could not load application profiles" description={appsErrorMessage} onRetry={() => window.location.reload()} onRetry={refresh} /> ) : apps.length === 0 ? ( <EmptyState /> Loading @@ -78,6 +79,8 @@ export function ApplicationProfilesPage() { columns={columns} getRowId={(app) => app.appId} noun="application profiles" refreshing={refreshing} refreshError={appsError ? appsErrorMessage : undefined} onRefresh={refresh} filters={(table) => ( <FilterSelect Loading Loading
portal-gui/src/components/data-table/data-table.tsx +15 −1 Changes for portal-gui/src/components/data-table/data-table.tsx: 15 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import { } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Alert } from '@/components/ui/alert'; import { DropdownMenu, DropdownMenuCheckboxItem, Loading @@ -61,7 +62,9 @@ export function DataTable<TData>({ getRowId, noun, filters, showColumnSelection = false, refreshing = false, refreshError, onRefresh, onVisibleRows, }: DataTableProps<TData>) { Loading Loading @@ -129,6 +132,13 @@ export function DataTable<TData>({ return ( <> {refreshError && ( <div className="px-4 lg:px-6"> <Alert> Could not refresh {noun}: {refreshError} </Alert> </div> )} <div className="flex items-center justify-between px-4 lg:px-6"> <div className="relative max-w-sm flex-1"> <SearchIcon className="absolute top-2.5 left-3 h-4 w-4 text-muted-foreground" /> Loading @@ -141,6 +151,7 @@ export function DataTable<TData>({ /> </div> {showColumnSelection && ( <DropdownMenu> <DropdownMenuTrigger asChild> <Button variant="outline" size="sm"> Loading @@ -157,7 +168,9 @@ export function DataTable<TData>({ <DropdownMenuCheckboxItem key={column.id} checked={column.getIsVisible()} onCheckedChange={(value) => column.toggleVisibility(!!value)} onCheckedChange={(value) => column.toggleVisibility(!!value) } > {typeof column.columnDef.header === 'string' ? column.columnDef.header Loading @@ -166,6 +179,7 @@ export function DataTable<TData>({ ))} </DropdownMenuContent> </DropdownMenu> )} </div> <div className="flex flex-wrap items-end gap-3 px-4 lg:px-6"> Loading
portal-gui/src/features/api-clients/api-clients.tsx +13 −3 Changes for portal-gui/src/features/api-clients/api-clients.tsx: 13 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -20,8 +20,15 @@ import { import type { ApiClient, CreatedApiClient } from '@/types/api-clients'; export function ApiClientsPage() { const { clients, loading, error, unavailable, retry, removeClient } = useApiClients(); const { clients, loading, refreshing, error, unavailable, retry, removeClient, } = useApiClients(); const [creating, setCreating] = useState(false); const [created, setCreated] = useState<CreatedApiClient | null>(null); const [deleting, setDeleting] = useState<ApiClient | null>(null); Loading Loading @@ -51,9 +58,10 @@ export function ApiClientsPage() { {unavailable === false && <ApiClientsNotice />} <PageState loading={loading} error={error} error={Boolean(error) && clients.length === 0} empty={clients.length === 0} errorTitle="Could not load your API clients" errorDescription={error} emptyTitle="No API clients yet" emptyDescription="Create one to call the APIs from your own application." onRetry={retry} Loading @@ -63,6 +71,8 @@ export function ApiClientsPage() { columns={columns} getRowId={(client) => client.id} noun="API clients" refreshing={refreshing} refreshError={error} onRefresh={retry} /> </PageState> Loading
portal-gui/src/features/applications/application-deployments.tsx +5 −2 Changes for portal-gui/src/features/applications/application-deployments.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ export function ApplicationDeploymentsPage() { deployments, visibleDeployments, deploymentsLoading, refreshing, deploymentsError, loadDeployments, refresh, Loading Loading @@ -67,8 +68,8 @@ export function ApplicationDeploymentsPage() { <PageContent> {deploymentsLoading ? ( <LoadingState /> ) : deploymentsError ? ( <ErrorState /> ) : deploymentsError && deployments.length === 0 ? ( <ErrorState description={deploymentsError} onRetry={refresh} /> ) : deployments.length === 0 ? ( <EmptyState /> ) : ( Loading @@ -79,6 +80,8 @@ export function ApplicationDeploymentsPage() { columns={columns} getRowId={(deployment) => deployment.appDeploymentId} noun="deployments" refreshing={refreshing} refreshError={deploymentsError ?? undefined} onRefresh={refresh} filters={() => ( <> Loading
portal-gui/src/features/applications/application-instances.tsx +5 −2 Changes for portal-gui/src/features/applications/application-instances.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ export function ApplicationInstancesPage() { edgeZoneId, setEdgeZoneId, loading, refreshing, error, createOpen, Loading Loading @@ -83,8 +84,8 @@ export function ApplicationInstancesPage() { <PageContent> {loading ? ( <LoadingState /> ) : error ? ( <ErrorState /> ) : error && instances.length === 0 ? ( <ErrorState description={error} onRetry={refresh} /> ) : instances.length === 0 ? ( <EmptyState /> ) : ( Loading @@ -95,6 +96,8 @@ export function ApplicationInstancesPage() { columns={columns} getRowId={(instance) => instance.appInstanceId} noun="instances" refreshing={refreshing} refreshError={error} onRefresh={refresh} filters={() => ( <> Loading
portal-gui/src/features/applications/application-profiles.tsx +5 −2 Changes for portal-gui/src/features/applications/application-profiles.tsx: 5 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ export function ApplicationProfilesPage() { const { apps, appsLoading, refreshing, appsError, appsErrorMessage, addApp, Loading Loading @@ -63,11 +64,11 @@ export function ApplicationProfilesPage() { <PageContent> {appsLoading ? ( <LoadingState /> ) : appsError ? ( ) : appsError && apps.length === 0 ? ( <ErrorState title="Could not load application profiles" description={appsErrorMessage} onRetry={() => window.location.reload()} onRetry={refresh} /> ) : apps.length === 0 ? ( <EmptyState /> Loading @@ -78,6 +79,8 @@ export function ApplicationProfilesPage() { columns={columns} getRowId={(app) => app.appId} noun="application profiles" refreshing={refreshing} refreshError={appsError ? appsErrorMessage : undefined} onRefresh={refresh} filters={(table) => ( <FilterSelect Loading