fix(Map): Refactor init and update of mapper

This commit is contained in:
achichenkov
2025-04-23 08:57:55 +03:00
parent 4e732e9491
commit c9b366f3e2
8 changed files with 51 additions and 18 deletions

View File

@@ -73,6 +73,11 @@ export const ContextMenuSystemInfo: React.FC<ContextMenuSystemInfoProps> = ({
icon: PrimeIcons.MAP_MARKER,
command: onHubToggle,
},
{
label: !hubs.includes(systemId) ? 'Add in Routes' : 'Remove from Routes',
icon: PrimeIcons.MAP_MARKER,
command: onHubToggle,
},
...(!systemOnMap
? [
{

View File

@@ -38,6 +38,8 @@ const INITIAL_DATA: MapData = {
systemSignatures: {} as Record<string, SystemSignature[]>,
options: {} as Record<string, string | boolean>,
isSubscriptionActive: false,
mainCharacterEveId: null,
followingCharacterEveId: null,
};
export interface MapContextProps {

View File

@@ -26,12 +26,6 @@ export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>
<>
{nodeVars.visible && (
<div className={classes.Bookmarks}>
{nodeVars.labelCustom !== '' && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.custom)}>
<span className="[text-shadow:_0_1px_0_rgb(0_0_0_/_40%)]">{nodeVars.labelCustom}</span>
</div>
)}
{nodeVars.isShattered && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered, '!pr-[2px]')}>
<WdTooltipWrapper content="Shattered" position={TooltipPosition.top}>
@@ -55,6 +49,12 @@ export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>
</KillsCounter>
)}
{nodeVars.labelCustom !== '' && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.custom)}>
<span className="[text-shadow:_0_1px_0_rgb(0_0_0_/_40%)]">{nodeVars.labelCustom}</span>
</div>
)}
{nodeVars.labelsInfo.map(x => (
<div key={x.id} className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES[x.id])}>
{x.shortName}

View File

@@ -26,12 +26,6 @@ export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>)
<>
{nodeVars.visible && (
<div className={classes.Bookmarks}>
{nodeVars.labelCustom !== '' && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.custom)}>
<span className="[text-shadow:_0_1px_0_rgb(0_0_0_/_40%)]">{nodeVars.labelCustom}</span>
</div>
)}
{nodeVars.isShattered && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered, '!pr-[2px]')}>
<WdTooltipWrapper content="Shattered" position={TooltipPosition.top}>
@@ -55,6 +49,12 @@ export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>)
</KillsCounter>
)}
{nodeVars.labelCustom !== '' && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.custom)}>
<span className="[text-shadow:_0_1px_0_rgb(0_0_0_/_40%)]">{nodeVars.labelCustom}</span>
</div>
)}
{nodeVars.labelsInfo.map(x => (
<div key={x.id} className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES[x.id])}>
{x.shortName}

View File

@@ -8,7 +8,7 @@ export const useMapCommands = () => {
const ref = useRef({ update });
ref.current = { update };
const mapUpdated = useCallback(({ hubs, system_signatures }: CommandMapUpdated) => {
const mapUpdated = useCallback(({ hubs, system_signatures, kills }: CommandMapUpdated) => {
const out: Partial<MapData> = {};
if (hubs) {
@@ -19,6 +19,10 @@ export const useMapCommands = () => {
out.systemSignatures = system_signatures;
}
if (kills) {
out.kills = kills.reduce((acc, x) => ({ ...acc, [x.solar_system_id]: x.kills }), {});
}
ref.current.update(out);
}, []);

View File

@@ -17,12 +17,13 @@ function usePrevious<T>(value: T): T | undefined {
}
export const useLoadRoutes = () => {
// TODO ??
const [loading, setLoading] = useState(false);
const { data: routesSettings } = useRouteProvider();
const {
outCommand,
data: { selectedSystems, hubs, systems, connections },
data: { selectedSystems, hubs, systems, connections, routes },
} = useMapRootState();
const prevSys = usePrevious(systems);
@@ -38,10 +39,15 @@ export const useLoadRoutes = () => {
routes_settings: routesSettings,
},
});
setLoading(true);
},
[outCommand],
);
useEffect(() => {
setLoading(false);
}, [routes]);
useEffect(() => {
if (selectedSystems.length !== 1) {
return;

View File

@@ -1,7 +1,7 @@
import { useCallback } from 'react';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import { OutCommand } from '@/hooks/Mapper/types/mapHandlers';
import type { ActivitySummary } from '@/hooks/Mapper/components/mapRootContent/components/CharacterActivity/CharacterActivity';
import { ActivitySummary } from '@/hooks/Mapper/types';
/**
* Hook for character activity related handlers

View File

@@ -8,13 +8,29 @@ export const useMapUpdated = () => {
const ref = useRef({ update });
ref.current = { update };
return useCallback(({ hubs }: CommandMapUpdated) => {
return useCallback((props: CommandMapUpdated) => {
const { update } = ref.current;
const out: Partial<MapRootData> = {};
if (hubs) {
out.hubs = hubs;
if ('hubs' in props) {
out.hubs = props.hubs;
}
if ('system_signatures' in props) {
out.systemSignatures = props.system_signatures;
}
if ('following_character_eve_id' in props) {
out.userCharacters = props.user_characters;
}
if ('following_character_eve_id' in props) {
out.followingCharacterEveId = props.following_character_eve_id;
}
if ('main_character_eve_id' in props) {
out.mainCharacterEveId = props.main_character_eve_id;
}
update(out);