Skip to content

Commit aee6400

Browse files
Feature/transitional value (#67)
* Updated .gitignore for MacOS. Moved mz package from devDependencies to simplr-mvdir dependencies. * simplr-forms and simplr-forms-dom packages updated and fixed. * TransitionalValue added to form-store and modifiers. * Currency modifier removed. * mvdir version updated in simplr-validation. * StringToDecimalModifier added into number field. * Leading zero solved for string-to-decimal.
1 parent 7ed67ec commit aee6400

File tree

19 files changed

+220
-155
lines changed

19 files changed

+220
-155
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,6 @@ packages/simplr-forms-test
257257
dist
258258
@types
259259
package-lock.json
260+
261+
# MacOS
262+
.DS_Store

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
"test": "lerna run test-tsc"
99
},
1010
"devDependencies": {
11-
"lerna": "2.0.0-rc.2"
11+
"lerna": "2.0.0-rc.5"
1212
}
1313
}

packages/simplr-forms-dom/package.json

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,35 +36,33 @@
3636
"@types/gulp": "^4.0.3",
3737
"@types/jest": "^19.2.3",
3838
"@types/sinon": "^2.2.2",
39-
"@types/undertaker": "^0.12.28",
39+
"@types/undertaker": "^1.1.1",
4040
"@types/vinyl-fs": "^2.4.5",
4141
"@types/webpack": "^2.2.15",
4242
"enzyme": "^2.8.2",
4343
"gulp": "github:gulpjs/gulp#4.0",
4444
"jest": "^20.0.3",
4545
"jest-enzyme": "^3.1.1",
46-
"mkdirp": "^0.5.1",
47-
"mv": "^2.1.1",
48-
"mz": "^2.6.0",
49-
"simplr-mvdir": "0.0.1-beta.7",
46+
"simplr-mvdir": "0.0.1-beta.8",
5047
"sinon": "^2.2.0",
5148
"source-map-loader": "^0.2.1",
5249
"ts-jest": "^20.0.4",
5350
"ts-loader": "^2.1.0",
5451
"tslint": "^5.2.0",
55-
"typescript": "2.3.2",
52+
"typescript": "^2.3.2",
53+
"uglify-js": "^3.0.15",
5654
"webpack": "^2.5.1"
5755
},
5856
"dependencies": {
59-
"@types/react": "^15.0.24",
6057
"@types/prop-types": "^15.5.1",
58+
"@types/react": "^15.0.24",
6159
"immutable": "^3.8.1",
62-
"simplr-forms": "^4.0.1-alpha.3",
63-
"typed-immutable-record": "0.0.6",
60+
"prop-types": "^15.5.8",
6461
"react": "^15.5.4",
6562
"react-dom": "^15.5.4",
66-
"prop-types": "^15.5.8",
67-
"tslib": "^1.7.1"
63+
"simplr-forms": "^4.0.1-alpha.3",
64+
"tslib": "^1.7.1",
65+
"typed-immutable-record": "0.0.6"
6866
},
6967
"jest": {
7068
"setupTestFrameworkScriptFile": "./node_modules/jest-enzyme/lib/index.js",

packages/simplr-forms-dom/src/components/number.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import {
1111
FormProps
1212
} from "../contracts/form";
13-
import { NumericToStringModifier } from "simplr-forms/modifiers";
13+
import { StringToDecimalModifier } from "simplr-forms/modifiers";
1414

1515
export type NumberOnChangeCallback = FieldOnChangeCallback<HTMLInputElement>;
1616

@@ -30,7 +30,7 @@ export interface NumberProps extends DomFieldProps, HTMLElementProps<HTMLInputEl
3030

3131
export class Number extends BaseDomField<NumberProps, BaseDomFieldState> {
3232
protected get DefaultModifiers(): JSX.Element[] {
33-
return [/*<NumericToStringModifier />*/];
33+
return [<StringToDecimalModifier />];
3434
}
3535

3636
protected GetValueFromEvent(event: React.ChangeEvent<HTMLInputElement>): FieldValue {

packages/simplr-forms-dom/src/components/text.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface TextProps extends DomFieldProps, HTMLElementProps<HTMLInputElem
3131
ref?: React.Ref<Text>;
3232
}
3333

34-
export class Text extends BaseDomField<TextProps, BaseDomFieldState> {
34+
export class Text extends BaseDomField<TextProps, BaseDomFieldState, HTMLInputElement> {
3535
protected GetValueFromEvent(event: React.ChangeEvent<HTMLInputElement>): string {
3636
return event.currentTarget.value;
3737
}

packages/simplr-forms/package.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"test-tsc": "tsc -p . --noEmit",
1818
"test-watch": "jest --watchAll",
1919
"test-coverage": "npm test -- --coverage",
20+
"prepublishOnly": "npm run build",
2021
"gulp-build": "tsc -p ./tools/tsconfig.gulp.json",
2122
"gulp-watch": "npm run gulp-build -- -w"
2223
},
@@ -35,23 +36,21 @@
3536
"@types/gulp": "^4.0.3",
3637
"@types/jest": "^19.2.3",
3738
"@types/sinon": "^2.2.2",
38-
"@types/undertaker": "^0.12.28",
39+
"@types/undertaker": "^1.1.1",
3940
"@types/vinyl-fs": "^2.4.5",
4041
"@types/webpack": "^2.2.15",
4142
"enzyme": "^2.8.2",
4243
"gulp": "github:gulpjs/gulp#4.0",
4344
"jest": "^20.0.3",
4445
"jest-enzyme": "^3.1.1",
45-
"on-build-webpack": "^0.1.0",
46-
"react-test-renderer": "^15.5.4",
47-
"simplr-mvdir": "0.0.1-beta.7",
46+
"simplr-mvdir": "0.0.1-beta.8",
4847
"sinon": "^2.2.0",
4948
"source-map-loader": "^0.2.1",
5049
"ts-jest": "^20.0.4",
5150
"ts-loader": "^2.1.0",
5251
"tslint": "^5.2.0",
5352
"typescript": "^2.3.2",
54-
"uglify-js": "^3.0.10",
53+
"uglify-js": "^3.0.15",
5554
"webpack": "^2.5.1"
5655
},
5756
"dependencies": {

packages/simplr-forms/src/abstractions/core-field.ts

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import * as FormStoreActions from "../actions/form-store";
2323
import { FSHContainer } from "../stores/form-stores-handler";
2424
import { FieldValidationType } from "../contracts/validation";
2525
import { FormStoreStateRecord } from "../contracts/form-store";
26+
import { ModifierValue } from "../contracts/value";
2627

2728
export interface CoreFieldState {
2829
FormStoreState: FormStoreStateRecord;
@@ -141,7 +142,7 @@ export abstract class CoreField<TProps extends CoreFieldProps, TState extends Co
141142
* Current or default field value.
142143
*/
143144
protected get Value(): FieldValue {
144-
// If state is defined
145+
// If state is defined and Value is set
145146
if (this.state != null && this.state.Value != null) {
146147
// Return its value
147148
return this.state.Value;
@@ -153,10 +154,23 @@ export abstract class CoreField<TProps extends CoreFieldProps, TState extends Co
153154

154155
protected abstract get ControlledValue(): FieldValue;
155156

156-
protected ProcessValueBeforeStore(value: FieldValue): FieldValue {
157+
protected ProcessValueBeforeStore(value: FieldValue): ModifierValue {
157158
// Parse and normalize value
158159
if (value != null) {
159-
return this.NormalizeValue(this.ParseValue(value));
160+
const modifierValue: ModifierValue = {
161+
Value: value
162+
};
163+
const parsedValue = this.ParseValue(modifierValue);
164+
165+
const result: ModifierValue = {
166+
Value: this.NormalizeValue(parsedValue.Value)
167+
};
168+
169+
if (parsedValue.TransitionalValue != null) {
170+
result.TransitionalValue = this.NormalizeValue(parsedValue.TransitionalValue);
171+
}
172+
173+
return result;
160174
}
161175
return value;
162176
}
@@ -165,7 +179,7 @@ export abstract class CoreField<TProps extends CoreFieldProps, TState extends Co
165179
return this.FormatValue(value);
166180
}
167181

168-
protected ParseValue(value: FieldValue): FieldValue {
182+
protected ParseValue(value: ModifierValue): ModifierValue {
169183
if (this.props.parseValue != null) {
170184
const parser = this.props.parseValue as FieldParseValueCallback;
171185
value = parser(value);
@@ -222,7 +236,8 @@ export abstract class CoreField<TProps extends CoreFieldProps, TState extends Co
222236
state.FormStoreState = newFormStoreState;
223237
}
224238
const newFieldState = this.FormStore.GetField(this.FieldId);
225-
state.Value = this.ProcessValueFromStore(newFieldState.Value);
239+
const value = newFieldState.TransitionalValue != null ? newFieldState.TransitionalValue : newFieldState.Value;
240+
state.Value = this.ProcessValueFromStore(value);
226241
return state;
227242
});
228243
}
@@ -282,19 +297,29 @@ export abstract class CoreField<TProps extends CoreFieldProps, TState extends Co
282297
* ========================
283298
*/
284299

300+
private processedOrEmptyModifierValue(value: FieldValue, processor: (value: FieldValue) => ModifierValue): ModifierValue {
301+
if (value != null) {
302+
return processor(value);
303+
}
304+
return {
305+
Value: value
306+
};
307+
}
308+
285309
/**
286310
* Registers a field in FormStore or throws if the field was already registered
287311
*/
288312
private registerFieldInFormStore(): void {
289-
const defaultValue = this.ProcessValueBeforeStore(this.RawDefaultValue);
290-
const initialValue = this.ProcessValueBeforeStore(this.RawInitialValue);
291-
const value = this.ProcessValueBeforeStore(this.RawValue);
313+
const defaultValue = this.processedOrEmptyModifierValue(this.RawDefaultValue, this.ProcessValueBeforeStore.bind(this));
314+
const initialValue = this.processedOrEmptyModifierValue(this.RawInitialValue, this.ProcessValueBeforeStore.bind(this));
315+
const value = this.processedOrEmptyModifierValue(this.RawValue, this.ProcessValueBeforeStore.bind(this));
292316
this.FormStore.RegisterField(
293317
this.FieldId,
294318
this.props.name,
295-
defaultValue,
296-
initialValue,
297-
value,
319+
defaultValue.Value,
320+
initialValue.Value,
321+
value.Value,
322+
value.TransitionalValue,
298323
this.props,
299324
this.FieldsGroupId
300325
);

packages/simplr-forms/src/contracts/field.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import { FormErrorRecord } from "./error";
33
import { FieldValidationType } from "./validation";
44
import { FormContextPropsObject } from "./form";
55
import { FieldsGroupContextProps } from "./fields-group";
6+
import { ModifierValue } from "./value";
67

78
// Field value can be of any type or undefined
89
export type FieldValue = any | undefined;
910

1011
export type FieldFormatValueCallback = (value: FieldValue) => FieldValue;
11-
export type FieldParseValueCallback = (value: FieldValue) => FieldValue;
12+
export type FieldParseValueCallback = (value: ModifierValue) => ModifierValue;
1213
export type FieldNormalizeValueCallback = (value: FieldValue) => FieldValue;
1314

1415
export interface CoreFieldProps {
@@ -32,6 +33,7 @@ export interface FieldStoreState {
3233
DefaultValue: FieldValue;
3334
InitialValue: FieldValue;
3435
Value: FieldValue;
36+
TransitionalValue?: FieldValue;
3537
Error?: FormErrorRecord;
3638
Touched: boolean;
3739
Pristine: boolean;

packages/simplr-forms/src/contracts/value.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { FieldValue } from "./field";
22

3+
export interface ModifierValue {
4+
Value: FieldValue;
5+
TransitionalValue?: FieldValue;
6+
}
7+
38
export interface Modifier {
49
Format(value: FieldValue): FieldValue;
5-
Parse(value: FieldValue): FieldValue;
10+
Parse(value: ModifierValue): ModifierValue;
611
}
712

813
export interface Normalizer {

packages/simplr-forms/src/modifiers/base-modifier.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import * as React from "react";
2-
import { Modifier } from "../contracts/value";
2+
import {
3+
Modifier,
4+
ModifierValue
5+
} from "../contracts/value";
36
import { FieldValue } from "../contracts/field";
47
import { ValueOfType } from "../utils/value-helpers";
58

69
export abstract class BaseModifier<TProps, TState> extends React.Component<TProps, TState> implements Modifier {
710
// Indentifier function
811
static SimplrFormsCoreModifier() { }
912
abstract Format(value: FieldValue): FieldValue;
10-
abstract Parse(value: FieldValue): FieldValue;
13+
abstract Parse(value: ModifierValue): ModifierValue;
1114
render() {
1215
return null;
1316
}

0 commit comments

Comments
 (0)