formatting output as get function

This commit is contained in:
Khalim Conn-Kowlessar 2024-04-16 00:36:18 +01:00
parent 0f83b2a743
commit 745d10d5c9
3 changed files with 35 additions and 30 deletions

View file

@ -17,13 +17,12 @@ import {
} from "@/app/shadcn_components/ui/table";
import SelectComparisonModal from "./SelectComparisonModal";
import EpcBarChart from "./EpcBarChart";
import { DataItem, ChartData } from "@/app/portfolio/[slug]/utils";
const SummaryTable = ({
portfolioName,
data,
userPortfolios,
}: {
portfolioName: string;
data: DataItem[];
userPortfolios: { name: string; id: bigint }[];
}) => {

View file

@ -7,7 +7,7 @@ export default async function PortfolioSummary({
params: { slug: string };
}) {
const portfolioId = params.slug;
const { portfolioName, data } = await getOverviewPortfolioData(portfolioId);
const data = await getOverviewPortfolioData(portfolioId);
// Retrieve all of the names and ids of the portfolios, attributed to this user
// Get user id from the session
@ -16,11 +16,7 @@ export default async function PortfolioSummary({
return (
<div className="container mx-auto px-4">
<h1 className="text-3xl text-gray-700 font-bold my-4">Overview</h1>
<SummaryTable
portfolioName={portfolioName}
data={data}
userPortfolios={userPortfolios}
/>
<SummaryTable data={data} userPortfolios={userPortfolios} />
</div>
);
}

View file

@ -1,3 +1,4 @@
import { formatNumber } from "@/app/utils";
import {
recommendation,
UnnestedRecommendation,
@ -30,7 +31,7 @@ export async function getPortfolio(portfolioId: string): Promise<Portfolio> {
}
// Types needed for the overview page
interface ChartData {
export interface ChartData {
name: string;
[key: string]: number | string; // Allows for any number of properties with numeric values, plus the name
}
@ -47,7 +48,7 @@ export interface DataItem {
export async function getOverviewPortfolioData(
portfolioId: string
): Promise<{ portfolioName: string; data: DataItem[] }> {
): Promise<DataItem[]> {
// Keep just the columns we need for the overview
const data = await db
@ -86,7 +87,7 @@ export async function getOverviewPortfolioData(
const portfolioName = data[0].name;
// Format the data we need for the overview
const output = [
const output: DataItem[] = [
{
title: "EPCs",
scenarios: [
@ -107,7 +108,10 @@ export async function getOverviewPortfolioData(
{
title: "# Units",
scenarios: [
{ scenarioName: "Today", data: data[0].numberOfProperties },
{
scenarioName: "Today",
data: String(data[0].numberOfProperties) || "",
},
{ scenarioName: portfolioName, data: "" },
],
},
@ -115,23 +119,32 @@ export async function getOverviewPortfolioData(
title: "# Units to retrofit",
scenarios: [
{ scenarioName: "Today", data: "" },
{ scenarioName: portfolioName, data: data[0].nUnitsToRetrofit },
{
scenarioName: portfolioName,
data: String(data[0].nUnitsToRetrofit) || "",
},
],
},
{
title: "Co2/unit",
scenarios: [
{ scenarioName: "Today", data: data[0].co2PerUnitPreRetrofit },
{ scenarioName: portfolioName, data: data[0].co2PerUnitPostRetrofit },
{ scenarioName: "Today", data: data[0].co2PerUnitPreRetrofit || "" },
{
scenarioName: portfolioName,
data: data[0].co2PerUnitPostRetrofit || "",
},
],
},
{
title: "Energy bills/unit",
scenarios: [
{ scenarioName: "Today", data: data[0].energyBillPerUnitPreRetrofit },
{
scenarioName: "Today",
data: data[0].energyBillPerUnitPreRetrofit || "",
},
{
scenarioName: portfolioName,
data: data[0].energyBillPerUnitPostRetrofit,
data: data[0].energyBillPerUnitPostRetrofit || "",
},
],
},
@ -140,11 +153,11 @@ export async function getOverviewPortfolioData(
scenarios: [
{
scenarioName: "Today",
data: data[0].energyConsumptionPerUnitPreRetrofit,
data: data[0].energyConsumptionPerUnitPreRetrofit || "",
},
{
scenarioName: portfolioName,
data: data[0].energyConsumptionPerUnitPostRetrofit,
data: data[0].energyConsumptionPerUnitPostRetrofit || "",
},
],
},
@ -152,28 +165,28 @@ export async function getOverviewPortfolioData(
title: "Cost (£)",
scenarios: [
{ scenarioName: "Today", data: "" },
{ scenarioName: portfolioName, data: data[0].cost },
{ scenarioName: portfolioName, data: formatNumber(data[0].cost || 0) },
],
},
{
title: "Cost (£) /unit",
scenarios: [
{ scenarioName: "Today", data: "" },
{ scenarioName: portfolioName, data: data[0].costPerUnit },
{ scenarioName: portfolioName, data: data[0].costPerUnit || "" },
],
},
{
title: "£ per CO2 reduction",
scenarios: [
{ scenarioName: "Today", data: "" },
{ scenarioName: portfolioName, data: data[0].costPerCo2Saved },
{ scenarioName: portfolioName, data: data[0].costPerCo2Saved || "" },
],
},
{
title: "£ per SAP point",
scenarios: [
{ scenarioName: "Today", data: "" },
{ scenarioName: portfolioName, data: data[0].costPerSapPoint },
{ scenarioName: portfolioName, data: data[0].costPerSapPoint || "" },
],
},
{
@ -182,7 +195,7 @@ export async function getOverviewPortfolioData(
{ scenarioName: "Today", data: "" },
{
scenarioName: portfolioName,
data: data[0].valuationImprovementPerUnit,
data: data[0].valuationImprovementPerUnit || "",
},
],
},
@ -192,16 +205,13 @@ export async function getOverviewPortfolioData(
{ scenarioName: "Today", data: "" },
{
scenarioName: portfolioName,
data: data[0].valuationReturnOnInvestment,
data: data[0].valuationReturnOnInvestment || "",
},
],
},
] as DataItem[];
];
return {
portfolioName: portfolioName,
data: output,
};
return output;
}
export async function getUserPortfolios(