1

I have a project and in this project the salaries of the employees are displayed within a table, and I fetch the data from the backend and display it in this table

And the responses returned from the backend are:

{
    "data": [
        {
            "id": 2,
            "userId": 26,
            "createdAt": "2022-02-26T15:33:40.977Z",
            "updatedAt": "2022-02-26T15:33:40.977Z",
            "deletedAt": null,
            "user": {
                "name": "samara kamal",
                "roles": [
                    "user"
                ],
                "id": 26,
                "email": "[email protected]",
                "firstName": "samara",
                "lastName": "kamal",
                "phoneNumber": "0947483381",
                "avatarId": null,
                "isActive": true,
                "isVerified": true,
                "createdAt": "2022-02-14T20:49:16.841Z",
                "updatedAt": "2022-02-14T21:00:02.638Z",
                "deletedAt": null,
                "associatedRoles": [
                    {
                        "id": 22,
                        "userId": 26,
                        "roleId": 5,
                        "role": {
                            "id": 5,
                            "name": "user"
                        }
                    }
                ],
                "avatar": null
            },
            "salary": {
                "id": 2,
                "workStartDate": "2022-01-01T01:00:00.000Z",
                "workEndDate": "2022-02-01T01:00:00.000Z",
                "amount": 1500,
                "bonus": 150,
                "allowance": 0,
                "receiptId": 2,
                "createdAt": "2022-02-26T15:33:40.987Z",
                "updatedAt": "2022-02-26T15:33:40.987Z",
                "deletedAt": null
            },
            "deductions": [
                {
                    "id": 2,
                    "receiptId": 2,
                    "type": "loan",
                    "amount": 200,
                    "reason": "You have took a loan...",
                    "createdAt": "2022-02-26T15:33:40.991Z",
                    "updatedAt": "2022-02-26T15:33:40.991Z",
                    "deletedAt": null
                }
            ]
        },
        {
            "id": 1,
            "userId": 26,
            "createdAt": "2022-02-26T10:32:19.082Z",
            "updatedAt": "2022-02-26T10:32:19.082Z",
            "deletedAt": null,
            "user": {
                "name": "samara kamal",
                "roles": [
                    "user"
                ],
                "id": 26,
                "email": "[email protected]",
                "firstName": "samara",
                "lastName": "kamal",
                "phoneNumber": "0947483381",
                "avatarId": null,
                "isActive": true,
                "isVerified": true,
                "createdAt": "2022-02-14T20:49:16.841Z",
                "updatedAt": "2022-02-14T21:00:02.638Z",
                "deletedAt": null,
                "associatedRoles": [
                    {
                        "id": 22,
                        "userId": 26,
                        "roleId": 5,
                        "role": {
                            "id": 5,
                            "name": "user"
                        }
                    }
                ],
                "avatar": null
            },
            "salary": {
                "id": 1,
                "workStartDate": "2022-01-01T01:00:00.000Z",
                "workEndDate": "2022-02-01T01:00:00.000Z",
                "amount": 2500,
                "bonus": 200,
                "allowance": 0,
                "receiptId": 1,
                "createdAt": "2022-02-26T10:32:19.095Z",
                "updatedAt": "2022-02-26T10:32:19.095Z",
                "deletedAt": null
            },
            "deductions": [
                {
                    "id": 1,
                    "receiptId": 1,
                    "type": "loan",
                    "amount": 200,
                    "reason": "You have took a loan...",
                    "createdAt": "2022-02-26T10:32:19.104Z",
                    "updatedAt": "2022-02-26T10:32:19.104Z",
                    "deletedAt": null
                }
            ]
        }
    ],
    "count": 2
}

And as it is clear from the previous responses, there is a matrix of deductions

And through this simple code, I tried to access the "deductions.amount":

                    {n.deductions.map((deduction) => {
                      <TableCell
                        // className="p-4 md:p-10"
                        component="th"
                        scope="row"
                        align="left"
                      >
                        {deduction.amount}
                      
                      </TableCell>;
                    })}

but it did not appear in the table as it is clear in this image:

enter image description here

How can I solve the problem?

This is the complete table file:

salaryTable.js:

  return (
    <div className="w-full flex flex-col">
      <FuseScrollbars className="flex-grow overflow-x-auto">
        <Table stickyHeader className="min-w-xl" aria-labelledby="tableTitle">
          <ProductsTableHead
            selectedProductIds={selected}
            order={order}
            onSelectAllClick={handleSelectAllClick}
            onRequestSort={handleRequestSort}
            rowCount={data.length}
            onMenuItemClick={handleDeselect}
          />

          <TableBody>
            {_.orderBy(
              data,
              [
                (o) => {
                  switch (order.id) {
                    case "categories": {
                      return o.categories[0];
                    }
                    default: {
                      return o[order.id];
                    }
                  }
                },
              ],
              [order.direction]
            )
              .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
              .map((n) => {
                const isSelected = selected.indexOf(n.id) !== -1;
                return (
                  <TableRow
                    className="h-72 cursor-pointer"
                    hover
                    role="checkbox"
                    aria-checked={isSelected}
                    tabIndex={-1}
                    key={n.id}
                    selected={isSelected}
                    onClick={(event) => handleClick(n)}
                  >
                    <TableCell
                      className="w-40 md:w-64 text-center"
                      padding="none"
                    >
                      <Checkbox
                        checked={isSelected}
                        onClick={(event) => event.stopPropagation()}
                        onChange={(event) => handleCheck(event, n.id)}
                      />
                    </TableCell>

                    <TableCell
                      className="p-4 md:p-16"
                      component="th"
                      scope="row"
                    >
                      {n.user.name}
                    </TableCell>

                    <TableCell
                      className="p-4 md:p-16 truncate"
                      component="th"
                      scope="row"
                    >
                      {n.salary.amount}
                      <span>£S</span>
                    </TableCell>

                    <TableCell
                      className="p-4 md:p-16"
                      component="th"
                      scope="row"
                      align="left"
                    >
                      {n.salary.bonus}
                      <span>£S</span>
                    </TableCell>
                    {n.deductions.map((deduction) => {
                      <TableCell
                        // className="p-4 md:p-10"
                        component="th"
                        scope="row"
                        align="left"
                      >
                        {deduction.amount}
                        {/* <span>£S</span> */}
                        {/* <i
   className={clsx(
     "inline-block w-8 h-8 rounded mx-8",
     n.quantity <= 5 && "bg-red",
     n.quantity > 5 && n.quantity <= 25 && "bg-orange",
     n.quantity > 25 && "bg-green"
   )}
 /> */}
                      </TableCell>;
                    })}
                  </TableRow>
                );
              })}
          </TableBody>
        </Table>
      </FuseScrollbars>

      <TablePagination
        className="flex-shrink-0 border-t-1"
        component="div"
        count={data.length}
        rowsPerPage={rowsPerPage}
        page={page}
        backIconButtonProps={{
          "aria-label": "Previous Page",
        }}
        nextIconButtonProps={{
          "aria-label": "Next Page",
        }}
        onPageChange={handleChangePage}
        onRowsPerPageChange={handleChangeRowsPerPage}
      />
    </div>
  );

1 Answer 1

1

It seems like you're not returning anything when you're mapping, try this:

{
  n.deductions.map((deduction) => {
    return (
      <TableCell
        // className="p-4 md:p-10"
        component='th'
        scope='row'
        align='left'
      >
        {deduction.amount}
      </TableCell>
    );
  });
}

Or better yet:

{
  n.deductions.map((deduction) => (
    <TableCell
      // className="p-4 md:p-10"
      component='th'
      scope='row'
      align='left'
    >
      {deduction.amount}
    </TableCell>
  ));
}

Edit: You might want to add a key attribute with a unique value so react won't get pissed off.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.