Integrate jove observatory with the frontend and display as icon on the region map
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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)}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ export interface System {
|
||||
y: number;
|
||||
security?: number;
|
||||
signatures?: number;
|
||||
jove_observatory?: boolean;
|
||||
connectedSystems: string;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user