diff --git a/src/components/import-preview/import-preview.jsx b/src/components/import-preview/import-preview.jsx
index a42b4de..6ffb5af 100644
--- a/src/components/import-preview/import-preview.jsx
+++ b/src/components/import-preview/import-preview.jsx
@@ -127,9 +127,18 @@ class ImportPreview extends PureComponent {
};
render() {
- if (!this.props.loaded) {
+ const { loaded, fields, values } = this.props;
+
+ if (!loaded) {
+ debug('Preview unavailable: not loaded yet');
return null;
}
+
+ if (!Array.isArray(fields) || !Array.isArray(values)) {
+ debug('Preview unavailable: Fields or values is not an array', { fields, values });
+ return null;
+ }
+
return (
Specify Fields and Types
diff --git a/src/components/import-preview/import-preview.spec.js b/src/components/import-preview/import-preview.spec.js
new file mode 100644
index 0000000..7220468
--- /dev/null
+++ b/src/components/import-preview/import-preview.spec.js
@@ -0,0 +1,100 @@
+import React from 'react';
+import { mount } from 'enzyme';
+
+import ImportPreview from './';
+import createStyler from 'utils/styler.js';
+import styles from './import-preview.less';
+
+let onFieldCheckedChangedSpy;
+let setFieldTypeSpy;
+
+describe('ImportPreview [Component]', () => {
+ describe('not loaded', () => {
+ let component;
+
+ before(() => {
+ onFieldCheckedChangedSpy = sinon.spy();
+ setFieldTypeSpy = sinon.spy();
+
+ component = mount(
+
+ );
+ });
+
+ it('should not render', () => {
+ const style = createStyler(styles, 'import-preview');
+ expect(component.find(`.${style()}`)).to.not.be.present();
+ });
+
+ after(() => {
+ component = null;
+ onFieldCheckedChangedSpy = null;
+ setFieldTypeSpy = null;
+ });
+ });
+ describe('no fields', () => {
+ let component;
+
+ before(() => {
+ onFieldCheckedChangedSpy = sinon.spy();
+ setFieldTypeSpy = sinon.spy();
+
+ component = mount(
+
+ );
+ });
+
+ it('should not render', () => {
+ const style = createStyler(styles, 'import-preview');
+ expect(component.find(`.${style()}`)).to.not.be.present();
+ });
+
+ after(() => {
+ component = null;
+ onFieldCheckedChangedSpy = null;
+ setFieldTypeSpy = null;
+ });
+ });
+
+ describe('no fields', () => {
+ let component;
+
+ before(() => {
+ onFieldCheckedChangedSpy = sinon.spy();
+ setFieldTypeSpy = sinon.spy();
+
+ component = mount(
+
+ );
+ });
+
+ it('should not render', () => {
+ const style = createStyler(styles, 'import-preview');
+ expect(component.find(`.${style()}`)).to.not.be.present();
+ });
+
+ after(() => {
+ component = null;
+ onFieldCheckedChangedSpy = null;
+ setFieldTypeSpy = null;
+ });
+ });
+});
diff --git a/src/modules/import.js b/src/modules/import.js
index 84feab0..d64bada 100644
--- a/src/modules/import.js
+++ b/src/modules/import.js
@@ -367,7 +367,7 @@ const loadPreviewDocs = (
* actually need it.
*/
const source = fs.createReadStream(fileName, {encoding: 'utf8', end: 20 * 1024});
- const dest = createPreviewWritable();
+ const dest = createPreviewWritable(fileType, delimiter, fileIsMultilineJSON);
stream.pipeline(
source,
createPeekStream(fileType, delimiter, fileIsMultilineJSON),