Skip to content

Commit 4c00199

Browse files
Martynas ŽilinskasDovydasNavickas
authored andcommitted
Added return types to form-store methods.
1 parent 8e97d7b commit 4c00199

File tree

6 files changed

+96
-95
lines changed

6 files changed

+96
-95
lines changed

packages/simplr-forms-core/__tests__/stores/form-store.test.ts

Lines changed: 56 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -35,65 +35,64 @@ describe("Form store", () => {
3535

3636
it("registers a field", () => {
3737
const fieldId = "FIELD-ID";
38-
const initialValue = "INITIAL-VALUE";
38+
const value = "value";
3939
const defaultValue = "DEFAULT-VALUE";
4040

41-
formStore.RegisterField(fieldId, initialValue, defaultValue);
41+
formStore.RegisterField(fieldId, defaultValue, undefined, value);
42+
4243
expect(formStore.HasField(fieldId)).toBe(true);
43-
expect(formStore.GetField(fieldId)).not.toBeUndefined();
44-
expect(formStore.GetField(fieldId).Value).toBe(initialValue);
45-
expect(formStore.GetField(fieldId).DefaultValue).toBe(defaultValue);
44+
45+
const fieldState = formStore.GetField(fieldId);
46+
47+
expect(fieldState).not.toBeUndefined();
48+
expect(fieldState.Value).toBe(value);
49+
expect(fieldState.InitialValue).toBe(value);
50+
expect(fieldState.DefaultValue).toBe(defaultValue);
4651
});
4752

53+
// TODO: Write test with initial value
54+
4855
it("unregisters a field", () => {
49-
const fieldId = "FIELD-ID";
50-
const initialValue = "INITIAL-VALUE";
51-
const defaultValue = "DEFAULT-VALUE";
56+
const fieldId = "field-id";
5257

53-
formStore.RegisterField(fieldId, initialValue, defaultValue);
58+
formStore.RegisterField(fieldId, "", undefined, "value");
5459
formStore.UnregisterField(fieldId);
60+
5561
expect(formStore.GetField(fieldId)).toBeUndefined();
5662
expect(formStore.HasField(fieldId)).toBe(false);
5763
});
5864

5965
it("has a field", () => {
60-
const fieldId = "FIELD-ID";
61-
const initialValue = "INITIAL-VALUE";
62-
const defaultValue = "DEFAULT-VALUE";
63-
66+
const fieldId = "field-id";
6467
expect(formStore.HasField(fieldId)).toBe(false);
65-
formStore.RegisterField(fieldId, initialValue, defaultValue);
68+
formStore.RegisterField(fieldId, "", undefined, "");
6669
expect(formStore.HasField(fieldId)).toBe(true);
6770
});
6871

6972
it("get a field", () => {
70-
const fieldId = "FIELD-ID";
71-
const initialValue = "INITIAL-VALUE";
72-
const defaultValue = "DEFAULT-VALUE";
73+
const fieldId = "field-id";
7374

7475
expect(formStore.GetField(fieldId)).toBeUndefined();
75-
formStore.RegisterField(fieldId, initialValue, defaultValue);
76+
formStore.RegisterField(fieldId, "", undefined, "");
7677
expect(formStore.GetField(fieldId)).not.toBeUndefined();
7778
});
7879

7980
it("value changed", () => {
80-
const fieldId = "FIELD-ID";
81-
const initialValue = "INITIAL-VALUE";
82-
const defaultValue = "DEFAULT-VALUE";
81+
const fieldId = "field-id";
82+
const value = "value";
8383
const nextValue = "NEXT-VALUE";
8484

85-
formStore.RegisterField(fieldId, initialValue, defaultValue);
86-
expect(formStore.GetField(fieldId).Value).toBe(initialValue);
85+
formStore.RegisterField(fieldId, undefined, undefined, value);
86+
expect(formStore.GetField(fieldId).Value).toBe(value);
87+
8788
formStore.ValueChanged(fieldId, nextValue);
8889
expect(formStore.GetField(fieldId).Value).toBe(nextValue);
8990
});
9091

9192
it("validate field without error", async (done) => {
92-
const fieldId = "FIELD-ID";
93-
const initialValue = "INITIAL-VALUE";
94-
const defaultValue = "DEFAULT-VALUE";
93+
const fieldId = "field-id";
9594

96-
formStore.RegisterField(fieldId, initialValue, defaultValue);
95+
formStore.RegisterField(fieldId, undefined, undefined, "value");
9796
const validationPromise = new Promise<never>((resolve, reject) => {
9897
setTimeout(() => {
9998
resolve();
@@ -118,11 +117,9 @@ describe("Form store", () => {
118117

119118
it("validate field with error", async (done) => {
120119
const fieldId = "FIELD-ID";
121-
const initialValue = "INITIAL-VALUE";
122-
const defaultValue = "DEFAULT-VALUE";
123120
const formError: FormError = { Message: "Error Message" };
124121

125-
formStore.RegisterField(fieldId, initialValue, defaultValue);
122+
formStore.RegisterField(fieldId, undefined, undefined, "value");
126123
const validationPromise = new Promise<never>((resolve, reject) => {
127124
setTimeout(() => {
128125
reject(formError);
@@ -145,6 +142,7 @@ describe("Form store", () => {
145142

146143
try {
147144
const error = formStore.GetField(fieldId).Error;
145+
148146
expect(formStore.GetField(fieldId).Validating).toBe(false);
149147
expect(error).not.toBeUndefined();
150148
expect(error).not.toBeNull();
@@ -158,11 +156,10 @@ describe("Form store", () => {
158156

159157
it("skip validation when newValue has expired", async (done) => {
160158
const fieldId = "FIELD-ID";
161-
const initialValue = "INITIAL-VALUE";
162-
const defaultValue = "DEFAULT-VALUE";
163159
const formError = "field error";
160+
const value = "text";
164161

165-
formStore.RegisterField(fieldId, initialValue, defaultValue);
162+
formStore.RegisterField(fieldId, undefined, undefined, value);
166163
const validationPromise = new Promise<never>((resolve, reject) => {
167164
setTimeout(() => {
168165
reject(formError);
@@ -172,7 +169,7 @@ describe("Form store", () => {
172169
formStore.Validate(fieldId, validationPromise);
173170

174171
// Imitate removal of last letter
175-
formStore.ValueChanged(fieldId, initialValue.slice(0, initialValue.length - 1));
172+
formStore.ValueChanged(fieldId, value.slice(0, value.length - 1));
176173

177174
try {
178175
expect(formStore.GetField(fieldId).Validating).toBe(true);
@@ -199,16 +196,13 @@ describe("Form store", () => {
199196
});
200197

201198
it("registers field with props", () => {
202-
const fieldId = "FIELD-ID";
203-
const defaultValue = "DEFAULT-VALUE";
199+
const fieldId = "field-id";
204200
const fieldProps: MyFieldProps = {
205201
name: "fieldName",
206-
value: "initial-value",
207-
defaultValue: defaultValue,
208202
randomKey: "random value"
209203
};
210204

211-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
205+
formStore.RegisterField(fieldId, undefined, undefined, undefined, fieldProps);
212206

213207
const fieldPropsRecord = recordify<FieldStateProps, FieldStatePropsRecord>(fieldProps);
214208

@@ -218,29 +212,25 @@ describe("Form store", () => {
218212

219213
it("updates field props", () => {
220214
const fieldId = "FIELD-ID";
221-
const defaultValue = "DEFAULT-VALUE";
222215
const fieldProps: MyFieldProps = {
223216
name: "field-name",
224-
value: "initialValue",
225-
defaultValue: defaultValue,
226217
randomKey: "random value"
227218
};
228219

229-
// Changed value and removed randomKey prop
220+
// Removed randomKey prop
230221
const fieldPropsNext: MyFieldProps = {
231222
name: fieldProps.name,
232-
value: "Updated value"
233223
};
234224
const fieldPropsNextRecord = recordify<FieldStateProps, FieldStatePropsRecord>(fieldPropsNext);
235225

236-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
226+
formStore.RegisterField(fieldId, undefined, undefined, undefined, fieldProps);
237227
formStore.UpdateProps(fieldId, fieldPropsNext);
238228

239229
// Deep-check the updated props
240230
expect(Immutable.is(formStore.GetField(fieldId).Props, fieldPropsNextRecord)).toBe(true);
241231
});
242232

243-
it("clears all fields values", () => {
233+
it("clears all fields values to default values", () => {
244234
let fieldsIds: string[] = [];
245235
for (let i = 0; i < 5; i++) {
246236
fieldsIds.push(`field-id-${i}`);
@@ -249,13 +239,12 @@ describe("Form store", () => {
249239
const defaultValue = "default value";
250240
const fieldProps: MyFieldProps = {
251241
name: "field-name",
252-
value: "initial value",
253242
defaultValue: defaultValue,
254-
randomKey: "random value"
243+
value: "value"
255244
};
256245

257246
for (const fieldId of fieldsIds) {
258-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
247+
formStore.RegisterField(fieldId, fieldProps.defaultValue, undefined, fieldProps.value, fieldProps);
259248
}
260249
formStore.ClearFields();
261250

@@ -265,36 +254,35 @@ describe("Form store", () => {
265254
}
266255
});
267256

268-
it("clears fields values by fieldsIds", () => {
257+
it("clears fields values by fieldsIds to default values", () => {
269258
let fieldsIds: string[] = [];
270259
for (let i = 0; i < 5; i++) {
271260
fieldsIds.push(`field-id-${i}`);
272261
}
273-
const clearedFieldId = fieldsIds[0];
262+
const fieldToClearId = fieldsIds[0];
274263
const defaultValue = "default value";
275264
const fieldProps: MyFieldProps = {
276265
name: "field-name",
277-
value: "initial value",
278266
defaultValue: defaultValue,
279-
randomKey: "random value"
267+
value: "value",
280268
};
281269

282270
for (const fieldId of fieldsIds) {
283-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
271+
formStore.RegisterField(fieldId, fieldProps.defaultValue, undefined, fieldProps.value, fieldProps);
284272
}
285-
formStore.ClearFields([clearedFieldId]);
273+
formStore.ClearFields([fieldToClearId]);
286274

287275
for (const fieldId of fieldsIds) {
288276
const fieldState = formStore.GetField(fieldId);
289-
if (fieldId === clearedFieldId) {
277+
if (fieldId === fieldToClearId) {
290278
expect(fieldState.Value).toBe(defaultValue);
291279
} else {
292280
expect(fieldState.Value).not.toBe(defaultValue);
293281
}
294282
}
295283
});
296284

297-
it("resets all fields values", () => {
285+
it("resets all fields values to initial values", () => {
298286
let fieldsIds: string[] = [];
299287
for (let i = 0; i < 5; i++) {
300288
fieldsIds.push(`field-id-${i}`);
@@ -303,13 +291,13 @@ describe("Form store", () => {
303291
const nextValue = "next value";
304292
const fieldProps: MyFieldProps = {
305293
name: "field-name",
306-
value: initialValue,
307-
defaultValue: "default value",
294+
initialValue: initialValue,
295+
value: "value",
308296
randomKey: "random value"
309297
};
310298

311299
for (const fieldId of fieldsIds) {
312-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
300+
formStore.RegisterField(fieldId, undefined, fieldProps.initialValue, fieldProps.value, fieldProps);
313301
formStore.ValueChanged(fieldId, nextValue);
314302
}
315303
formStore.ResetFields();
@@ -320,31 +308,30 @@ describe("Form store", () => {
320308
}
321309
});
322310

323-
it("resets fields values by fieldsIds", () => {
311+
it("resets fields values by fieldsIds to initial values", () => {
324312
let fieldsIds: string[] = [];
325313
for (let i = 0; i < 5; i++) {
326314
fieldsIds.push(`field-id-${i}`);
327315
}
328-
const resetFieldId = fieldsIds[0];
329-
const initialValue = "initial value";
316+
const fieldToResetId = fieldsIds[0];
317+
const value = "value";
330318
const nextValue = "next value";
331319
const fieldProps: MyFieldProps = {
332320
name: "field-name",
333-
value: initialValue,
334-
defaultValue: "default value",
321+
value: value,
335322
randomKey: "random value"
336323
};
337324

338325
for (const fieldId of fieldsIds) {
339-
formStore.RegisterField(fieldId, fieldProps.value, fieldProps.defaultValue, fieldProps);
326+
formStore.RegisterField(fieldId, undefined, undefined, fieldProps.value, fieldProps);
340327
formStore.ValueChanged(fieldId, nextValue);
341328
}
342-
formStore.ResetFields([resetFieldId]);
329+
formStore.ResetFields([fieldToResetId]);
343330

344331
for (const fieldId of fieldsIds) {
345332
const fieldState = formStore.GetField(fieldId);
346-
if (fieldId === resetFieldId) {
347-
expect(fieldState.Value).toBe(initialValue);
333+
if (fieldId === fieldToResetId) {
334+
expect(fieldState.Value).toBe(value);
348335
} else {
349336
expect(fieldState.Value).toBe(nextValue);
350337
}

packages/simplr-forms-core/__tests__/test-components/test-field.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import { BaseField, BaseFieldState } from "../../src/abstractions/base-field";
44
import { FieldProps, FieldValue } from "../../src/contracts/field";
55

66
export interface MyFieldProps extends FieldProps {
7-
value?: string;
87
defaultValue?: string;
8+
initialValue?: string;
9+
value?: string;
910
randomKey?: string;
1011
}
1112

@@ -25,7 +26,14 @@ export class MyTestField extends BaseField<MyFieldProps, MyFieldState> {
2526
return "";
2627
}
2728

29+
protected get RawValue(): FieldValue {
30+
return "";
31+
}
32+
2833
protected get DefaultValue(): FieldValue {
34+
if (this.props.defaultValue != null) {
35+
return this.props.defaultValue;
36+
}
2937
return "";
3038
}
31-
}
39+
}

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,15 @@ export abstract class BaseField<TProps extends FieldProps, TState extends BaseFi
238238
abstract render(): JSX.Element | null;
239239

240240
/**
241-
* Initial value before render.
242-
* Most common usage is for getting initial value from field props.
241+
* Value before render.
242+
* Most common usage is for getting value from field props.
243243
*
244244
* @readonly
245245
* @protected
246246
* @type {(FieldContracts.ValueTypes | any)}
247247
* @memberOf BaseField
248248
*/
249-
protected abstract get RawInitialValue(): FieldValue;
250-
249+
protected abstract get RawValue(): FieldValue;
251250

252251
/**
253252
* Default field value.
@@ -259,6 +258,11 @@ export abstract class BaseField<TProps extends FieldProps, TState extends BaseFi
259258
*/
260259
protected abstract get DefaultValue(): FieldValue;
261260

261+
/**
262+
* Initial value.
263+
*/
264+
protected abstract get RawInitialValue(): FieldValue;
265+
262266
/**
263267
* ========================
264268
* Local helper methods
@@ -278,10 +282,12 @@ export abstract class BaseField<TProps extends FieldProps, TState extends BaseFi
278282
}
279283

280284
const initialValue = this.ProcessValueBeforeStore(this.RawInitialValue);
285+
const value = this.ProcessValueBeforeStore(this.RawValue);
281286
this.FormStore.RegisterField(
282287
this.FieldId,
283-
initialValue,
284288
this.DefaultValue,
289+
initialValue,
290+
value,
285291
this.props,
286292
this.FieldsGroupId
287293
);

0 commit comments

Comments
 (0)