Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iframe component does not render anything #12

Open
lukBakTsh opened this issue Nov 12, 2018 · 6 comments
Open

iframe component does not render anything #12

lukBakTsh opened this issue Nov 12, 2018 · 6 comments

Comments

@lukBakTsh
Copy link

lukBakTsh commented Nov 12, 2018

lightbox-react:
^0.3.7

Code:

import React, { Component } from 'react';
import Lightbox from 'lightbox-react';
import 'lightbox-react/style.css';

const Video = () => (
  <iframe
    title="cats"
    width="560"
    height="315"
    src="https://www.youtube.com/embed/5dsGWM5XGdg"
    style={{
      maxWidth: '97%',
      position: 'absolute',
      left: 0,
      right: 0,
      margin: 'auto',
      top: '50%',
      transform: 'translateY(-50%)',
    }}
  />
);

const images = [
  Video,
  '//placekitten.com/1500/500',
  '//placekitten.com/4000/3000',
  '//placekitten.com/800/1200',
  '//placekitten.com/1500/1500',
];

export class LightboxComponent extends Component {
  constructor(props) {
    super(props);

    this.state = {
      photoIndex: 0,
      isOpen: false,
    };
  }

  render() {
    const { photoIndex, isOpen } = this.state;

    return (
      <div>
        <button type="button" onClick={() => this.setState({ isOpen: true })}>
          Open Lightbox
        </button>

        {isOpen && (
          <Lightbox
            mainSrc={images[photoIndex]}
            nextSrc={images[(photoIndex + 1) % images.length]}
            prevSrc={images[(photoIndex + images.length - 1) % images.length]}
            onCloseRequest={() => this.setState({ isOpen: false })}
            onMovePrevRequest={() =>
              this.setState({
                photoIndex: (photoIndex + images.length - 1) % images.length,
              })
            }
            onMoveNextRequest={() =>
              this.setState({
                photoIndex: (photoIndex + 1) % images.length,
              })
            }
          />
        )}
      </div>
    );
  }
}

export default LightboxComponent;

Effect:
images inside ril-inner are rendered correctly, but div with iframe does not appear inside ril-inner.

<div class="ril-inner ril__inner">

  <!-- <div> with <iframe> does not appear here -->

  <img class="ril-image-current ril__image" ... />
  <img class="ril-image-prev ril__imagePrev ril__image" ... />
</div>

Everything works fine on the demo page (iframe with div appear inside ril-inner) http://treyhuffine.com/lightbox-react/

<div class="inner ril-inner inner___1rfRQ">
  <img class="image-next ril-image-next imageNext___1uRqJ image___2FLq2" ... />

  <!-- it is OK! -->
  <div class="image-current ril-image-current image___2FLq2">
    <iframe ...></iframe>
  </div>

  <img class="image-prev ril-image-prev imagePrev___F6xVQ image___2FLq2" .../>
</div>

I can not tell what are the differences between the version presented on the demo and v0.3.7. If anyone knows, please let me know :)

@treyhuffine
Copy link
Owner

Hi @lukBakTsh, just to confirm, you are importing the CSS right?

@wwwhatley
Copy link

@treyhuffine I'm having the same issue, what is even weirder, is that it works on local, but not on the server. When I inspect the asset that is supposed to be present, it doesn't even show the iframe, whereas it does on local.... I am importing the css files as well.

@treyhuffine
Copy link
Owner

@wwwhatley when you say on the server, do you mean the HTML that is sent from SSR?

@jzfre
Copy link

jzfre commented Sep 26, 2019

nope, it can be served statically with NGINX (build with CRA). It's hard to debug as package is downloaded and source is not part of the code in node_modules.

@jzfre
Copy link

jzfre commented Sep 26, 2019

You can see the error, when you serve the demo with build:demo of the project with NGINX. Modify /etc/hosts, create some dummy domain and create NGINX config

@jzfre
Copy link

jzfre commented Sep 26, 2019

The code is acting differently on localhost and "production" (server build) probably because of compiling.

Problematic part of code is in "addItem" function

if (isReact.component(DisplayItem) || isReact.element(DisplayItem)) {
addComponent(srcType, imageClass, baseStyle);
}

it eveluates as "false" when builded for production when rendering iframe, so nothing is rendered.

Simple solution is not to render iframe as functional component const Video = () => {...}
But as a PureComponent - class Video extends React.PureComponent...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants