@@ -25,6 +25,8 @@ class TestContainerComponent {
2525 name : 'Unknown' ,
2626 date : new Date ( )
2727 } ;
28+ labelValues = [ { name : 'label1' } , { name : 'label2' } ] ;
29+ formData1 = { labels : this . labelValues } ;
2830 @ViewChild ( DxFormComponent ) formComponent : DxFormComponent ;
2931
3032 validateForm ( ) {
@@ -174,7 +176,7 @@ describe('DxForm', () => {
174176 <dxi-validation-rule type="custom" [validationCallback]="validateForm">
175177 </dxi-validation-rule>
176178 </dxi-item>
177- </dxi-item>
179+ </dxi-item>
178180 </dx-form>
179181 `
180182 }
@@ -187,6 +189,60 @@ describe('DxForm', () => {
187189 expect ( formInstance . validate ( ) ) . toBeDefined ( ) ;
188190 } ) ;
189191
192+ it ( 'should not call resetOption for rerendered nested collection components' , ( ) => {
193+ TestBed . overrideComponent ( TestContainerComponent , {
194+ set : {
195+ template : `
196+ <dx-form [formData]="formData1">
197+ <dxi-item itemType="group"
198+ name="label-container">
199+ <dxi-item [dataField]="'labels[' + i + ']'" *ngFor="let labelValue of labelValues; let i = index">
200+ <dxo-label [text]="labelValue.name"></dxo-label>
201+ </dxi-item>
202+ </dxi-item>
203+ </dx-form>
204+ `
205+ }
206+ } ) ;
207+
208+ let fixture = TestBed . createComponent ( TestContainerComponent ) ;
209+ fixture . detectChanges ( ) ;
210+ let formInstance = getWidget ( fixture ) ;
211+ let spy = spyOn ( formInstance , 'resetOption' ) ;
212+
213+ fixture . componentInstance . labelValues = [ { name : 'label1' } , { name : 'label2' } , { name : 'label3' } ] ;
214+ fixture . detectChanges ( ) ;
215+
216+ expect ( spy . calls . count ( ) ) . toBe ( 0 ) ;
217+ expect ( formInstance . option ( 'items[0].items[0].label.text' ) ) . toBe ( 'label1' ) ;
218+ } ) ;
219+
220+ it ( 'should not call resetOption for rerendered nested components' , ( ) => {
221+ TestBed . overrideComponent ( TestContainerComponent , {
222+ set : {
223+ template : `
224+ <dx-form [formData]="formData1">
225+ <dxi-item [dataField]="'labels[' + i + ']'" *ngFor="let labelValue of labelValues; let i = index">
226+ <dxo-label [text]="labelValue.name"></dxo-label>
227+ </dxi-item>
228+ </dx-form>
229+ `
230+ }
231+ } ) ;
232+
233+ let fixture = TestBed . createComponent ( TestContainerComponent ) ;
234+ fixture . detectChanges ( ) ;
235+
236+ let formInstance = getWidget ( fixture ) ;
237+ let spy = spyOn ( formInstance , 'resetOption' ) ;
238+
239+ fixture . componentInstance . labelValues = [ { name : 'label1' } , { name : 'label2' } , { name : 'label3' } ] ;
240+ fixture . detectChanges ( ) ;
241+
242+ expect ( spy . calls . count ( ) ) . toBe ( 0 ) ;
243+ expect ( formInstance . option ( 'items[0].label.text' ) ) . toBe ( 'label1' ) ;
244+ } ) ;
245+
190246 it ( 'should change the value of dxDateBox' , ( ) => {
191247 TestBed . overrideComponent ( TestContainerComponent , {
192248 set : {
0 commit comments