Skip to content

Commit

Permalink
feat(datamapper): adds recursion to work with nested entities
Browse files Browse the repository at this point in the history
Recursion makes it possible to work with entities nested at multiple levels
  • Loading branch information
vitorgamer58 committed Aug 20, 2023
1 parent 6190f0b commit 6418b2b
Showing 1 changed file with 29 additions and 8 deletions.
37 changes: 29 additions & 8 deletions src/dataMapper.js
Expand Up @@ -84,21 +84,42 @@ class DataMapper {

transformField(field, instance) {
if (field.isEntity) {
return { [field.nameDb]: this.parseEntity(instance[field.name]) }
return { [field.nameDb]: this.parseEntity(field, instance[field.name]) }
}

return { [field.nameDb]: instance[field.name] }
}

parseEntity(value) {
const parsedEntity = Object.keys(value).reduce((acc, key) => {
if (value[key] === null || value[key] === undefined) return acc
parseEntity(field, value) {
if (field.isArray && checker.isArray(value)) {
const parsedArray = value.map(item => this.parseEntity(field, item))
return parsedArray.reduce((acc, curr, index) => {
acc[index] = curr
return acc
}, {})
}

if(field.isEntity) {
const parsedEntity = Object.keys(value).reduce((acc, key) => {
if (value[key] === null || value[key] === undefined) return acc

const childField = field?.children.find((i) => i.name === key)

if(childField?.isEntity) {
acc[childField.nameDb] = this.parseEntity(childField, value[key])

acc[key] = value[key]
return acc
}

acc[childField.nameDb] = value[key]

return acc
}, {})

return acc
}, {})
return parsedEntity
}

return parsedEntity
return { [field.nameDb]: value }
}

collectionFieldsWithValue(instance) {
Expand Down

0 comments on commit 6418b2b

Please sign in to comment.