insomnia/app/ui/redux/modules/global.js

124 lines
2.7 KiB
JavaScript
Raw Normal View History

import electron from 'electron';
import fs from 'fs';
2016-07-07 20:10:55 +00:00
import {importJSON, exportJSON} from '../../../backend/export/database';
import * as db from '../../../backend/database/index';
import {trackEvent} from '../../../backend/analytics';
2016-07-07 20:10:55 +00:00
const LOAD_START = 'global/load-start';
const LOAD_STOP = 'global/load-stop';
2016-04-23 06:08:52 +00:00
const initialState = {
loading: false
};
// ~~~~~~~~ //
// REDUCERS //
// ~~~~~~~~ //
export default function (state = initialState, action) {
switch (action.type) {
case LOAD_START:
2016-04-23 06:08:52 +00:00
return Object.assign({}, state, {loading: true});
case LOAD_STOP:
2016-04-23 06:08:52 +00:00
return Object.assign({}, state, {loading: false});
default:
return state;
}
}
// ~~~~~~~ //
// ACTIONS //
// ~~~~~~~ //
export function loadStart () {
return {type: LOAD_START};
2016-04-23 06:08:52 +00:00
}
export function loadStop () {
return {type: LOAD_STOP};
2016-04-23 06:08:52 +00:00
}
2016-07-07 20:10:55 +00:00
export function importFile (workspace) {
return dispatch => {
dispatch(loadStart());
const options = {
title: 'Import Insomnia Data',
buttonLabel: 'Import',
2016-07-07 20:10:55 +00:00
properties: ['openFile'],
filters: [{
// Allow empty extension and JSON
name: 'Insomnia Import', extensions: ['', 'json']
2016-07-07 20:10:55 +00:00
}]
};
electron.remote.dialog.showOpenDialog(options, paths => {
if (!paths) {
// It was cancelled, so let's bail out
dispatch(loadStop());
trackEvent('Import Cancel');
2016-07-07 20:10:55 +00:00
return;
}
// Let's import all the paths!
paths.map(path => {
fs.readFile(path, 'utf8', async (err, data) => {
2016-08-15 22:31:30 +00:00
// Unset the current active request first because we might be updating it
await db.workspace.update(workspace, {metaActiveRequestId: null});
dispatch(loadStop());
if (err) {
trackEvent('Import Fail');
console.warn('Import Failed', err);
return;
}
importJSON(workspace, data);
trackEvent('Import');
});
2016-07-07 20:10:55 +00:00
})
});
}
}
2016-08-15 22:31:30 +00:00
export function exportFile (parentDoc = null) {
return async dispatch => {
dispatch(loadStart());
const json = await exportJSON(parentDoc);
const options = {
title: 'Export Insomnia Data',
buttonLabel: 'Export',
filters: [{
name: 'Insomnia Export', extensions: ['json']
}]
};
electron.remote.dialog.showSaveDialog(options, filename => {
if (!filename) {
trackEvent('Export Cancel');
// It was cancelled, so let's bail out
dispatch(loadStop());
return;
}
fs.writeFile(filename, json, {}, err => {
if (err) {
console.warn('Export failed', err);
trackEvent('Export Fail');
return;
}
trackEvent('Export');
dispatch(loadStop());
});
});
}
}