I'm normalizing a one level nested list of lots. Where the first level lots are called masters nested ones are slaves.
// my schema
const lot = new schema.Entity('lots');
const lots = new schema.Array(lot);
lot.define({slaves: lots});
// my data
const list = [
{
id: 1,
name: 'Lot #1',
slaves: [
{
id: 2,
name: 'Lot #2'
}
]
}, {
id: 4,
name: 'Lot #4',
slaves: []
}
];
normalize(list, lots);
And I get this:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2'
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : [1, 4]
}
There's anything wrong with it. But I would like to add some more stuff to the normalized result and I don't know how.
So the previous example will be normalized like this:
{
entities : {
lots: {
'1': {
id: 1,
name: 'Lot #1',
slaves: [2]
},
'2': {
id: 2,
name: 'Lot #2',
master: 1
},
'4': {
id: 4,
name: 'Lot #4',
slaves: []
}
}
},
result : {
masters: [1, 4],
slaves: [2],
}
}
Is this possible with normalizr?
Have the master lot id on the normalized slaves
This is definitely possible using a custom processEntity function. There's an example here. In short:
const processStrategy = (value, parent, key) => ({
...value,
master: key === 'slaves' ? parent.id : undefined
});
const lot = new schema.Entity('lots', { processStrategy });
An array of slaves id's also on the result
This is not possible. The result is always dependent on the entry schema passed to normalize.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With