@@ -1396,6 +1396,7 @@ describe('renderForm function', () => {
13961396 {
13971397 component : componentTypes . TEXT_FIELD ,
13981398 name : 'unmounted' ,
1399+ key : 'unmounted-1' ,
13991400 initialValue : true ,
14001401 initializeOnMount : true ,
14011402 condition : {
@@ -1469,10 +1470,7 @@ describe('renderForm function', () => {
14691470 }
14701471 ] ;
14711472
1472- const CustomComponent = ( props ) => {
1473- const { label } = useFieldApi ( props ) ;
1474- return < label > { label } </ label > ;
1475- } ;
1473+ const CustomComponent = ( { label } ) => < label > { label } </ label > ;
14761474
14771475 const wrapper = mount (
14781476 < FormRenderer
@@ -1502,6 +1500,95 @@ describe('renderForm function', () => {
15021500 ) . toEqual ( 'standard label' ) ;
15031501 } ) ;
15041502
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+
15051592 it ( 'composite mapper component' , ( ) => {
15061593 const schema = {
15071594 fields : [
@@ -1531,4 +1618,120 @@ describe('renderForm function', () => {
15311618 expect ( className ) . toEqual ( 'composite-class' ) ;
15321619 expect ( type ) . toEqual ( 'number' ) ;
15331620 } ) ;
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+ } ) ;
15341737} ) ;
0 commit comments