@@ -1396,6 +1396,7 @@ describe('renderForm function', () => {
1396
1396
{
1397
1397
component : componentTypes . TEXT_FIELD ,
1398
1398
name : 'unmounted' ,
1399
+ key : 'unmounted-1' ,
1399
1400
initialValue : true ,
1400
1401
initializeOnMount : true ,
1401
1402
condition : {
@@ -1469,10 +1470,7 @@ describe('renderForm function', () => {
1469
1470
}
1470
1471
] ;
1471
1472
1472
- const CustomComponent = ( props ) => {
1473
- const { label } = useFieldApi ( props ) ;
1474
- return < label > { label } </ label > ;
1475
- } ;
1473
+ const CustomComponent = ( { label } ) => < label > { label } </ label > ;
1476
1474
1477
1475
const wrapper = mount (
1478
1476
< FormRenderer
@@ -1502,6 +1500,95 @@ describe('renderForm function', () => {
1502
1500
) . toEqual ( 'standard label' ) ;
1503
1501
} ) ;
1504
1502
1503
+ it ( 'should use actions from componentMapper' , ( ) => {
1504
+ const mapperLabel = 'mapper label' ;
1505
+
1506
+ const actionMapper = 'loadLabelMapper' ;
1507
+
1508
+ const customActionMapper = {
1509
+ [ actionMapper ] : ( ) => mapperLabel
1510
+ } ;
1511
+
1512
+ const formFields = [
1513
+ {
1514
+ component : 'custom-component' ,
1515
+ name : 'foo' ,
1516
+ label : 'standard label'
1517
+ }
1518
+ ] ;
1519
+
1520
+ const CustomComponent = ( { label } ) => < label > { label } </ label > ;
1521
+
1522
+ const wrapper = mount (
1523
+ < FormRenderer
1524
+ FormTemplate = { ( props ) => < FormTemplate { ...props } /> }
1525
+ componentMapper = { {
1526
+ 'custom-component' : {
1527
+ component : CustomComponent ,
1528
+ actions : {
1529
+ label : [ actionMapper ]
1530
+ }
1531
+ }
1532
+ } }
1533
+ schema = { { fields : formFields } }
1534
+ onSubmit = { jest . fn ( ) }
1535
+ actionMapper = { customActionMapper }
1536
+ />
1537
+ ) ;
1538
+
1539
+ expect ( wrapper . find ( 'label' ) . text ( ) ) . toEqual ( mapperLabel ) ;
1540
+ } ) ;
1541
+
1542
+ it ( 'field actions has a priority over mappers and they are merged' , ( ) => {
1543
+ const fieldLabel = 'field label' ;
1544
+ const mapperLabel = 'mapper label' ;
1545
+ const mappedId = 'mapper id' ;
1546
+
1547
+ const actionField = 'loadLabelField' ;
1548
+ const actionMapper = 'loadLabelMapper' ;
1549
+ const idActionmapper = 'loadId' ;
1550
+
1551
+ const customActionMapper = {
1552
+ [ actionField ] : ( ) => fieldLabel ,
1553
+ [ actionMapper ] : ( ) => mapperLabel ,
1554
+ [ idActionmapper ] : ( ) => mappedId
1555
+ } ;
1556
+
1557
+ const formFields = [
1558
+ {
1559
+ component : 'custom-component' ,
1560
+ name : 'foo' ,
1561
+ label : 'standard label' ,
1562
+ actions : {
1563
+ label : [ actionField ]
1564
+ }
1565
+ }
1566
+ ] ;
1567
+
1568
+ const CustomComponent = ( { label, id } ) => < label id = { id } > { label } </ label > ;
1569
+
1570
+ const wrapper = mount (
1571
+ < FormRenderer
1572
+ FormTemplate = { ( props ) => < FormTemplate { ...props } /> }
1573
+ componentMapper = { {
1574
+ 'custom-component' : {
1575
+ component : CustomComponent ,
1576
+ actions : {
1577
+ label : [ actionMapper ] ,
1578
+ id : [ idActionmapper ]
1579
+ }
1580
+ }
1581
+ } }
1582
+ schema = { { fields : formFields } }
1583
+ onSubmit = { jest . fn ( ) }
1584
+ actionMapper = { customActionMapper }
1585
+ />
1586
+ ) ;
1587
+
1588
+ expect ( wrapper . find ( 'label' ) . text ( ) ) . toEqual ( fieldLabel ) ;
1589
+ expect ( wrapper . find ( 'label' ) . props ( ) . id ) . toEqual ( mappedId ) ;
1590
+ } ) ;
1591
+
1505
1592
it ( 'composite mapper component' , ( ) => {
1506
1593
const schema = {
1507
1594
fields : [
@@ -1531,4 +1618,120 @@ describe('renderForm function', () => {
1531
1618
expect ( className ) . toEqual ( 'composite-class' ) ;
1532
1619
expect ( type ) . toEqual ( 'number' ) ;
1533
1620
} ) ;
1621
+
1622
+ it ( 'resolve props resolve props' , ( ) => {
1623
+ const label = 'Some super label' ;
1624
+ const resolveProps = jest . fn ( ) . mockImplementation ( ( ) => ( { label } ) ) ;
1625
+
1626
+ const formFields = [
1627
+ {
1628
+ component : 'custom-component' ,
1629
+ name : 'foo' ,
1630
+ label : 'standard label' ,
1631
+ resolveProps
1632
+ }
1633
+ ] ;
1634
+
1635
+ const CustomComponent = ( props ) => {
1636
+ const { label } = useFieldApi ( props ) ;
1637
+ return < label > { label } </ label > ;
1638
+ } ;
1639
+
1640
+ const wrapper = mount (
1641
+ < FormRenderer
1642
+ FormTemplate = { ( props ) => < FormTemplate { ...props } /> }
1643
+ componentMapper = { {
1644
+ 'custom-component' : CustomComponent
1645
+ } }
1646
+ schema = { { fields : formFields } }
1647
+ onSubmit = { jest . fn ( ) }
1648
+ />
1649
+ ) ;
1650
+
1651
+ expect ( wrapper . find ( 'label' ) . text ( ) ) . toEqual ( label ) ;
1652
+ expect ( resolveProps ) . toHaveBeenCalledWith (
1653
+ { label : 'standard label' } ,
1654
+ expect . objectContaining ( { meta : expect . any ( Object ) , input : expect . any ( Object ) } ) ,
1655
+ expect . any ( Object )
1656
+ ) ;
1657
+ } ) ;
1658
+
1659
+ it ( 'resolve props are merged and field has priority ' , ( ) => {
1660
+ const id = 'someId' ;
1661
+ const mapperLabel = 'mappers label' ;
1662
+ const label = 'Some super label' ;
1663
+
1664
+ const formFields = [
1665
+ {
1666
+ component : 'custom-component' ,
1667
+ name : 'foo' ,
1668
+ label : 'standard label' ,
1669
+ resolveProps : ( ) => ( { label } )
1670
+ }
1671
+ ] ;
1672
+
1673
+ const CustomComponent = ( props ) => {
1674
+ const { label, id } = useFieldApi ( props ) ;
1675
+ return < label id = { id } > { label } </ label > ;
1676
+ } ;
1677
+
1678
+ const wrapper = mount (
1679
+ < FormRenderer
1680
+ FormTemplate = { ( props ) => < FormTemplate { ...props } /> }
1681
+ componentMapper = { {
1682
+ 'custom-component' : {
1683
+ component : CustomComponent ,
1684
+ resolveProps : ( ) => ( {
1685
+ id,
1686
+ label : mapperLabel
1687
+ } )
1688
+ }
1689
+ } }
1690
+ schema = { { fields : formFields } }
1691
+ onSubmit = { jest . fn ( ) }
1692
+ />
1693
+ ) ;
1694
+
1695
+ expect ( wrapper . find ( 'label' ) . text ( ) ) . toEqual ( label ) ;
1696
+ expect ( wrapper . find ( 'label' ) . props ( ) . id ) . toEqual ( id ) ;
1697
+ } ) ;
1698
+
1699
+ it ( 'actions can return resolveProps and it has priority over fields' , ( ) => {
1700
+ const id = 'someId' ;
1701
+ const label = 'Some super label' ;
1702
+
1703
+ const actionMapper = {
1704
+ resolveProps : ( ) => ( ) => ( { label } )
1705
+ } ;
1706
+
1707
+ const formFields = [
1708
+ {
1709
+ component : 'custom-component' ,
1710
+ name : 'foo' ,
1711
+ label : 'standard label' ,
1712
+ resolveProps : ( ) => ( { id, label : 'nonsense' } ) ,
1713
+ actions : { resolveProps : [ 'resolveProps' ] }
1714
+ }
1715
+ ] ;
1716
+
1717
+ const CustomComponent = ( props ) => {
1718
+ const { label, id } = useFieldApi ( props ) ;
1719
+ return < label id = { id } > { label } </ label > ;
1720
+ } ;
1721
+
1722
+ const wrapper = mount (
1723
+ < FormRenderer
1724
+ FormTemplate = { ( props ) => < FormTemplate { ...props } /> }
1725
+ componentMapper = { {
1726
+ 'custom-component' : CustomComponent
1727
+ } }
1728
+ schema = { { fields : formFields } }
1729
+ onSubmit = { jest . fn ( ) }
1730
+ actionMapper = { actionMapper }
1731
+ />
1732
+ ) ;
1733
+
1734
+ expect ( wrapper . find ( 'label' ) . text ( ) ) . toEqual ( label ) ;
1735
+ expect ( wrapper . find ( 'label' ) . props ( ) . id ) . toEqual ( id ) ;
1736
+ } ) ;
1534
1737
} ) ;
0 commit comments