question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

BUG: Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

See original GitHub issue

GrapesJS version

  • I confirm to use the latest version of GrapesJS

What browser are you using?

chrome new version

Reproducible demo link

https://codesandbox.io/s/grapejs-reactjs-forked-zqnqo?file=/src/Editor.js

Describe the bug

How to reproduce the bug?

  1. Just drag and drop image block to canvas
  2. also drag and drop custom image block to canvas can be found on landing pages block

Live demo : https://codesandbox.io/s/grapejs-reactjs-forked-zqnqo?file=/src/Editor.js

What is the expected behavior?

When the user drops custom image block, default image block, or double-clicking any image on canvas instead of opening the default modal image uploader I want to open my custom react-modal

What is the current behavior?

Now when the user drops the image on canvas or doubles click the image for replacing the image it opens up the default image uploader,

If is necessary to execute some code in order to reproduce the bug, paste it here below:

    import React, { useState, useEffect } from "react";
    import grapesjs from "grapesjs";
    import block from "grapesjs-blocks-basic";
    import ModalImages from "./ModalImages";
    
    
    const Editor = () => {
      const [editor, setEditor] = useState(null);
    
      function imageBlock(editor) {
        editor.BlockManager.add("image-block", {
          label: '<i class="fa fa-picture-o" aria-hidden="true"></i>',
          type: "image",
          content: '<image src="" />',
          category: {
            id: "image-block",
            label: "image-block",
            open: true
          },
          selectable: true,
          render: ({ model, className }) => `<div class="${className}__my-wrap">
          ${model.get("label")}
          Image
        </div>`
        });
      }
    
      useEffect(() => {
        const editor = grapesjs.init({
          container: "#editor",
          storageManager: false,
          blockManager: true,
          plugins: [block, imageBlock]
        });
    
        const bm = editor.BlockManager;
        editor.on("load", () => {
          editor.BlockManager.render([
            bm.get("image-block").set("category", "Landing Pages")
          ]);
          editor.BlockManager.getCategories().each((ctg) => ctg.set("open", false));
        });
    
        let modal = editor.Modal;
    
        editor.on("component:add", (model, argument) => {
          console.log("model", model);
          if (model.getName() === "Image") {
            modal.setContent(ModalImages);
          }
        });
    
        setEditor(editor);
      }, []);
    
      console.log("editor", editor);
      return (
        <>
          <div id="editor"></div>
        </>
      );
    };
    
    export default Editor;

Code of Conduct

  • I agree to follow this project’s Code of Conduct

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:5 (1 by maintainers)

github_iconTop GitHub Comments

1reaction
throne1986commented, Sep 10, 2021

@artf I solved the issue it was about closure problem , the solution just passing the URL as options as follows

      editor.Commands.run("open-assets", {
          target: editor.getSelected()
          url: imageUrl
        });
    
     editor.Commands.add("open-assets", {
          run(editor, sender, opts = {}) {
            dispatch(setIsOpen(true));
            console.log("imageUrl", opts.url);
            opts.target.set("src", opts.url);
          }
        });

U can close the issue , again thank you so much for this library god bless ya

1reaction
artfcommented, Sep 9, 2021

when you run editor.command.run('open-assets') you have to pass options, eg.

editor.command.run('open-assets', {
 target: editor.getSelected(),
})
Read more comments on GitHub >

github_iconTop Results From Across the Web

Failed to execute 'appendChild' on 'Node': parameter 1 is not ...
This can happen if you accidentally are not dragging the element that does have an id assigned (for example you are ...
Read more >
Uncaught TypeError: Failed to execute 'appendChild' on 'Node'
Uncaught TypeError : Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'. In summation, the issue was that I...
Read more >
Uncaught TypeError: Failed to execute 'appendChild' on 'Node'
The list gets display perfectly fine. Now what i want is when i am trying to use/drag that value and drop is some...
Read more >
Failed to execute 'appendChild' on 'Node': parameter 1 is not ...
It's actually a simple answer. Your function is returning a string rather than the div node. appendChild can only append a node. For...
Read more >
Error: Failed to execute 'appendChild' on 'Node': parameter 1 ...
It's actually a simple answer. Your function is returning a string rather than the div node. appendChild can only append a node. ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found