mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-23 19:57:09 +00:00
- Fix Docker update button staying disabled when settings API fails (#1114) - Remove AI banner warning on every page load when AI is intentionally disabled (#1134) - Use auto-precision for formatBytes in Proxmox tab display (#1116)
This commit is contained in:
@@ -708,6 +708,8 @@ function App() {
|
|||||||
layoutStore.loadFromServer();
|
layoutStore.loadFromServer();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Failed to load theme from server', error);
|
logger.error('Failed to load theme from server', error);
|
||||||
|
// Ensure settings are marked as loaded so UI doesn't stay in loading state
|
||||||
|
markSystemSettingsLoadedWithDefaults();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We have a local preference, just mark that we've checked the server
|
// We have a local preference, just mark that we've checked the server
|
||||||
|
|||||||
@@ -194,7 +194,8 @@ export const AIChat: Component<AIChatProps> = (props) => {
|
|||||||
try {
|
try {
|
||||||
const status = await AIChatAPI.getStatus();
|
const status = await AIChatAPI.getStatus();
|
||||||
if (!status.running) {
|
if (!status.running) {
|
||||||
notificationStore.warning('AI is not running');
|
// AI not running - silently return, don't show warning on every page load
|
||||||
|
// Users who intentionally disabled AI don't need a notification about it
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const sessionList = await AIChatAPI.listSessions();
|
const sessionList = await AIChatAPI.listSessions();
|
||||||
|
|||||||
@@ -200,12 +200,12 @@ export const NodeSummaryTable: Component<NodeSummaryTableProps> = (props) => {
|
|||||||
if (isPVE(item)) {
|
if (isPVE(item)) {
|
||||||
const node = item;
|
const node = item;
|
||||||
if (!node.disk) return undefined;
|
if (!node.disk) return undefined;
|
||||||
return `${formatBytes(node.disk.used, 0)}/${formatBytes(node.disk.total, 0)}`;
|
return `${formatBytes(node.disk.used)}/${formatBytes(node.disk.total)}`;
|
||||||
}
|
}
|
||||||
const pbs = item;
|
const pbs = item;
|
||||||
if (!pbs.datastores || pbs.datastores.length === 0) return undefined;
|
if (!pbs.datastores || pbs.datastores.length === 0) return undefined;
|
||||||
const totals = getPbsTotals(pbs);
|
const totals = getPbsTotals(pbs);
|
||||||
return `${formatBytes(totals.used, 0)}/${formatBytes(totals.total, 0)}`;
|
return `${formatBytes(totals.used)}/${formatBytes(totals.total)}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getTemperatureValue = (item: TableItem) => {
|
const getTemperatureValue = (item: TableItem) => {
|
||||||
@@ -548,8 +548,8 @@ export const NodeSummaryTable: Component<NodeSummaryTableProps> = (props) => {
|
|||||||
<Show when={isPVEItem && online && node!.pendingUpdates !== undefined && node!.pendingUpdates > 0}>
|
<Show when={isPVEItem && online && node!.pendingUpdates !== undefined && node!.pendingUpdates > 0}>
|
||||||
<span
|
<span
|
||||||
class={`text-[9px] px-1 py-0 rounded font-medium whitespace-nowrap ${(node!.pendingUpdates ?? 0) >= 10
|
class={`text-[9px] px-1 py-0 rounded font-medium whitespace-nowrap ${(node!.pendingUpdates ?? 0) >= 10
|
||||||
? 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400'
|
? 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400'
|
||||||
: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400'
|
: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400'
|
||||||
}`}
|
}`}
|
||||||
title={`${node!.pendingUpdates} pending apt update${node!.pendingUpdates !== 1 ? 's' : ''}`}
|
title={`${node!.pendingUpdates} pending apt update${node!.pendingUpdates !== 1 ? 's' : ''}`}
|
||||||
>
|
>
|
||||||
@@ -609,7 +609,7 @@ export const NodeSummaryTable: Component<NodeSummaryTableProps> = (props) => {
|
|||||||
value={memoryPercentValue}
|
value={memoryPercentValue}
|
||||||
type="memory"
|
type="memory"
|
||||||
resourceId={metricsKey}
|
resourceId={metricsKey}
|
||||||
sublabel={pbs!.memoryTotal ? `${formatBytes(pbs!.memoryUsed, 0)}/${formatBytes(pbs!.memoryTotal, 0)}` : undefined}
|
sublabel={pbs!.memoryTotal ? `${formatBytes(pbs!.memoryUsed)}/${formatBytes(pbs!.memoryTotal)}` : undefined}
|
||||||
isRunning={online}
|
isRunning={online}
|
||||||
showMobile={false}
|
showMobile={false}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user