Как получить и связать вложенное значение с полями, передающими столбцы, с таблицей материалов - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать таблицу, и у меня есть вложенные данные, такие как:

[{
  id: 24,
  name: "DANIEL TSUTOMU OBARA",
  number: "134",
  phone: "11111111111",
  rg: "4034092666",
  EmployeeStatus: {
    createdAt: "2019-08-07T14:38:52.576Z"
    description: "Documentos rejeitados"
    id: 3
    updatedAt: "2019-08-07T14:38:52.576Z"
  },
  Sector: {
    id: 2,
    name: "Controladoria"
  }
}]

И у меня есть таблица столбцов структуры:

columns: [
          { title: "Nome", field: "name" },
          { title: "CPF", field: "cpf" },
          { title: "Função", field: "FunctionId", lookup: {} },
          {
            title: "Setor",
            field: "SectorId",
            lookup: {}
          },
          {
            title: "Status",
            field: "EmployeeStatus", <------- I want to get description here
            editable: "never"
          }
        ],

Затем мне нужно передатьэти столбцы в моей таблице материалов выглядят так:

<MaterialTable
  columns={state.columns}
  data={state.data}
  title=""
  icons={tableIcons}
  editable={{
      onRowAdd: newData => createInstructor(newData),
      onRowUpdate: async (newData, oldData) =>
        updateInstructor(newData, oldData),
      onRowDelete: oldData => deleteInstructor(oldData)
    }}
  />

Итак, как мне получить доступ к вложенным данным в поле столбца?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Пожалуйста, найдите ниже решение. Я ожидаю, что у данных будут и другие объекты, поэтому нахожу первый объект с доступным ключом.

let data = [{
  id: 24,
  name: "DANIEL TSUTOMU OBARA",
  number: "134",
  phone: "11111111111",
  rg: "4034092666",
  EmployeeStatus: {
    createdAt: "2019-08-07T14:38:52.576Z",
    description: "Documentos rejeitados",
    id: 3,
    updatedAt: "2019-08-07T14:38:52.576Z"
  },
  Sector: {
    id: 2,
    name: "Controladoria"
  }
}]

let columns = [
          { title: "Nome", field: "name" },
          { title: "CPF", field: "cpf" },
          { title: "Função", field: "FunctionId", lookup: {} },
          {
            title: "Setor",
            field: "SectorId",
            lookup: {}
          },
          {
            title: "Status",
            field: "EmployeeStatus",
            editable: "never"
          }
        ];
        
let columnToUpdate = columns.find(obj => obj.title==="Status"); //find the column in columns array

let desc = data.find(obj => Object.keys(obj).includes('EmployeeStatus')).EmployeeStatus.description; // get description

columnToUpdate.field = desc; // mutate the object

console.log(columns);
0 голосов
/ 10 октября 2019

Я только что решил использовать функциональность поиска и пока решить эту проблему.

const [state, setState] = useState({
 columns: [
  { title: "ID", field: "id", editable: "never" },
  { title: "Nome", field: "name" },
  { title: "CPF", field: "cpf" },
  { title: "Função", field: "FunctionId", lookup: {} }, // 3
  {
    title: "Setor",
    field: "SectorId",
    lookup: {}
  }, // 4
  {
    title: "Status",
    field: "EmployeeStatusId",
    lookup: {},
    editable: "never"
  }, // 5
]});
....
await api
  .get(`/employee-status`)
  .then(result => {
    status = formatSectors(state, result, 5);
  })
.....
const formatSectors = (state, result, position) => {
    let columns = state.columns;
    const indexColumnSector = 4;
    columns[position].lookup = result.data.rows.reduce(
      (accumulator, currentValue) => {
        accumulator[currentValue.id] =
          position === indexColumnSector
            ? currentValue.name
            : currentValue.description;
        return accumulator;
      },
      {}
    );
    return columns;
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...