Fix TypeScript build errors and configure Traefik deployment
Some checks failed
Master CI / yarn_install_and_build (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled

Fix type mismatches across Unraid UI pages (SystemInfo, ServerVars,
Notification properties), replace unavailable Mantine components
(ScrollArea.Autosize, IconHardDrive), correct Orchis theme types,
add missing tRPC endpoints (users, syslog, notification actions),
and configure docker-compose for Traefik reverse proxy on dockerproxy
network with unmarr.xtrm-lab.org routing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kaloyan Danchev
2026-02-06 23:55:31 +02:00
parent 783a12b444
commit 1f92f0593f
15 changed files with 164 additions and 66 deletions

View File

@@ -31,7 +31,7 @@ import {
import { notifications } from '@mantine/notifications';
import {
IconDatabase,
IconHardDrive,
IconDisc,
IconTemperature,
IconPlayerPlay,
IconPlayerStop,
@@ -93,7 +93,7 @@ function DiskDetailsRow({ disk }: { disk: ArrayDisk }) {
variant="light"
color={disk.spunDown ? 'gray' : getStatusColor(disk.status)}
>
<IconHardDrive size={14} />
<IconDisc size={14} />
</ThemeIcon>
<div>
<Text size="sm" weight={500}>
@@ -530,7 +530,7 @@ export default function ArrayPage() {
<Tabs.Tab value="parity" icon={<IconShield size={14} />}>
Parity ({array.parities.length})
</Tabs.Tab>
<Tabs.Tab value="data" icon={<IconHardDrive size={14} />}>
<Tabs.Tab value="data" icon={<IconDisc size={14} />}>
Data Disks ({array.disks.length})
</Tabs.Tab>
<Tabs.Tab value="cache" icon={<IconCpu size={14} />}>
@@ -647,7 +647,7 @@ export default function ArrayPage() {
<tr key={device.id}>
<td>
<Group spacing="xs">
<IconHardDrive size={14} />
<IconDisc size={14} />
<Text size="sm">{device.name}</Text>
</Group>
</td>

View File

@@ -59,8 +59,8 @@ export default function IdentificationSettingsPage() {
if (vars && !form.isTouched()) {
form.setValues({
name: vars.name || '',
description: vars.comment || '',
model: vars.flashProduct || '',
description: vars.description || '',
model: vars.model || '',
timezone: vars.timezone || '',
});
}
@@ -155,7 +155,7 @@ export default function IdentificationSettingsPage() {
Linux Kernel
</Text>
<Text size="sm" weight={500}>
{info?.versions.linux || 'Unknown'}
{info?.os.kernel || 'Unknown'}
</Text>
</Group>
@@ -166,7 +166,7 @@ export default function IdentificationSettingsPage() {
CPU
</Text>
<Text size="sm" weight={500}>
{info?.cpu.model || 'Unknown'}
{info?.cpu.brand || 'Unknown'}
</Text>
</Group>
@@ -177,7 +177,7 @@ export default function IdentificationSettingsPage() {
Motherboard
</Text>
<Text size="sm" weight={500}>
{info?.motherboard?.product || 'Unknown'}
{info?.baseboard?.model || 'Unknown'}
</Text>
</Group>
@@ -207,19 +207,19 @@ export default function IdentificationSettingsPage() {
</Stack>
</Card>
{/* Flash Drive */}
{/* Server Model */}
<Card shadow="sm" radius="md" withBorder>
<Title order={4} mb="md">
Flash Drive
Hardware
</Title>
<Stack spacing="md">
<Group position="apart">
<Text size="sm" color="dimmed">
Product
Model
</Text>
<Text size="sm" weight={500}>
{vars?.flashProduct || 'Unknown'}
{vars?.model || 'Unknown'}
</Text>
</Group>
@@ -227,10 +227,10 @@ export default function IdentificationSettingsPage() {
<Group position="apart">
<Text size="sm" color="dimmed">
Vendor
Protocol
</Text>
<Text size="sm" weight={500}>
{vars?.flashVendor || 'Unknown'}
{vars?.protocol || 'Unknown'}
</Text>
</Group>
@@ -238,10 +238,10 @@ export default function IdentificationSettingsPage() {
<Group position="apart">
<Text size="sm" color="dimmed">
GUID
Port
</Text>
<Text size="sm" weight={500} style={{ fontFamily: 'monospace' }}>
{vars?.flashGuid || 'Unknown'}
{vars?.port || 'Unknown'}
</Text>
</Group>
</Stack>

View File

@@ -74,8 +74,8 @@ function getImportanceIcon(importance: NotificationImportance) {
}
}
function formatDate(timestamp: number): string {
return new Date(timestamp * 1000).toLocaleDateString('en-US', {
function formatDate(timestamp: string): string {
return new Date(timestamp).toLocaleDateString('en-US', {
year: 'numeric',
month: 'short',
day: 'numeric',

View File

@@ -289,7 +289,7 @@ export default function DiagnosticsPage() {
<Divider />
<Group position="apart">
<Text color="dimmed">Linux Kernel</Text>
<Text weight={500}>{info?.versions.linux || 'Unknown'}</Text>
<Text weight={500}>{info?.os.kernel || 'Unknown'}</Text>
</Group>
<Divider />
<Group position="apart">
@@ -309,7 +309,7 @@ export default function DiagnosticsPage() {
<Divider />
<Group position="apart">
<Text color="dimmed">CPU</Text>
<Text weight={500}>{info?.cpu.model || 'Unknown'}</Text>
<Text weight={500}>{info?.cpu.brand || 'Unknown'}</Text>
</Group>
<Divider />
<Group position="apart">

View File

@@ -108,7 +108,7 @@ export default function SyslogPage() {
error,
refetch,
} = api.unraid.syslog.useQuery(
{ lines: 500 },
undefined,
{
refetchInterval: autoScroll ? 5000 : false,
}
@@ -116,7 +116,7 @@ export default function SyslogPage() {
useEffect(() => {
if (syslog) {
setLines(syslog.lines || []);
setLines(syslog || []);
}
}, [syslog]);