Jon Sud
Jon Sud

Reputation: 11661

Why denormalize not return nested object?

I use denormalize from normalizr package as the following code:

import { normalize, schema, denormalize } from 'normalizr';

const categoriesData = [
  { id: 1, name: 'category-1' },
  { id: 2, name: 'category-2' },
  { id: 3, name: 'category-3' },
  { id: 40, name: 'category-40' },
];

const subCategoriesData = [
  { id: 1, name: 'sub-category-a', category: 1 },
  { id: 2, name: 'sub-category-b', category: 2 },
  { id: 3, name: 'sub-category-c', category: 1 },
  { id: 4, name: 'sub-category-d', category: 3 },
  { id: 500, name: 'sub-category-e', category: 40 },
]

const category = new schema.Entity('categories');
const categories = new schema.Array(category);

const subcategory = new schema.Entity('subCategories');
const subcategories = new schema.Array(subcategory);

const normalizedData = normalize(categoriesData, categories);
const denormalizedData = denormalize(normalizedData.result, categories, normalizedData.entities);

console.log({ normalizedData });
console.log({ denormalizedData });

const normalizedData2 = normalize(subCategoriesData, subcategories);
const denormalizedData2 = denormalize(normalizedData2.result, subcategories, normalizedData2.entities);

console.log({ normalizedData2 });
console.log({ denormalizedData2 });

The output of denormalizedData2 is

{id: 1, name: "sub-category-a", category: 1},
...

And I was expecting to be:

{id: 1, name: "sub-category-a", category: { id: 1, name: 'category-1' } },
...

How to use normalizr to achieve the goal?

Upvotes: 1

Views: 209

Answers (1)

Nikdejan
Nikdejan

Reputation: 41

Old question but in case somebody needs an answer. Your schema is wrong. Instead of

const subcategory = new schema.Entity('subCategories');

you should write

const subcategory = new schema.Entity('subCategories', { category: category });

This means that subcategory has property category which is described by category schema.

Upvotes: 1

Related Questions