diff --git a/client/components/dashboard-componenets/cards/issueCard.tsx b/client/components/dashboard-componenets/cards/issueCard.tsx new file mode 100644 index 0000000..e4d8aaa --- /dev/null +++ b/client/components/dashboard-componenets/cards/issueCard.tsx @@ -0,0 +1,40 @@ +import React from 'react'; + +type IssueCardProps = { + issueType: string; + description: string; + latitude: number; + longitude: number; + isAnonymous: boolean; + }; + +const IssueCard : React.FC = ({ issueType, description, latitude, longitude, isAnonymous }) => { + return ( + + ) +} + +export default IssueCard \ No newline at end of file diff --git a/client/components/dashboard-componenets/mainContent/systemAdminContents/Workforce.tsx b/client/components/dashboard-componenets/mainContent/systemAdminContents/Workforce.tsx index a711f4d..72cf99d 100644 --- a/client/components/dashboard-componenets/mainContent/systemAdminContents/Workforce.tsx +++ b/client/components/dashboard-componenets/mainContent/systemAdminContents/Workforce.tsx @@ -8,8 +8,29 @@ import { AddNewContractorManager } from "@/components/modals/ContractorControl/A import CleanerLists from "@/components/dataTables/CleanerList"; import { AddNewCleaner } from "@/components/modals/cleanerControl/AddNewCleaner"; import CleanerLog from "@/components/dataTables/CleanerLog"; +import useGetIssues from "@/hooks/issues/useGetIssues"; +import * as React from "react"; +import IssueCard from "../../cards/issueCard"; +type Issue = { + issueType: string; + description: string; + latitude: number; + longitude: number; + isAnonymous: boolean; + +}; export default function AdminWorkforcePanel() { + const { issueData, getAllIssue } = useGetIssues(); + + + React.useEffect(() => { + getAllIssue(); + }, []); + + + + return (
@@ -38,9 +59,23 @@ export default function AdminWorkforcePanel() {
- + +
+ {issueData.map((issue, index) => ( + + ))} +
+ + {/* - +
*/}
diff --git a/client/data/apiRoutes.ts b/client/data/apiRoutes.ts index c5d3aa1..93a43c5 100644 --- a/client/data/apiRoutes.ts +++ b/client/data/apiRoutes.ts @@ -109,5 +109,9 @@ export const apiRoutes = { getAll: `${baseUrl}/plans`, delete: `${baseUrl}/plans/`, edit: `${baseUrl}/plans/`, - }, + }, + issue: { + create: `${baseUrl}/issues/all`, + + }, }; diff --git a/client/hooks/issues/useGetIssues.tsx b/client/hooks/issues/useGetIssues.tsx new file mode 100644 index 0000000..94c63a4 --- /dev/null +++ b/client/hooks/issues/useGetIssues.tsx @@ -0,0 +1,49 @@ +"use client"; +import { apiRoutes } from "@/data/apiRoutes"; +import { jwtToken } from "@/data/cookieNames"; +import { admin, landfillManager, stsManager, unassigned } from "@/data/roles"; +import { getCookie } from "@/lib/cookieFunctions"; +import { message } from "antd"; +import axios from "axios"; +import { useState, useEffect, use } from "react"; +import { set } from "react-hook-form"; + +type Issue = { + issueType: string; + description: string; + latitude: number; + longitude: number; + isAnonymous: boolean; + +}; + +export default function useGetIssues() { + const [issueData, setIssueData] = useState([]); + + async function getAllIssue() { + try { + const res = await axios.get(apiRoutes.issue.create , { + headers: { + Authorization: `Bearer ${await getCookie(jwtToken)}`, + }, + }); + const AllIssue: Issue[] = res.data.map((issue: any) => ({ + issueType: issue.issueType, + description: issue.description, + latitude: issue.latitude, + longitude: issue.longitude, + isAnonymous: issue.isAnonymous + })); + + console.log(AllIssue); + setIssueData(AllIssue); + + + return issueData; + } catch (error: any) { + message.error(error?.response?.data?.message + "Error fetching landfill data... Are you authorized?"); + } + } + + return { issueData, getAllIssue }; +} diff --git a/client/hooks/vehicles/hookeGenerator.py b/client/hooks/vehicles/hookeGenerator.py new file mode 100644 index 0000000..b75409d --- /dev/null +++ b/client/hooks/vehicles/hookeGenerator.py @@ -0,0 +1,56 @@ +def generate_hook_function(type_name, variables): + # Create the TypeScript type definition + type_definition = f"type {type_name} = {{\n" + for variable in variables: + type_definition += f" {variable}: {get_type(variable)};\n" + type_definition += "};\n\n" + + # Create the custom hook function + hook_function = f"use client;\n" + hook_function += f"import {{ apiRoutes }} from \"@/data/apiRoutes\";\n" + hook_function += f"import {{ jwtToken }} from \"@/data/cookieNames\";\n" + hook_function += f"import {{ message }} from \"antd\";\n" + hook_function += f"import axios from \"axios\";\n" + hook_function += f"import {{ useState }} from \"react\";\n" + hook_function += f"import {{ getCookie }} from \"@/lib/cookieFunctions\";\n\n" + hook_function += type_definition + hook_function += f"export default function useGet{type_name.capitalize()}() {{\n" + hook_function += f" const [{type_name.lower()}Data, set{type_name.capitalize()}Data] = useState<{type_name}[]>([]);\n\n" + hook_function += f" async function getAll{type_name.capitalize()}() {{\n" + hook_function += " try {\n" + hook_function += f" const res = await axios.get(apiRoutes.{type_name.lower()}.create , {{\n" + hook_function += " headers: {\n" + hook_function += f" Authorization: `Bearer ${{await getCookie(jwtToken)}}`,\n" + hook_function += " },\n" + hook_function += " });\n" + hook_function += f" const All{type_name.capitalize()}: {type_name}[] = res.data.map(({type_name.lower()}: any) => ({{\n" + for variable in variables: + hook_function += f" {variable}: {type_name.lower()}.{variable},\n" + hook_function += " }}));\n\n" + hook_function += f" set{type_name.capitalize()}Data(All{type_name.capitalize()});\n\n" + hook_function += f" return {type_name.lower()}Data;\n" + hook_function += " } catch (error: any) {\n" + hook_function += " message.error(error?.response?.data?.message + \"Error fetching landfill data... Are you authorized?\");\n" + hook_function += " }\n" + hook_function += " }\n\n" + hook_function += f" return {{ {type_name.lower()}Data, getAll{type_name.capitalize()} }};\n" + hook_function += "}\n" + + return hook_function + +# Helper function to get TypeScript type from Python type +def get_type(variable): + if isinstance(variable, str): + return "string" + elif isinstance(variable, int): + return "number" + elif isinstance(variable, float): + return "number" + elif isinstance(variable, bool): + return "boolean" + else: + return "any" # Handle other types as 'any' + +# Example usage +hook_code = generate_hook_function("Issue", ["issueType", "description", "latitude", "longitude", "isAnonymous"]) +print(hook_code) diff --git a/server/.env.example b/server/.env.example deleted file mode 100644 index 1f71591..0000000 --- a/server/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -PORT=8585 -DATABASE_URL="postgresql://postgres:YOURPASSWORDHERE@127.0.0.1:5432/ecosync" -JWT_SECRET=CHECK_DOC -MAIL_EMAIL=CHECK_DOC -MAIL_PASSWORD=CHECK_DOC -NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=CHECK_DOC \ No newline at end of file