fix: add optional chaining and optimize performance in overview dialogs

Co-authored-by: Azgaar <26469650+Azgaar@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-01-22 12:01:57 +00:00
parent d84de7ac7a
commit a41f6661a0
2 changed files with 7 additions and 4 deletions

View file

@ -75,10 +75,10 @@ function overviewBurgs(settings = {stateId: null, cultureId: null}) {
// filter by search text // filter by search text
filtered = filtered.filter(b => { filtered = filtered.filter(b => {
const name = b.name.toLowerCase(); const name = b.name.toLowerCase();
const state = (pack.states[b.state].name || "").toLowerCase(); const state = (pack.states[b.state]?.name || "").toLowerCase();
const prov = pack.cells.province[b.cell]; const prov = pack.cells.province[b.cell];
const province = prov ? pack.provinces[prov]?.name.toLowerCase() : ""; const province = prov ? pack.provinces[prov]?.name.toLowerCase() : "";
const culture = (pack.cultures[b.culture].name || "").toLowerCase(); const culture = (pack.cultures[b.culture]?.name || "").toLowerCase();
return ( return (
name.includes(searchText) || name.includes(searchText) ||
state.includes(searchText) || state.includes(searchText) ||

View file

@ -34,13 +34,16 @@ function overviewRivers() {
let lines = ""; let lines = "";
const unit = distanceUnitInput.value; const unit = distanceUnitInput.value;
// Precompute a lookup map from river id to river for efficient basin lookup
const riversById = new Map(pack.rivers.map(river => [river.i, river]));
let filteredRivers = pack.rivers; let filteredRivers = pack.rivers;
const searchText = byId("riversSearch").value.toLowerCase().trim(); const searchText = byId("riversSearch").value.toLowerCase().trim();
if (searchText) { if (searchText) {
filteredRivers = filteredRivers.filter(r => { filteredRivers = filteredRivers.filter(r => {
const name = (r.name || "").toLowerCase(); const name = (r.name || "").toLowerCase();
const type = (r.type || "").toLowerCase(); const type = (r.type || "").toLowerCase();
const basin = pack.rivers.find(river => river.i === r.basin); const basin = riversById.get(r.basin);
const basinName = basin ? (basin.name || "").toLowerCase() : ""; const basinName = basin ? (basin.name || "").toLowerCase() : "";
return name.includes(searchText) || type.includes(searchText) || basinName.includes(searchText); return name.includes(searchText) || type.includes(searchText) || basinName.includes(searchText);
}); });
@ -50,7 +53,7 @@ function overviewRivers() {
const discharge = r.discharge + " m³/s"; const discharge = r.discharge + " m³/s";
const length = rn(r.length * distanceScale) + " " + unit; const length = rn(r.length * distanceScale) + " " + unit;
const width = rn(r.width * distanceScale, 3) + " " + unit; const width = rn(r.width * distanceScale, 3) + " " + unit;
const basin = pack.rivers.find(river => river.i === r.basin)?.name; const basin = riversById.get(r.basin)?.name;
lines += /* html */ `<div lines += /* html */ `<div
class="states" class="states"