From 3fb22a877ece42237989f90eae9abc06b7e9852f Mon Sep 17 00:00:00 2001 From: Dmitry Popov Date: Wed, 15 Oct 2025 14:30:19 +0200 Subject: [PATCH] fix(Core): Fixed system select after tab switch --- .../components/map/hooks/useMapHandlers.ts | 160 +++++++++--------- .../components/mapWrapper/MapWrapper.tsx | 26 +-- .../event_handlers/map_core_event_handler.ex | 12 -- 3 files changed, 91 insertions(+), 107 deletions(-) diff --git a/assets/js/hooks/Mapper/components/map/hooks/useMapHandlers.ts b/assets/js/hooks/Mapper/components/map/hooks/useMapHandlers.ts index 11f594cf..bd0068c3 100644 --- a/assets/js/hooks/Mapper/components/map/hooks/useMapHandlers.ts +++ b/assets/js/hooks/Mapper/components/map/hooks/useMapHandlers.ts @@ -49,91 +49,87 @@ export const useMapHandlers = (ref: ForwardedRef, onSelectionChange const { charactersUpdated, presentCharacters, characterAdded, characterRemoved, characterUpdated } = useCommandsCharacters(); - useImperativeHandle( - ref, - () => { - return { - command(type, data) { - switch (type) { - case Commands.init: - mapInit(data as CommandInit); - break; - case Commands.addSystems: - setTimeout(() => mapAddSystems(data as CommandAddSystems), 100); - break; - case Commands.updateSystems: - mapUpdateSystems(data as CommandUpdateSystems); - break; - case Commands.removeSystems: - setTimeout(() => removeSystems(data as CommandRemoveSystems), 100); - break; - case Commands.addConnections: - setTimeout(() => addConnections(data as CommandAddConnections), 100); - break; - case Commands.removeConnections: - setTimeout(() => removeConnections(data as CommandRemoveConnections), 100); - break; - case Commands.charactersUpdated: - charactersUpdated(data as CommandCharactersUpdated); - break; - case Commands.characterAdded: - characterAdded(data as CommandCharacterAdded); - break; - case Commands.characterRemoved: - characterRemoved(data as CommandCharacterRemoved); - break; - case Commands.characterUpdated: - characterUpdated(data as CommandCharacterUpdated); - break; - case Commands.presentCharacters: - presentCharacters(data as CommandPresentCharacters); - break; - case Commands.updateConnection: - updateConnection(data as CommandUpdateConnection); - break; - case Commands.mapUpdated: - mapUpdated(data as CommandMapUpdated); - break; - case Commands.killsUpdated: - killsUpdated(data as CommandKillsUpdated); - break; + useImperativeHandle(ref, () => { + return { + command(type, data) { + switch (type) { + case Commands.init: + mapInit(data as CommandInit); + break; + case Commands.addSystems: + setTimeout(() => mapAddSystems(data as CommandAddSystems), 100); + break; + case Commands.updateSystems: + mapUpdateSystems(data as CommandUpdateSystems); + break; + case Commands.removeSystems: + setTimeout(() => removeSystems(data as CommandRemoveSystems), 100); + break; + case Commands.addConnections: + setTimeout(() => addConnections(data as CommandAddConnections), 100); + break; + case Commands.removeConnections: + setTimeout(() => removeConnections(data as CommandRemoveConnections), 100); + break; + case Commands.charactersUpdated: + charactersUpdated(data as CommandCharactersUpdated); + break; + case Commands.characterAdded: + characterAdded(data as CommandCharacterAdded); + break; + case Commands.characterRemoved: + characterRemoved(data as CommandCharacterRemoved); + break; + case Commands.characterUpdated: + characterUpdated(data as CommandCharacterUpdated); + break; + case Commands.presentCharacters: + presentCharacters(data as CommandPresentCharacters); + break; + case Commands.updateConnection: + updateConnection(data as CommandUpdateConnection); + break; + case Commands.mapUpdated: + mapUpdated(data as CommandMapUpdated); + break; + case Commands.killsUpdated: + killsUpdated(data as CommandKillsUpdated); + break; - case Commands.centerSystem: - setTimeout(() => { - const systemId = `${data}`; - centerSystem(systemId as CommandSelectSystem); - }, 100); - break; + case Commands.centerSystem: + setTimeout(() => { + const systemId = `${data}`; + centerSystem(systemId as CommandSelectSystem); + }, 100); + break; - case Commands.selectSystem: - selectSystems({ systems: [data as string], delay: 500 }); - break; + case Commands.selectSystem: + selectSystems({ systems: [data as string], delay: 500 }); + break; - case Commands.selectSystems: - selectSystems(data as CommandSelectSystems); - break; + case Commands.selectSystems: + selectSystems(data as CommandSelectSystems); + break; - case Commands.pingAdded: - case Commands.pingCancelled: - case Commands.routes: - case Commands.signaturesUpdated: - case Commands.linkSignatureToSystem: - case Commands.detailedKillsUpdated: - case Commands.characterActivityData: - case Commands.trackingCharactersData: - case Commands.updateActivity: - case Commands.updateTracking: - case Commands.userSettingsUpdated: - // do nothing - break; + case Commands.pingAdded: + case Commands.pingCancelled: + case Commands.routes: + case Commands.signaturesUpdated: + case Commands.linkSignatureToSystem: + case Commands.detailedKillsUpdated: + case Commands.characterActivityData: + case Commands.trackingCharactersData: + case Commands.updateActivity: + case Commands.updateTracking: + case Commands.userSettingsUpdated: + // do nothing + break; - default: - console.warn(`Map handlers: Unknown command: ${type}`, data); - break; - } - }, - }; - }, - [], - ); + default: + console.warn(`Map handlers: Unknown command: ${type}`, data); + break; + } + }, + }; + }, []); }; diff --git a/assets/js/hooks/Mapper/components/mapWrapper/MapWrapper.tsx b/assets/js/hooks/Mapper/components/mapWrapper/MapWrapper.tsx index a4ab965a..d64eb5c4 100644 --- a/assets/js/hooks/Mapper/components/mapWrapper/MapWrapper.tsx +++ b/assets/js/hooks/Mapper/components/mapWrapper/MapWrapper.tsx @@ -1,36 +1,36 @@ -import { Map, MAP_ROOT_ID } from '@/hooks/Mapper/components/map/Map.tsx'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { CommandSelectSystems, OutCommand, OutCommandHandler, SolarSystemConnection } from '@/hooks/Mapper/types'; -import { MapRootData, useMapRootState } from '@/hooks/Mapper/mapRootProvider'; -import { OnMapAddSystemCallback, OnMapSelectionChange } from '@/hooks/Mapper/components/map/map.types.ts'; -import isEqual from 'lodash.isequal'; import { ContextMenuSystem, useContextMenuSystemHandlers } from '@/hooks/Mapper/components/contexts'; +import { Map, MAP_ROOT_ID } from '@/hooks/Mapper/components/map/Map.tsx'; +import { OnMapAddSystemCallback, OnMapSelectionChange } from '@/hooks/Mapper/components/map/map.types.ts'; import { SystemCustomLabelDialog, SystemLinkSignatureDialog, SystemSettingsDialog, } from '@/hooks/Mapper/components/mapInterface/components'; import { Connections } from '@/hooks/Mapper/components/mapRootContent/components/Connections'; -import { ContextMenuSystemMultiple, useContextMenuSystemMultipleHandlers } from '../contexts/ContextMenuSystemMultiple'; import { getSystemById } from '@/hooks/Mapper/helpers'; +import { MapRootData, useMapRootState } from '@/hooks/Mapper/mapRootProvider'; +import { CommandSelectSystems, OutCommand, OutCommandHandler, SolarSystemConnection } from '@/hooks/Mapper/types'; import { Commands } from '@/hooks/Mapper/types/mapHandlers.ts'; +import isEqual from 'lodash.isequal'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Node, useReactFlow, Viewport, XYPosition } from 'reactflow'; +import { ContextMenuSystemMultiple, useContextMenuSystemMultipleHandlers } from '../contexts/ContextMenuSystemMultiple'; -import { useCommandsSystems } from '@/hooks/Mapper/mapRootProvider/hooks/api'; import { emitMapEvent, useMapEventListener } from '@/hooks/Mapper/events'; +import { useCommandsSystems } from '@/hooks/Mapper/mapRootProvider/hooks/api'; import { useDeleteSystems } from '@/hooks/Mapper/components/contexts/hooks'; -import { useCommonMapEventProcessor } from '@/hooks/Mapper/components/mapWrapper/hooks/useCommonMapEventProcessor.ts'; import { AddSystemDialog, SearchOnSubmitCallback, } from '@/hooks/Mapper/components/mapInterface/components/AddSystemDialog'; -import { useHotkey } from '../../hooks/useHotkey'; -import { PingType } from '@/hooks/Mapper/types/ping.ts'; import { SystemPingDialog } from '@/hooks/Mapper/components/mapInterface/components/SystemPingDialog'; -import { MiniMapPlacement } from '@/hooks/Mapper/mapRootProvider/types.ts'; +import { useCommonMapEventProcessor } from '@/hooks/Mapper/components/mapWrapper/hooks/useCommonMapEventProcessor.ts'; import { MINIMAP_PLACEMENT_MAP } from '@/hooks/Mapper/constants.ts'; +import { MiniMapPlacement } from '@/hooks/Mapper/mapRootProvider/types.ts'; +import { PingType } from '@/hooks/Mapper/types/ping.ts'; import type { PanelPosition } from '@reactflow/core'; +import { useHotkey } from '../../hooks/useHotkey'; import { MINI_MAP_PLACEMENT_OFFSETS } from './constants.ts'; // TODO: INFO - this component needs for abstract work with Map instance @@ -106,7 +106,7 @@ export const MapWrapper = () => { runCommand({ name: Commands.selectSystems, - data: { systems: selectedSystems } as CommandSelectSystems, + data: { systems: selectedSystems, delay: 200 } as CommandSelectSystems, }); } }); diff --git a/lib/wanderer_app_web/live/map/event_handlers/map_core_event_handler.ex b/lib/wanderer_app_web/live/map/event_handlers/map_core_event_handler.ex index 6e279f60..0bb82211 100644 --- a/lib/wanderer_app_web/live/map/event_handlers/map_core_event_handler.ex +++ b/lib/wanderer_app_web/live/map/event_handlers/map_core_event_handler.ex @@ -703,18 +703,6 @@ defmodule WandererAppWeb.MapCoreEventHandler do Process.send_after(self(), %{event: :load_map_pings}, 200) - Process.send_after( - self(), - %{ - event: :maybe_select_system, - payload: %{ - character_id: nil, - solar_system_id: nil - } - }, - 200 - ) - if needs_tracking_setup do Process.send_after(self(), %{event: :show_tracking}, 10)