Skip to content

Commit 7c56a32

Browse files
committed
🧲❓ ↝ [debugging] Method to add mineral deposit resource to inventory [ GP-10 GP-11 ].
1 parent c8077a2 commit 7c56a32

File tree

2 files changed

+169
-99
lines changed

2 files changed

+169
-99
lines changed

components/Content/Planets/Activities/SectorSetup.tsx

+106-99
Original file line numberDiff line numberDiff line change
@@ -7,88 +7,121 @@ export default function CreateBasePlanetSector() {
77
const supabase = useSupabaseClient();
88
const session = useSession();
99
const [userPlanet, setUserPlanet] = useState(null);
10-
10+
const [imageUrl, setImageUrl] = useState('');
11+
1112
useEffect(() => {
12-
const fetchUserPlanet = async () => {
13-
if (!session) return;
14-
13+
const fetchUserPlanet = async () => {
14+
if (!session) return;
15+
16+
try {
17+
const { data, error } = await supabase
18+
.from('profiles')
19+
.select('*')
20+
.eq('id', session?.user?.id)
21+
.single();
22+
23+
if (data) {
24+
setUserPlanet(data.location);
25+
}
26+
27+
if (error) {
28+
throw error;
29+
}
30+
} catch (error) {
31+
console.error(error.message);
32+
}
33+
};
34+
35+
fetchUserPlanet();
36+
}, [session, supabase]);
37+
38+
const fetchRoverImage = async () => {
39+
const apiKey = 'iT0FQTZKpvadCGPzerqXdO5F4b62arNBOP0dtkXE';
40+
const date = Math.floor(Math.random() * 200) + 1; // Generate a random date
41+
1542
try {
16-
const { data, error } = await supabase
17-
.from('profiles')
18-
.select('*')
19-
.eq('id', session?.user?.id)
20-
.single();
21-
22-
if (data) {
23-
setUserPlanet(data.location);
24-
}
25-
26-
if (error) {
27-
throw error;
28-
}
43+
const apiUrl = `https://api.nasa.gov/mars-photos/api/v1/rovers/perseverance/photos?sol=${date}&api_key=${apiKey}`;
44+
const response = await axios.get(apiUrl);
45+
46+
if (response.data.photos && response.data.photos.length > 0) {
47+
const firstImage = response.data.photos[0].img_src;
48+
setImageUrl(firstImage);
49+
} else {
50+
console.error('No images found for the given date & rover:', date);
51+
// Retry fetching image with a new date
52+
fetchRoverImage();
53+
}
2954
} catch (error) {
30-
console.error(error.message);
55+
console.error('Error fetching image:', error);
56+
// Retry fetching image with a new date
57+
fetchRoverImage();
3158
}
32-
};
33-
34-
fetchUserPlanet();
35-
}, [session, supabase]);
36-
59+
};
60+
61+
useEffect(() => {
62+
fetchRoverImage();
63+
}, [session]);
64+
3765
const createSector = async () => {
38-
if (session) {
39-
try {
40-
// Map resource names to corresponding inventoryITEMS ids
41-
const resourceToIdMap = {
42-
"Coal": 11,
43-
"Silicates": 13,
44-
"Iron": 15,
45-
"Alloy": 17,
46-
"Fuel": 18,
47-
"Copper": 19,
48-
"Chromium": 20,
49-
"Nickel": 16,
50-
"Water": 21,
51-
};
52-
53-
// Randomly choose a mineral from the resourceToIdMap
54-
const minerals = Object.keys(resourceToIdMap);
55-
const randomMineral = minerals[Math.floor(Math.random() * minerals.length)];
56-
57-
// Get the corresponding id from the map
58-
const depositRowId = resourceToIdMap[randomMineral];
59-
60-
const response = await supabase.from('basePlanetSectors').upsert([
61-
{
62-
anomaly: userPlanet,
63-
owner: session?.user?.id,
64-
deposit: depositRowId, // Use the id instead of the resource name
65-
coverUrl: "https://mars.nasa.gov/mars2020-raw-images/pub/ods/surface/sol/00090/ids/edr/browse/edl/EBE_0090_0674952393_193ECM_N0040048EDLC00090_0030LUJ01_1200.jpg",
66-
explored: false,
67-
},
68-
]);
69-
70-
if (response.error) {
71-
console.error(response.error);
72-
} else {
73-
// Handle success
74-
}
75-
} catch (error) {
76-
console.error("Error creating sector:", error.message);
66+
if (!imageUrl) {
67+
console.error('No image available. Please wait until an image is fetched.');
68+
return;
69+
}
70+
71+
if (session) {
72+
try {
73+
// Map resource names to corresponding inventoryITEMS ids
74+
const resourceToIdMap = {
75+
"Coal": 11,
76+
"Silicates": 13,
77+
"Iron": 15,
78+
"Alloy": 17,
79+
"Fuel": 18,
80+
"Copper": 19,
81+
"Chromium": 20,
82+
"Nickel": 16,
83+
"Water": 21,
84+
};
85+
86+
// Randomly choose a mineral from the resourceToIdMap
87+
const minerals = Object.keys(resourceToIdMap);
88+
const randomMineral = minerals[Math.floor(Math.random() * minerals.length)];
89+
90+
// Get the corresponding id from the map
91+
const depositRowId = resourceToIdMap[randomMineral];
92+
93+
const response = await supabase.from('basePlanetSectors').upsert([
94+
{
95+
anomaly: userPlanet,
96+
owner: session?.user?.id,
97+
deposit: depositRowId, // Use the id instead of the resource name
98+
coverUrl: imageUrl,
99+
explored: false,
100+
},
101+
]);
102+
103+
if (response.error) {
104+
console.error(response.error);
105+
} else {
106+
// Handle success
107+
}
108+
} catch (error) {
109+
console.error("Error creating sector:", error.message);
110+
}
77111
}
78-
}
79112
};
80-
113+
81114
return (
82-
<div className="mt-4">
83-
<button
84-
onClick={createSector}
85-
className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
86-
>
87-
Create Sector
88-
</button>
89-
</div>
115+
<div className="mt-4">
116+
<button
117+
onClick={createSector}
118+
className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
119+
>
120+
Create Sector
121+
</button>
122+
</div>
90123
);
91-
};
124+
};
92125

93126
export function UserOwnedSectorGrid() {
94127
const supabase = useSupabaseClient();
@@ -138,32 +171,6 @@ export function UserOwnedSectorGrid() {
138171
);
139172
};
140173

141-
const NasaRoverImage = ({ date, rover, onImageMetadataChange, onCreateSector }) => {
142-
const [imageUrl, setImageUrl] = useState('');
143-
const apiKey = 'iT0FQTZKpvadCGPzerqXdO5F4b62arNBOP0dtkXE';
144-
145-
useEffect(() => {
146-
const apiUrl = `https://api.nasa.gov/mars-photos/api/v1/rovers/${rover}/photos?sol=${date}&api_key=${apiKey}`;
147-
148-
axios.get(apiUrl)
149-
.then((response) => {
150-
if (response.data.photos && response.data.photos.length > 0) {
151-
const firstImage = response.data.photos[0].img_src;
152-
setImageUrl(firstImage);
153-
onImageMetadataChange(response.data.photos[0]);
154-
onCreateSector(firstImage);
155-
} else {
156-
console.error('No images found for the given date & rover:', date, rover);
157-
}
158-
})
159-
.catch((error) => {
160-
console.error('Error fetching image:', error);
161-
});
162-
}, [date, rover, onImageMetadataChange, onCreateSector]);
163-
164-
return imageUrl ? <img src={imageUrl} alt="Rover image" /> : <p>Loading...</p>;
165-
};
166-
167174
export function AllSectors() {
168175
const supabase = useSupabaseClient();
169176
const session = useSession();

components/Content/Planets/Base/BasePlanetSector.tsx

+63
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,67 @@ import axios from "axios";
77
import { RoverContentPostForm } from "../../CreatePostForm";
88
import StructureComponent, { PlacedStructures } from "../Activities/StructureCreate";
99

10+
const AddResourceToInventory = ({ resource }) => {
11+
const supabase = useSupabaseClient();
12+
const session = useSession();
13+
const [isAdding, setIsAdding] = useState(false);
14+
15+
const handleAddResource = async () => {
16+
setIsAdding(true);
17+
try {
18+
// Check if the user already has this resource in their inventory
19+
const { data: existingResource, error } = await supabase
20+
.from('inventoryUSERS')
21+
.select('*')
22+
.eq('owner', session?.user?.id)
23+
.eq('item', resource.id)
24+
.single();
25+
26+
if (error) {
27+
throw error;
28+
}
29+
30+
let quantity = 1;
31+
32+
// If the user already has this resource, increment the quantity
33+
if (existingResource) {
34+
quantity = existingResource.quantity + 1;
35+
}
36+
37+
// Add the resource to the user's inventory
38+
const { error: insertError } = await supabase
39+
.from('inventoryUSERS')
40+
.upsert({
41+
owner: session?.user?.id,
42+
item: resource.id,
43+
quantity,
44+
});
45+
46+
if (insertError) {
47+
throw insertError;
48+
}
49+
50+
// Resource added successfully
51+
alert(`${resource.name} added to your inventory!`);
52+
} catch (error) {
53+
console.error('Error adding resource to inventory:', error.message);
54+
// Show error message or handle error appropriately
55+
} finally {
56+
setIsAdding(false);
57+
}
58+
};
59+
60+
return (
61+
<button
62+
onClick={handleAddResource}
63+
disabled={isAdding}
64+
className={`bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded ${isAdding ? 'cursor-not-allowed' : ''}`}
65+
>
66+
{isAdding ? 'Adding...' : 'Add to Inventory'}
67+
</button>
68+
);
69+
};
70+
1071
export default function BasePlanetSector({ sectorid }: { sectorid: string }) {
1172
const router = useRouter();
1273
const { id: sectorId } = router.query;
@@ -198,6 +259,8 @@ export default function BasePlanetSector({ sectorid }: { sectorid: string }) {
198259
</Card>
199260
<div>
200261
<Card noPadding={false}>
262+
<AddResourceToInventory resource={deposit} />
263+
<p>{deposit}</p>
201264
<RoverImageNoHandle date='853' rover='opportunity' sectorNo={id} />
202265
<StructureComponent sectorId={sectorid} />
203266
<PlacedStructures sectorId={Number(sectorid)} />

0 commit comments

Comments
 (0)