From fc8373f9eafd6c03e0a451471c7cd6c047ad1f4b Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 25 Nov 2025 11:06:34 +0000 Subject: [PATCH 1/2] fixed scenario re-creationg every time bug --- src/app/api/auth/[...nextauth]/authOptions.ts | 11 +++++---- src/app/api/sign-s3-url/route.ts | 4 +++- src/app/components/portfolio/SummaryBox.tsx | 23 ++++++++----------- src/app/portfolio/[slug]/(portfolio)/page.tsx | 2 -- .../RemoteAssessmentClient.tsx | 4 ++++ .../remote-assessment/ScenarioSetup.tsx | 6 ++++- .../useCreateRemoteAssessment.tsx | 2 ++ 7 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/app/api/auth/[...nextauth]/authOptions.ts b/src/app/api/auth/[...nextauth]/authOptions.ts index e5a5d69..abcd186 100644 --- a/src/app/api/auth/[...nextauth]/authOptions.ts +++ b/src/app/api/auth/[...nextauth]/authOptions.ts @@ -252,11 +252,12 @@ export const AuthOptions: NextAuthOptions = { */ async redirect({ url, baseUrl }) { // If the user has not onboarded, send them to onboarding - console.log("Redirect triggered:", { - from: url, - to: `${baseUrl}/home`, - timestamp: new Date().toISOString(), - }); + // This logging is too noisy + // console.log("Redirect triggered:", { + // from: url, + // to: `${baseUrl}/home`, + // timestamp: new Date().toISOString(), + // }); return `${baseUrl}/home`; }, }, diff --git a/src/app/api/sign-s3-url/route.ts b/src/app/api/sign-s3-url/route.ts index 06ed4e7..8d8c248 100644 --- a/src/app/api/sign-s3-url/route.ts +++ b/src/app/api/sign-s3-url/route.ts @@ -14,7 +14,9 @@ const s3 = new S3Client({ export async function POST(req: Request) { try { const { key } = await req.json(); // key = "path/to/photo.jpg" - if (!key) return NextResponse.json({ error: "Missing key" }, { status: 400 }); + console.log("Received key for signing:", key); + if (!key) + return NextResponse.json({ error: "Missing key" }, { status: 400 }); const command = new GetObjectCommand({ Bucket: process.env.RETROFIT_DATA_DEV_S3_BUCKET_NAME!, diff --git a/src/app/components/portfolio/SummaryBox.tsx b/src/app/components/portfolio/SummaryBox.tsx index 4a094ff..f6cec1f 100644 --- a/src/app/components/portfolio/SummaryBox.tsx +++ b/src/app/components/portfolio/SummaryBox.tsx @@ -2,7 +2,6 @@ import { useState } from "react"; import { formatNumber } from "@/app/utils"; - interface SummaryBoxProps { scenarios: Array<{ id: bigint; @@ -26,6 +25,8 @@ function SummaryBox({ scenarios, numProperties }: SummaryBoxProps) { const defaultScenario = scenarios.find((scenario) => scenario.isDefault) || scenarios[0]; + console.log("scenarios", scenarios); + const [selectedScenarioId, setSelectedScenarioId] = useState( Number(defaultScenario.id) ); @@ -36,11 +37,11 @@ function SummaryBox({ scenarios, numProperties }: SummaryBoxProps) { const [totalCostFormatted, setTotalCostFormatted] = useState( formatMoney(defaultScenario.totalCost) ); - const [funding, setFunding] = useState( - formatMoney(defaultScenario.funding) - ); + const [funding, setFunding] = useState(formatMoney(defaultScenario.funding)); const [netCost, setNetCost] = useState( - formatMoney((defaultScenario.totalCost || 0) - (defaultScenario.funding || 0)) + formatMoney( + (defaultScenario.totalCost || 0) - (defaultScenario.funding || 0) + ) ); const [contingency, setContingency] = useState( formatMoney(defaultScenario.contingency) @@ -149,21 +150,15 @@ function SummaryBox({ scenarios, numProperties }: SummaryBoxProps) { Funding - - {funding} - + {funding} Cost after funding - - {netCost} - + {netCost} Contingency - - {contingency} - + {contingency} Total properties diff --git a/src/app/portfolio/[slug]/(portfolio)/page.tsx b/src/app/portfolio/[slug]/(portfolio)/page.tsx index 691693e..d6722c6 100644 --- a/src/app/portfolio/[slug]/(portfolio)/page.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/page.tsx @@ -3,9 +3,7 @@ import { getPortfolio, getPortfolioPerformance, getProperties } from "../utils"; import DataTable from "@/app/portfolio/[slug]/components/propertyTable"; import { columns } from "@/app/portfolio/[slug]/components/propertyTableColumns"; import { PropertyWithRelations } from "@/app/db/schema/property"; -import { formatNumber, convertDaysToWorkingWeeks } from "@/app/utils"; import SummaryBox from "@/app/components/portfolio/SummaryBox"; -import { is } from "cypress/types/bluebird"; // We enfore caching of data for 60 seconds export const revalidate = 60; diff --git a/src/app/portfolio/[slug]/remote-assessment/RemoteAssessmentClient.tsx b/src/app/portfolio/[slug]/remote-assessment/RemoteAssessmentClient.tsx index e2552bc..becca48 100644 --- a/src/app/portfolio/[slug]/remote-assessment/RemoteAssessmentClient.tsx +++ b/src/app/portfolio/[slug]/remote-assessment/RemoteAssessmentClient.tsx @@ -26,6 +26,7 @@ export default function RemoteAssessmentClient({ builtForm?: string; } | null>(null); const [selectedPostcode, setSelectedPostcode] = useState(""); + const [selectedScenario, setSelectedScenario] = useState(null); const { handleSubmit: submitAssessment, isUploading } = useCreateRemoteAssessment({ @@ -37,6 +38,7 @@ export default function RemoteAssessmentClient({ propertyType: selectedAddress?.propertyType || null, builtForm: selectedAddress?.builtForm || null, measures: measuresList, + scenarioId: selectedScenario, }); async function onSubmitRemoteAssessment(values: RemoteAssessmentFormValues) { @@ -150,6 +152,8 @@ export default function RemoteAssessmentClient({ selectedBuiltForm={selectedAddress?.builtForm ?? null} isSubmitting={isUploading} onSubmitRemoteAssessment={onSubmitRemoteAssessment} + setSelectedScenario={setSelectedScenario} + selectedScenario={selectedScenario} /> diff --git a/src/app/portfolio/[slug]/remote-assessment/ScenarioSetup.tsx b/src/app/portfolio/[slug]/remote-assessment/ScenarioSetup.tsx index 7afb228..3c2c2e5 100644 --- a/src/app/portfolio/[slug]/remote-assessment/ScenarioSetup.tsx +++ b/src/app/portfolio/[slug]/remote-assessment/ScenarioSetup.tsx @@ -48,6 +48,8 @@ export default function ScenarioSetup({ selectedBuiltForm, isSubmitting, onSubmitRemoteAssessment, + setSelectedScenario, + selectedScenario, }: { portfolioId: string; scenarios: ScenarioSelect[]; @@ -59,9 +61,11 @@ export default function ScenarioSetup({ selectedBuiltForm: string | null; isSubmitting: boolean; onSubmitRemoteAssessment: (values: RemoteAssessmentFormValues) => void; + setSelectedScenario: (scenarioId: string | null) => void; + selectedScenario: string | null; }) { const NEW_SENTINEL = "__new__"; - const [selectedScenario, setSelectedScenario] = useState(null); + const [showMeasures, setShowMeasures] = useState(false); const form = useForm({ diff --git a/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx b/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx index 2db416d..1e927d2 100644 --- a/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx +++ b/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx @@ -186,6 +186,8 @@ function useCreateRemoteAssessment({ event_type: "remote_assessment", }; + console.log("Triggering engine with body:", triggerBody); + const response = await fetch("/api/plan/trigger", { method: "POST", headers: { "Content-Type": "application/json" }, From 5dd21d89c469bf2116d4bfe98b479c94512c8885 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 25 Nov 2025 11:08:38 +0000 Subject: [PATCH 2/2] removed some unnecessary logging --- src/app/api/sign-s3-url/route.ts | 1 - src/app/components/portfolio/SummaryBox.tsx | 2 -- .../[slug]/remote-assessment/useCreateRemoteAssessment.tsx | 2 -- 3 files changed, 5 deletions(-) diff --git a/src/app/api/sign-s3-url/route.ts b/src/app/api/sign-s3-url/route.ts index 8d8c248..3b0714d 100644 --- a/src/app/api/sign-s3-url/route.ts +++ b/src/app/api/sign-s3-url/route.ts @@ -14,7 +14,6 @@ const s3 = new S3Client({ export async function POST(req: Request) { try { const { key } = await req.json(); // key = "path/to/photo.jpg" - console.log("Received key for signing:", key); if (!key) return NextResponse.json({ error: "Missing key" }, { status: 400 }); diff --git a/src/app/components/portfolio/SummaryBox.tsx b/src/app/components/portfolio/SummaryBox.tsx index f6cec1f..98df679 100644 --- a/src/app/components/portfolio/SummaryBox.tsx +++ b/src/app/components/portfolio/SummaryBox.tsx @@ -25,8 +25,6 @@ function SummaryBox({ scenarios, numProperties }: SummaryBoxProps) { const defaultScenario = scenarios.find((scenario) => scenario.isDefault) || scenarios[0]; - console.log("scenarios", scenarios); - const [selectedScenarioId, setSelectedScenarioId] = useState( Number(defaultScenario.id) ); diff --git a/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx b/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx index 1e927d2..2db416d 100644 --- a/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx +++ b/src/app/portfolio/[slug]/remote-assessment/useCreateRemoteAssessment.tsx @@ -186,8 +186,6 @@ function useCreateRemoteAssessment({ event_type: "remote_assessment", }; - console.log("Triggering engine with body:", triggerBody); - const response = await fetch("/api/plan/trigger", { method: "POST", headers: { "Content-Type": "application/json" },