Merge branch 'fix/itinerary-reactivity-optimize' into main
This commit is contained in:
@@ -993,8 +993,8 @@
|
|||||||
loadDayTemperatures(days, fetchVersion);
|
loadDayTemperatures(days, fetchVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatDayTemperature(day: DayGroup): string {
|
function formatDayTemperature(day: DayGroup, temps: Record<string, DayTemperature>): string {
|
||||||
const temperature = dayTemperatures[day.date];
|
const temperature = temps[day.date];
|
||||||
if (!temperature?.available || temperature.temperature_c === null) {
|
if (!temperature?.available || temperature.temperature_c === null) {
|
||||||
return getI18nText('itinerary.temperature_unavailable', 'Temperature unavailable');
|
return getI18nText('itinerary.temperature_unavailable', 'Temperature unavailable');
|
||||||
}
|
}
|
||||||
@@ -1099,6 +1099,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function optimizeDayOrder(dayIndex: number) {
|
function optimizeDayOrder(dayIndex: number) {
|
||||||
|
console.info('[optimize] optimizeDayOrder called for day', dayIndex);
|
||||||
if (!canModify || isSavingOrder) return;
|
if (!canModify || isSavingOrder) return;
|
||||||
|
|
||||||
const day = days[dayIndex];
|
const day = days[dayIndex];
|
||||||
@@ -1135,7 +1136,21 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (movableCoordinateItems.length < 2) {
|
if (movableCoordinateItems.length < 2) {
|
||||||
addToast('info', getI18nText('itinerary.optimize_not_enough_items', 'Not enough stops to optimize'));
|
console.warn('[optimize] Not enough movable coordinate items:', {
|
||||||
|
totalDayItems: nonShadowItems.length,
|
||||||
|
anchorCount: anchorEntries.length,
|
||||||
|
movableWithCoords: movableCoordinateItems.length,
|
||||||
|
movableWithoutCoords: nonShadowItems.filter(
|
||||||
|
(item, i) => !anchorIndexSet.has(i) && !getCoordinatesFromItineraryItem(item)
|
||||||
|
).length
|
||||||
|
});
|
||||||
|
addToast(
|
||||||
|
'warning',
|
||||||
|
getI18nText(
|
||||||
|
'itinerary.optimize_not_enough_items',
|
||||||
|
'Not enough items with location data to optimize'
|
||||||
|
)
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1273,11 +1288,12 @@
|
|||||||
|
|
||||||
function getLocationConnector(
|
function getLocationConnector(
|
||||||
currentItem: ResolvedItineraryItem,
|
currentItem: ResolvedItineraryItem,
|
||||||
nextItem: ResolvedItineraryItem | null
|
nextItem: ResolvedItineraryItem | null,
|
||||||
|
metricsMap: Record<string, LocationConnector>
|
||||||
): LocationConnector | null {
|
): LocationConnector | null {
|
||||||
const key = getLocationConnectorKey(currentItem, nextItem);
|
const key = getLocationConnectorKey(currentItem, nextItem);
|
||||||
if (key && connectorMetricsMap[key]) {
|
if (key && metricsMap[key]) {
|
||||||
return connectorMetricsMap[key];
|
return metricsMap[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
return getFallbackLocationConnector(currentItem, nextItem);
|
return getFallbackLocationConnector(currentItem, nextItem);
|
||||||
@@ -2808,7 +2824,7 @@
|
|||||||
preTimelineLodging.id === postTimelineLodging.id}
|
preTimelineLodging.id === postTimelineLodging.id}
|
||||||
{@const startBoundaryConnector =
|
{@const startBoundaryConnector =
|
||||||
preTimelineLodging && firstConnectableItem
|
preTimelineLodging && firstConnectableItem
|
||||||
? getLocationConnector(preTimelineLodging, firstConnectableItem)
|
? getLocationConnector(preTimelineLodging, firstConnectableItem, connectorMetricsMap)
|
||||||
: null}
|
: null}
|
||||||
{@const startBoundaryDirectionsUrl =
|
{@const startBoundaryDirectionsUrl =
|
||||||
preTimelineLodging && firstConnectableItem
|
preTimelineLodging && firstConnectableItem
|
||||||
@@ -2820,7 +2836,7 @@
|
|||||||
: null}
|
: null}
|
||||||
{@const endBoundaryConnector =
|
{@const endBoundaryConnector =
|
||||||
postTimelineLodging && lastConnectableItem
|
postTimelineLodging && lastConnectableItem
|
||||||
? getLocationConnector(lastConnectableItem, postTimelineLodging)
|
? getLocationConnector(lastConnectableItem, postTimelineLodging, connectorMetricsMap)
|
||||||
: null}
|
: null}
|
||||||
{@const endBoundaryDirectionsUrl =
|
{@const endBoundaryDirectionsUrl =
|
||||||
postTimelineLodging && lastConnectableItem
|
postTimelineLodging && lastConnectableItem
|
||||||
@@ -2842,7 +2858,7 @@
|
|||||||
<div class="text-xs opacity-70">{weekday}</div>
|
<div class="text-xs opacity-70">{weekday}</div>
|
||||||
<div class="text-2xl font-bold -mt-1">{dayOfMonth}</div>
|
<div class="text-2xl font-bold -mt-1">{dayOfMonth}</div>
|
||||||
<div class="text-xs opacity-70">{monthAbbrev}</div>
|
<div class="text-xs opacity-70">{monthAbbrev}</div>
|
||||||
<div class="text-[10px] opacity-80 mt-1">{formatDayTemperature(day)}</div>
|
<div class="text-[10px] opacity-80 mt-1">{formatDayTemperature(day, dayTemperatures)}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -3075,7 +3091,7 @@
|
|||||||
{@const resolvedObj = item.resolvedObject}
|
{@const resolvedObj = item.resolvedObject}
|
||||||
{@const multiDay = isMultiDay(item)}
|
{@const multiDay = isMultiDay(item)}
|
||||||
{@const nextConnectableItem = findNextConnectableItem(dayTimelineItems, index)}
|
{@const nextConnectableItem = findNextConnectableItem(dayTimelineItems, index)}
|
||||||
{@const locationConnector = getLocationConnector(item, nextConnectableItem)}
|
{@const locationConnector = getLocationConnector(item, nextConnectableItem, connectorMetricsMap)}
|
||||||
{@const directionsUrl = buildDirectionsUrl(
|
{@const directionsUrl = buildDirectionsUrl(
|
||||||
item,
|
item,
|
||||||
nextConnectableItem,
|
nextConnectableItem,
|
||||||
|
|||||||
Reference in New Issue
Block a user