I'm working on a button click that opens a dialog to get folder root. I'm currently using invoke/handle. I created a promise function to return my data but not sure how to move my data from preload.js to renderer.js
Main.js
ipcMain.handle(HANDLE_FETCH_DATA, (events) => {
dialog.showOpenDialog(win, {
properties: ['openDirectory']
}).then(result => {
if (result.canceled === true) return;
const filePath = result.filePaths[0]
return crawlDirectory(filePath)
})
})
Preload.js
loadDirectory(channel) {
return ipcRenderer.invoke(channel)
}
Renderer.js
async function loadDirectoryFolders() {
// Activate ShowDialog
const data = await app.filesApi.loadDirectory(HANDLE_FETCH_DATA)
console.log(data)
}
CrawlDirectory(filepath)
const crawlDirectory = (dir) => {
return new Promise((resolve, reject) => {
const folderName = path.basename(dir);
// create new model object
const model = {
id: short.generate(),
name: folderName,
children: [],
toggled: false,
active: false,
loading: false,
decorators: {},
animations: []
};
//model['name'] = folderName;
const folders = fs.readdirSync(dir).filter(file => file !== '.DS_Store'); //['Dance', 'Disco', 'Hip Hop', 'House', 'R&B', 'Reggae']
for (let folder in folders) {
let next = path.join(dir, folders[folder]);
let isDirectory = fs.lstatSync(next).isDirectory();
if (isDirectory) {
model['children'].push(crawlDirectory(next))
} else {
model['children'].push({ name: path.basename(next) })
}
}
resolve(model)
})
}