poe-svelte-ui-lib 1.37.1 → 1.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,9 +51,8 @@
51
51
  }
52
52
 
53
53
  let devices: MapDevice[] = $state([])
54
- /* Экземпляр MapLibre — для перелёта к первому устройству с фиксом (стартовый вид — весь мир) */
54
+ /* Экземпляр MapLibre — для кнопки «Все борта»; сам вид карта не меняет, бортов может быть много */
55
55
  let mapInstance: any = $state()
56
- let isCentered = false
57
56
  let isCopied = $state(false)
58
57
  let isDarkMode = $state(false)
59
58
  let markerTimeout = $state(30_000)
@@ -88,10 +87,6 @@
88
87
  if (data) {
89
88
  /* (0, 0) — признак отсутствия реального GPS-фикса, в траекторию такие точки не добавляем */
90
89
  const hasFix = Number.isFinite(data.NavLat) && Number.isFinite(data.NavLon) && (data.NavLat !== 0 || data.NavLon !== 0)
91
- if (hasFix && !isCentered && mapInstance) {
92
- mapInstance.flyTo({ center: [data.NavLon, data.NavLat], zoom: 16 })
93
- isCentered = true
94
- }
95
90
  const idx = devices.findIndex((d) => d.DevSN === data?.DevSN)
96
91
  if (idx !== -1) {
97
92
  /* Обновление существующего; точку трека добавляем только при смене координат — курс и высота приходят чаще позиции */
@@ -162,6 +157,23 @@
162
157
  { label: "1 h", value: 3_600_000 },
163
158
  ]
164
159
 
160
+ /* Вписывает в экран все борта с фиксом, один борт — приближение к нему */
161
+ const hasFixPoint = (d: MapDevice) => Number.isFinite(d.NavLat) && Number.isFinite(d.NavLon) && (d.NavLat !== 0 || d.NavLon !== 0)
162
+ const fitAllDevices = () => {
163
+ const fixed = devices.filter(hasFixPoint)
164
+ if (!mapInstance || fixed.length === 0) return
165
+ if (fixed.length === 1) return mapInstance.flyTo({ center: [fixed[0].NavLon, fixed[0].NavLat], zoom: 16 })
166
+ const lons = fixed.map((d) => d.NavLon)
167
+ const lats = fixed.map((d) => d.NavLat)
168
+ mapInstance.fitBounds(
169
+ [
170
+ [Math.min(...lons), Math.min(...lats)],
171
+ [Math.max(...lons), Math.max(...lats)],
172
+ ],
173
+ { padding: 60, maxZoom: 16 },
174
+ )
175
+ }
176
+
165
177
  const changeTimeout = (val: number) => {
166
178
  markerTimeout = val
167
179
  devices.forEach((device) => restartFreshTimer(device.DevSN))
@@ -215,6 +227,14 @@
215
227
  {/each}
216
228
  </select>
217
229
  </div>
230
+
231
+ <button
232
+ class="cursor-pointer rounded px-2 py-1 text-sm font-medium whitespace-nowrap disabled:cursor-default disabled:opacity-50"
233
+ disabled={!devices.some(hasFixPoint)}
234
+ onclick={fitAllDevices}
235
+ >
236
+ {$T("constructor.props.map.fitAll")}
237
+ </button>
218
238
  </div>
219
239
  </CustomControl>
220
240
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  В конструкторе `id` карты — префикс группы полей, как у смарт-виджетов: `"MAV"` (или любое поле группы, например `"MAV.Lat"`) — GUIPreview собирает `data` из `MAV.Lat`, `MAV.Lon`, `MAV.Alt`, `MAV.Heading`, `MAV.Sat` выбранного модуля. Если под `id` лежит готовый объект `IDeviceGNSS` — старый формат, передаётся как есть.
10
10
 
11
- Карта перелетает к первому устройству с валидным фиксом (зум 16); точка траектории добавляется только при смене координат — курс и высота могут обновляться чаще позиции. Маркер без конечных координат не рисуется.
11
+ Вид карта сама не меняет — бортов может быть много. Кнопка «Все борта» на панели карты вписывает в экран все борта с фиксом (один борт — приближение к нему, зум 16). Точка траектории добавляется только при смене координат — курс и высота могут обновляться чаще позиции. Маркер без конечных координат не рисуется.
12
12
 
13
13
  ## Пропсы
14
14
 
@@ -351,6 +351,7 @@ const translations = {
351
351
  "constructor.props.multiselect": ["Мультивыбор", "Multi-select", "多选"],
352
352
  "constructor.props.access": ["Доступ (не для владельца)", "Access (non-owner)", "访问权限(非所有者)"],
353
353
  "constructor.props.map.timeout": ["Таймаут маркеров:", "Marker timeout:", "标记超时:"],
354
+ "constructor.props.map.fitAll": ["Все борта", "All vehicles", "全部设备"],
354
355
  "constructor.props.map.track": ["Траектория", "Track", "轨迹"],
355
356
  "constructor.props.map.trackLength": ["Точек в траектории:", "Points in track:", "轨迹点数:"],
356
357
  "constructor.props.joystick.pitch.axe": ["Ocь ⮃", "Pitch axis ⮃", "俯仰轴 ⮃"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-svelte-ui-lib",
3
- "version": "1.37.1",
3
+ "version": "1.37.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Oleg-Perevyshin/ElementsUI.git"