Normalizr возвращает индекс, а не groupAdministratorId в качестве ключа в нормализованном объекте - PullRequest
0 голосов
/ 30 января 2019

Массив объектов, не нормализующихся, как предполагалось, используя normalizr

Я пытаюсь нормализовать полученный ответ.Я могу нормализовать данные в соответствии с groupId для внешнего объекта, но я не могу сделать то же самое для массива во внешнем объекте, который содержит список администраторов с его свойствами.Я хотел преобразовать список в Объекты на основе их идентификаторов, но вместо этого Объекты дифференцируются в зависимости от их индекса.

schema.js

import { schema } from 'normalizr';

const groupAdministrator = new schema.Entity('groupAdministratorList' , {groups: {}}, { idAttribute: 'groupAdministratorId'});

export const groupSchema = {
    groupAdministratorList: { groupAdministratorId: groupAdministrator}
};

export const groupsSchema = new schema.Entity(
    'groups',
    groupSchema,
    { idAttribute: 'groupId' }
);


reducer.js
import { normalize } from 'normalizr';
import { groupsSchema } from "./schema";

const { entities } = normalize(action.payload, groupsSchema);

if (!entities.groups) return state;

const newState = { groups: entities.groups };

return merge(state, newState, { deep: true });

Ниже приводится ответ, который я получаюиз API:

{
  groupId: "uniqueId"
  groupName: "someName"
  groupAdministratorList: [
    {
      groupAdministratorId: "uniqueId1",
      role: "someRole"
    },
    {
      groupAdministratorId: "uniqueId2",
      role: "someRole"
    }
  ]
}

Вот что я получаю после нормализации:

uniqueId: {
  groupId: "uniqueId"
  groupName: "someName"
  groupAdministratorList: {
    0: {
     groupAdministratorId: "uniqueId1",
     role: "someRole"
    },
    1: {
     groupAdministratorId: "uniqueId2",
     role: "someRole"
    }
  }
}

Вот что я на самом деле хочу:

uniqueId: {
  groupId: "uniqueId"
  groupName: "someName"
  groupAdministratorList: {
    uniqueId1: {
     groupAdministratorId: "uniqueId1",
     role: "someRole"
    },
    uniqueId2: {
     groupAdministratorId: "uniqueId2",
     role: "someRole"
    }
  }
}
...