* Fix bad data in stats

* Add support for changes dialog when leaving without saving config editor

* Fix scrolling into view
This commit is contained in:
Nicolas Mowen 2024-08-21 08:19:07 -06:00 committed by GitHub
parent d96f76c27f
commit 1c7ee5f4e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 48 additions and 6 deletions

View File

@ -124,12 +124,49 @@ function ConfigEditor() {
}; };
}); });
// monitoring state
const [hasChanges, setHasChanges] = useState(false);
useEffect(() => {
if (!config || !modelRef.current) {
return;
}
modelRef.current.onDidChangeContent(() => {
if (modelRef.current?.getValue() != config) {
setHasChanges(true);
} else {
setHasChanges(false);
}
});
}, [config]);
useEffect(() => { useEffect(() => {
if (config && modelRef.current) { if (config && modelRef.current) {
modelRef.current.setValue(config); modelRef.current.setValue(config);
setHasChanges(false);
} }
}, [config]); }, [config]);
useEffect(() => {
let listener: ((e: BeforeUnloadEvent) => void) | undefined;
if (hasChanges) {
listener = (e) => {
e.preventDefault();
e.returnValue = true;
return "Exit without saving?";
};
window.addEventListener("beforeunload", listener);
}
return () => {
if (listener) {
window.removeEventListener("beforeunload", listener);
}
};
}, [hasChanges]);
if (!config) { if (!config) {
return <ActivityIndicator />; return <ActivityIndicator />;
} }

View File

@ -286,6 +286,7 @@ function Logs() {
key={item} key={item}
className={`flex items-center justify-between gap-2 ${logService == item ? "" : "text-muted-foreground"}`} className={`flex items-center justify-between gap-2 ${logService == item ? "" : "text-muted-foreground"}`}
value={item} value={item}
data-nav-item={item}
aria-label={`Select ${item}`} aria-label={`Select ${item}`}
> >
<div className="capitalize">{item}</div> <div className="capitalize">{item}</div>

View File

@ -163,7 +163,7 @@ export default function GeneralMetrics({
series[key] = { name: key, data: [] }; series[key] = { name: key, data: [] };
} }
const data = stats.cpu_usages[detStats.pid.toString()].cpu; const data = stats.cpu_usages[detStats.pid.toString()]?.cpu;
if (data != undefined) { if (data != undefined) {
series[key].data.push({ series[key].data.push({
@ -304,7 +304,7 @@ export default function GeneralMetrics({
series[key] = { name: key, data: [] }; series[key] = { name: key, data: [] };
} }
const data = stats.cpu_usages[procStats.pid.toString()].cpu; const data = stats.cpu_usages[procStats.pid.toString()]?.cpu;
if (data != undefined) { if (data != undefined) {
series[key].data.push({ series[key].data.push({
@ -338,10 +338,14 @@ export default function GeneralMetrics({
series[key] = { name: key, data: [] }; series[key] = { name: key, data: [] };
} }
series[key].data.push({ const data = stats.cpu_usages[procStats.pid.toString()]?.mem;
x: statsIdx + 1,
y: stats.cpu_usages[procStats.pid.toString()].mem, if (data) {
}); series[key].data.push({
x: statsIdx + 1,
y: data,
});
}
} }
}); });
}); });