Skip to content

Commit

Permalink
feat: adjust nested entity array compatibility
Browse files Browse the repository at this point in the history
Must be able to return an array of nested entities with multiple fields
  • Loading branch information
vitorgamer58 committed Aug 20, 2023
1 parent b56dd30 commit 9830cdc
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 10 deletions.
27 changes: 24 additions & 3 deletions src/dataMapper.js
Expand Up @@ -162,9 +162,22 @@ class DataMapper {
if(isArrayOfEntities) {
return (value) => {
if (checker.isEmpty(value)) return null
return value?.map((i) => { return {
[field.children[0].name]: processEntity(field.children[0], i)
}
return value?.map((item) => {
const object = Object.keys(item).reduce((obj, key) => {
const childField = field?.children.find((i) => i.nameDb === key)

if(childField.isEntity) {
obj[childField.name] = processEntity(childField, item)

return obj
}

const parser = getDataParser(field.type, false)
obj[childField.name] = parser(item[childField.nameDb])

return obj
}, {})
return object
})
}
}
Expand All @@ -190,6 +203,14 @@ class DataMapper {

if(isEntity) {
const childField = field?.children.find((i) => i.name === entityField.name)

if(childField.isArray) {
const arrayOfEntityParser = getDataParser(childField.type, childField.isArray, childField.isEntity, childField)
obj[entityField.name] = arrayOfEntityParser(payload[field.nameDb][fieldNameDb])

return obj
}

obj[entityField.name] = processEntity(childField, payload[field.nameDb])

return obj
Expand Down
22 changes: 15 additions & 7 deletions test/dataMapper.test.js
Expand Up @@ -107,7 +107,8 @@ describe('Data Mapper', () => {
})

const ChildEntity = entity('Child entity', {
grandChild: field(GrandChildEntity)
grandChild: field(GrandChildEntity),
simpleString: field(String)
})

const givenAnNestedEntity = () => {
Expand All @@ -127,6 +128,7 @@ describe('Data Mapper', () => {
const dataMapper = new DataMapper(Entity, entityIDs)
const childEntity = new ChildEntity()
childEntity.grandChild = new GrandChildEntity()
childEntity.simpleString = 'String'
childEntity.grandChild.greatGrandChild = new GreatGrandChildEntity()
childEntity.grandChild.greatGrandChild.simpleString = 'String'

Expand All @@ -139,15 +141,17 @@ describe('Data Mapper', () => {
great_grand_child: {
simple_string: 'String'
}
}
},
simple_string: 'String'
},
array_child_entity: [
{
grand_child: {
great_grand_child: {
simple_string: 'String'
}
}
},
simple_string: 'String'
}
]
})
Expand Down Expand Up @@ -189,15 +193,17 @@ describe('Data Mapper', () => {
greatGrandChild: {
simpleString: 'String'
}
}
},
simpleString: 'String'
}
entityInstance.arrayChildEntity = [
{
grandChild: {
greatGrandChild: {
simpleString: 'String'
}
}
},
simpleString: 'String'
}
]
const entityIDs = ['idField']
Expand All @@ -215,15 +221,17 @@ describe('Data Mapper', () => {
great_grand_child: {
simple_string: 'String'
}
}
},
simple_string: 'String'
},
array_child_entity: {
0: {
grand_child: {
great_grand_child: {
simple_string: 'String'
}
}
},
simple_string: 'String'
}
}
})
Expand Down

0 comments on commit 9830cdc

Please sign in to comment.