react-router-bootstrap icon indicating copy to clipboard operation
react-router-bootstrap copied to clipboard

LinkContainer should handle null/undefined locations

Open getaaron opened this issue 5 years ago • 0 comments

Feature Request

LinkContainer should handle null or undefined locations by rendering the child component without modifications.

Why?

Imagine we have an array of model objects and want to render them as a table or list. However, sometimes only some of them have links associated. We'd like to do something like:

    <ListGroup>
      {steps.map((step) => {
        const shouldShowLink = !!step.link;

        return (
          <LinkContainer
            to={step.link}
            key={step.name}
          >
            <ListGroup.Item
              action={shouldShowLink}
              variant={step.completed ? "success" : null}
              disabled={step.disabled}
              props
            >
              {step.title}
            </ListGroup.Item>
          </LinkContainer>
        );
      })}
    </ListGroup>

In this case, when step.link is missing, we'd still like to render the ListGroup.Item component. However, LinkContainer complains that location is null and/or undefined, depending on what's passed in.

Possible Implementation

Haven't tested this, but I think it might be as simple as:

    // …snip…
     } = this.props;
+   
+   if (!to) {
+     return React.Children.only(children);
+   }
+   
     const href = history.createHref(
       typeof to === 'string' ? { pathname: to } : to
    // …snip…

getaaron avatar Jun 21 '20 00:06 getaaron