Skip to content

Commit e0d5952

Browse files
committed
untested default value argument
1 parent 5279544 commit e0d5952

21 files changed

+95
-60
lines changed

src/inputFieldArguments/InputFieldArgumentFactory.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { AbstractInputFieldArgument } from './AbstractInputFieldArgument';
1212
import { ShowcaseInputFieldArgument } from './arguments/ShowcaseInputFieldArgument';
1313
import { OffValueInputFieldArgument } from './arguments/OffValueInputFieldArgument';
1414
import { OnValueInputFieldArgument } from './arguments/OnValueInputFieldArgument';
15+
import { DefaultValueInputFieldArgument } from './arguments/DefaultValueInputFieldArgument';
1516

1617
export class InputFieldArgumentFactory {
1718
static createInputFieldArgument(argumentIdentifier: string): AbstractInputFieldArgument {
@@ -37,6 +38,8 @@ export class InputFieldArgumentFactory {
3738
return new OffValueInputFieldArgument();
3839
} else if (argumentIdentifier === InputFieldArgumentType.ON_VALUE) {
3940
return new OnValueInputFieldArgument();
41+
} else if (argumentIdentifier === InputFieldArgumentType.DEFAULT_VALUE) {
42+
return new DefaultValueInputFieldArgument();
4043
} else {
4144
throw new MetaBindParsingError(ErrorLevel.ERROR, 'can not crate input field argument', `unknown argument '${argumentIdentifier}'`);
4245
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
2+
import { InputFieldArgumentType, InputFieldType } from '../../parsers/InputFieldDeclarationParser';
3+
import { MBExtendedLiteral, parseLiteral } from '../../utils/Utils';
4+
5+
export class DefaultValueInputFieldArgument extends AbstractInputFieldArgument {
6+
identifier: InputFieldArgumentType = InputFieldArgumentType.DEFAULT_VALUE;
7+
allowedInputFields: InputFieldType[] = [];
8+
value: MBExtendedLiteral = '';
9+
requiresValue: boolean = true;
10+
allowMultiple: boolean = false;
11+
12+
parseValue(valueStr: string): void {
13+
this.value = parseLiteral(valueStr);
14+
}
15+
}

src/inputFields/AbstractInputField.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { InputFieldMDRC } from '../renderChildren/InputFieldMDRC';
22
import { MBExtendedLiteral } from '../utils/Utils';
33
import { ComputedSignal } from '../utils/Signal';
4+
import { InputFieldArgumentType } from '../parsers/InputFieldDeclarationParser';
5+
import { DefaultValueInputFieldArgument } from '../inputFieldArguments/arguments/DefaultValueInputFieldArgument';
46

57
export type GetInputFieldType<T extends AbstractInputField<any>> = T extends AbstractInputField<infer R> ? R : unknown;
68

@@ -18,7 +20,8 @@ export abstract class AbstractInputField<T extends MBExtendedLiteral> {
1820
};
1921

2022
this.filteredWriteSignal = new ComputedSignal<MBExtendedLiteral | undefined, T>(this.renderChild.writeSignal, (value: MBExtendedLiteral | undefined) => {
21-
return this.filterValue(value);
23+
const filteredValue = this.filterValue(value);
24+
return filteredValue !== undefined ? filteredValue : this.getDefaultValue();
2225
});
2326

2427
this.filteredWriteSignal.registerListener({
@@ -38,6 +41,15 @@ export abstract class AbstractInputField<T extends MBExtendedLiteral> {
3841
return this.getValue() === value;
3942
}
4043

44+
getDefaultValue(): T {
45+
const defaultValueArgument = this.renderChild.getArgument(InputFieldArgumentType.DEFAULT_VALUE) as DefaultValueInputFieldArgument | undefined;
46+
if (!defaultValueArgument) {
47+
return this.getFallbackDefaultValue();
48+
}
49+
const filteredValue = this.filterValue(defaultValueArgument.value);
50+
return filteredValue !== undefined ? filteredValue : this.getFallbackDefaultValue();
51+
}
52+
4153
/**
4254
* Returns the current content of the input field
4355
*/
@@ -48,14 +60,14 @@ export abstract class AbstractInputField<T extends MBExtendedLiteral> {
4860
*
4961
* @param value
5062
*/
51-
abstract filterValue(value: MBExtendedLiteral | undefined): T;
63+
abstract filterValue(value: MBExtendedLiteral | undefined): T | undefined;
5264

5365
abstract updateDisplayValue(value: T): void;
5466

5567
/**
5668
* Returns the default value of this input field
5769
*/
58-
abstract getDefaultValue(): T;
70+
abstract getFallbackDefaultValue(): T;
5971

6072
/**
6173
* Returns the HTML element this input field is wrapped in

src/inputFields/fields/DateInputField.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ export class DateInputField extends AbstractInputField<T> {
5656
return DateParser.stringify(this.date);
5757
}
5858

59-
public filterValue(value: MBExtendedLiteral | undefined): T {
59+
public filterValue(value: MBExtendedLiteral | undefined): T | undefined {
6060
if (value === undefined || typeof value !== 'string') {
61-
return this.getDefaultValue();
61+
return undefined;
6262
}
6363
const date = DateParser.parse(value);
6464
if (date.isValid()) {
6565
return DateParser.stringify(date);
6666
} else {
67-
return this.getDefaultValue();
67+
return undefined;
6868
}
6969
}
7070

@@ -82,7 +82,7 @@ export class DateInputField extends AbstractInputField<T> {
8282
this.yearComponent?.setValue(this.date.year().toString());
8383
}
8484

85-
public getDefaultValue(): T {
85+
public getFallbackDefaultValue(): T {
8686
return DateParser.stringify(DateParser.getDefaultDate());
8787
}
8888

src/inputFields/fields/DatePicker/DatePickerInputField.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class DatePickerInputField extends AbstractInputField<T> {
2929
return this.date !== null ? DateParser.stringify(this.date) : null;
3030
}
3131

32-
filterValue(value: MBExtendedLiteral): T {
32+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
3333
if (value === undefined || typeof value !== 'string') {
3434
return null;
3535
}
@@ -46,7 +46,7 @@ export class DatePickerInputField extends AbstractInputField<T> {
4646
this.component?.updateValue(this.date);
4747
}
4848

49-
getDefaultValue(): string {
49+
getFallbackDefaultValue(): string {
5050
return DateParser.stringify(DateParser.getDefaultDate());
5151
}
5252

src/inputFields/fields/Editor/EditorInputField.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class EditorInputField extends AbstractInputField<T> {
1515
constructor(inputFieldMDRC: InputFieldMDRC) {
1616
super(inputFieldMDRC);
1717

18-
this.value = this.getDefaultValue();
18+
this.value = this.getFallbackDefaultValue();
1919
}
2020

2121
getValue(): T | undefined {
@@ -25,9 +25,9 @@ export class EditorInputField extends AbstractInputField<T> {
2525
return this.value;
2626
}
2727

28-
filterValue(value: MBExtendedLiteral): T {
28+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
2929
if (value == null || typeof value !== 'string') {
30-
return this.getDefaultValue();
30+
return undefined;
3131
}
3232

3333
return value;
@@ -38,7 +38,7 @@ export class EditorInputField extends AbstractInputField<T> {
3838
this.component?.updateValue(value);
3939
}
4040

41-
getDefaultValue(): T {
41+
getFallbackDefaultValue(): T {
4242
return '';
4343
}
4444

src/inputFields/fields/ImageSuggest/ImageSuggestInputField.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class ImageSuggestInputField extends AbstractInputField<T> {
2121
constructor(inputFieldMDRC: InputFieldMDRC) {
2222
super(inputFieldMDRC);
2323

24-
this.value = this.getDefaultValue();
24+
this.value = this.getFallbackDefaultValue();
2525
this.options = [];
2626
}
2727

@@ -32,9 +32,9 @@ export class ImageSuggestInputField extends AbstractInputField<T> {
3232
return this.value;
3333
}
3434

35-
filterValue(value: MBExtendedLiteral): T {
35+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
3636
if (value == null || typeof value !== 'string') {
37-
return this.getDefaultValue();
37+
return undefined;
3838
}
3939

4040
return value;
@@ -49,7 +49,7 @@ export class ImageSuggestInputField extends AbstractInputField<T> {
4949
return this.value == value;
5050
}
5151

52-
getDefaultValue(): T {
52+
getFallbackDefaultValue(): T {
5353
return '';
5454
}
5555

src/inputFields/fields/InlineSelectInputField.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ export class InlineSelectInputField extends AbstractInputField<T> {
2727
return parseLiteral(this.selectComponent.getValue());
2828
}
2929

30-
filterValue(value: MBExtendedLiteral | undefined): T {
30+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
3131
if (value === undefined || typeof value === 'object') {
32-
return this.getDefaultValue();
32+
return undefined;
3333
}
3434

3535
return value;
@@ -39,7 +39,7 @@ export class InlineSelectInputField extends AbstractInputField<T> {
3939
this.selectComponent?.setValue(stringifyLiteral(value));
4040
}
4141

42-
getDefaultValue(): T {
42+
getFallbackDefaultValue(): T {
4343
return '';
4444
}
4545

src/inputFields/fields/List/ListInputField.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class ListInputField extends AbstractInputField<T> {
1515
constructor(inputFieldMDRC: InputFieldMDRC) {
1616
super(inputFieldMDRC);
1717

18-
this.value = this.getDefaultValue();
18+
this.value = this.getFallbackDefaultValue();
1919
}
2020

2121
getValue(): T | undefined {
@@ -25,9 +25,9 @@ export class ListInputField extends AbstractInputField<T> {
2525
return this.value.map(x => parseLiteral(x));
2626
}
2727

28-
filterValue(value: MBExtendedLiteral | undefined): T {
28+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
2929
if (value == null || !Array.isArray(value)) {
30-
return this.getDefaultValue();
30+
return undefined;
3131
}
3232

3333
return value;
@@ -46,7 +46,7 @@ export class ListInputField extends AbstractInputField<T> {
4646
return doArraysContainEqualValues(this.getValue(), value);
4747
}
4848

49-
getDefaultValue(): string[] {
49+
getFallbackDefaultValue(): string[] {
5050
return [];
5151
}
5252

src/inputFields/fields/NumberInputField.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ export class NumberInputField extends AbstractInputField<T> {
1616
return parseFloat(this.numberComponent.getValue());
1717
}
1818

19-
filterValue(value: MBExtendedLiteral | undefined): T {
19+
filterValue(value: MBExtendedLiteral | undefined): T | undefined {
2020
if (typeof value === 'number') {
2121
return value;
2222
} else if (typeof value === 'string') {
2323
return Number.parseFloat(value);
2424
} else {
25-
return this.getDefaultValue();
25+
return undefined;
2626
}
2727
}
2828

@@ -34,7 +34,7 @@ export class NumberInputField extends AbstractInputField<T> {
3434
return this.getValue() == value;
3535
}
3636

37-
getDefaultValue(): T {
37+
getFallbackDefaultValue(): T {
3838
return 0;
3939
}
4040

0 commit comments

Comments
 (0)