Skip to content

Commit eff27bf

Browse files
committed
️️🌽🏍️ ↝ Items now created per-sector from API, correct schema, AND rendering on per-sector basis for already existing items [ GP-10 GP-11 GP-12 ]
1 parent 93567f5 commit eff27bf

File tree

9 files changed

+2704
-9
lines changed

9 files changed

+2704
-9
lines changed

components/Content/Inventory/UserOwnedItems.tsx

+79-1
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,82 @@ const OwnedItemsList: React.FC = () => {
7979
)
8080
}
8181

82-
export default OwnedItemsList;
82+
export default OwnedItemsList;
83+
84+
export const SectorStructureOwned: React.FC<{ sectorid: string }> = ({ sectorid }) => {
85+
const supabase = useSupabaseClient();
86+
const session = useSession();
87+
88+
const [ownedItems, setOwnedItems] = useState([]);
89+
const [itemDetails, setItemDetails] = useState([]);
90+
// Add support for moving items/entities between planets
91+
92+
useEffect(() => {
93+
async function fetchOwnedItems() {
94+
if (session) {
95+
try {
96+
const user = session.user.id;
97+
const { data: ownedItemsData, error: ownedItemsError } = await supabase
98+
.from('inventoryUSERS')
99+
.select('*')
100+
.eq("sector", sectorid);
101+
102+
if (ownedItemsError) {
103+
throw ownedItemsError;
104+
}
105+
106+
if (ownedItemsData) {
107+
setOwnedItems(ownedItemsData);
108+
}
109+
} catch (error) {
110+
console.error('Error fetching owned items:', error);
111+
}
112+
}
113+
}
114+
115+
fetchOwnedItems();
116+
}, [session]);
117+
118+
useEffect(() => {
119+
async function fetchItemDetails() {
120+
if (ownedItems.length > 0) {
121+
const itemIds = ownedItems.map(item => item.item);
122+
const { data: itemDetailsData, error: itemDetailsError } = await supabase
123+
.from('inventoryITEMS')
124+
.select('*')
125+
.in('id', itemIds);
126+
127+
if (itemDetailsError) {
128+
console.error('Error fetching item details:', itemDetailsError);
129+
}
130+
131+
if (itemDetailsData) {
132+
setItemDetails(itemDetailsData);
133+
}
134+
}
135+
}
136+
137+
fetchItemDetails();
138+
}, [ownedItems]);
139+
140+
return (
141+
<div className="bg-gray-100 p-4">
142+
<h2 className="text-2xl font-semibold mb-4">Your Items</h2>
143+
<ul className="grid gap-4 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5">
144+
{itemDetails.map(item => {
145+
const ownedItem = ownedItems.find(ownedItem => ownedItem.item === item.id);
146+
return (
147+
<li key={item.id} className="bg-white shadow-md p-4 rounded-md">
148+
<h3 className="text-lg font-medium mb-2">{item.name}</h3>
149+
<div className="mb-2">
150+
<img src={item.icon_url} alt={item.name} className="w-full h-auto" />
151+
</div>
152+
<p className="text-gray-600">Quantity: {ownedItem?.quantity}</p>
153+
<p className="text-gray-600">Location: {ownedItem?.location}</p>
154+
</li>
155+
);
156+
})}
157+
</ul>
158+
</div>
159+
)
160+
}

components/Content/Planets/Activities/StructureCreate.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ const StructureSelection: React.FC<StructureSelectionProps> = ({ onStructureSele
7676
try {
7777
const payload = JSON.stringify({
7878
user_id: session?.user?.id,
79+
sector_id: planetSectorId,
7980
structure_id: structure.id,
8081
});
8182

82-
const response = await fetch('http://127.0.0.1:5000/craft_structure', {
83+
const response = await fetch('https://papyrus-production.up.railway.app/craft_structure', {
8384
method: 'POST',
8485
headers: {
8586
'Content-Type': 'application/json'
@@ -90,9 +91,9 @@ const StructureSelection: React.FC<StructureSelectionProps> = ({ onStructureSele
9091
const data = await response.json();
9192
console.log('Response from Flask:', data);
9293

93-
if (data.status === 'proceed') { // If the status is 'proceed', call createInventoryUserEntry
94-
createInventoryUserEntry(structure);
95-
}
94+
// if (data.status === 'proceed') { // If the status is 'proceed', call createInventoryUserEntry
95+
// createInventoryUserEntry(structure);
96+
// }
9697
} catch (error) {
9798
console.error('Error:', error.message);
9899
}

components/Content/Planets/Base/BasePlanetSector.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import RoverImageGallery, { RoverImage, RoverImageNoHandle } from "../PlanetData
66
import axios from "axios";
77
import { RoverContentPostForm } from "../../CreatePostForm";
88
import StructureComponent, { PlacedStructures } from "../Activities/StructureCreate";
9-
import SectorStructures from "../Sectors/SectorStructures";
9+
import SectorItems from "../Sectors/SectorStructures";
10+
import { SectorStructureOwned } from "../../Inventory/UserOwnedItems";
11+
// import SectorStructures from "../Sectors/SectorStructures";
1012

1113
const AddResourceToInventory = ({ resource }) => {
1214
const supabase = useSupabaseClient();
@@ -262,6 +264,8 @@ export default function BasePlanetSector({ sectorid }: { sectorid: string }) {
262264
<Card noPadding={false}>
263265
<PlacedStructures sectorId={Number(sectorid)} />
264266
<AddResourceToInventory resource={deposit} />
267+
{/* <SectorItems planetSectorId={sectorid} /> */}
268+
<SectorStructureOwned sectorid={sectorid} />
265269
<p>{deposit}</p>
266270
<RoverImageNoHandle date='853' rover='opportunity' sectorNo={id} />
267271
<StructureComponent sectorId={sectorid} />

components/Content/Planets/Sectors/SectorStructures.tsx

+56-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,61 @@
11
import Link from "next/link"
2+
import React, { useState, useEffect } from 'react';
3+
import { useSupabaseClient } from "@supabase/auth-helpers-react";
24

3-
export default function SectorStructures() {
5+
const SectorItems: React.FC= ( planetSectorId ) => {
6+
7+
const supabase = useSupabaseClient();
8+
const [items, setItems] = useState<any[]>([]); // Change the type as per your data structure
9+
10+
useEffect(() => {
11+
const fetchSectorItems = async () => {
12+
try {
13+
// Fetch items belonging to the sector from your database
14+
const { data, error } = await supabase
15+
.from('inventoryUSERS')
16+
.select('*')
17+
.eq('sector', planetSectorId);
18+
19+
if (error) {
20+
throw error;
21+
}
22+
23+
if (data) {
24+
setItems(data);
25+
}
26+
} catch (error) {
27+
console.error('Error fetching sector items:', error.message);
28+
}
29+
};
30+
31+
fetchSectorItems();
32+
}, [supabase, planetSectorId]);
33+
34+
return (
35+
<div>
36+
<h2>Sector Items</h2>
37+
<ul>
38+
{items.map((item) => (
39+
<li key={item.id}><p>{item}</p></li>
40+
))}
41+
</ul>
42+
</div>
43+
);
44+
};
45+
46+
export default SectorItems;
47+
48+
export function SectorItemStructures(planetAndSectorId) {
49+
const supabase = useSupabaseClient();
50+
// Add discriminator to prevent users who don't own that sector/perms
51+
const [sectorItems, setSectorItems] = useState([]);
52+
53+
useEffect(() => {
54+
55+
})
56+
}
57+
58+
export function SectorStructuresList() {
459
return (
560
<div className="flex flex-col min-h-screen items-center justify-center p-4 space-y-4 md:space-y-0 md:flex-row md:space-x-4">
661
<div className="grid gap-4 w-full max-w-sm md:max-w-none md:grid-cols-3">

public/sw.js

+101-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/sw.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/workbox-9b4d2a02.js

-1
This file was deleted.

0 commit comments

Comments
 (0)