From 20d1a5c85f717120b6b3b0b5f44bb536277d80cb Mon Sep 17 00:00:00 2001 From: Wilson Stephen Date: Mon, 9 Apr 2018 12:51:38 +0100 Subject: [PATCH] setModelTouched --- src/FormContainer.tsx | 13 +++++++++++-- src/__tests__/FormContainer.test.tsx | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/FormContainer.tsx b/src/FormContainer.tsx index f54d52d..39c375d 100644 --- a/src/FormContainer.tsx +++ b/src/FormContainer.tsx @@ -16,8 +16,17 @@ const makeWrapper = (config: IFormConfig) => (WrappedComponent: }; } - setModel = (model: { [name in keyof T]: any }) => { - this.setState({ model }); + setModel = (model: { [name in keyof T]: any }, setTouched: boolean = false) => { + let touched: { [key: string]: boolean } = this.state.touched; + + if (!setTouched) { + this.setState({ model }); + } else { + for (var field in model) { + touched[field] = true; + } + this.setState({ model, touched }); + } return model; }; diff --git a/src/__tests__/FormContainer.test.tsx b/src/__tests__/FormContainer.test.tsx index ead71de..d42e1dc 100644 --- a/src/__tests__/FormContainer.test.tsx +++ b/src/__tests__/FormContainer.test.tsx @@ -90,6 +90,27 @@ describe('Form container', () => { }); }); + describe('setModel', () => { + it('should set the model and optionally set the touched field', () => { + const { wrapperComponent, wrappedComponent } = setupTest(); + let state: any = wrapperComponent.state(); + + const setModel = wrappedComponent.props().formMethods.setModel; + + let data = { foo: 2 }; + setModel(data); + state = wrapperComponent.state(); + expect(state.model).toEqual(data); + expect(state.touched).toEqual({}); + + let data = { bar: 1234 }; + setModel(data, true); + state = wrapperComponent.state(); + expect(state.model).toEqual(data); + expect(state.touched).toEqual({ bar: true }); + }); + }); + describe('bindInput', () => { it('should have an input with a name and a value', () => { const { input } = setupTest();