nodegui/react-nodegui

Cannot receive close event of FileDialog

Dauto98 opened this issue · 2 comments

Describe the bug
When using FileDialog I would like to handle the event when the user close the dialog through Cancel button or Alt-F4. Basically any way that is not selecting a file. The problem is I cannot find any event that is fired when I close the dialog this way. It is needed so I can set the open state back to false.

How can I handle this use case?

To Reproduce
Sample code

const FileLoader = () => {
  const [open, setOpen] = useState(false);

  const onButtonClick = useEventHandler({
    clicked: () => {
      setOpen(true);
    }
  }, []);

  const onFileEvent = useEventHandler({
    // this one work, when the user select a file
    fileSelected: (file) => {
      setOpen(false);
      console.log(file);
    },
    // I tried all of these and none worked
    finished: (event) => {
      setOpen(false);
      console.log("close");
    },
    accept: () => {
      console.log("accept");
    },
    reject: () => {
      console.log("reject");
    },
    open: () => {
      console.log("open");
    },
    Close: () => {
      console.log("close");
    }
  }, []);

  return (
    <View>
      <Button on={onButtonClick}>Select file</Button>
      <FileDialog open={open} on={onFileEvent} />
    </View>
  );
};

Desktop (please complete the following information):

  • OS: Ubuntu 18.04
  • NodeGUI version : not directly installed, it is a dependency of React NodeGUI
  • React NodeGUI version: 0.13.0
  • React: 17.0.2

I am debugging the issue and the problem seems to be no event is fired when I close the dialog through Cancel button (logExceptions not called in class EventWidget extends Component_1.Component in node_modules/@nodegui/nodegui/dist/lib/core/EventWidget.js).

Not sure is it related to the #373 issue (another issue of mine)

I'm not sure is it actual right now, but I managed same issue like this

const [files, setFiles] = useState([]);
const chooseFileButtonHandler = useEventHandler<QPushButtonSignals>(
  {
    clicked: () => {
      const fileDialog = new QFileDialog();
      fileDialog.exec();
      const selectedFiles = fileDialog.selectedFiles();
      if (fileDialog.result() !== 0) {  // 0 = user closed the dialog, 1 = user selected file
        setFiles(selectedFiles)
      }
    }
  },
  []
);
  return (
    <View>
      <Button on={chooseFileButtonHandler} text='Chose file' />
    </View>
  );