From 1989f07c4bf24efd26ab56944d55fbc2a324cb14 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Sat, 11 Apr 2026 07:50:17 +0000 Subject: [PATCH] deleted redundant pages --- src/app/due-considerations/page.tsx | 264 ---------------- src/app/eco-spreadsheet/page.tsx | 284 ------------------ .../live/CompletionTrendsChart.tsx | 2 +- 3 files changed, 1 insertion(+), 549 deletions(-) delete mode 100644 src/app/due-considerations/page.tsx delete mode 100644 src/app/eco-spreadsheet/page.tsx diff --git a/src/app/due-considerations/page.tsx b/src/app/due-considerations/page.tsx deleted file mode 100644 index b4d8b31..0000000 --- a/src/app/due-considerations/page.tsx +++ /dev/null @@ -1,264 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { SelectFolder } from "../components/due-considerations/SelectFolder"; -import { Button } from "../shadcn_components/ui/button"; -import { useSession } from "next-auth/react"; -import { useMutation } from "@tanstack/react-query"; -import { Input } from "../shadcn_components/ui/input"; - -const Spinner = () => { - return ( -
- ); -}; - -function generateDueConsiderationsS3Folder(userId: string) { - const timestamp = new Date().toISOString().replace(/[:.-]/g, ""); - const key = `${userId}/${timestamp}/`; - return key; -} - -async function postDueConsiderations( - userId: string, - folderKey: string, - schemeName: string -) { - // Triggers the due considerations process - const body = JSON.stringify({ - userId: userId, - folderKey: folderKey, - scheme: schemeName, - }); - - try { - const response = await fetch(`/api/due-considerations`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: body, - }); - - if (!response.ok) { - throw new Error("Network response was not ok"); - } - - // Handle the response as needed - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - // Handle the error appropriately - } -} - -const useUploadFiles = ({ - dueConsiderationsFiles, - userId, - schemeName, - setDownloadUrl, -}: { - dueConsiderationsFiles: File[]; - userId: string; - schemeName: string; - setDownloadUrl: React.Dispatch>; -}) => { - const { mutate: mutateUploadFiles, isLoading: isUploadLoading } = useMutation( - uploadFilesToS3, - { - onSuccess: async () => { - console.log("Trigger the due considerations process"); - console.log("Folder key: ", folderKey); - const data = await postDueConsiderations(userId, folderKey, schemeName); - setDownloadUrl(data.download_url); - }, - onError: (error) => { - console.error(error); - }, - } - ); - - const { mutate, isLoading: isGeneratingUrlLoading } = useMutation( - generatePresignedUrls, - { - onSuccess: (data) => { - try { - const response = mutateUploadFiles({ - presignedUrls: data.urls, - files: dueConsiderationsFiles, - }); - return response; - } catch (error) { - console.error(error); - } - }, - onError: (error) => { - console.error(error); - }, - } - ); - - const [folderKey, setFolderKey] = useState(""); - - const handleUpload = (newFolderKey: string) => { - setFolderKey(newFolderKey); - mutate({ folderKey: newFolderKey, files: dueConsiderationsFiles }); - }; - - return { - handleUpload, - isGeneratingUrlLoading, - isUploadLoading, - }; -}; - -async function generatePresignedUrls({ - folderKey, - files, -}: { - folderKey: string; - files: File[]; -}) { - const body = JSON.stringify({ - files: files.map((file) => ({ - fileKey: folderKey + file.name, - contentType: file.type, - })), - }); - - const presignedResponse = await fetch("/api/upload/due-considerations", { - method: "POST", - body: body, - }); - - if (!presignedResponse.ok) { - throw new Error("Network response was not ok"); - } - const presignedUrls = await presignedResponse.json(); - return presignedUrls; -} - -async function uploadFilesToS3({ - presignedUrls, - files, -}: { - presignedUrls: string[]; - files: File[]; -}) { - await Promise.all( - files.map((file, index) => { - return fetch(presignedUrls[index], { - method: "PUT", - headers: { - "Content-Type": file.type, - }, - body: file, - }); - }) - ); -} - -export default function DueConsiderationsHome() { - const [dueConsiderationsFiles, setDueConsiderationFile] = useState( - [] - ); - const [buttonDisabled, setButtonDisabled] = useState(true); - const [uploadMessage, setUploadMessage] = useState(""); - const [schemeName, setSchemeName] = useState(""); - const [downloadUrl, setDownloadUrl] = useState(""); - - const session = useSession(); - const userId = String(session.data?.user.dbId); - - const { handleUpload, isGeneratingUrlLoading, isUploadLoading } = - useUploadFiles({ - dueConsiderationsFiles, - userId, - schemeName, - setDownloadUrl, - }); - - const initiateUpload = () => { - setDownloadUrl(""); - const newFolderKey = generateDueConsiderationsS3Folder(userId); - handleUpload(newFolderKey); - }; - - function handleOnChange(e: React.ChangeEvent) { - if (e.target.files && e.target.files.length === 3) { - const filesArray = Array.from(e.target.files); - const extensions = filesArray.map((file) => - file.name.split(".").pop()?.toLowerCase() - ); - - if ( - extensions.includes("xml") && - extensions.includes("pdf") && - extensions.includes("docx") - ) { - setDueConsiderationFile(filesArray); - setButtonDisabled(false); - setUploadMessage(""); - } else { - setUploadMessage("Please select a .xml, .pdf, and .docx file."); - setButtonDisabled(true); - } - } else { - setUploadMessage("Please select exactly 3 files."); - setButtonDisabled(true); - } - } - - return ( -
-
-
Select a folder containing:
-
    -
  • A full SAP xml
  • -
  • EPR pdf
  • -
  • Condition report word document
  • -
-
- Make sure these documents all relate to the same property -
- -
- -
- - setSchemeName(e.target.value)} - /> - -
- -
-
{uploadMessage}
- -
-
- {isGeneratingUrlLoading || isUploadLoading ? ( - - ) : downloadUrl ? ( - - Download Due Considerations - - ) : null} -
-
-
- ); -} diff --git a/src/app/eco-spreadsheet/page.tsx b/src/app/eco-spreadsheet/page.tsx deleted file mode 100644 index 8d58b7d..0000000 --- a/src/app/eco-spreadsheet/page.tsx +++ /dev/null @@ -1,284 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { SelectFolder } from "../components/due-considerations/SelectFolder"; -import { Button } from "../shadcn_components/ui/button"; -import { useSession } from "next-auth/react"; -import { useMutation } from "@tanstack/react-query"; - -const Spinner = () => { - return ( -
- ); -}; - -function generateEcoSpreadsheetS3Folder(userId: string) { - const timestamp = new Date().toISOString().replace(/[:.-]/g, ""); - const key = `${userId}/${timestamp}/`; - return key; -} - -async function postEcoSpreadsheet(userId: string, folderKey: string) { - // Triggers the eco spreadsheet process - const body = JSON.stringify({ - userId: userId, - folderKey: folderKey, - }); - - try { - const response = await fetch(`/api/eco-spreadsheet`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: body, - }); - - if (!response.ok) { - throw new Error("Network response was not ok"); - } - - // Handle the response as needed - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - // Handle the error appropriately - } -} - -const useUploadFiles = ({ - files, - userId, - setDownloadUrl, -}: { - files: File[]; - userId: string; - setDownloadUrl: React.Dispatch>; -}) => { - const { mutate: mutateUploadFiles, isLoading: isUploadLoading } = useMutation( - uploadFilesToS3, - { - onSuccess: async () => { - console.log("Trigger the eco spreadsheet process"); - console.log("Folder key: ", folderKey); - const data = await postEcoSpreadsheet(userId, folderKey); - setDownloadUrl(data.download_url); - }, - onError: (error) => { - console.error(error); - }, - } - ); - - const { mutate, isLoading: isGeneratingUrlLoading } = useMutation( - generatePresignedUrls, - { - onSuccess: (data) => { - try { - console.log("Trying to generate presigned urls"); - const response = mutateUploadFiles({ - presignedUrls: data.urls, - files: files, - }); - return response; - } catch (error) { - console.error(error); - } - }, - onError: (error) => { - console.error(error); - }, - } - ); - - const [folderKey, setFolderKey] = useState(""); - - const handleUpload = (newFolderKey: string) => { - setFolderKey(newFolderKey); - mutate({ folderKey: newFolderKey, files: files }); - }; - - return { - handleUpload, - isGeneratingUrlLoading, - isUploadLoading, - }; -}; - -async function generatePresignedUrls({ - folderKey, - files, -}: { - folderKey: string; - files: File[]; -}) { - const body = JSON.stringify({ - files: files.map((file) => ({ - fileKey: folderKey + file.name, - contentType: file.type, - })), - }); - - const presignedResponse = await fetch("/api/upload/eco-spreadsheet", { - method: "POST", - body: body, - }); - - if (!presignedResponse.ok) { - throw new Error("Network response was not ok"); - } - const presignedUrls = await presignedResponse.json(); - return presignedUrls; -} - -async function uploadFilesToS3({ - presignedUrls, - files, -}: { - presignedUrls: string[]; - files: File[]; -}) { - await Promise.all( - files.map((file, index) => { - return fetch(presignedUrls[index], { - method: "PUT", - headers: { - "Content-Type": file.type, - }, - body: file, - }); - }) - ); -} - -export default function EcoSpreadsheetHome() { - const [files, setFiles] = useState([]); - const [buttonDisabled, setButtonDisabled] = useState(true); - const [uploadMessage, setUploadMessage] = useState(""); - const [downloadUrl, setDownloadUrl] = useState(""); - - const session = useSession(); - const userId = String(session.data?.user.dbId); - - const { handleUpload, isGeneratingUrlLoading, isUploadLoading } = - useUploadFiles({ - files, - userId, - setDownloadUrl, - }); - - const initiateUpload = () => { - setDownloadUrl(""); - const newFolderKey = generateEcoSpreadsheetS3Folder(userId); - handleUpload(newFolderKey); - }; - - function handleOnChange(e: React.ChangeEvent) { - if (e.target.files && e.target.files.length === 3) { - const filesArray = Array.from(e.target.files); - const extensions = filesArray.map((file) => - file.name.split(".").pop()?.toLowerCase() - ); - const names = filesArray.map((file) => file.name.toLowerCase()); - - if ( - extensions.includes("xml") && - extensions.includes("pdf") && - names.some((name) => name.includes("epr")) && - names.some((name) => name.includes("ventilation")) - ) { - setFiles(filesArray); - setButtonDisabled(false); - setUploadMessage(""); - } else { - setUploadMessage( - "Please select the xml, the epr and the ventilation and condition report" - ); - setButtonDisabled(true); - } - } else { - setUploadMessage("Please select exactly 3 files."); - setButtonDisabled(true); - } - } - - function handleOnChangeExcel(e: React.ChangeEvent) { - if (e.target.files && e.target.files.length === 1) { - const ExcelfilesArray = Array.from(e.target.files); - const extensions = ExcelfilesArray.map((file) => - file.name.split(".").pop()?.toLowerCase() - ); - - if (extensions.includes("xlsx")) { - // Append the excel onto the existing files - setFiles((prevFiles) => [...prevFiles, ...ExcelfilesArray]); - setUploadMessage(""); - } else { - setUploadMessage("Please select the existing ECO spreadsheet excel"); - setButtonDisabled(true); - } - } else { - setUploadMessage("Please select exactly one Excel file"); - setButtonDisabled(true); - } - } - - return ( -
-
-
Please select the following files:
-
    -
  • An xml
  • -
  • EPR pdf
  • -
  • Ventilation and Condition pdf
  • -
- -
- Make sure these documents all relate to the same property -
- -
- -
- -
{uploadMessage}
- -
- Additionally, you can upload an optional ECO Excel spreadsheet -
- if you wish to add new records to an already populated spreadsheet -
- -
- -
- -
- -
- -
-
- {isGeneratingUrlLoading || isUploadLoading ? ( - - ) : downloadUrl ? ( - - Download Eco Spreadsheet - - ) : null} -
-
-
- ); -} diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/CompletionTrendsChart.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/CompletionTrendsChart.tsx index d869e97..df1f95c 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/CompletionTrendsChart.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/CompletionTrendsChart.tsx @@ -454,7 +454,7 @@ export default function CompletionTrendsChart({ dataKey={isStacked ? "_total" : cat} position="top" style={{ fontSize: 10, fill: "#6b7280", fontWeight: 500 }} - formatter={(v: number) => (v === 0 ? "" : v)} + formatter={(v: unknown) => (v === 0 ? "" : v)} /> )}