feat: update elesite integration to prioritize non-empty formation units and improve sorting logic

This commit is contained in:
harukin-expo-dev-env
2026-03-08 08:52:58 +00:00
parent 66650764df
commit cc15e6a1ee
6 changed files with 334 additions and 758 deletions

View File

@@ -372,15 +372,27 @@ export const injectJavascriptData = ({
return null;
}
const results = [];
for (const entry of elesiteData) {
// 高松(left_station)側のユニットを先に表示
// (heading_to === "left") === is_leading が true → 高松(left)端のユニット
const sortedElesiteData = elesiteData.slice().sort((a, b) => {
const aT = a.trains && a.trains.find(t => t.train_number === trainNumber);
const bT = b.trains && b.trains.find(t => t.train_number === trainNumber);
const aNav = aT && aT.nav;
const bNav = bT && bT.nav;
const aIsLeft = (aNav && aNav.heading_to === 'left') === (aNav && aNav.is_leading === true);
const bIsLeft = (bNav && bNav.heading_to === 'left') === (bNav && bNav.is_leading === true);
if (aIsLeft === bIsLeft) return 0;
return aIsLeft ? -1 : 1;
});
for (const entry of sortedElesiteData) {
if (!entry.trains) continue;
const found = entry.trains.find(train => train.train_number === trainNumber);
if (!found) continue;
// formation_config.units 優先、なければ formations
// units が1件以上ある場合のみ編成名を返す空 units は報告なし扱い)
const units = entry.formation_config && entry.formation_config.units;
const formText = (units && units.length)
? units.map(u => u.formation).join('+')
: (entry.formations && entry.formations.trim() !== '' ? entry.formations : null);
: null;
if (formText) results.push(formText);
}
return results.length > 0 ? results.join(', ') : null;