mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 10:45:54 +00:00
fix(Map): Added ability to see focused element
This commit is contained in:
@@ -11,6 +11,7 @@ export type MapData = MapUnionTypes & {
|
|||||||
isThickConnections: boolean;
|
isThickConnections: boolean;
|
||||||
linkedSigEveId: string;
|
linkedSigEveId: string;
|
||||||
localShowShipName: boolean;
|
localShowShipName: boolean;
|
||||||
|
systemHighlighted: string | undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface MapProviderProps {
|
interface MapProviderProps {
|
||||||
@@ -44,6 +45,7 @@ const INITIAL_DATA: MapData = {
|
|||||||
userHubs: [],
|
userHubs: [],
|
||||||
pings: [],
|
pings: [],
|
||||||
localShowShipName: false,
|
localShowShipName: false,
|
||||||
|
systemHighlighted: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface MapContextProps {
|
export interface MapContextProps {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import { useLocalCounter } from '@/hooks/Mapper/components/hooks/useLocalCounter
|
|||||||
// let render = 0;
|
// let render = 0;
|
||||||
export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>) => {
|
export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>) => {
|
||||||
const nodeVars = useSolarSystemNode(props);
|
const nodeVars = useSolarSystemNode(props);
|
||||||
|
|
||||||
const { localCounterCharacters } = useLocalCounter(nodeVars);
|
const { localCounterCharacters } = useLocalCounter(nodeVars);
|
||||||
const { killsCount: localKillsCount, killsActivityType: localKillsActivityType } = useNodeKillsCount(
|
const { killsCount: localKillsCount, killsActivityType: localKillsActivityType } = useNodeKillsCount(
|
||||||
nodeVars.solarSystemId,
|
nodeVars.solarSystemId,
|
||||||
@@ -192,6 +193,17 @@ export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{nodeVars.systemHighlighted === nodeVars.solarSystemId && (
|
||||||
|
<div
|
||||||
|
className={clsx('absolute top-[-4px] left-[-4px]', 'w-[calc(100%+8px)] h-[calc(100%+8px)]', 'animate-pulse')}
|
||||||
|
>
|
||||||
|
<div className="absolute left-0 top-0 w-3 h-2 border-t-2 border-l-2 border-sky-300"></div>
|
||||||
|
<div className="absolute right-0 top-0 w-3 h-2 border-t-2 border-r-2 border-sky-300"></div>
|
||||||
|
<div className="absolute left-0 bottom-0 w-3 h-2 border-b-2 border-l-2 border-sky-300"></div>
|
||||||
|
<div className="absolute right-0 bottom-0 w-3 h-2 border-b-2 border-r-2 border-sky-300"></div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className={classes.Handlers}>
|
<div className={classes.Handlers}>
|
||||||
<Handle
|
<Handle
|
||||||
type="source"
|
type="source"
|
||||||
|
|||||||
@@ -173,6 +173,17 @@ export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>)
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{nodeVars.systemHighlighted === nodeVars.solarSystemId && (
|
||||||
|
<div
|
||||||
|
className={clsx('absolute top-[-4px] left-[-4px]', 'w-[calc(100%+8px)] h-[calc(100%+8px)]', 'animate-pulse')}
|
||||||
|
>
|
||||||
|
<div className="absolute left-0 top-0 w-3 h-2 border-t-2 border-l-2 border-sky-300"></div>
|
||||||
|
<div className="absolute right-0 top-0 w-3 h-2 border-t-2 border-r-2 border-sky-300"></div>
|
||||||
|
<div className="absolute left-0 bottom-0 w-3 h-2 border-b-2 border-l-2 border-sky-300"></div>
|
||||||
|
<div className="absolute right-0 bottom-0 w-3 h-2 border-b-2 border-r-2 border-sky-300"></div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className={classes.Handlers}>
|
<div className={classes.Handlers}>
|
||||||
<Handle
|
<Handle
|
||||||
type="source"
|
type="source"
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
import { useReactFlow } from 'reactflow';
|
import { useReactFlow } from 'reactflow';
|
||||||
import { useCallback, useRef } from 'react';
|
import { useCallback, useRef } from 'react';
|
||||||
import { CommandCenterSystem } from '@/hooks/Mapper/types';
|
import { CommandCenterSystem } from '@/hooks/Mapper/types';
|
||||||
|
import { useMapState } from '@/hooks/Mapper/components/map/MapProvider.tsx';
|
||||||
|
import { SYSTEM_FOCUSED_LIFETIME } from '@/hooks/Mapper/constants.ts';
|
||||||
|
|
||||||
export const useCenterSystem = () => {
|
export const useCenterSystem = () => {
|
||||||
const rf = useReactFlow();
|
const rf = useReactFlow();
|
||||||
|
|
||||||
const ref = useRef({ rf });
|
const { update } = useMapState();
|
||||||
ref.current = { rf };
|
|
||||||
|
const ref = useRef({ rf, update });
|
||||||
|
ref.current = { rf, update };
|
||||||
|
|
||||||
|
const highlightTimeout = useRef<number>();
|
||||||
|
|
||||||
return useCallback((systemId: CommandCenterSystem) => {
|
return useCallback((systemId: CommandCenterSystem) => {
|
||||||
const systemNode = ref.current.rf.getNodes().find(x => x.data.id === systemId);
|
const systemNode = ref.current.rf.getNodes().find(x => x.data.id === systemId);
|
||||||
@@ -14,5 +20,16 @@ export const useCenterSystem = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ref.current.rf.setCenter(systemNode.position.x, systemNode.position.y, { duration: 1000 });
|
ref.current.rf.setCenter(systemNode.position.x, systemNode.position.y, { duration: 1000 });
|
||||||
|
|
||||||
|
ref.current.update({ systemHighlighted: systemId });
|
||||||
|
|
||||||
|
if (highlightTimeout.current !== undefined) {
|
||||||
|
clearTimeout(highlightTimeout.current);
|
||||||
|
}
|
||||||
|
|
||||||
|
highlightTimeout.current = setTimeout(() => {
|
||||||
|
highlightTimeout.current = undefined;
|
||||||
|
ref.current.update({ systemHighlighted: undefined });
|
||||||
|
}, SYSTEM_FOCUSED_LIFETIME);
|
||||||
}, []);
|
}, []);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ export interface SolarSystemNodeVars {
|
|||||||
temporaryName?: string | null;
|
temporaryName?: string | null;
|
||||||
description: string | null;
|
description: string | null;
|
||||||
comments_count: number | null;
|
comments_count: number | null;
|
||||||
|
systemHighlighted: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useSolarSystemNode = (props: NodeProps<MapSolarSystemType>): SolarSystemNodeVars => {
|
export const useSolarSystemNode = (props: NodeProps<MapSolarSystemType>): SolarSystemNodeVars => {
|
||||||
@@ -108,6 +109,7 @@ export const useSolarSystemNode = (props: NodeProps<MapSolarSystemType>): SolarS
|
|||||||
showKSpaceBG,
|
showKSpaceBG,
|
||||||
isThickConnections,
|
isThickConnections,
|
||||||
pings,
|
pings,
|
||||||
|
systemHighlighted,
|
||||||
},
|
},
|
||||||
outCommand,
|
outCommand,
|
||||||
} = useMapState();
|
} = useMapState();
|
||||||
@@ -217,6 +219,7 @@ export const useSolarSystemNode = (props: NodeProps<MapSolarSystemType>): SolarS
|
|||||||
isRally,
|
isRally,
|
||||||
description,
|
description,
|
||||||
comments_count,
|
comments_count,
|
||||||
|
systemHighlighted,
|
||||||
};
|
};
|
||||||
|
|
||||||
return nodeVars;
|
return nodeVars;
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ export enum SESSION_KEY {
|
|||||||
routes = 'routes',
|
routes = 'routes',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const SYSTEM_FOCUSED_LIFETIME = 10000;
|
||||||
|
|
||||||
export const GRADIENT_MENU_ACTIVE_CLASSES = 'bg-gradient-to-br from-transparent/10 to-fuchsia-300/10';
|
export const GRADIENT_MENU_ACTIVE_CLASSES = 'bg-gradient-to-br from-transparent/10 to-fuchsia-300/10';
|
||||||
|
|
||||||
export enum Regions {
|
export enum Regions {
|
||||||
@@ -152,7 +154,6 @@ export const MINIMAP_PLACEMENT_MAP = {
|
|||||||
[PingsPlacement.leftBottom]: 'bottom-left',
|
[PingsPlacement.leftBottom]: 'bottom-left',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export const SPACE_TO_CLASS: Record<string, string> = {
|
export const SPACE_TO_CLASS: Record<string, string> = {
|
||||||
[Spaces.Caldari]: 'Caldaria',
|
[Spaces.Caldari]: 'Caldaria',
|
||||||
[Spaces.Matar]: 'Mataria',
|
[Spaces.Matar]: 'Mataria',
|
||||||
|
|||||||
Reference in New Issue
Block a user