Integrate jove observatory with the frontend and display as icon on the region map

This commit is contained in:
2026-01-04 16:59:21 +01:00
parent 2cf75c3851
commit 130c084c20
4 changed files with 49 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ interface MapNodeProps {
type: 'region' | 'system';
security?: number;
signatures?: number;
jove_observatory?: boolean;
isDraggable?: boolean;
disableNavigate?: boolean;
jumps?: number;
@@ -37,6 +38,7 @@ export const MapNode: React.FC<MapNodeProps> = ({
type,
security,
signatures,
jove_observatory,
isDraggable = false,
disableNavigate = false,
jumps,
@@ -238,6 +240,29 @@ export const MapNode: React.FC<MapNodeProps> = ({
currentY += 15;
}
// Add jove observatory icon if present
if (jove_observatory) {
textElements.push(
<text
key="jove_observatory"
x="0"
y={currentY}
textAnchor="middle"
fill="#fbbf24"
fontSize="12"
className="pointer-events-none select-none"
style={{
textShadow: '1px 1px 2px rgba(0,0,0,0.8)',
vectorEffect: 'non-scaling-stroke'
}}
transform={`scale(${(1 / (1200 / viewBoxWidth)) * labelScale})`}
>
🔭
</text>
);
currentY += 15;
}
// Add jumps if enabled and present
if (showJumps && jumps !== undefined) {
textElements.push(

View File

@@ -1107,6 +1107,7 @@ export const RegionMap = ({ regionName, focusSystem, isCompact = false, isWormho
type="system"
security={system.security}
signatures={system.signatures}
jove_observatory={system.jove_observatory}
isDraggable={isWormholeRegion}
disableNavigate={viaMode}
jumps={getSystemJumps(system.solarSystemName)}

View File

@@ -1,5 +1,7 @@
import { System } from '@/lib/types';
import { useQuery } from '@tanstack/react-query';
import pb from '@/lib/pocketbase';
import { SystemResponse } from '@/lib/pbtypes';
const pocketbaseUrl = `https://evebase.site.quack-lab.dev/api/collections/regionview/records`;
@@ -23,6 +25,26 @@ const fetchRegionData = async (regionName: string): Promise<Map<string, System>>
system.signatures = systemSigs.sigcount;
}
}
const systemNames = Array.from(systemsMap.keys());
if (systemNames.length > 0) {
const filter = systemNames.map(name => `name='${name}'`).join(' || ');
try {
const systemRecords = await pb.collection('system').getFullList<SystemResponse>({
filter: `(${filter})`,
batch: 1000
});
for (const record of systemRecords) {
const system = systemsMap.get(record.name);
if (system && record.jove_observatory) {
system.jove_observatory = record.jove_observatory;
}
}
} catch (error) {
console.warn('Failed to fetch jove_observatory data:', error);
}
}
return systemsMap;
};

View File

@@ -10,6 +10,7 @@ export interface System {
y: number;
security?: number;
signatures?: number;
jove_observatory?: boolean;
connectedSystems: string;
}