From d5eaa37b382ff4e4fe8591537808a0076e79ed07 Mon Sep 17 00:00:00 2001 From: Daniel Barenholz Date: Wed, 25 Oct 2023 12:15:31 +0200 Subject: [PATCH 1/2] Add stepSize for slider input fields --- .../InputFieldArgumentFactory.ts | 2 ++ .../StepSizeValueInputFieldArgument.ts | 31 +++++++++++++++++++ .../_new/fields/Slider/SliderComponent.svelte | 5 +-- .../_new/fields/Slider/SliderIPF.ts | 4 +++ .../inputFieldParser/InputFieldConfigs.ts | 15 +++++++++ 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/fieldArguments/inputFieldArguments/arguments/StepSizeValueInputFieldArgument.ts diff --git a/src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts b/src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts index 55679735..75bb8e83 100644 --- a/src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts +++ b/src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts @@ -13,12 +13,14 @@ import { DefaultValueInputFieldArgument } from './arguments/DefaultValueInputFie import { PlaceholderInputFieldArgument } from './arguments/PlaceholderInputFieldArgument'; import { InputFieldArgumentType } from '../../parsers/inputFieldParser/InputFieldConfigs'; import { UseLinksInputFieldArgument } from './arguments/UseLinksInputFieldArgument'; +import { StepSizeValueInputFieldArgument } from './arguments/StepSizeValueInputFieldArgument'; export const INPUT_FIELD_ARGUMENT_MAP = { [InputFieldArgumentType.CLASS]: ClassInputFieldArgument, [InputFieldArgumentType.ADD_LABELS]: AddLabelsInputFieldArgument, [InputFieldArgumentType.MIN_VALUE]: MinValueInputFieldArgument, [InputFieldArgumentType.MAX_VALUE]: MaxValueInputFieldArgument, + [InputFieldArgumentType.STEP_SIZE]: StepSizeValueInputFieldArgument, [InputFieldArgumentType.OPTION]: OptionInputFieldArgument, [InputFieldArgumentType.TITLE]: TitleInputFieldArgument, [InputFieldArgumentType.OPTION_QUERY]: OptionQueryInputFieldArgument, diff --git a/src/fieldArguments/inputFieldArguments/arguments/StepSizeValueInputFieldArgument.ts b/src/fieldArguments/inputFieldArguments/arguments/StepSizeValueInputFieldArgument.ts new file mode 100644 index 00000000..4105f923 --- /dev/null +++ b/src/fieldArguments/inputFieldArguments/arguments/StepSizeValueInputFieldArgument.ts @@ -0,0 +1,31 @@ +import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument'; +import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors'; +import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/inputFieldParser/InputFieldConfigs'; +import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers'; + +export class StepSizeValueInputFieldArgument extends AbstractInputFieldArgument { + value: number = 0; + + _parseValue(value: ParsingResultNode[]): void { + this.value = Number.parseFloat(value[0].value); + if (Number.isNaN(this.value)) { + throw new MetaBindParsingError( + ErrorLevel.WARNING, + 'failed to set value for input field argument', + "value of argument 'stepSize' must be of type number", + ); + } + if (this.value <= 0) { + throw new MetaBindParsingError( + ErrorLevel.WARNING, + 'failed to set value for input field argument', + "value of argument 'stepSize' must be a positive number", + ); + + } + } + + public getConfig(): InputFieldArgumentConfig { + return InputFieldArgumentConfigs.stepSize; + } +} diff --git a/src/inputFields/_new/fields/Slider/SliderComponent.svelte b/src/inputFields/_new/fields/Slider/SliderComponent.svelte index 2a0fc579..39011c28 100644 --- a/src/inputFields/_new/fields/Slider/SliderComponent.svelte +++ b/src/inputFields/_new/fields/Slider/SliderComponent.svelte @@ -2,6 +2,7 @@ export let value: number; export let minValue: number; export let maxValue: number; + export let stepSize: number; export let addLabels: boolean; export let onValueChange: (value: number) => void; @@ -12,11 +13,11 @@ {#if addLabels} {minValue} - onValueChange(value)}> {maxValue} {:else} - onValueChange(value)}> {/if} diff --git a/src/inputFields/_new/fields/Slider/SliderIPF.ts b/src/inputFields/_new/fields/Slider/SliderIPF.ts index ec572a76..b517c5a3 100644 --- a/src/inputFields/_new/fields/Slider/SliderIPF.ts +++ b/src/inputFields/_new/fields/Slider/SliderIPF.ts @@ -8,12 +8,15 @@ import { InputFieldArgumentType } from '../../../../parsers/inputFieldParser/Inp export class SliderIPF extends NewAbstractInputField { minValue: number; maxValue: number; + stepSize: number; constructor(renderChild: InputFieldMDRC) { super(renderChild); + // FIXME: Check that minvalue < maxvalue. this.minValue = this.renderChild.getArgument(InputFieldArgumentType.MIN_VALUE)?.value ?? 0; this.maxValue = this.renderChild.getArgument(InputFieldArgumentType.MAX_VALUE)?.value ?? 100; + this.stepSize = this.renderChild.getArgument(InputFieldArgumentType.STEP_SIZE)?.value ?? 1; } protected filterValue(value: any): number | undefined { @@ -51,6 +54,7 @@ export class SliderIPF extends NewAbstractInputField { return { minValue: this.minValue, maxValue: this.maxValue, + stepSize: this.stepSize, addLabels: this.renderChild.getArgument(InputFieldArgumentType.ADD_LABELS)?.value === true, }; } diff --git a/src/parsers/inputFieldParser/InputFieldConfigs.ts b/src/parsers/inputFieldParser/InputFieldConfigs.ts index 67bb5b86..907ff855 100644 --- a/src/parsers/inputFieldParser/InputFieldConfigs.ts +++ b/src/parsers/inputFieldParser/InputFieldConfigs.ts @@ -30,6 +30,7 @@ export enum InputFieldArgumentType { ADD_LABELS = 'addLabels', MIN_VALUE = 'minValue', MAX_VALUE = 'maxValue', + STEP_SIZE = 'stepSize', OPTION = 'option', TITLE = 'title', OPTION_QUERY = 'optionQuery', @@ -231,6 +232,20 @@ export const InputFieldArgumentConfigs: Record Date: Wed, 25 Oct 2023 12:16:16 +0200 Subject: [PATCH 2/2] Allow floaty values for max and min input field arguments --- .../inputFieldArguments/arguments/MaxValueInputFieldArgument.ts | 2 +- .../inputFieldArguments/arguments/MinValueInputFieldArgument.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fieldArguments/inputFieldArguments/arguments/MaxValueInputFieldArgument.ts b/src/fieldArguments/inputFieldArguments/arguments/MaxValueInputFieldArgument.ts index 8f913477..ce81f515 100644 --- a/src/fieldArguments/inputFieldArguments/arguments/MaxValueInputFieldArgument.ts +++ b/src/fieldArguments/inputFieldArguments/arguments/MaxValueInputFieldArgument.ts @@ -7,7 +7,7 @@ export class MaxValueInputFieldArgument extends AbstractInputFieldArgument { value: number = 100; _parseValue(value: ParsingResultNode[]): void { - this.value = Number.parseInt(value[0].value); + this.value = Number.parseFloat(value[0].value); if (Number.isNaN(this.value)) { throw new MetaBindParsingError( ErrorLevel.ERROR, diff --git a/src/fieldArguments/inputFieldArguments/arguments/MinValueInputFieldArgument.ts b/src/fieldArguments/inputFieldArguments/arguments/MinValueInputFieldArgument.ts index a0a25587..f0072556 100644 --- a/src/fieldArguments/inputFieldArguments/arguments/MinValueInputFieldArgument.ts +++ b/src/fieldArguments/inputFieldArguments/arguments/MinValueInputFieldArgument.ts @@ -7,7 +7,7 @@ export class MinValueInputFieldArgument extends AbstractInputFieldArgument { value: number = 0; _parseValue(value: ParsingResultNode[]): void { - this.value = Number.parseInt(value[0].value); + this.value = Number.parseFloat(value[0].value); if (Number.isNaN(this.value)) { throw new MetaBindParsingError( ErrorLevel.ERROR,