Skip to content

Commit ec7cebc

Browse files
committed
feat: use URL to load site information when editing
1 parent eb85da0 commit ec7cebc

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

src/admin/AdminBody.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ export default function AdminBody(props: AdminBodyProps) {
1919
case 'list-sites':
2020
return <ListSites />;
2121
case 'create-site':
22-
return <CreateEditSite />;
22+
return <CreateEditSite mode='create' />;
2323
case 'new-edit-site':
24-
return <CreateEditSite />;
24+
return <CreateEditSite mode='edit' />;
2525
default:
2626
return <h1>Error</h1>;
2727
}

src/admin/CreateEditSite.tsx

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ interface BoundaryPoint {
3333
lng: string;
3434
}
3535

36-
export default function CreateEditSite() {
36+
interface CreateEditSiteProps {
37+
mode: 'create' | 'edit';
38+
}
39+
40+
export default function CreateEditSite({ mode }: CreateEditSiteProps) {
3741
const [name, setName] = useState('');
3842
const [longitude, setLongitude] = useState('');
3943
const [latitude, setLatitude] = useState('');
@@ -130,6 +134,41 @@ export default function CreateEditSite() {
130134
return true;
131135
}
132136

137+
useEffect(() => {
138+
if (mode === 'edit') {
139+
const urlParams = new URLSearchParams(window.location.search);
140+
const siteParam = urlParams.get('site');
141+
if (siteParam) {
142+
try {
143+
const siteData = JSON.parse(decodeURIComponent(siteParam));
144+
setName(siteData.name);
145+
setLatitude(siteData.latitude.toString());
146+
setLongitude(siteData.longitude.toString());
147+
setStatus(siteData.status);
148+
setAddress(siteData.address);
149+
setCells(siteData.cell_id.map((cellId: string) => ({
150+
id: Date.now().toString() + cellId,
151+
cellId: cellId
152+
})));
153+
if (siteData.color) {
154+
setColorEnabled(true);
155+
setColorValue(siteData.color);
156+
}
157+
if (siteData.boundary) {
158+
setBoundaryEnabled(true);
159+
setBoundaryPoints(siteData.boundary.map((point: [number, number]) => ({
160+
id: Date.now().toString() + point.join(','),
161+
lat: point[0].toString(),
162+
lng: point[1].toString()
163+
})));
164+
}
165+
} catch (error) {
166+
console.error('Failed to parse site data from URL:', error);
167+
}
168+
}
169+
}
170+
}, [mode]);
171+
133172
return (
134173
<Container maxWidth="md" sx={{ mt: 4, mb: 4 }}>
135174
<Paper elevation={3} sx={{ p: 3 }}>

src/admin/ListSites.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ export default function ListSites() {
4646
const [sites, setSites] = useState<Site[]>([]);
4747
const handleEdit = (siteName: string) => {
4848
console.log(`Edit site with ID: ${siteName}`);
49-
window.open('/admin/new-edit-site', '_self');
49+
const site = sites.find(s => s.name === siteName);
50+
if (site) {
51+
const siteData = encodeURIComponent(JSON.stringify(site));
52+
window.open(`/admin/new-edit-site?site=${siteData}`, '_self');
53+
}
5054
};
5155

5256
const handleDelete = (siteName: string) => {

0 commit comments

Comments
 (0)