initial commit - code moved to separate repo

This commit is contained in:
Dobromir Popov
2024-02-22 04:19:38 +02:00
commit 560d503219
240 changed files with 105125 additions and 0 deletions

130
pages/cart/reports/list.tsx Normal file
View File

@ -0,0 +1,130 @@
//page to show all repots in the database with a link to the report page
import axiosInstance from '../../../src/axiosSecure';
import { useEffect, useState } from "react";
import toast from "react-hot-toast";
import { useRouter } from "next/router";
import Link from "next/link";
import { useSession } from "next-auth/react"
//const common = require('src/helpers/common');
import common from '../../../src/helpers/common';
import Layout from "../../../components/layout";
import ProtectedRoute from '../../../components/protectedRoute';
import { Location, UserRole } from "@prisma/client";
export default function Reports() {
const [reports, setReports] = useState([]);
const router = useRouter();
const { data: session } = useSession();
const deleteReport = (id) => {
axiosInstance
.delete(`api/data/reports/${id}`)
.then((res) => {
toast.success("Успешно изтрит отчет");
// router.push("/cart/reports/list");
setReports(reports.filter(report => report.id !== id));
})
.catch((err) => {
console.log(err);
});
};
const [locations, setLocations] = useState([]);
useEffect(() => {
const fetchLocations = async () => {
try {
console.log("fetching locations");
const { data } = await axiosInstance.get("/api/data/locations");
setLocations(data);
console.log(data);
axiosInstance.get(`api/data/reports`)
.then((res) => {
let reports = res.data;
reports.forEach((report) => {
report.location = data.find((loc) => loc.id === report.locationId);
});
setReports(res.data);
})
.catch((err) => {
console.log(err);
});
} catch (error) {
console.error(error);
}
};
if (!locations.length) {
fetchLocations();
}
}, []);
return (
<Layout>
<ProtectedRoute allowedRoles={[UserRole.POWERUSER, UserRole.ADMIN, UserRole.USER, UserRole.EXTERNAL]}>
<div className="h-5/6 grid place-items-center">
<div className="flex flex-col w-full px-4">
<h1 className="text-2xl font-bold text-center">Отчети</h1>
<Link href="/cart/reports/report">
<button className="mt-4 bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded">
Добави нов отчет
</button>
</Link>
<div className="mt-4 w-full overflow-x-auto">
<table className="w-full table-auto">
<thead>
<tr>
<th className="px-4 py-2 text-left">Дата</th>
<th className="px-4 py-2 text-left" >Място</th>
<th className="px-4 py-2 text-left">Отчет</th>
<th className="px-4 py-2 text-left">Действия</th>
</tr>
</thead>
<tbody>
{reports.map((report) => (
<tr key={report.id}>
<td className="border px-4 py-2">{common.getDateFormated(new Date(report.date))}</td>
<td className="border px-4 py-2">{report.location?.name}</td>
<td className="border px-4 py-2">
{(report.experienceInfo === null || report.experienceInfo === "")
? (
<>
<div><strong>Отчет</strong></div>
Издания: {report.placementCount} <br />
Разговори: {report.conversationCount} <br />
Клипове: {report.videoCount} <br />
Адреси / Телефони: {report.returnVisitInfoCount} <br />
</>
) : (
<>
<div><strong>Случка</strong></div>
<div dangerouslySetInnerHTML={{ __html: report.experienceInfo }} />
</>
)}
</td>
<td className="border px-4 py-2">
<button
className="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded"
onClick={() => deleteReport(report.id)}
>
Изтрий
</button>
</td>
</tr>
))}
</tbody>
</table>
</div>
</div >
</div >
</ProtectedRoute>
</Layout>
);
}