From c4517355597b26666beb20ebd12ced681771bbd3 Mon Sep 17 00:00:00 2001 From: Dmitry Popov Date: Tue, 17 Feb 2026 16:19:36 +0100 Subject: [PATCH 1/2] chore: Updated character expired token handler --- lib/wanderer_app/esi/api_client.ex | 7 +------ .../map_characters_event_handler.ex | 8 -------- .../map/event_handlers/map_core_event_handler.ex | 16 +++++----------- lib/wanderer_app_web/live/map/map_live.ex | 10 ---------- 4 files changed, 6 insertions(+), 35 deletions(-) diff --git a/lib/wanderer_app/esi/api_client.ex b/lib/wanderer_app/esi/api_client.ex index a7fe571c..e1e5a5dd 100644 --- a/lib/wanderer_app/esi/api_client.ex +++ b/lib/wanderer_app/esi/api_client.ex @@ -854,16 +854,11 @@ defmodule WandererApp.Esi.ApiClient do with {:ok, _} <- WandererApp.Api.Character.update(character, attrs) do WandererApp.Character.update_character(character_id, attrs) - :ok else error -> Logger.error("Failed to clear tokens for #{character_id}: #{inspect(error)}") end - Phoenix.PubSub.broadcast( - WandererApp.PubSub, - "character:#{character_id}", - :character_token_invalid - ) + :ok end end diff --git a/lib/wanderer_app_web/live/map/event_handlers/map_characters_event_handler.ex b/lib/wanderer_app_web/live/map/event_handlers/map_characters_event_handler.ex index 68d42cad..7ab1205b 100644 --- a/lib/wanderer_app_web/live/map/event_handlers/map_characters_event_handler.ex +++ b/lib/wanderer_app_web/live/map/event_handlers/map_characters_event_handler.ex @@ -385,14 +385,6 @@ defmodule WandererAppWeb.MapCharactersEventHandler do end end - defp handle_tracking_event(:invalid_token_message, socket, _map_id) do - socket - |> put_flash( - :error, - "One of your characters has expired token. Please refresh it on characters page." - ) - end - defp handle_tracking_event(:map_character_limit, socket, _map_id) do socket |> put_flash( 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 292a7c8c..0efdf281 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 @@ -553,23 +553,14 @@ defmodule WandererAppWeb.MapCoreEventHandler do {:ok, map_character_ids} <- WandererApp.Cache.lookup("map_#{map_id}:presence_character_ids", []) do events = - case tracked_characters |> Enum.any?(&(&1.access_token == nil)) do + case track_character && not has_tracked_characters? do true -> - [:invalid_token_message] + [:empty_tracked_characters] _ -> [] end - events = - case track_character && not has_tracked_characters? do - true -> - events ++ [:empty_tracked_characters] - - _ -> - events - end - character_limit_reached? = map_character_ids |> Enum.count() >= characters_limit events = @@ -623,6 +614,8 @@ defmodule WandererAppWeb.MapCoreEventHandler do nil end + expired_characters = tracked_characters |> Enum.filter(&(&1.access_token == nil)) |> Enum.map(& &1.eve_id) + initial_data = %{ kills: kills_data, @@ -630,6 +623,7 @@ defmodule WandererAppWeb.MapCoreEventHandler do map_character_ids |> WandererApp.Character.get_character_eve_ids!(), user_characters: tracked_characters |> Enum.map(& &1.eve_id), + expired_characters: expired_characters, system_static_infos: nil, wormholes: nil, effects: nil, diff --git a/lib/wanderer_app_web/live/map/map_live.ex b/lib/wanderer_app_web/live/map/map_live.ex index 2be67e50..3c07adf0 100644 --- a/lib/wanderer_app_web/live/map/map_live.ex +++ b/lib/wanderer_app_web/live/map/map_live.ex @@ -55,16 +55,6 @@ defmodule WandererAppWeb.MapLive do {:noreply, socket |> push_navigate(to: ~p"/#{map_slug}")} end - @impl true - def handle_info(:character_token_invalid, socket), - do: - {:noreply, - socket - |> put_flash( - :error, - "One of your characters has expired token. Please refresh it on characters page." - )} - def handle_info(:no_main_character_set, socket), do: {:noreply, From eed1d8bc27ab9258b75015cc68649c9073a461f2 Mon Sep 17 00:00:00 2001 From: DanSylvest Date: Tue, 17 Feb 2026 22:32:43 +0300 Subject: [PATCH 2/2] fix: Change character token validity status. Now we will see red frame and icon for tracked characters which token was expired. --- .../components/characters/Characters.tsx | 108 ++++++++---------- .../WdCharStateWrapper.module.scss} | 0 .../components/WdCharStateWrapper.tsx | 71 ++++++++++++ .../components/characters/components/index.ts | 1 + .../TrackingDialog/TrackingCharactersList.tsx | 8 +- .../TrackingDialog/TrackingDialog.tsx | 2 +- .../TrackingDialog/TrackingProvider.tsx | 2 +- .../ui-kit/CharacterCard/CharacterCard.tsx | 25 +++- .../mapRootProvider/MapRootProvider.tsx | 2 + .../mapRootProvider/hooks/api/useMapInit.ts | 5 + assets/js/hooks/Mapper/types/mapHandlers.ts | 1 + 11 files changed, 163 insertions(+), 62 deletions(-) rename assets/js/hooks/Mapper/components/characters/{Characters.module.scss => components/WdCharStateWrapper.module.scss} (100%) create mode 100644 assets/js/hooks/Mapper/components/characters/components/WdCharStateWrapper.tsx create mode 100644 assets/js/hooks/Mapper/components/characters/components/index.ts diff --git a/assets/js/hooks/Mapper/components/characters/Characters.tsx b/assets/js/hooks/Mapper/components/characters/Characters.tsx index 833e56b4..3fc6c26c 100644 --- a/assets/js/hooks/Mapper/components/characters/Characters.tsx +++ b/assets/js/hooks/Mapper/components/characters/Characters.tsx @@ -1,13 +1,18 @@ import { emitMapEvent } from '@/hooks/Mapper/events'; -import { isDocked } from '@/hooks/Mapper/helpers/isDocked.ts'; import { useMapRootState } from '@/hooks/Mapper/mapRootProvider'; import { CharacterTypeRaw } from '@/hooks/Mapper/types'; import { Commands, OutCommand } from '@/hooks/Mapper/types/mapHandlers.ts'; import { useAutoAnimate } from '@formkit/auto-animate/react'; import clsx from 'clsx'; -import { PrimeIcons } from 'primereact/api'; import { useCallback } from 'react'; -import classes from './Characters.module.scss'; +import { + TooltipPosition, + WdEveEntityPortrait, + WdEveEntityPortraitSize, + WdTooltipWrapper, +} from '@/hooks/Mapper/components/ui-kit'; +import { WdCharStateWrapper } from '@/hooks/Mapper/components/characters/components/WdCharStateWrapper.tsx'; + interface CharactersProps { data: CharacterTypeRaw[]; } @@ -17,7 +22,7 @@ export const Characters = ({ data }: CharactersProps) => { const { outCommand, - data: { mainCharacterEveId, followingCharacterEveId }, + data: { mainCharacterEveId, followingCharacterEveId, expiredCharacters }, } = useMapRootState(); const handleSelect = useCallback(async (character: CharacterTypeRaw) => { @@ -35,61 +40,48 @@ export const Characters = ({ data }: CharactersProps) => { }); }, []); - const items = data.map(character => ( -
  • handleSelect(character)} - > -
    - {mainCharacterEveId === character.eve_id && ( - - )} + const items = data.map(character => { + const isExpired = expiredCharacters.includes(character.eve_id); - {followingCharacterEveId === character.eve_id && ( - - )} - {isDocked(character.location) &&
    } -
    -
    -
  • - )); + return ( +
  • handleSelect(character)} + > + + + + + +
  • + ); + }); return (