0

Problem Description:

I'm encountering an issue in my React application where a delete button should only be visible to the owner of an item, but it's not working as expected. Here's the problem in more detail:

Problem Details:

I have a React component called ItemModal that displays details about an item and should include a "Delete Item" button. The button should only be visible if the currently logged-in user is the owner of the item.

Current Behavior:

The "Delete Item" button is not consistently appearing for item owners. When logging relevant information to the console, I noticed that the comparison of user IDs for ownership doesn't seem to be working as expected.

// ItemModal.js
import React, { useContext } from "react";
import { CurrentUserContext } from "../../contexts/CurrentUserContext";
import "./itemModal.css";

const ItemModal = ({ selectedCard, onClose, onDelete }) => {
  const { currentUser } = useContext(CurrentUserContext);

  console.log(
    "Current User ID:",
    currentUser ? currentUser._id : "No current user"
  );
  console.log(
    "Selected Card Owner ID:",
    selectedCard && selectedCard.owner
      ? selectedCard.owner._id
      : "No card owner"
  );

  // Check if currentUser, selectedCard, and selectedCard.owner are defined before comparing IDs
  const isOwn =
    currentUser &&
    selectedCard &&
    selectedCard.owner &&
    currentUser._id === selectedCard.owner._id;

  console.log("Is owner:", isOwn); // Debugging line

  const itemDeleteButtonClassName = `item__delete-button ${
    isOwn ? "item__delete-button_visible" : "item__delete-button_hidden"
  }`;

  const handleDelete = () => {
    onDelete(selectedCard._id);
  };

  return (
    <div className={`modal`}>
      {/* ... rest of the component */}
      <button
        className={itemDeleteButtonClassName}
        type="button"
        onClick={handleDelete}
      >
        Delete Item
      </button>
    </div>
  );
};

export default ItemModal;

I first identified that the issue seemed to be related to the comparison of user IDs for ownership.

I implemented changes in the ItemModal component to ensure that the button's visibility (isOwn) is determined correctly based on the user's ownership of the item. I updated the code to check if currentUser, selectedCard, and selectedCard.owner are defined before comparing their IDs.

I logged relevant information to the console, such as the current user's ID, the selected card's owner ID, and whether the user is the owner, to aid in debugging.

What We Were Expecting:

I expected that when the ItemModal component is displayed:

The "Delete Item" button would be visible if the currently logged-in user (currentUser) is the owner of the item (selectedCard). The button would be hidden if the user is not the owner. When I logged information to the console, I expected to see:

The current user's ID correctly retrieved from currentUser. The selected card's owner ID correctly retrieved from selectedCard.owner. The isOwn variable correctly indicating whether the user is the owner (true) or not (false). However, based on the logs and the behavior observed, it appeared that the comparison of user IDs was not working as expected, leading to the "Delete Item" button not always being visible for the item's owner.

Please note that despite implementing the changes and logging information for debugging, the issue was not resolved, and I am still seeing the incorrect behavior where the button was not displaying correctly based on ownership.

2
  • Hey Adrian, hope you're good. Based on your logic it seems correct, can you add a console.log to see the value of selectedCard.owner, currentUser._id and selectedCard.owner._id and post it values? And react has a feature called Conditional Rendering, that you could use to cut some code on the button rendering. You could use the ternary oeprator but instead of setting a class, you could render the button or not. Commented Sep 7, 2023 at 10:08
  • Check if the user id is the same type as card's owner id. You can console.log(typeof currentUser._id, typeof selectedCard.owner._id ) Commented Sep 7, 2023 at 10:39

0

Browse other questions tagged or ask your own question.