Streams polish

This commit is contained in:
Jamie Curnow
2025-09-25 00:14:00 +10:00
parent f2b9a66459
commit 188193a22d
5 changed files with 62 additions and 14 deletions

View File

@@ -348,7 +348,7 @@ const internalStream = {
// Add to audit log // Add to audit log
return internalAuditLog.add(access, { return internalAuditLog.add(access, {
action: "disabled", action: "disabled",
object_type: "stream-host", object_type: "stream",
object_id: row.id, object_id: row.id,
meta: _.omit(row, omissions()), meta: _.omit(row, omissions()),
}); });

View File

@@ -1,4 +1,4 @@
import { IconBoltOff, IconUser } from "@tabler/icons-react"; import { IconBoltOff, IconDisc, IconUser } from "@tabler/icons-react";
import type { AuditLog } from "src/api/backend"; import type { AuditLog } from "src/api/backend";
import { DateTimeFormat, intl } from "src/locale"; import { DateTimeFormat, intl } from "src/locale";
@@ -12,6 +12,8 @@ const getEventValue = (event: AuditLog) => {
return event.meta?.name; return event.meta?.name;
case "dead-host": case "dead-host":
return event.meta?.domainNames?.join(", ") || "N/A"; return event.meta?.domainNames?.join(", ") || "N/A";
case "stream":
return event.meta?.incomingPort || "N/A";
default: default:
return `UNKNOWN EVENT TYPE: ${event.objectType}`; return `UNKNOWN EVENT TYPE: ${event.objectType}`;
} }
@@ -38,6 +40,9 @@ const getIcon = (row: AuditLog) => {
case "dead-host": case "dead-host":
ico = <IconBoltOff size={16} className={c} />; ico = <IconBoltOff size={16} className={c} />;
break; break;
case "stream":
ico = <IconDisc size={16} className={c} />;
break;
} }
return ico; return ico;

View File

@@ -72,11 +72,15 @@
"error.passwords-must-match": "Passwords must match", "error.passwords-must-match": "Passwords must match",
"error.required": "This is required", "error.required": "This is required",
"event.created-dead-host": "Created 404 Host", "event.created-dead-host": "Created 404 Host",
"event.created-stream": "Created Stream",
"event.created-user": "Created User", "event.created-user": "Created User",
"event.deleted-dead-host": "Deleted 404 Host", "event.deleted-dead-host": "Deleted 404 Host",
"event.deleted-stream": "Deleted Stream",
"event.deleted-user": "Deleted User", "event.deleted-user": "Deleted User",
"event.disabled-dead-host": "Disabled 404 Host", "event.disabled-dead-host": "Disabled 404 Host",
"event.disabled-stream": "Disabled Stream",
"event.enabled-dead-host": "Enabled 404 Host", "event.enabled-dead-host": "Enabled 404 Host",
"event.enabled-stream": "Enabled Stream",
"event.updated-user": "Updated User", "event.updated-user": "Updated User",
"footer.github-fork": "Fork me on Github", "footer.github-fork": "Fork me on Github",
"hosts.title": "Hosts", "hosts.title": "Hosts",
@@ -95,6 +99,9 @@
"notification.host-deleted": "Host has been deleted", "notification.host-deleted": "Host has been deleted",
"notification.host-disabled": "Host has been disabled", "notification.host-disabled": "Host has been disabled",
"notification.host-enabled": "Host has been enabled", "notification.host-enabled": "Host has been enabled",
"notification.stream-deleted": "Stream has been deleted",
"notification.stream-disabled": "Stream has been disabled",
"notification.stream-enabled": "Stream has been enabled",
"notification.success": "Success", "notification.success": "Success",
"notification.user-deleted": "User has been deleted", "notification.user-deleted": "User has been deleted",
"notification.user-disabled": "User has been disabled", "notification.user-disabled": "User has been disabled",
@@ -130,6 +137,8 @@
"setup.title": "Welcome!", "setup.title": "Welcome!",
"sign-in": "Sign in", "sign-in": "Sign in",
"ssl-certificate": "SSL Certificate", "ssl-certificate": "SSL Certificate",
"stream.delete.content": "Are you sure you want to delete this Stream?",
"stream.delete.title": "Delete Stream",
"stream.forward-host": "Forward Host", "stream.forward-host": "Forward Host",
"stream.forward-port": "Forward Port", "stream.forward-port": "Forward Port",
"stream.incoming-port": "Incoming Port", "stream.incoming-port": "Incoming Port",

View File

@@ -215,21 +215,33 @@
"event.created-dead-host": { "event.created-dead-host": {
"defaultMessage": "Created 404 Host" "defaultMessage": "Created 404 Host"
}, },
"event.created-stream": {
"defaultMessage": "Created Stream"
},
"event.created-user": { "event.created-user": {
"defaultMessage": "Created User" "defaultMessage": "Created User"
}, },
"event.deleted-dead-host": { "event.deleted-dead-host": {
"defaultMessage": "Deleted 404 Host" "defaultMessage": "Deleted 404 Host"
}, },
"event.deleted-stream": {
"defaultMessage": "Deleted Stream"
},
"event.deleted-user": { "event.deleted-user": {
"defaultMessage": "Deleted User" "defaultMessage": "Deleted User"
}, },
"event.disabled-dead-host": { "event.disabled-dead-host": {
"defaultMessage": "Disabled 404 Host" "defaultMessage": "Disabled 404 Host"
}, },
"event.disabled-stream": {
"defaultMessage": "Disabled Stream"
},
"event.enabled-dead-host": { "event.enabled-dead-host": {
"defaultMessage": "Enabled 404 Host" "defaultMessage": "Enabled 404 Host"
}, },
"event.enabled-stream": {
"defaultMessage": "Enabled Stream"
},
"event.updated-user": { "event.updated-user": {
"defaultMessage": "Updated User" "defaultMessage": "Updated User"
}, },
@@ -281,15 +293,24 @@
"notification.host-deleted": { "notification.host-deleted": {
"defaultMessage": "Host has been deleted" "defaultMessage": "Host has been deleted"
}, },
"notification.user-deleted": {
"defaultMessage": "User has been deleted"
},
"notification.host-disabled": { "notification.host-disabled": {
"defaultMessage": "Host has been disabled" "defaultMessage": "Host has been disabled"
}, },
"notification.host-enabled": { "notification.host-enabled": {
"defaultMessage": "Host has been enabled" "defaultMessage": "Host has been enabled"
}, },
"notification.stream-deleted": {
"defaultMessage": "Stream has been deleted"
},
"notification.stream-disabled": {
"defaultMessage": "Stream has been disabled"
},
"notification.stream-enabled": {
"defaultMessage": "Stream has been enabled"
},
"notification.user-deleted": {
"defaultMessage": "User has been deleted"
},
"notification.user-disabled": { "notification.user-disabled": {
"defaultMessage": "User has been disabled" "defaultMessage": "User has been disabled"
}, },
@@ -392,6 +413,12 @@
"ssl-certificate": { "ssl-certificate": {
"defaultMessage": "SSL Certificate" "defaultMessage": "SSL Certificate"
}, },
"stream.delete.content": {
"defaultMessage": "Are you sure you want to delete this Stream?"
},
"stream.delete.title": {
"defaultMessage": "Delete Stream"
},
"stream.forward-host": { "stream.forward-host": {
"defaultMessage": "Forward Host" "defaultMessage": "Forward Host"
}, },

View File

@@ -2,6 +2,7 @@ import { IconSearch } from "@tabler/icons-react";
import { useQueryClient } from "@tanstack/react-query"; import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react"; import { useState } from "react";
import Alert from "react-bootstrap/Alert"; import Alert from "react-bootstrap/Alert";
import { deleteStream, toggleStream } from "src/api/backend";
import { Button, LoadingPage } from "src/components"; import { Button, LoadingPage } from "src/components";
import { useStreams } from "src/hooks"; import { useStreams } from "src/hooks";
import { intl } from "src/locale"; import { intl } from "src/locale";
@@ -25,22 +26,27 @@ export default function TableWrapper() {
} }
const handleDelete = async () => { const handleDelete = async () => {
// await deleteDeadHost(deleteId); await deleteStream(deleteId);
showSuccess(intl.formatMessage({ id: "notification.host-deleted" })); showSuccess(intl.formatMessage({ id: "notification.stream-deleted" }));
}; };
const handleDisableToggle = async (id: number, enabled: boolean) => { const handleDisableToggle = async (id: number, enabled: boolean) => {
// await toggleDeadHost(id, enabled); await toggleStream(id, enabled);
queryClient.invalidateQueries({ queryKey: ["dead-hosts"] }); queryClient.invalidateQueries({ queryKey: ["streams"] });
queryClient.invalidateQueries({ queryKey: ["dead-host", id] }); queryClient.invalidateQueries({ queryKey: ["stream", id] });
showSuccess(intl.formatMessage({ id: enabled ? "notification.host-enabled" : "notification.host-disabled" })); showSuccess(
intl.formatMessage({ id: enabled ? "notification.stream-enabled" : "notification.stream-disabled" }),
);
}; };
let filtered = null; let filtered = null;
if (search && data) { if (search && data) {
filtered = data?.filter((_item) => { filtered = data?.filter((item) => {
return true; return (
// return item.domainNames.some((domain: string) => domain.toLowerCase().includes(search)); `${item.incomingPort}`.includes(search) ||
`${item.forwardingPort}`.includes(search) ||
item.forwardingHost.includes(search)
);
}); });
} else if (search !== "") { } else if (search !== "") {
// this can happen if someone deletes the last item while searching // this can happen if someone deletes the last item while searching
@@ -82,6 +88,7 @@ export default function TableWrapper() {
<Table <Table
data={filtered ?? data ?? []} data={filtered ?? data ?? []}
isFetching={isFetching} isFetching={isFetching}
isFiltered={!!filtered}
onEdit={(id: number) => setEditId(id)} onEdit={(id: number) => setEditId(id)}
onDelete={(id: number) => setDeleteId(id)} onDelete={(id: number) => setDeleteId(id)}
onDisableToggle={handleDisableToggle} onDisableToggle={handleDisableToggle}