diff --git a/.eslintignore b/.eslintignore
index 0c9a563ff9..f81c07db10 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -3,3 +3,4 @@ dist/
dist-es5-module/
docs/
dev/app.js
+scripts/karma.conf.js
diff --git a/.eslintrc b/.eslintrc
index 27b9cf8651..cffc9a674e 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,6 +1,10 @@
{
"extends": "algolia",
"rules": {
- "no-var": 2
+ "no-var": 2,
+ "algolia/relative-require": 2,
+ "algolia/force-import-root": 2,
+ "algolia/no-require": 1,
+ "algolia/no-module-exports": 2
}
}
diff --git a/dev/app.js b/dev/app.js
index a80309bf9b..47e8e80d56 100644
--- a/dev/app.js
+++ b/dev/app.js
@@ -1,5 +1,5 @@
// force using index because package 'main' is dist-es5-module/
-var instantsearch = require('../index');
+var instantsearch = require('../index.js');
var search = instantsearch({
appId: 'latency',
diff --git a/index.js b/index.js
index 722965fcef..6181086430 100644
--- a/index.js
+++ b/index.js
@@ -1 +1 @@
-module.exports = require('./src/lib/main');
+export default require('./src/lib/main.js');
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
index 92272b84ae..ff2e27cfc7 100644
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -3747,8 +3747,12 @@
"resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-0.1.0.tgz"
},
"eslint-config-algolia": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-config-algolia/-/eslint-config-algolia-4.2.0.tgz"
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-algolia/-/eslint-config-algolia-4.5.0.tgz"
+ },
+ "eslint-plugin-algolia": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-algolia/-/eslint-plugin-algolia-1.5.0.tgz"
},
"eslint-plugin-react": {
"version": "3.6.3",
diff --git a/package.json b/package.json
index fb8b06cf8e..70abcef2c7 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,8 @@
"doctoc": "^0.15.0",
"eslint": "^1.7.3",
"eslint-config-airbnb": "^0.1.0",
- "eslint-config-algolia": "^4.2.0",
+ "eslint-config-algolia": "^4.5.0",
+ "eslint-plugin-algolia": "^1.5.0",
"eslint-plugin-react": "^3.6.3",
"expect": "^1.13.0",
"expect-jsx": "^2.1.0",
diff --git a/scripts/bump-package-version.js b/scripts/bump-package-version.js
index 19d4446539..52a27af2bf 100644
--- a/scripts/bump-package-version.js
+++ b/scripts/bump-package-version.js
@@ -1,14 +1,14 @@
-let fs = require('fs');
-let path = require('path');
+import fs from 'fs';
+import path from 'path';
-let mversion = require('mversion');
+import mversion from 'mversion';
+
+import semver from 'semver';
+import currentVersion from '../src/lib/version.js';
if (!process.env.VERSION) {
throw new Error('release: Usage is VERSION=MAJOR.MINOR.PATCH npm run release');
}
-
-let semver = require('semver');
-let currentVersion = require('../src/lib/version');
let newVersion = process.env.VERSION;
if (!semver.valid(newVersion)) {
@@ -24,7 +24,7 @@ console.log('Releasing ' + newVersion);
console.log('..Updating src/lib/version.js');
let versionFile = path.join(__dirname, '../src/lib/version.js');
-let newContent = "module.exports = '" + newVersion + "';\n";
+let newContent = "export default '" + newVersion + "';\n";
fs.writeFileSync(versionFile, newContent);
console.log('..Updating package.json, npm-shrinwrap.json');
diff --git a/scripts/docs/gen-widget-doc.js b/scripts/docs/gen-widget-doc.js
index aa59abafa7..febc718f63 100644
--- a/scripts/docs/gen-widget-doc.js
+++ b/scripts/docs/gen-widget-doc.js
@@ -1,10 +1,10 @@
-let jsdoc2md = require('jsdoc-to-markdown');
-let dmd = require('dmd');
-let fs = require('fs');
-let util = require('util');
-let path = require('path');
-let rimraf = require('rimraf');
-let mkdirp = require('mkdirp');
+import jsdoc2md from 'jsdoc-to-markdown';
+import dmd from 'dmd';
+import fs from 'fs';
+import util from 'util';
+import path from 'path';
+import rimraf from 'rimraf';
+import mkdirp from 'mkdirp';
/* paths used by this script */
let p = {
diff --git a/src/components/ClearAll/ClearAll.js b/src/components/ClearAll/ClearAll.js
index 648b4cbb06..671d205a04 100644
--- a/src/components/ClearAll/ClearAll.js
+++ b/src/components/ClearAll/ClearAll.js
@@ -1,8 +1,6 @@
-let React = require('react');
-
-let Template = require('../Template');
-
-let {isSpecialClick} = require('../../lib/utils');
+import React from 'react';
+import Template from '../Template.js';
+import {isSpecialClick} from '../../lib/utils.js';
class ClearAll extends React.Component {
handleClick(e) {
@@ -46,4 +44,4 @@ ClearAll.propTypes = {
url: React.PropTypes.string.isRequired
};
-module.exports = ClearAll;
+export default ClearAll;
diff --git a/src/components/CurrentRefinedValues/CurrentRefinedValues.js b/src/components/CurrentRefinedValues/CurrentRefinedValues.js
index 18e998fc97..f30e529051 100644
--- a/src/components/CurrentRefinedValues/CurrentRefinedValues.js
+++ b/src/components/CurrentRefinedValues/CurrentRefinedValues.js
@@ -1,10 +1,10 @@
-let React = require('react');
+import React from 'react';
-let Template = require('../Template.js');
+import Template from '../Template.js';
-let {isSpecialClick} = require('../../lib/utils.js');
-let map = require('lodash/collection/map');
-let cloneDeep = require('lodash/lang/cloneDeep');
+import {isSpecialClick} from '../../lib/utils.js';
+import map from 'lodash/collection/map';
+import cloneDeep from 'lodash/lang/cloneDeep';
class CurrentRefinedValues extends React.Component {
_clearAllElement(position, requestedPosition) {
@@ -129,4 +129,4 @@ CurrentRefinedValues.propTypes = {
templateProps: React.PropTypes.object.isRequired
};
-module.exports = CurrentRefinedValues;
+export default CurrentRefinedValues;
diff --git a/src/components/Hits.js b/src/components/Hits.js
index 87e7586cdf..373b3d1b95 100644
--- a/src/components/Hits.js
+++ b/src/components/Hits.js
@@ -1,7 +1,7 @@
-let React = require('react');
-let map = require('lodash/collection/map');
+import React from 'react';
+import map from 'lodash/collection/map';
-let Template = require('./Template');
+import Template from './Template.js';
class Hits extends React.Component {
renderWithResults() {
@@ -54,4 +54,4 @@ Hits.defaultProps = {
results: {hits: []}
};
-module.exports = Hits;
+export default Hits;
diff --git a/src/components/Pagination/Pagination.js b/src/components/Pagination/Pagination.js
index 324b25a438..7d2444c8b5 100644
--- a/src/components/Pagination/Pagination.js
+++ b/src/components/Pagination/Pagination.js
@@ -1,12 +1,12 @@
-let React = require('react');
-let forEach = require('lodash/collection/forEach');
-let defaultsDeep = require('lodash/object/defaultsDeep');
-let {isSpecialClick} = require('../../lib/utils');
+import React from 'react';
+import forEach from 'lodash/collection/forEach';
+import defaultsDeep from 'lodash/object/defaultsDeep';
+import {isSpecialClick} from '../../lib/utils.js';
-let Paginator = require('./Paginator');
-let PaginationLink = require('./PaginationLink');
+import Paginator from './Paginator.js';
+import PaginationLink from './PaginationLink.js';
-let cx = require('classnames');
+import cx from 'classnames';
class Pagination extends React.Component {
constructor(props) {
@@ -168,4 +168,4 @@ Pagination.defaultProps = {
nbPages: 0
};
-module.exports = Pagination;
+export default Pagination;
diff --git a/src/components/Pagination/PaginationLink.js b/src/components/Pagination/PaginationLink.js
index 117edb19c3..761e790bc6 100644
--- a/src/components/Pagination/PaginationLink.js
+++ b/src/components/Pagination/PaginationLink.js
@@ -1,4 +1,4 @@
-let React = require('react');
+import React from 'react';
class PaginationLink extends React.Component {
render() {
@@ -35,4 +35,4 @@ PaginationLink.propTypes = {
url: React.PropTypes.string
};
-module.exports = PaginationLink;
+export default PaginationLink;
diff --git a/src/components/Pagination/Paginator.js b/src/components/Pagination/Paginator.js
index 1b9ce8c96c..c0f53370a5 100644
--- a/src/components/Pagination/Paginator.js
+++ b/src/components/Pagination/Paginator.js
@@ -1,4 +1,4 @@
-let range = require('lodash/utility/range');
+import range from 'lodash/utility/range';
class Paginator {
constructor(params) {
@@ -47,4 +47,4 @@ class Paginator {
}
}
-module.exports = Paginator;
+export default Paginator;
diff --git a/src/components/PoweredBy/PoweredBy.js b/src/components/PoweredBy/PoweredBy.js
index 4e2c45a14f..8ea1d9a325 100644
--- a/src/components/PoweredBy/PoweredBy.js
+++ b/src/components/PoweredBy/PoweredBy.js
@@ -1,4 +1,4 @@
-let React = require('react');
+import React from 'react';
class PoweredBy extends React.Component {
render() {
@@ -18,4 +18,4 @@ PoweredBy.propTypes = {
})
};
-module.exports = PoweredBy;
+export default PoweredBy;
diff --git a/src/components/PriceRanges/PriceRanges.js b/src/components/PriceRanges/PriceRanges.js
index ee1a382191..5115a937d7 100644
--- a/src/components/PriceRanges/PriceRanges.js
+++ b/src/components/PriceRanges/PriceRanges.js
@@ -1,8 +1,8 @@
-let React = require('react');
+import React from 'react';
-let Template = require('../Template');
-let PriceRangesForm = require('./PriceRangesForm');
-let cx = require('classnames');
+import Template from '../Template.js';
+import PriceRangesForm from './PriceRangesForm.js';
+import cx from 'classnames';
class PriceRanges extends React.Component {
getForm() {
@@ -94,4 +94,4 @@ PriceRanges.defaultProps = {
cssClasses: {}
};
-module.exports = PriceRanges;
+export default PriceRanges;
diff --git a/src/components/PriceRanges/PriceRangesForm.js b/src/components/PriceRanges/PriceRangesForm.js
index d135fcf6c3..3fc7880ae7 100644
--- a/src/components/PriceRanges/PriceRangesForm.js
+++ b/src/components/PriceRanges/PriceRangesForm.js
@@ -1,4 +1,4 @@
-let React = require('react');
+import React from 'react';
class PriceRangesForm extends React.Component {
getInput(type) {
@@ -55,5 +55,5 @@ PriceRangesForm.defaultProps = {
};
-module.exports = PriceRangesForm;
+export default PriceRangesForm;
diff --git a/src/components/RefinementList/RefinementList.js b/src/components/RefinementList/RefinementList.js
index 5617b51c10..0aa1f93fae 100644
--- a/src/components/RefinementList/RefinementList.js
+++ b/src/components/RefinementList/RefinementList.js
@@ -1,10 +1,8 @@
-let React = require('react');
+import React from 'react';
+import cx from 'classnames';
+import {isSpecialClick} from '../../lib/utils.js';
-let cx = require('classnames');
-
-let Template = require('../Template');
-
-let {isSpecialClick} = require('../../lib/utils');
+import Template from '../Template.js';
class RefinementList extends React.Component {
refine(value) {
@@ -140,4 +138,4 @@ RefinementList.defaultProps = {
attributeNameKey: 'name'
};
-module.exports = RefinementList;
+export default RefinementList;
diff --git a/src/components/Selector.js b/src/components/Selector.js
index f7276b4353..dfce2e5d63 100644
--- a/src/components/Selector.js
+++ b/src/components/Selector.js
@@ -1,4 +1,4 @@
-let React = require('react');
+import React from 'react';
class Selector extends React.Component {
handleChange(event) {
@@ -51,4 +51,4 @@ Selector.propTypes = {
setValue: React.PropTypes.func.isRequired
};
-module.exports = Selector;
+export default Selector;
diff --git a/src/components/Slider/Slider.js b/src/components/Slider/Slider.js
index f7620da4d6..32ef383c58 100644
--- a/src/components/Slider/Slider.js
+++ b/src/components/Slider/Slider.js
@@ -1,6 +1,6 @@
-let React = require('react');
+import React from 'react';
-let Nouislider = require('react-nouislider');
+import Nouislider from 'react-nouislider';
let cssPrefix = 'ais-range-slider--';
@@ -58,4 +58,4 @@ Slider.propTypes = {
])
};
-module.exports = Slider;
+export default Slider;
diff --git a/src/components/Slider/__tests__/Slider-test.js b/src/components/Slider/__tests__/Slider-test.js
index 648e4cd4f8..bfed044118 100644
--- a/src/components/Slider/__tests__/Slider-test.js
+++ b/src/components/Slider/__tests__/Slider-test.js
@@ -20,7 +20,7 @@ describe('Slider', () => {
renderer = createRenderer();
// need to be required AFTER jsdom has initialized global.window/navigator
- Slider = require('../Slider');
+ Slider = require('../Slider.js');
Nouislider = require('react-nouislider');
});
diff --git a/src/components/Stats/Stats.js b/src/components/Stats/Stats.js
index f8d15e1fb8..7d6e079314 100644
--- a/src/components/Stats/Stats.js
+++ b/src/components/Stats/Stats.js
@@ -1,6 +1,6 @@
-let React = require('react');
+import React from 'react';
-let Template = require('../Template');
+import Template from '../Template.js';
class Stats extends React.Component {
render() {
@@ -36,4 +36,4 @@ Stats.propTypes = {
templateProps: React.PropTypes.object.isRequired
};
-module.exports = Stats;
+export default Stats;
diff --git a/src/components/Template.js b/src/components/Template.js
index 3bdbab513c..b545be65ef 100644
--- a/src/components/Template.js
+++ b/src/components/Template.js
@@ -1,8 +1,8 @@
-let React = require('react');
-let mapValues = require('lodash/object/mapValues');
-let curry = require('lodash/function/curry');
-let cloneDeep = require('lodash/lang/cloneDeep');
-let hogan = require('hogan.js');
+import React from 'react';
+import mapValues from 'lodash/object/mapValues';
+import curry from 'lodash/function/curry';
+import cloneDeep from 'lodash/lang/cloneDeep';
+import hogan from 'hogan.js';
class Template extends React.Component {
render() {
@@ -122,4 +122,4 @@ function transformHelpersToHogan(helpers, compileOptions, data) {
});
}
-module.exports = Template;
+export default Template;
diff --git a/src/decorators/__tests__/TestComponent.js b/src/decorators/__tests__/TestComponent.js
index 702397bb5d..9739da13d7 100644
--- a/src/decorators/__tests__/TestComponent.js
+++ b/src/decorators/__tests__/TestComponent.js
@@ -1,4 +1,4 @@
-let React = require('react');
+import React from 'react';
// This component is only used in tests, as a placeholder
class TestComponent extends React.Component {
@@ -8,4 +8,4 @@ class TestComponent extends React.Component {
}
-module.exports = TestComponent;
+export default TestComponent;
diff --git a/src/decorators/autoHideContainer.js b/src/decorators/autoHideContainer.js
index 4d35048a6d..a1dff0e0b0 100644
--- a/src/decorators/autoHideContainer.js
+++ b/src/decorators/autoHideContainer.js
@@ -1,8 +1,8 @@
// Issue with eslint + high-order components like decorators
/* eslint react/prop-types: 0 */
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
function autoHideContainer(ComposedComponent) {
class AutoHide extends React.Component {
@@ -38,4 +38,4 @@ function autoHideContainer(ComposedComponent) {
return AutoHide;
}
-module.exports = autoHideContainer;
+export default autoHideContainer;
diff --git a/src/decorators/headerFooter.js b/src/decorators/headerFooter.js
index ddacfdc857..f965e2e007 100644
--- a/src/decorators/headerFooter.js
+++ b/src/decorators/headerFooter.js
@@ -1,11 +1,11 @@
// Issue with eslint + high-order components like decorators
/* eslint react/prop-types: 0 */
-let React = require('react');
+import React from 'react';
-let cx = require('classnames');
+import cx from 'classnames';
-let Template = require('../components/Template');
+import Template from '../components/Template.js';
function headerFooter(ComposedComponent) {
class HeaderFooter extends React.Component {
@@ -65,4 +65,4 @@ function headerFooter(ComposedComponent) {
return HeaderFooter;
}
-module.exports = headerFooter;
+export default headerFooter;
diff --git a/src/lib/InstantSearch.js b/src/lib/InstantSearch.js
index 22e3245746..67026c53a6 100644
--- a/src/lib/InstantSearch.js
+++ b/src/lib/InstantSearch.js
@@ -1,14 +1,14 @@
-let algoliasearch = require('algoliasearch');
-let algoliasearchHelper = require('algoliasearch-helper');
+import algoliasearch from 'algoliasearch';
+import algoliasearchHelper from 'algoliasearch-helper';
-let forEach = require('lodash/collection/forEach');
-let merge = require('lodash/object/merge');
-let union = require('lodash/array/union');
+import forEach from 'lodash/collection/forEach';
+import merge from 'lodash/object/merge';
+import union from 'lodash/array/union';
let EventEmitter = require('events').EventEmitter;
-let urlSyncWidget = require('./url-sync');
-let version = require('./version');
+import urlSyncWidget from './url-sync.js';
+import version from './version.js';
function defaultCreateURL() { return '#'; }
@@ -59,7 +59,7 @@ Usage: instantsearch({
this.searchParameters = searchParameters || {};
this.widgets = [];
this.templatesConfig = {
- helpers: require('./helpers')({numberLocale}),
+ helpers: require('./helpers.js')({numberLocale}),
compileOptions: {}
};
this.urlSync = urlSync;
@@ -158,4 +158,4 @@ function enhanceConfiguration(configuration, widgetDefinition) {
);
}
-module.exports = InstantSearch;
+export default InstantSearch;
diff --git a/src/lib/helpers.js b/src/lib/helpers.js
index fbc9256aa5..cf150519ee 100644
--- a/src/lib/helpers.js
+++ b/src/lib/helpers.js
@@ -1,7 +1,7 @@
-module.exports = function({numberLocale}) {
+export default function({numberLocale}) {
return {
formatNumber(number, render) {
return Number(render(number)).toLocaleString(numberLocale);
}
};
-};
+}
diff --git a/src/lib/main.js b/src/lib/main.js
index 7919469e69..2a9579e501 100644
--- a/src/lib/main.js
+++ b/src/lib/main.js
@@ -1,34 +1,34 @@
// required for browsers not supporting this
-require('../shams/Object.freeze');
+import '../shams/Object.freeze.js';
-let toFactory = require('to-factory');
+import toFactory from 'to-factory';
-let InstantSearch = require('./InstantSearch');
+import InstantSearch from './InstantSearch.js';
let instantsearch = toFactory(InstantSearch);
-let algoliasearchHelper = require('algoliasearch-helper');
+import algoliasearchHelper from 'algoliasearch-helper';
instantsearch.widgets = {
- clearAll: require('../widgets/clear-all/clear-all'),
- currentRefinedValues: require('../widgets/current-refined-values/current-refined-values'),
- hierarchicalMenu: require('../widgets/hierarchical-menu/hierarchical-menu'),
- hits: require('../widgets/hits/hits'),
- hitsPerPageSelector: require('../widgets/hits-per-page-selector/hits-per-page-selector'),
- menu: require('../widgets/menu/menu'),
- refinementList: require('../widgets/refinement-list/refinement-list'),
- numericRefinementList: require('../widgets/numeric-refinement-list/numeric-refinement-list'),
- numericSelector: require('../widgets/numeric-selector/numeric-selector'),
- pagination: require('../widgets/pagination/pagination'),
- priceRanges: require('../widgets/price-ranges/price-ranges'),
- searchBox: require('../widgets/search-box/search-box'),
- rangeSlider: require('../widgets/range-slider/range-slider'),
- sortBySelector: require('../widgets/sort-by-selector/sort-by-selector'),
- starRating: require('../widgets/star-rating/star-rating'),
- stats: require('../widgets/stats/stats'),
- toggle: require('../widgets/toggle/toggle')
+ clearAll: require('../widgets/clear-all/clear-all.js'),
+ currentRefinedValues: require('../widgets/current-refined-values/current-refined-values.js'),
+ hierarchicalMenu: require('../widgets/hierarchical-menu/hierarchical-menu.js'),
+ hits: require('../widgets/hits/hits.js'),
+ hitsPerPageSelector: require('../widgets/hits-per-page-selector/hits-per-page-selector.js'),
+ menu: require('../widgets/menu/menu.js'),
+ refinementList: require('../widgets/refinement-list/refinement-list.js'),
+ numericRefinementList: require('../widgets/numeric-refinement-list/numeric-refinement-list.js'),
+ numericSelector: require('../widgets/numeric-selector/numeric-selector.js'),
+ pagination: require('../widgets/pagination/pagination.js'),
+ priceRanges: require('../widgets/price-ranges/price-ranges.js'),
+ searchBox: require('../widgets/search-box/search-box.js'),
+ rangeSlider: require('../widgets/range-slider/range-slider.js'),
+ sortBySelector: require('../widgets/sort-by-selector/sort-by-selector.js'),
+ starRating: require('../widgets/star-rating/star-rating.js'),
+ stats: require('../widgets/stats/stats.js'),
+ toggle: require('../widgets/toggle/toggle.js')
};
instantsearch.version = require('./version.js');
instantsearch.createQueryString = algoliasearchHelper.url.getQueryStringFromState;
-module.exports = instantsearch;
+export default instantsearch;
diff --git a/src/lib/url-sync.js b/src/lib/url-sync.js
index ab6ac3418d..7e959f253f 100644
--- a/src/lib/url-sync.js
+++ b/src/lib/url-sync.js
@@ -1,9 +1,9 @@
-let algoliasearchHelper = require('algoliasearch-helper');
+import algoliasearchHelper from 'algoliasearch-helper';
let AlgoliaSearchHelper = algoliasearchHelper.AlgoliaSearchHelper;
-let majorVersionNumber = require('../lib/version').split('.')[0];
+let majorVersionNumber = require('../lib/version.js').split('.')[0];
-let isEqual = require('lodash/lang/isEqual');
-let merge = require('lodash/object/merge');
+import isEqual from 'lodash/lang/isEqual';
+import merge from 'lodash/object/merge';
function timerMaker(t0) {
let t = t0;
@@ -177,4 +177,4 @@ function urlSync(options = {}) {
}
-module.exports = urlSync;
+export default urlSync;
diff --git a/src/lib/utils.js b/src/lib/utils.js
index 15c14e2f78..10d6063bee 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -1,8 +1,8 @@
-let reduce = require('lodash/collection/reduce');
-let forEach = require('lodash/collection/forEach');
-let find = require('lodash/collection/find');
-let get = require('lodash/object/get');
-let isEmpty = require('lodash/lang/isEmpty');
+import reduce from 'lodash/collection/reduce';
+import forEach from 'lodash/collection/forEach';
+import find from 'lodash/collection/find';
+import get from 'lodash/object/get';
+import isEmpty from 'lodash/lang/isEmpty';
let utils = {
getContainerNode,
@@ -214,4 +214,4 @@ function clearRefinementsAndSearch(helper, attributeNames) {
helper.setState(clearRefinementsFromState(helper.state, attributeNames)).search();
}
-module.exports = utils;
+export default utils;
diff --git a/src/lib/version.js b/src/lib/version.js
index 96994008f4..7b0b49cd7e 100644
--- a/src/lib/version.js
+++ b/src/lib/version.js
@@ -1 +1 @@
-module.exports = '1.2.0-beta.0';
+export default '1.2.0-beta.0';
diff --git a/src/widgets/clear-all/__tests__/clear-all-test.js b/src/widgets/clear-all/__tests__/clear-all-test.js
index a30a7631b9..06573c0889 100644
--- a/src/widgets/clear-all/__tests__/clear-all-test.js
+++ b/src/widgets/clear-all/__tests__/clear-all-test.js
@@ -59,7 +59,7 @@ describe('clearAll()', () => {
hasRefinements: false,
shouldAutoHideContainer: true,
templateProps: {
- templates: require('../defaultTemplates'),
+ templates: require('../defaultTemplates.js'),
templatesConfig: undefined,
transformData: undefined,
useCustomCompileOptions: {header: false, footer: false, link: false}
diff --git a/src/widgets/clear-all/clear-all.js b/src/widgets/clear-all/clear-all.js
index f8866060a6..871452d303 100644
--- a/src/widgets/clear-all/clear-all.js
+++ b/src/widgets/clear-all/clear-all.js
@@ -1,21 +1,22 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let {
+import {
bemHelper,
getContainerNode,
prepareTemplateProps,
getRefinements,
clearRefinementsFromState,
clearRefinementsAndSearch
-} = require('../../lib/utils');
-let bem = bemHelper('ais-clear-all');
-let cx = require('classnames');
+} from '../../lib/utils.js';
+import cx from 'classnames';
+
+import autoHideContainerHOC from '../../decorators/autoHideContainer.js';
+import headerFooterHOC from '../../decorators/headerFooter.js';
-let autoHideContainerHOC = require('../../decorators/autoHideContainer');
-let headerFooterHOC = require('../../decorators/headerFooter');
+import defaultTemplates from './defaultTemplates.js';
-let defaultTemplates = require('./defaultTemplates');
+let bem = bemHelper('ais-clear-all');
/**
* Allows to clear all refinements at once
@@ -52,7 +53,7 @@ function clearAll({
}
let containerNode = getContainerNode(container);
- let ClearAll = headerFooterHOC(require('../../components/ClearAll/ClearAll'));
+ let ClearAll = headerFooterHOC(require('../../components/ClearAll/ClearAll.js'));
if (autoHideContainer === true) {
ClearAll = autoHideContainerHOC(ClearAll);
}
@@ -94,4 +95,4 @@ function clearAll({
};
}
-module.exports = clearAll;
+export default clearAll;
diff --git a/src/widgets/clear-all/defaultTemplates.js b/src/widgets/clear-all/defaultTemplates.js
index a0f7448bc7..a174fdd5b0 100644
--- a/src/widgets/clear-all/defaultTemplates.js
+++ b/src/widgets/clear-all/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
header: '',
link: 'Clear all',
footer: ''
diff --git a/src/widgets/current-refined-values/current-refined-values.js b/src/widgets/current-refined-values/current-refined-values.js
index 1cd30d019c..36c4a8ddb9 100644
--- a/src/widgets/current-refined-values/current-refined-values.js
+++ b/src/widgets/current-refined-values/current-refined-values.js
@@ -1,7 +1,7 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let {
+import {
bemHelper,
isDomElement,
getContainerNode,
@@ -9,27 +9,28 @@ let {
getRefinements,
clearRefinementsFromState,
clearRefinementsAndSearch
-} = require('../../lib/utils.js');
+} from '../../lib/utils.js';
-let bem = bemHelper('ais-current-refined-values');
-let cx = require('classnames');
+import cx from 'classnames';
+
+import isUndefined from 'lodash/lang/isUndefined';
+import isBoolean from 'lodash/lang/isBoolean';
+import isString from 'lodash/lang/isString';
+import isArray from 'lodash/lang/isArray';
+import isPlainObject from 'lodash/lang/isPlainObject';
+import isFunction from 'lodash/lang/isFunction';
+import isEmpty from 'lodash/lang/isEmpty';
-let isUndefined = require('lodash/lang/isUndefined');
-let isBoolean = require('lodash/lang/isBoolean');
-let isString = require('lodash/lang/isString');
-let isArray = require('lodash/lang/isArray');
-let isPlainObject = require('lodash/lang/isPlainObject');
-let isFunction = require('lodash/lang/isFunction');
-let isEmpty = require('lodash/lang/isEmpty');
+import map from 'lodash/collection/map';
+import reduce from 'lodash/collection/reduce';
+import filter from 'lodash/collection/filter';
-let map = require('lodash/collection/map');
-let reduce = require('lodash/collection/reduce');
-let filter = require('lodash/collection/filter');
+import headerFooterHOC from '../../decorators/headerFooter.js';
+import autoHideContainerHOC from '../../decorators/autoHideContainer';
-let headerFooterHOC = require('../../decorators/headerFooter.js');
-let autoHideContainerHOC = require('../../decorators/autoHideContainer');
+import defaultTemplates from './defaultTemplates';
-let defaultTemplates = require('./defaultTemplates');
+let bem = bemHelper('ais-current-refined-values');
/**
* Instantiate a list of current refinements with the possibility to clear them
@@ -243,4 +244,4 @@ function clearRefinement(helper, refinement) {
helper.setState(clearRefinementFromState(helper.state, refinement)).search();
}
-module.exports = currentRefinedValues;
+export default currentRefinedValues;
diff --git a/src/widgets/current-refined-values/defaultTemplates.js b/src/widgets/current-refined-values/defaultTemplates.js
index d2342c02ad..6590e4fd25 100644
--- a/src/widgets/current-refined-values/defaultTemplates.js
+++ b/src/widgets/current-refined-values/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
header: '',
item: '' +
'{{#label}}' +
diff --git a/src/widgets/hierarchical-menu/defaultTemplates.js b/src/widgets/hierarchical-menu/defaultTemplates.js
index 46c884dd29..81c1139223 100644
--- a/src/widgets/hierarchical-menu/defaultTemplates.js
+++ b/src/widgets/hierarchical-menu/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
header: '',
item: `{{name}} {{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}`,
footer: ''
diff --git a/src/widgets/hierarchical-menu/hierarchical-menu.js b/src/widgets/hierarchical-menu/hierarchical-menu.js
index 95fd46bce2..bb434c921e 100644
--- a/src/widgets/hierarchical-menu/hierarchical-menu.js
+++ b/src/widgets/hierarchical-menu/hierarchical-menu.js
@@ -1,13 +1,13 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let utils = require('../../lib/utils');
+import utils from '../../lib/utils.js';
let bem = utils.bemHelper('ais-hierarchical-menu');
-let cx = require('classnames');
-let autoHideContainerHOC = require('../../decorators/autoHideContainer');
-let headerFooterHOC = require('../../decorators/headerFooter');
+import cx from 'classnames';
+import autoHideContainerHOC from '../../decorators/autoHideContainer.js';
+import headerFooterHOC from '../../decorators/headerFooter.js';
-let defaultTemplates = require('./defaultTemplates');
+import defaultTemplates from './defaultTemplates.js';
/**
* Create a hierarchical menu using multiple attributes
@@ -72,7 +72,7 @@ function hierarchicalMenu({
let containerNode = utils.getContainerNode(container);
- let RefinementList = headerFooterHOC(require('../../components/RefinementList/RefinementList'));
+ let RefinementList = headerFooterHOC(require('../../components/RefinementList/RefinementList.js'));
if (autoHideContainer === true) {
RefinementList = autoHideContainerHOC(RefinementList);
}
@@ -157,4 +157,4 @@ function sliceFacetValues(values, limit) {
});
}
-module.exports = hierarchicalMenu;
+export default hierarchicalMenu;
diff --git a/src/widgets/hits-per-page-selector/hits-per-page-selector.js b/src/widgets/hits-per-page-selector/hits-per-page-selector.js
index a94144a715..4bb76e8079 100644
--- a/src/widgets/hits-per-page-selector/hits-per-page-selector.js
+++ b/src/widgets/hits-per-page-selector/hits-per-page-selector.js
@@ -1,11 +1,11 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let utils = require('../../lib/utils');
-let any = require('lodash/collection/any');
+import utils from '../../lib/utils.js';
+import any from 'lodash/collection/any';
let bem = utils.bemHelper('ais-hits-per-page-selector');
-let cx = require('classnames');
-let autoHideContainerHOC = require('../../decorators/autoHideContainer');
+import cx from 'classnames';
+import autoHideContainerHOC from '../../decorators/autoHideContainer.js';
/**
* Instantiate a dropdown element to choose the number of hits to display per page
@@ -39,7 +39,7 @@ function hitsPerPageSelector({
}
let containerNode = utils.getContainerNode(container);
- let Selector = require('../../components/Selector');
+ let Selector = require('../../components/Selector.js');
if (autoHideContainer === true) {
Selector = autoHideContainerHOC(Selector);
}
@@ -96,4 +96,4 @@ function hitsPerPageSelector({
};
}
-module.exports = hitsPerPageSelector;
+export default hitsPerPageSelector;
diff --git a/src/widgets/hits/defaultTemplates.js b/src/widgets/hits/defaultTemplates.js
index 364fd86c83..a507724520 100644
--- a/src/widgets/hits/defaultTemplates.js
+++ b/src/widgets/hits/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
empty: 'No results',
item: function(data) {
return JSON.stringify(data, null, 2);
diff --git a/src/widgets/hits/hits.js b/src/widgets/hits/hits.js
index 6849317a48..225b097cbf 100644
--- a/src/widgets/hits/hits.js
+++ b/src/widgets/hits/hits.js
@@ -1,12 +1,12 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let utils = require('../../lib/utils');
+import utils from '../../lib/utils.js';
let bem = utils.bemHelper('ais-hits');
-let cx = require('classnames');
+import cx from 'classnames';
-let Hits = require('../../components/Hits');
-let defaultTemplates = require('./defaultTemplates');
+import Hits from '../../components/Hits.js';
+import defaultTemplates from './defaultTemplates.js';
/**
* Display the list of results (hits) from the current search
@@ -74,4 +74,4 @@ function hits({
};
}
-module.exports = hits;
+export default hits;
diff --git a/src/widgets/menu/defaultTemplates.js b/src/widgets/menu/defaultTemplates.js
index 8004875d8b..be2d9d653a 100644
--- a/src/widgets/menu/defaultTemplates.js
+++ b/src/widgets/menu/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
header: '',
item: `{{name}} {{#helpers.formatNumber}}{{count}}{{/helpers.formatNumber}}`,
footer: ''
diff --git a/src/widgets/menu/menu.js b/src/widgets/menu/menu.js
index bdac48d9eb..6e610ed689 100644
--- a/src/widgets/menu/menu.js
+++ b/src/widgets/menu/menu.js
@@ -1,13 +1,13 @@
-let React = require('react');
-let ReactDOM = require('react-dom');
+import React from 'react';
+import ReactDOM from 'react-dom';
-let utils = require('../../lib/utils');
+import utils from '../../lib/utils.js';
let bem = utils.bemHelper('ais-menu');
-let cx = require('classnames');
-let autoHideContainerHOC = require('../../decorators/autoHideContainer');
-let headerFooterHOC = require('../../decorators/headerFooter');
+import cx from 'classnames';
+import autoHideContainerHOC from '../../decorators/autoHideContainer.js';
+import headerFooterHOC from '../../decorators/headerFooter.js';
-let defaultTemplates = require('./defaultTemplates');
+import defaultTemplates from './defaultTemplates.js';
/**
* Create a menu out of a facet
@@ -60,7 +60,7 @@ function menu({
}
let containerNode = utils.getContainerNode(container);
- let RefinementList = headerFooterHOC(require('../../components/RefinementList/RefinementList'));
+ let RefinementList = headerFooterHOC(require('../../components/RefinementList/RefinementList.js'));
if (autoHideContainer === true) {
RefinementList = autoHideContainerHOC(RefinementList);
}
@@ -127,4 +127,4 @@ function getFacetValues(results, hierarchicalFacetName, sortBy, limit) {
return values.data && values.data.slice(0, limit) || [];
}
-module.exports = menu;
+export default menu;
diff --git a/src/widgets/numeric-refinement-list/__tests__/numeric-refinement-list-test.js b/src/widgets/numeric-refinement-list/__tests__/numeric-refinement-list-test.js
index afa61bed5b..906e38ea9f 100644
--- a/src/widgets/numeric-refinement-list/__tests__/numeric-refinement-list-test.js
+++ b/src/widgets/numeric-refinement-list/__tests__/numeric-refinement-list-test.js
@@ -10,7 +10,7 @@ expect.extend(expectJSX);
describe('numericRefinementList call', () => {
jsdom({useEach: true});
- const numericRefinementList = require('../numeric-refinement-list');
+ const numericRefinementList = require('../numeric-refinement-list.js');
it('throws an exception when no container', () => {
const attributeName = '';
@@ -47,8 +47,8 @@ describe('numericRefinementList()', () => {
let results;
beforeEach(() => {
- numericRefinementList = require('../numeric-refinement-list');
- RefinementList = require('../../../components/RefinementList/RefinementList');
+ numericRefinementList = require('../numeric-refinement-list.js');
+ RefinementList = require('../../../components/RefinementList/RefinementList.js');
ReactDOM = {render: sinon.spy()};
numericRefinementList.__Rewire__('ReactDOM', ReactDOM);
autoHideContainer = sinon.stub().returns(RefinementList);
diff --git a/src/widgets/numeric-refinement-list/defaultTemplates.js b/src/widgets/numeric-refinement-list/defaultTemplates.js
index e6437fb2b7..577d889d14 100644
--- a/src/widgets/numeric-refinement-list/defaultTemplates.js
+++ b/src/widgets/numeric-refinement-list/defaultTemplates.js
@@ -1,4 +1,4 @@
-module.exports = {
+export default {
header: '',
item: `