Mark dashboard demo charging sessions
This commit is contained in:
@@ -57,6 +57,7 @@ export default async function ChargingPage() {
|
|||||||
<div>
|
<div>
|
||||||
<div className="session-when">{dateTime(session.startedAt)}</div>
|
<div className="session-when">{dateTime(session.startedAt)}</div>
|
||||||
<div className="session-meta">
|
<div className="session-meta">
|
||||||
|
{session.isDemo && "Demo · "}
|
||||||
{duration(session.durationSeconds)}
|
{duration(session.durationSeconds)}
|
||||||
{gained !== null && ` · %${num(session.startSocPercent as number)} → %${num(session.endSocPercent as number)}`}
|
{gained !== null && ` · %${num(session.startSocPercent as number)} → %${num(session.endSocPercent as number)}`}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export interface ChargingSession {
|
|||||||
gridEnergyKwh: number;
|
gridEnergyKwh: number;
|
||||||
pricePerKwh: number;
|
pricePerKwh: number;
|
||||||
totalCost: number;
|
totalCost: number;
|
||||||
|
isDemo?: boolean;
|
||||||
startSocPercent?: number;
|
startSocPercent?: number;
|
||||||
endSocPercent?: number;
|
endSocPercent?: number;
|
||||||
curve: CurvePoint[];
|
curve: CurvePoint[];
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ export function validateChargingSession(body: unknown, pathSessionId: string): C
|
|||||||
});
|
});
|
||||||
const startSocPercent = record.startSocPercent;
|
const startSocPercent = record.startSocPercent;
|
||||||
const endSocPercent = record.endSocPercent;
|
const endSocPercent = record.endSocPercent;
|
||||||
|
const isDemo = record.isDemo;
|
||||||
const energyKwh = bounded(record.energyKwh, 0, 1000, "energyKwh");
|
const energyKwh = bounded(record.energyKwh, 0, 1000, "energyKwh");
|
||||||
const pricePerKwh = bounded(record.pricePerKwh, 0, 1_000_000, "pricePerKwh");
|
const pricePerKwh = bounded(record.pricePerKwh, 0, 1_000_000, "pricePerKwh");
|
||||||
const chargingLossPercent = 10;
|
const chargingLossPercent = 10;
|
||||||
@@ -64,6 +65,7 @@ export function validateChargingSession(body: unknown, pathSessionId: string): C
|
|||||||
gridEnergyKwh,
|
gridEnergyKwh,
|
||||||
pricePerKwh,
|
pricePerKwh,
|
||||||
totalCost: gridEnergyKwh * pricePerKwh,
|
totalCost: gridEnergyKwh * pricePerKwh,
|
||||||
|
...(isDemo === true ? { isDemo: true } : {}),
|
||||||
...(startSocPercent === undefined ? {} : { startSocPercent: bounded(startSocPercent, 0, 100, "startSocPercent") }),
|
...(startSocPercent === undefined ? {} : { startSocPercent: bounded(startSocPercent, 0, 100, "startSocPercent") }),
|
||||||
...(endSocPercent === undefined ? {} : { endSocPercent: bounded(endSocPercent, 0, 100, "endSocPercent") }),
|
...(endSocPercent === undefined ? {} : { endSocPercent: bounded(endSocPercent, 0, 100, "endSocPercent") }),
|
||||||
curve,
|
curve,
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ test("a charging session must match the id in its path", () => {
|
|||||||
gridEnergyKwh: 34.54,
|
gridEnergyKwh: 34.54,
|
||||||
pricePerKwh: 7.5,
|
pricePerKwh: 7.5,
|
||||||
totalCost: 235.5,
|
totalCost: 235.5,
|
||||||
|
isDemo: true,
|
||||||
startSocPercent: 18,
|
startSocPercent: 18,
|
||||||
endSocPercent: 72,
|
endSocPercent: 72,
|
||||||
curve: [{ timestampMs: 1_760_000_060_000, powerKw: 84.2, socPercent: 20 }],
|
curve: [{ timestampMs: 1_760_000_060_000, powerKw: 84.2, socPercent: 20 }],
|
||||||
@@ -66,6 +67,7 @@ test("a charging session must match the id in its path", () => {
|
|||||||
assert.equal(record.chargingLossPercent, 10);
|
assert.equal(record.chargingLossPercent, 10);
|
||||||
assert.equal(record.gridEnergyKwh, 34.54);
|
assert.equal(record.gridEnergyKwh, 34.54);
|
||||||
assert.equal(record.totalCost, 259.05);
|
assert.equal(record.totalCost, 259.05);
|
||||||
|
assert.equal(record.isDemo, true);
|
||||||
assert.throws(() => validateChargingSession(body, "11111111-2222-4333-8444-555555555556"), ValidationError);
|
assert.throws(() => validateChargingSession(body, "11111111-2222-4333-8444-555555555556"), ValidationError);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user