Open file dialog from React Component using Electron












0















So I'm aware without react on the render thread I can do this to open a file dialog.



const {dialog} = require('electron').remote
dialog.showOpenDialog({properties: ['openFile']}))


I'm trying to use react and learn the workflows of React & Electron though. Doing the require gives me the following error.



TypeError: fs.existsSync is not a function
getElectronPath
5 | var pathFile = path.join(__dirname, 'path.txt');
6 |
7 | function getElectronPath() {
> 8 | if (fs.existsSync(pathFile)) {
9 | var executablePath = fs.readFileSync(pathFile, 'utf-8');
10 |
11 | if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
View compiled
(anonymous function)
18 | }
19 | }
20 |
> 21 | module.exports = getElectronPath();
View compiled


Unsure what I can do to make this work. Should be a pretty simple canvas drawing app, but i do need to enumerate images in folders & give file dialog capabilities to the app. Any ideas how to remedy this issue?










share|improve this question























  • Have you tried to cast a event from the main thread and listen for it on the renderer thread?

    – Nino9612
    Nov 23 '18 at 10:20











  • I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

    – user2927848
    Nov 24 '18 at 2:07
















0















So I'm aware without react on the render thread I can do this to open a file dialog.



const {dialog} = require('electron').remote
dialog.showOpenDialog({properties: ['openFile']}))


I'm trying to use react and learn the workflows of React & Electron though. Doing the require gives me the following error.



TypeError: fs.existsSync is not a function
getElectronPath
5 | var pathFile = path.join(__dirname, 'path.txt');
6 |
7 | function getElectronPath() {
> 8 | if (fs.existsSync(pathFile)) {
9 | var executablePath = fs.readFileSync(pathFile, 'utf-8');
10 |
11 | if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
View compiled
(anonymous function)
18 | }
19 | }
20 |
> 21 | module.exports = getElectronPath();
View compiled


Unsure what I can do to make this work. Should be a pretty simple canvas drawing app, but i do need to enumerate images in folders & give file dialog capabilities to the app. Any ideas how to remedy this issue?










share|improve this question























  • Have you tried to cast a event from the main thread and listen for it on the renderer thread?

    – Nino9612
    Nov 23 '18 at 10:20











  • I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

    – user2927848
    Nov 24 '18 at 2:07














0












0








0








So I'm aware without react on the render thread I can do this to open a file dialog.



const {dialog} = require('electron').remote
dialog.showOpenDialog({properties: ['openFile']}))


I'm trying to use react and learn the workflows of React & Electron though. Doing the require gives me the following error.



TypeError: fs.existsSync is not a function
getElectronPath
5 | var pathFile = path.join(__dirname, 'path.txt');
6 |
7 | function getElectronPath() {
> 8 | if (fs.existsSync(pathFile)) {
9 | var executablePath = fs.readFileSync(pathFile, 'utf-8');
10 |
11 | if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
View compiled
(anonymous function)
18 | }
19 | }
20 |
> 21 | module.exports = getElectronPath();
View compiled


Unsure what I can do to make this work. Should be a pretty simple canvas drawing app, but i do need to enumerate images in folders & give file dialog capabilities to the app. Any ideas how to remedy this issue?










share|improve this question














So I'm aware without react on the render thread I can do this to open a file dialog.



const {dialog} = require('electron').remote
dialog.showOpenDialog({properties: ['openFile']}))


I'm trying to use react and learn the workflows of React & Electron though. Doing the require gives me the following error.



TypeError: fs.existsSync is not a function
getElectronPath
5 | var pathFile = path.join(__dirname, 'path.txt');
6 |
7 | function getElectronPath() {
> 8 | if (fs.existsSync(pathFile)) {
9 | var executablePath = fs.readFileSync(pathFile, 'utf-8');
10 |
11 | if (process.env.ELECTRON_OVERRIDE_DIST_PATH) {
View compiled
(anonymous function)
18 | }
19 | }
20 |
> 21 | module.exports = getElectronPath();
View compiled


Unsure what I can do to make this work. Should be a pretty simple canvas drawing app, but i do need to enumerate images in folders & give file dialog capabilities to the app. Any ideas how to remedy this issue?







reactjs electron






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 22 '18 at 8:04









user2927848user2927848

643318




643318













  • Have you tried to cast a event from the main thread and listen for it on the renderer thread?

    – Nino9612
    Nov 23 '18 at 10:20











  • I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

    – user2927848
    Nov 24 '18 at 2:07



















  • Have you tried to cast a event from the main thread and listen for it on the renderer thread?

    – Nino9612
    Nov 23 '18 at 10:20











  • I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

    – user2927848
    Nov 24 '18 at 2:07

















Have you tried to cast a event from the main thread and listen for it on the renderer thread?

– Nino9612
Nov 23 '18 at 10:20





Have you tried to cast a event from the main thread and listen for it on the renderer thread?

– Nino9612
Nov 23 '18 at 10:20













I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

– user2927848
Nov 24 '18 at 2:07





I think it is failing because of the React pre-compiler not understanding what is going on. Not anything innately wrong with the code. I'll need to dispatch an even from the render thread to trigger it on the main thread in this situation unless I want to put it in a menu or something. Goal is to have a nice looking html button spawn the file dialog.

– user2927848
Nov 24 '18 at 2:07












1 Answer
1






active

oldest

votes


















0














I found a solution. You can run a preload.js into a window on creation and then call the items like javascript objects.



Found this issue on the github
https://github.com/electron/electron/issues/9920



  mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
preload: __dirname + '/preload.js'
}
});


Preload.js



const { dialog } = require('electron').remote.dialog;
window.electron = {};
window.electron.dialog = dialog;


Then anything I want to load into the window I can just add to the window.electron object and call it with no issues. React pre-compiler is more the issue than anything with electron.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426331%2fopen-file-dialog-from-react-component-using-electron%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I found a solution. You can run a preload.js into a window on creation and then call the items like javascript objects.



    Found this issue on the github
    https://github.com/electron/electron/issues/9920



      mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
    nodeIntegration: false,
    preload: __dirname + '/preload.js'
    }
    });


    Preload.js



    const { dialog } = require('electron').remote.dialog;
    window.electron = {};
    window.electron.dialog = dialog;


    Then anything I want to load into the window I can just add to the window.electron object and call it with no issues. React pre-compiler is more the issue than anything with electron.






    share|improve this answer




























      0














      I found a solution. You can run a preload.js into a window on creation and then call the items like javascript objects.



      Found this issue on the github
      https://github.com/electron/electron/issues/9920



        mainWindow = new BrowserWindow({
      width: 800,
      height: 600,
      webPreferences: {
      nodeIntegration: false,
      preload: __dirname + '/preload.js'
      }
      });


      Preload.js



      const { dialog } = require('electron').remote.dialog;
      window.electron = {};
      window.electron.dialog = dialog;


      Then anything I want to load into the window I can just add to the window.electron object and call it with no issues. React pre-compiler is more the issue than anything with electron.






      share|improve this answer


























        0












        0








        0







        I found a solution. You can run a preload.js into a window on creation and then call the items like javascript objects.



        Found this issue on the github
        https://github.com/electron/electron/issues/9920



          mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
        nodeIntegration: false,
        preload: __dirname + '/preload.js'
        }
        });


        Preload.js



        const { dialog } = require('electron').remote.dialog;
        window.electron = {};
        window.electron.dialog = dialog;


        Then anything I want to load into the window I can just add to the window.electron object and call it with no issues. React pre-compiler is more the issue than anything with electron.






        share|improve this answer













        I found a solution. You can run a preload.js into a window on creation and then call the items like javascript objects.



        Found this issue on the github
        https://github.com/electron/electron/issues/9920



          mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
        nodeIntegration: false,
        preload: __dirname + '/preload.js'
        }
        });


        Preload.js



        const { dialog } = require('electron').remote.dialog;
        window.electron = {};
        window.electron.dialog = dialog;


        Then anything I want to load into the window I can just add to the window.electron object and call it with no issues. React pre-compiler is more the issue than anything with electron.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 26 '18 at 17:45









        user2927848user2927848

        643318




        643318






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426331%2fopen-file-dialog-from-react-component-using-electron%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            404 Error Contact Form 7 ajax form submitting

            How to know if a Active Directory user can login interactively

            Refactoring coordinates for Minecraft Pi buildings written in Python