From d526839bfa19bd7576993bc94611301f56097f2d Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Sat, 2 Nov 2024 01:53:11 -0700 Subject: [PATCH] opnsense connections page ui improvements --- bun.lockb | Bin 164427 -> 164427 bytes .../components/ui/checkbox/checkbox.svelte | 35 ++++++++ src/lib/components/ui/checkbox/index.ts | 6 ++ src/lib/components/ui/table/index.ts | 28 ++++++ src/lib/components/ui/table/table-body.svelte | 13 +++ .../components/ui/table/table-caption.svelte | 13 +++ src/lib/components/ui/table/table-cell.svelte | 18 ++++ .../components/ui/table/table-footer.svelte | 13 +++ src/lib/components/ui/table/table-head.svelte | 19 ++++ .../components/ui/table/table-header.svelte | 14 +++ src/lib/components/ui/table/table-row.svelte | 23 +++++ src/lib/components/ui/table/table.svelte | 15 ++++ src/routes/connections/+page.svelte | 81 ++++++++++-------- 13 files changed, 244 insertions(+), 34 deletions(-) create mode 100644 src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 src/lib/components/ui/checkbox/index.ts create mode 100644 src/lib/components/ui/table/index.ts create mode 100644 src/lib/components/ui/table/table-body.svelte create mode 100644 src/lib/components/ui/table/table-caption.svelte create mode 100644 src/lib/components/ui/table/table-cell.svelte create mode 100644 src/lib/components/ui/table/table-footer.svelte create mode 100644 src/lib/components/ui/table/table-head.svelte create mode 100644 src/lib/components/ui/table/table-header.svelte create mode 100644 src/lib/components/ui/table/table-row.svelte create mode 100644 src/lib/components/ui/table/table.svelte diff --git a/bun.lockb b/bun.lockb index e5bf7c4e17a6d4c4abfb3563843516882700f59f..ec7b8fcee49b6dd7f2f37a54054d3088319f4b6c 100755 GIT binary patch delta 46 scmX@z!gacZt6>Y{;T@bz3{bHB%nn9hCUz))y1{2g(e0+Y8O4qR05z2iR{#J2 delta 43 wcmX@z!gacZt6>Y{;T@ceaRz!uhI)o(+t2J^^ko9`O-xPn47MxnX4E_m089@J@&Et; diff --git a/src/lib/components/ui/checkbox/checkbox.svelte b/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 0000000..f4b906f --- /dev/null +++ b/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,35 @@ + + + + + {#if isChecked} + + {:else if isIndeterminate} + + {/if} + + diff --git a/src/lib/components/ui/checkbox/index.ts b/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 0000000..6d92d94 --- /dev/null +++ b/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox, +}; diff --git a/src/lib/components/ui/table/index.ts b/src/lib/components/ui/table/index.ts new file mode 100644 index 0000000..14695c8 --- /dev/null +++ b/src/lib/components/ui/table/index.ts @@ -0,0 +1,28 @@ +import Root from "./table.svelte"; +import Body from "./table-body.svelte"; +import Caption from "./table-caption.svelte"; +import Cell from "./table-cell.svelte"; +import Footer from "./table-footer.svelte"; +import Head from "./table-head.svelte"; +import Header from "./table-header.svelte"; +import Row from "./table-row.svelte"; + +export { + Root, + Body, + Caption, + Cell, + Footer, + Head, + Header, + Row, + // + Root as Table, + Body as TableBody, + Caption as TableCaption, + Cell as TableCell, + Footer as TableFooter, + Head as TableHead, + Header as TableHeader, + Row as TableRow, +}; diff --git a/src/lib/components/ui/table/table-body.svelte b/src/lib/components/ui/table/table-body.svelte new file mode 100644 index 0000000..f2109d6 --- /dev/null +++ b/src/lib/components/ui/table/table-body.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/components/ui/table/table-caption.svelte b/src/lib/components/ui/table/table-caption.svelte new file mode 100644 index 0000000..b838270 --- /dev/null +++ b/src/lib/components/ui/table/table-caption.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/components/ui/table/table-cell.svelte b/src/lib/components/ui/table/table-cell.svelte new file mode 100644 index 0000000..fcb04f6 --- /dev/null +++ b/src/lib/components/ui/table/table-cell.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/src/lib/components/ui/table/table-footer.svelte b/src/lib/components/ui/table/table-footer.svelte new file mode 100644 index 0000000..a2ba75d --- /dev/null +++ b/src/lib/components/ui/table/table-footer.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/components/ui/table/table-head.svelte b/src/lib/components/ui/table/table-head.svelte new file mode 100644 index 0000000..49ab7a9 --- /dev/null +++ b/src/lib/components/ui/table/table-head.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/components/ui/table/table-header.svelte b/src/lib/components/ui/table/table-header.svelte new file mode 100644 index 0000000..a3e59ee --- /dev/null +++ b/src/lib/components/ui/table/table-header.svelte @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/lib/components/ui/table/table-row.svelte b/src/lib/components/ui/table/table-row.svelte new file mode 100644 index 0000000..731c5d5 --- /dev/null +++ b/src/lib/components/ui/table/table-row.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/src/lib/components/ui/table/table.svelte b/src/lib/components/ui/table/table.svelte new file mode 100644 index 0000000..788d4ee --- /dev/null +++ b/src/lib/components/ui/table/table.svelte @@ -0,0 +1,15 @@ + + +
+ + +
+
diff --git a/src/routes/connections/+page.svelte b/src/routes/connections/+page.svelte index 6084fc7..e6eff51 100644 --- a/src/routes/connections/+page.svelte +++ b/src/routes/connections/+page.svelte @@ -2,8 +2,13 @@ import type { PageData } from './$types'; import { invalidate } from '$app/navigation'; import { onMount } from 'svelte'; + import * as Table from '$lib/components/ui/table'; + import { Checkbox } from '$lib/components/ui/checkbox'; + import { Label } from '$lib/components/ui/label'; const { data }: { data: PageData } = $props(); + let showOnlyActive = $state(false); + const peerRows = $derived(data.peers.rows.filter((peer) => showOnlyActive ? peer['latest-handshake'] : true)); onMount(() => { // refresh every 5 seconds @@ -30,37 +35,45 @@ Connections - - - - - - - - - - - - - - - - {#each data.peers.rows as peer} - - - - - {#if peer['latest-handshake']} - - {:else} - - {/if} - - - - - - - {/each} - -
Public KeyEndpointAllowed IPsLatest HandshakeRXTXPersistent KeepaliveNameInterface Name
{peer['public-key'].substring(0, 10)}{peer.endpoint}{peer['allowed-ips']}{new Date(peer['latest-handshake'] * 1000)}Never{getSize(peer['transfer-rx'])}{getSize(peer['transfer-tx'])}{peer['persistent-keepalive']}{peer.name}{peer.ifname}
+ + + +{#if peerRows.length === 0} +

No active connections

+ +{:else} + + + Name + Public Key + Endpoint + Allowed IPs + Latest Handshake + RX + TX + Persistent Keepalive + Interface Name + + + {#each peerRows as peer} + + {peer.name} + {peer['public-key'].substring(0, 10)} + {peer.endpoint} + {peer['allowed-ips']} + {#if peer['latest-handshake']} + {new Date(peer['latest-handshake'] * 1000).toLocaleString()} + {getSize(peer['transfer-rx'])} + {getSize(peer['transfer-tx'])} + {:else} + Never + -- + -- + {/if} + {peer['persistent-keepalive']} + {peer.ifname} + + {/each} + + +{/if} \ No newline at end of file