import { useEffect, useState } from "react"; import { Button, SettingsCard, TextField } from "@nodedc/ui-react"; import { request, type Status } from "./api"; import type { ViewId } from "./nodeModel"; import { BoardSummary } from "./BoardSummary"; const memory = (value: number | null) => value === null ? "Недоступно" : `${(value / 1048576).toFixed(1)} ГиБ`; export function NodeOverview({ value, refresh, failure, openView }: { value: Status; refresh: () => Promise; failure: (error: unknown) => void; openView: (id: ViewId) => void }) { const [name, setName] = useState(value.name); const [saving, setSaving] = useState(false); useEffect(() => setName(value.name), [value.name]); async function save(event: React.FormEvent) { event.preventDefault(); if (saving) return; setSaving(true); try { await request("/api/name", "PUT", { name }); await refresh(); } catch (error) { failure(error); } finally { setSaving(false); } } return
Операционная система
{value.host.os}
Архитектура
{value.host.architecture}
Логических процессоров
{value.host.cpus}
Оперативная память
{memory(value.host.memory_kib)}
Доступно памяти
{memory(value.host.available_kib)}
Mission Core Node
{value.version}
setName(event.target.value)} autoComplete="off" />
ID БК
{value.node_id}

Сведения обновлены {new Date(value.host.collected_at).toLocaleString("ru-RU")}.

; }