@@ -2578,7 +2578,269 @@ describe('directive', function() {
2578
2578
2579
2579
} ) ;
2580
2580
} ) ;
2581
+
2582
+ it ( 'should remove or add fields in an array depending on conditions using arrayIndices' , function ( done ) {
2581
2583
2584
+ inject ( function ( $compile , $rootScope ) {
2585
+ var scope = $rootScope . $new ( ) ;
2586
+ scope . model = {
2587
+ "transportCategory" : [
2588
+ {
2589
+ "mode" : "Car" ,
2590
+ "transportOption" : [
2591
+ {
2592
+ "name" : "Bertie" ,
2593
+ "forSale" : "yes" ,
2594
+ "price" : 100 ,
2595
+ "history" : {
2596
+ "historyKnown" : "no"
2597
+ }
2598
+ } ,
2599
+ {
2600
+ "name" : "Lightning McQueen" ,
2601
+ "forSale" : "no" ,
2602
+ "history" : {
2603
+ "historyKnown" : "yes" ,
2604
+ "previousOwners" : [
2605
+ {
2606
+ "ownerName" : ""
2607
+ } ,
2608
+ {
2609
+ "ownerName" : "Arlo" ,
2610
+ "logBookProvided" : "yes" ,
2611
+ "logBookEntry" : [
2612
+ {
2613
+ "entryId" : 2 ,
2614
+ "entryDate" : "2015-06-23"
2615
+ } ,
2616
+ {
2617
+ "entryId" : 4
2618
+ }
2619
+ ]
2620
+ }
2621
+ ]
2622
+ }
2623
+ }
2624
+ ]
2625
+ } ,
2626
+ {
2627
+ "mode" : "Horse" ,
2628
+ "transportOption" : [
2629
+ {
2630
+ "name" : "Phar Lap" ,
2631
+ "forSale" : "no"
2632
+ } ,
2633
+ {
2634
+ "name" : "Greyhound" ,
2635
+ "forSale" : "yes" ,
2636
+ "price" : 1000 ,
2637
+ "history" : {
2638
+ "historyKnown" : "yes" ,
2639
+ "previousOwners" : [
2640
+ {
2641
+ "ownerName" : "Tom"
2642
+ }
2643
+ ]
2644
+ }
2645
+ }
2646
+ ]
2647
+ }
2648
+ ]
2649
+ } ;
2650
+
2651
+ scope . schema = {
2652
+ type : "object" ,
2653
+ properties : {
2654
+ transportCategory : {
2655
+ type : "array" ,
2656
+ items : {
2657
+ type : "object" ,
2658
+ properties : {
2659
+ mode : { type : "string" , enum : [ "Car" , "Motorbike" , "Horse" ] } ,
2660
+ transportOption : {
2661
+ type : "array" ,
2662
+ items : {
2663
+ type : "object" ,
2664
+ properties : {
2665
+ name : { type : "string" } ,
2666
+ numberOfWheels : { type : "number" } ,
2667
+ forSale : { type : "string" , enum : [ "yes" , "no" ] } ,
2668
+ price : { type : "number" } ,
2669
+ history : {
2670
+ type : "object" ,
2671
+ properties : {
2672
+ historyKnown : { type : "string" , enum : [ "yes" , "no" ] } ,
2673
+ previousOwners : {
2674
+ type : "array" ,
2675
+ items : {
2676
+ type : "object" ,
2677
+ properties : {
2678
+ ownerName : { type : "string" } ,
2679
+ purchaseDate : { type : "string" } ,
2680
+ logBookProvided : { type : "string" , enum : [ "yes" , "no" ] } ,
2681
+ logBookEntry : {
2682
+ type : "array" ,
2683
+ items : {
2684
+ type : "object" ,
2685
+ properties : {
2686
+ entryId : { type : "number" } ,
2687
+ entryDate : { type : "string" } ,
2688
+ entryNote : { type : "string" }
2689
+ }
2690
+ }
2691
+ }
2692
+ }
2693
+ }
2694
+ }
2695
+ }
2696
+ }
2697
+ }
2698
+ }
2699
+ }
2700
+ }
2701
+ }
2702
+ }
2703
+ }
2704
+ } ;
2705
+
2706
+ scope . form = [
2707
+ {
2708
+ key : "transportCategory" ,
2709
+ items : [
2710
+ "transportCategory[].mode" ,
2711
+ {
2712
+ key : "transportCategory[].transportOption" ,
2713
+ items : [
2714
+ "transportCategory[].transportOption[].name" ,
2715
+ {
2716
+ key : "transportCategory[].transportOption[].numberOfWheels" ,
2717
+ condition : "model.transportCategory[arrayIndices[0]].mode != 'Horse'"
2718
+ } ,
2719
+ "transportCategory[].transportOption[].forSale" ,
2720
+ {
2721
+ key : "transportCategory[].transportOption[].price" ,
2722
+ condition : "model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].forSale == 'yes'"
2723
+ } ,
2724
+ "transportCategory[].transportOption[].history.historyKnown" ,
2725
+ {
2726
+ key : "transportCategory[].transportOption[].history.previousOwners" ,
2727
+ condition : "model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].history.historyKnown == 'yes'" ,
2728
+ items : [
2729
+ "transportCategory[].transportOption[].history.previousOwners[].ownerName" ,
2730
+ {
2731
+ key : "transportCategory[].transportOption[].history.previousOwners[].purchaseDate" ,
2732
+ condition : "model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].history.previousOwners[arrayIndices[2]].ownerName.length > 2" ,
2733
+ } ,
2734
+ {
2735
+ key : "transportCategory[].transportOption[].history.previousOwners[].logBookProvided" ,
2736
+ condition : "model.transportCategory[arrayIndices[0]].mode != 'Horse' && model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].history.previousOwners[arrayIndices[2]].ownerName.length > 2"
2737
+ } ,
2738
+ {
2739
+ key : "transportCategory[].transportOption[].history.previousOwners[].logBookEntry" ,
2740
+ condition : "model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].history.previousOwners[arrayIndices[2]].logBookProvided == 'yes'" ,
2741
+ items : [
2742
+ "transportCategory[].transportOption[].history.previousOwners[].logBookEntry[].entryId" ,
2743
+ "transportCategory[].transportOption[].history.previousOwners[].logBookEntry[].entryDate" ,
2744
+ {
2745
+ key : "transportCategory[].transportOption[].history.previousOwners[].logBookEntry[].entryNote" ,
2746
+ condition : "model.transportCategory[arrayIndices[0]].transportOption[arrayIndices[1]].history.previousOwners[arrayIndices[2]].logBookEntry[arrayIndices[3]].entryDate.length > 2"
2747
+ }
2748
+ ]
2749
+ }
2750
+ ]
2751
+ }
2752
+ ]
2753
+ }
2754
+ ]
2755
+ }
2756
+ ] ;
2757
+
2758
+ var tmpl = angular . element ( '<form sf-schema="schema" sf-form="form" sf-model="model"></form>' ) ;
2759
+
2760
+ $compile ( tmpl ) ( scope ) ;
2761
+ $rootScope . $apply ( ) ;
2762
+
2763
+ //References to sections of the rendered form to make the test more readable
2764
+ var renderedForm = {
2765
+ node : tmpl . children ( ) . eq ( 0 ) . children ( ) . eq ( 1 ) ,
2766
+ transportCategory : [
2767
+ {
2768
+ node : tmpl . children ( ) . eq ( 0 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 0 ) ,
2769
+ } ,
2770
+ {
2771
+ node : tmpl . children ( ) . eq ( 0 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 1 ) ,
2772
+ }
2773
+ ]
2774
+ } ;
2775
+
2776
+ renderedForm . transportCategory [ 0 ] [ 'transportOption' ] = [
2777
+ { node : renderedForm . transportCategory [ 0 ] . node . children ( ) . eq ( 2 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 0 ) } ,
2778
+ { node : renderedForm . transportCategory [ 0 ] . node . children ( ) . eq ( 2 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 1 ) }
2779
+ ] ;
2780
+
2781
+ renderedForm . transportCategory [ 1 ] [ 'transportOption' ] = [
2782
+ { node : renderedForm . transportCategory [ 1 ] . node . children ( ) . eq ( 2 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 0 ) } ,
2783
+ { node : renderedForm . transportCategory [ 1 ] . node . children ( ) . eq ( 2 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 1 ) }
2784
+ ] ;
2785
+
2786
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] [ 'history' ] = {
2787
+ previousOwners : [
2788
+ { node : renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . children ( ) . eq ( 5 ) . children ( ) . eq ( 0 ) } ,
2789
+ { node : renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . children ( ) . eq ( 5 ) . children ( ) . eq ( 1 ) }
2790
+ ]
2791
+ } ;
2792
+
2793
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] [ 'logBookEntry' ] = [
2794
+ { node : renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . node . children ( ) . eq ( 1 ) . children ( ) . eq ( 4 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 0 ) } ,
2795
+ { node : renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . node . children ( ) . eq ( 1 ) . children ( ) . eq ( 4 ) . children ( ) . eq ( 1 ) . children ( ) . eq ( 1 ) }
2796
+ ] ;
2797
+
2798
+ /*** transportCategory[].transportOption[].numberOfWheels condition tests ***/
2799
+ renderedForm . transportCategory [ 0 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 2 ) ;
2800
+ renderedForm . transportCategory [ 1 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 0 ) ;
2801
+ renderedForm . transportCategory [ 0 ] . transportOption [ 0 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 1 ) ;
2802
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 1 ) ;
2803
+ renderedForm . transportCategory [ 1 ] . transportOption [ 0 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 0 ) ;
2804
+ renderedForm . transportCategory [ 1 ] . transportOption [ 1 ] . node . find ( 'input[name="numberOfWheels"]' ) . length . should . be . eq ( 0 ) ;
2805
+
2806
+ /*** transportCategory[].transportOption[].price field condition tests ***/
2807
+ renderedForm . node . children ( ) . find ( 'input[name="price"]' ) . length . should . be . eq ( 2 ) ;
2808
+ renderedForm . transportCategory [ 0 ] . transportOption [ 0 ] . node . find ( 'input[name="price"]' ) . length . should . be . eq ( 1 ) ;
2809
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . find ( 'input[name="price"]' ) . length . should . be . eq ( 0 ) ;
2810
+ renderedForm . transportCategory [ 1 ] . transportOption [ 0 ] . node . find ( 'input[name="price"]' ) . length . should . be . eq ( 0 ) ;
2811
+ renderedForm . transportCategory [ 1 ] . transportOption [ 1 ] . node . find ( 'input[name="price"]' ) . length . should . be . eq ( 1 ) ;
2812
+
2813
+ /*** transportCategory[].transportOption[].history.previousOwners.ownerName field condition tests ***/
2814
+ renderedForm . transportCategory [ 0 ] . transportOption [ 0 ] . node . find ( 'input[name="ownerName"]' ) . length . should . be . eq ( 0 ) ;
2815
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . find ( 'input[name="ownerName"]' ) . length . should . be . eq ( 2 ) ;
2816
+ renderedForm . transportCategory [ 1 ] . transportOption [ 0 ] . node . find ( 'input[name="ownerName"]' ) . length . should . be . eq ( 0 ) ;
2817
+ renderedForm . transportCategory [ 1 ] . transportOption [ 1 ] . node . find ( 'input[name="ownerName"]' ) . length . should . be . eq ( 1 ) ;
2818
+
2819
+ /*** transportCategory[].transportOption[].history.previousOwners[].purchaseDate field condition tests ***/
2820
+ renderedForm . transportCategory [ 0 ] . transportOption [ 0 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 0 ) ;
2821
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 1 ) ;
2822
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 0 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 0 ) ;
2823
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 1 ) ;
2824
+
2825
+ renderedForm . transportCategory [ 1 ] . transportOption [ 0 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 0 ) ;
2826
+ renderedForm . transportCategory [ 1 ] . transportOption [ 1 ] . node . find ( 'input[name="purchaseDate"]' ) . length . should . be . eq ( 1 ) ;
2827
+
2828
+ /*** transportCategory[].transportOption[].history.previousOwners[].logBookProvided field condition tests ***/
2829
+ renderedForm . transportCategory [ 0 ] . transportOption [ 0 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 0 ) ;
2830
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 1 ) ;
2831
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 0 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 0 ) ;
2832
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 1 ) ;
2833
+
2834
+ renderedForm . transportCategory [ 1 ] . transportOption [ 0 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 0 ) ;
2835
+ renderedForm . transportCategory [ 1 ] . transportOption [ 1 ] . node . find ( 'select[name="logBookProvided"]' ) . length . should . be . eq ( 0 ) ;
2836
+
2837
+ /*** transportCategory[].transportOption[].history.previousOwners[].logBookEntry[].entryNote field condition tests ***/
2838
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . logBookEntry [ 0 ] . node . find ( 'input[name="entryNote"]' ) . length . should . be . eq ( 1 ) ;
2839
+ renderedForm . transportCategory [ 0 ] . transportOption [ 1 ] . history . previousOwners [ 1 ] . logBookEntry [ 1 ] . node . find ( 'input[name="entryNote"]' ) . length . should . be . eq ( 0 ) ;
2840
+
2841
+ done ( ) ;
2842
+ } ) ;
2843
+ } ) ;
2582
2844
2583
2845
} ) ;
2584
2846
0 commit comments