useSessions
Инкрементальная подгрузка: хранит loadedFromTs / loadedToTs, запрашивает только дельту.
- Первый запрос или полная смена диапазона (candles не пересекаются с загруженным): один запрос
[candleFrom, candleTo], бек при span > 50 дней обрезает. - Prepend (candleFrom < loadedFromTs): запрос
[candleFrom, loadedFromTs − 1], мерж с текущими блоками, обновление loadedFromTs. - Append (candleTo > loadedToTs): запрос
[loadedToTs + 1, candleTo], мерж, обновление loadedToTs.
Блоки мержатся по (start, name), сортировка по start. useSessionBoxes по-прежнему считает боксы по candles + blocks (только пересечения), без полного перезапроса списка с сервера.
50 дней: лимит на беке на один запрос; при дельте > 50 дней бек возвращает последние 50. Следующий prepend доберёт остальное. При изменении candles предыдущий запрос отменяется (AbortController).