Files
mwitnessing/pages/cart/locations/index.tsx
Dobromir Popov 7c21406ef5 logging
2024-12-05 12:35:30 +02:00

53 lines
1.5 KiB
TypeScript

//next.js page to show all locatons in the database with a link to the location page
import { Location, UserRole } from "@prisma/client";
import Layout from "../../../components/layout";
import LocationCard from "../../../components/location/LocationCard";
import axiosServer from '../../../src/axiosServer';
import ProtectedRoute from '../../../components/protectedRoute';
import CongregationCRUD from "../publishers/congregationCRUD";
interface IProps {
item: Location;
}
function LocationsPage({ items = [] }: IProps) {
const renderLocations = () => {
if (!Array.isArray(items) || items.length === 0) return <h1>No Locations</h1>;
return items.map((item) => (
<LocationCard key={item.id} location={item} />
));
};
return (
<Layout>
<ProtectedRoute allowedRoles={[UserRole.POWERUSER, UserRole.ADMIN]}>
<div className="grid gap-4 grid-cols-1 md:grid-cols-4">
{renderLocations()}
</div>
{/* add location link */}
<div className="flex justify-center">
<a href="/cart/locations/new" className="btn">
Add Location
</a>
</div>
</ProtectedRoute>
<CongregationCRUD />
</Layout>
);
}
export default LocationsPage;
export const getServerSideProps = async (context) => {
const axios = await axiosServer(context);
const { data: items } = await axios.get("/api/data/locations");
console.log('get server props - locations:' + items.length);
//console.log(items);
return {
props: {
items,
},
};
};