From 55c8c7103614356cd8b88bb0081453be33061491 Mon Sep 17 00:00:00 2001
From: Emmanuel Raviart <emmanuel@raviart.com>
Date: Thu, 13 May 2021 12:42:04 +0200
Subject: [PATCH] Allow to compute a simulation with modified scales.
---
.../components/parameters/BracketEdit.svelte | 4 +-
.../VariableReferredParameter.svelte | 6 ++-
.../variables/VariableReferredScale.svelte | 37 +++++++++++--------
src/lib/parameters.ts | 4 +-
src/lib/reforms.ts | 25 +++++++++++--
5 files changed, 54 insertions(+), 22 deletions(-)
diff --git a/src/lib/components/parameters/BracketEdit.svelte b/src/lib/components/parameters/BracketEdit.svelte
index fec6bc2d2..1162cce58 100644
--- a/src/lib/components/parameters/BracketEdit.svelte
+++ b/src/lib/components/parameters/BracketEdit.svelte
@@ -1,7 +1,9 @@
<script lang="ts">
import { createEventDispatcher } from "svelte"
- export let bracket: { [threshold: string]: number | null } | undefined | null
+ import type { Bracket } from "$lib/parameters"
+
+ export let bracket: Bracket | undefined | null
const dispatch = createEventDispatcher()
diff --git a/src/lib/components/variables/VariableReferredParameter.svelte b/src/lib/components/variables/VariableReferredParameter.svelte
index a136aa4cd..2d5bb6f39 100644
--- a/src/lib/components/variables/VariableReferredParameter.svelte
+++ b/src/lib/components/variables/VariableReferredParameter.svelte
@@ -3,7 +3,8 @@
import type { Writable } from "svelte/store"
import type { Parameter } from "$lib/parameters"
- import type { Reform } from "$lib/reforms"
+ import type { Reform, ReformChangeParameter } from "$lib/reforms"
+ import { ReformChangeType } from "$lib/reforms"
import VariableReferredParameterHeader from "./VariableReferredParameterHeader.svelte"
@@ -18,7 +19,7 @@
) as Writable<boolean>
let validValue = undefined
- $: change = $reform[parameter.name]
+ $: change = $reform[parameter.name] as ReformChangeParameter | undefined
$: latestValue = parameter.values?.[0]
@@ -40,6 +41,7 @@
...$reform,
[parameter.name]: {
start,
+ type: ReformChangeType.Parameter,
value,
},
}
diff --git a/src/lib/components/variables/VariableReferredScale.svelte b/src/lib/components/variables/VariableReferredScale.svelte
index bec1cf73f..25c9b2212 100644
--- a/src/lib/components/variables/VariableReferredScale.svelte
+++ b/src/lib/components/variables/VariableReferredScale.svelte
@@ -3,8 +3,9 @@
import type { Writable } from "svelte/store"
import BracketEdit from "$lib/components/parameters/BracketEdit.svelte"
- import type { Scale } from "$lib/parameters"
- import type { Reform } from "$lib/reforms"
+ import type { Bracket, Scale } from "$lib/parameters"
+ import type { Reform, ReformChangeScale } from "$lib/reforms"
+ import { ReformChangeType } from "$lib/reforms"
import VariableReferredParameterHeader from "./VariableReferredParameterHeader.svelte"
@@ -22,6 +23,8 @@
parameter.brackets,
).sort(([instant1], [instant2]) => instant2.localeCompare(instant1))
+ $: change = $reform[parameter.name] as ReformChangeScale | undefined
+
$: latestInstantAndBracket = bracketsArray[0]
$: latestBracket = latestInstantAndBracket[1]
@@ -30,22 +33,26 @@
$: latestInstantSplit = latestInstant.split("-")
- function changeBracket({ detail: bracket }) {
+ function changeBracket({ detail: bracket }: { detail: Bracket }) {
updateReform(`${date.split("-")[0]}-01-01`, bracket)
}
- function updateReform(start: string, value) {
- // TODO
- // if (start !== undefined && value !== undefined) {
- // $reform = {
- // ...$reform,
- // [parameter.name]: {
- // start,
- // value,
- // },
- // }
- // $simulationRequested = true
- // }
+ function updateReform(start: string, bracket: Bracket) {
+ if (
+ start !== undefined &&
+ bracket !== undefined &&
+ Object.keys(bracket).length > 0
+ ) {
+ $reform = {
+ ...$reform,
+ [parameter.name]: {
+ bracket,
+ start,
+ type: ReformChangeType.Scale,
+ },
+ }
+ $simulationRequested = true
+ }
}
</script>
diff --git a/src/lib/parameters.ts b/src/lib/parameters.ts
index ad6318389..0fdc1b72c 100644
--- a/src/lib/parameters.ts
+++ b/src/lib/parameters.ts
@@ -1,5 +1,7 @@
export type AnyParameter = Parameter | ParameterNode | Scale
+export type Bracket = { [threshold: string]: number | null }
+
export interface Parameter extends ParameterBase {
class: ParameterClass.Parameter
values: ParameterAtInstant[]
@@ -45,7 +47,7 @@ export interface ParameterWithAncestors {
}
export interface Scale extends ParameterBase {
- brackets: { [instant: string]: { [threshold: string]: number | null } | null }
+ brackets: { [instant: string]: Bracket | null }
class: ParameterClass.Scale
rate_unit?: Unit.Rate
threshold_unit?: Unit.Currency
diff --git a/src/lib/reforms.ts b/src/lib/reforms.ts
index 10868582e..1bfa78e91 100644
--- a/src/lib/reforms.ts
+++ b/src/lib/reforms.ts
@@ -1,9 +1,28 @@
-export interface ReformChange {
+import type { Bracket } from "./parameters"
+
+export interface Reform {
+ [parameterName: string]: ReformChange
+}
+
+type ReformChange = ReformChangeParameter | ReformChangeScale
+
+export interface ReformChangeBase {
start: string
stop?: string
+ type: ReformChangeType
+}
+
+export interface ReformChangeParameter extends ReformChangeBase {
+ type: ReformChangeType.Parameter
value: number
}
-export interface Reform {
- [parameterName: string]: ReformChange
+export interface ReformChangeScale extends ReformChangeBase {
+ type: ReformChangeType.Scale
+ bracket: Bracket
+}
+
+export enum ReformChangeType {
+ Parameter = "parameter",
+ Scale = "scale",
}
--
GitLab