File tree Expand file tree Collapse file tree 3 files changed +41
-3
lines changed
projects/rx-form-mapper/src/lib Expand file tree Collapse file tree 3 files changed +41
-3
lines changed Original file line number Diff line number Diff line change @@ -163,6 +163,14 @@ This method converts our class instance into reactive form instance
163163this .form = formMapper .writeForm (new Post ());
164164```
165165
166+ ### fromType
167+
168+ This method converts our class type into reactive form instance
169+
170+ ``` typescript
171+ this .form = formMapper .fromType (Post );
172+ ```
173+
166174### readForm
167175
168176This method converts our form instance into specific class instance
Original file line number Diff line number Diff line change @@ -9,7 +9,19 @@ import { ValidatorResolver } from './validator-resolver';
99
1010@Injectable ( )
1111export class RxFormMapper {
12- constructor ( private readonly customMapperResolver : CustomMapperResolver , private readonly validatorResolver : ValidatorResolver ) { }
12+ public constructor (
13+ private readonly customMapperResolver : CustomMapperResolver ,
14+ private readonly validatorResolver : ValidatorResolver
15+ ) { }
16+
17+ public fromType < T > ( type : Type < T > ) : FormGroup {
18+ if ( isNil ( type ) ) {
19+ throw new Error ( 'type cannot be inferred implicitly' ) ;
20+ }
21+
22+ const formWriter = new FormWriter ( void ( 0 ) , this . customMapperResolver , this . validatorResolver ) ;
23+ return ModelBinder . instance . getMetadata ( type ) . accept ( formWriter ) as FormGroup ;
24+ }
1325
1426 public writeForm < T > ( value : T ) : FormGroup ;
1527 public writeForm < T > ( value : T , type : Type < T > ) : FormGroup ;
Original file line number Diff line number Diff line change @@ -40,11 +40,29 @@ describe('RxFormMapper', () => {
4040 expect ( formMapper . writeForm ( new Test ( ) , Test ) ) . toBeTruthy ( ) ;
4141 } ) ) ;
4242
43- it ( 'writeModel should not accept undefined type' , inject ( [ RxFormMapper ] , ( mapper : RxFormMapper ) => {
43+ it ( 'fromType should create form' , inject ( [ RxFormMapper ] , ( formMapper : RxFormMapper ) => {
44+ class Test {
45+ @FormControl ( )
46+ public name : string ;
47+ }
48+
49+ expect ( formMapper . fromType ( Test ) . get ( 'name' ) ) . toBeTruthy ( ) ;
50+ } ) ) ;
51+
52+ it ( 'fromType should throw error' , inject ( [ RxFormMapper ] , ( formMapper : RxFormMapper ) => {
53+ class Test {
54+ @FormControl ( )
55+ public name : string ;
56+ }
57+
58+ expect ( ( ) => formMapper . fromType ( null ) ) . toThrow ( ) ;
59+ } ) ) ;
60+
61+ it ( 'writeForm should not accept undefined type' , inject ( [ RxFormMapper ] , ( mapper : RxFormMapper ) => {
4462 expect ( ( ) => mapper . writeForm ( null , null ) ) . toThrow ( ) ;
4563 } ) ) ;
4664
47- it ( 'writeModel should return FormGroup' , inject ( [ RxFormMapper ] , ( mapper : RxFormMapper ) => {
65+ it ( 'writeForm should return FormGroup' , inject ( [ RxFormMapper ] , ( mapper : RxFormMapper ) => {
4866 class TestClass { }
4967 expect ( mapper . writeForm ( null , TestClass ) instanceof NgFormGroup ) . toBeTruthy ( ) ;
5068 } ) ) ;
You can’t perform that action at this time.
0 commit comments