diff --git a/src/lib/components/parameters/BracketEdit.svelte b/src/lib/components/parameters/BracketEdit.svelte index fec6bc2d256ade926f3a2c222c44cf7786f65462..1162cce5873968a644b689dfae286e0fef4028ec 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 a136aa4cddf551171435d6b976aa7a200b5df2d0..2d5bb6f39f17d087e3385eb81bbc062a10f285a7 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 bec1cf73ff328ec1e43991844c944034a56edf4f..25c9b2212e5f1b52afbfd96e5a3764ff9bcef926 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 ad6318389dff7caeda365d323a29dc7fac7edd12..0fdc1b72c555ab85b97574ee3dd545343ab4c3e2 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 10868582e31995f1518e22ab6d10c6b4f9c5412c..1bfa78e91ac1ad751c44450e6f1e56fa3b99c039 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", }