Filter campaign history roster references
This commit is contained in:
@@ -864,6 +864,13 @@ function normalizeCampaignState(state: Partial<CampaignState>): CampaignState {
|
||||
normalized.sortieItemAssignments = normalizeCampaignSortieItemAssignments(recordOrEmpty(normalized.sortieItemAssignments), sortieUnitFilter);
|
||||
normalized.reserveTrainingFocus = normalizeReserveTrainingFocusId(normalized.reserveTrainingFocus);
|
||||
normalized.battleHistory = normalizeBattleHistory(normalized.battleHistory);
|
||||
if (sortieUnitFilter) {
|
||||
normalized.battleHistory = filterBattleHistoryRosterReferences(
|
||||
normalized.battleHistory,
|
||||
sortieUnitFilter,
|
||||
new Set(normalized.bonds.map((bond) => bond.id))
|
||||
);
|
||||
}
|
||||
normalized.latestBattleId = normalizeLatestBattleId(normalized.latestBattleId, normalized.battleHistory);
|
||||
normalized.firstBattleReport = normalizeFirstBattleReport(normalized.firstBattleReport);
|
||||
if (normalized.firstBattleReport && sortieUnitFilter) {
|
||||
@@ -993,6 +1000,7 @@ function normalizeLatestBattleId(value: unknown, battleHistory: Record<string, C
|
||||
function filterFirstBattleReportRosterReferences(report: FirstBattleReport, rosterUnitIds: Set<string>): FirstBattleReport {
|
||||
const filtered = {
|
||||
...report,
|
||||
units: report.units.filter((unit) => unit.faction !== 'ally' || rosterUnitIds.has(unit.id)),
|
||||
bonds: report.bonds.filter((bond) => bond.unitIds.every((unitId) => rosterUnitIds.has(unitId)))
|
||||
};
|
||||
if (filtered.mvp && !rosterUnitIds.has(filtered.mvp.unitId)) {
|
||||
@@ -1001,6 +1009,22 @@ function filterFirstBattleReportRosterReferences(report: FirstBattleReport, rost
|
||||
return filtered;
|
||||
}
|
||||
|
||||
function filterBattleHistoryRosterReferences(
|
||||
history: Record<string, CampaignBattleSettlement>,
|
||||
rosterUnitIds: Set<string>,
|
||||
bondIds: Set<string>
|
||||
): Record<string, CampaignBattleSettlement> {
|
||||
return Object.entries(history).reduce<Record<string, CampaignBattleSettlement>>((filteredHistory, [battleId, settlement]) => {
|
||||
filteredHistory[battleId] = {
|
||||
...settlement,
|
||||
units: settlement.units.filter((unit) => rosterUnitIds.has(unit.unitId)),
|
||||
bonds: bondIds.size > 0 ? settlement.bonds.filter((bond) => bondIds.has(bond.id)) : settlement.bonds,
|
||||
reserveTraining: settlement.reserveTraining?.filter((entry) => rosterUnitIds.has(entry.unitId))
|
||||
};
|
||||
return filteredHistory;
|
||||
}, {});
|
||||
}
|
||||
|
||||
function normalizeCampaignBattleSettlement(value: unknown): CampaignBattleSettlement | undefined {
|
||||
if (!isPlainObject(value)) {
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user