From 8e6d1f9595add0559967ceb61f3838777ad5925c Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 16 May 2019 17:23:36 +0200 Subject: [PATCH 1/6] refactor(lodash): omit (dom) In this case, you can simply override a prop, which will take preference, like in any other object. --- packages/react-instantsearch-dom/src/components/Link.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-instantsearch-dom/src/components/Link.js b/packages/react-instantsearch-dom/src/components/Link.js index 83cae29eb2..0b0d950f67 100644 --- a/packages/react-instantsearch-dom/src/components/Link.js +++ b/packages/react-instantsearch-dom/src/components/Link.js @@ -1,4 +1,3 @@ -import { omit } from 'lodash'; import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { isSpecialClick } from '../core/utils'; @@ -17,6 +16,6 @@ export default class Link extends Component { }; render() { - return ; + return ; } } From 896e17474b167020bbd2565b6661a85b69993fcd Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 16 May 2019 18:01:03 +0200 Subject: [PATCH 2/6] refactor(omit): use internal (babel) replacement --- .../src/connectors/connectConfigure.js | 2 +- .../src/connectors/connectScrollTo.js | 7 +++---- .../react-instantsearch-core/src/core/utils.ts | 17 +++++++++++++++++ tslint.json | 3 ++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/react-instantsearch-core/src/connectors/connectConfigure.js b/packages/react-instantsearch-core/src/connectors/connectConfigure.js index 765bbb64c1..0f3f7df1b3 100644 --- a/packages/react-instantsearch-core/src/connectors/connectConfigure.js +++ b/packages/react-instantsearch-core/src/connectors/connectConfigure.js @@ -1,4 +1,4 @@ -import { omit } from 'lodash'; +import { omit } from '../core/utils'; import createConnector from '../core/createConnector'; import { refineValue, diff --git a/packages/react-instantsearch-core/src/connectors/connectScrollTo.js b/packages/react-instantsearch-core/src/connectors/connectScrollTo.js index 41fe06e9d5..9e08cc4922 100644 --- a/packages/react-instantsearch-core/src/connectors/connectScrollTo.js +++ b/packages/react-instantsearch-core/src/connectors/connectScrollTo.js @@ -1,4 +1,3 @@ -import { omit } from 'lodash'; import PropTypes from 'prop-types'; import createConnector from '../core/createConnector'; import { @@ -6,7 +5,7 @@ import { hasMultipleIndices, getIndexId, } from '../core/indexUtils'; -import { shallowEqual } from '../core/utils'; +import { shallowEqual, omit } from '../core/utils'; /** * connectScrollTo connector provides the logic to build a widget that will @@ -67,10 +66,10 @@ export default createConnector({ // using ScrollTo in combination of Pagination. As pagination can be change // by every widget, we want to scroll only if it cames from the pagination // widget itself. We also remove the configure key from the search state to - // do this comparaison because for now configure values are not present in the + // do this comparison because for now configure values are not present in the // search state before a first refinement has been made and will false the results. // See: https://github.com/algolia/react-instantsearch/issues/164 - const cleanedSearchState = omit(omit(searchState, 'configure'), id); + const cleanedSearchState = omit(searchState, ['configure', id]); const hasNotChanged = shallowEqual( this._prevSearchState, diff --git a/packages/react-instantsearch-core/src/core/utils.ts b/packages/react-instantsearch-core/src/core/utils.ts index c457db7040..ca17d2f66e 100644 --- a/packages/react-instantsearch-core/src/core/utils.ts +++ b/packages/react-instantsearch-core/src/core/utils.ts @@ -62,3 +62,20 @@ export function addQueryID(hits, queryID) { __queryID: queryID, })); } + +// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620 +export function omit(source: { [key: string]: any }, excluded: string[]) { + if (source === null || source === undefined) { + return {}; + } + const target = {}; + const sourceKeys = Object.keys(source); + for (let i = 0; i < sourceKeys.length; i++) { + const key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) { + continue; + } + target[key] = source[key]; + } + return target; +} diff --git a/tslint.json b/tslint.json index 3c83ede379..3e1fea3d01 100644 --- a/tslint.json +++ b/tslint.json @@ -20,6 +20,7 @@ "check-format", "allow-leading-underscore", "allow-pascal-case" - ] + ], + "prefer-for-of": false } } From 21f7cb3c8a2c7cf8a081c96b6e17ce27c250900d Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 16 May 2019 18:01:25 +0200 Subject: [PATCH 3/6] refactor(omit): use destructuring replacement --- .../src/core/createInstantSearchManager.js | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/packages/react-instantsearch-core/src/core/createInstantSearchManager.js b/packages/react-instantsearch-core/src/core/createInstantSearchManager.js index ab36df2ba7..574fe23786 100644 --- a/packages/react-instantsearch-core/src/core/createInstantSearchManager.js +++ b/packages/react-instantsearch-core/src/core/createInstantSearchManager.js @@ -1,4 +1,3 @@ -import { omit } from 'lodash'; import algoliasearchHelper from 'algoliasearch-helper'; import createWidgetsManager from './createWidgetsManager'; import createStore from './createStore'; @@ -214,18 +213,15 @@ export default function createInstantSearchManager({ nextIsSearchStalled = false; } - const nextState = omit( - { - ...currentState, - results, - isSearchStalled: nextIsSearchStalled, - searching: false, - error: null, - }, - 'resultsFacetValues' - ); + const { resultsFacetValues, ...partialState } = currentState; - store.setState(nextState); + store.setState({ + ...partialState, + results, + isSearchStalled: nextIsSearchStalled, + searching: false, + error: null, + }); }; } @@ -238,31 +234,25 @@ export default function createInstantSearchManager({ nextIsSearchStalled = false; } - const nextState = omit( - { - ...currentState, - isSearchStalled: nextIsSearchStalled, - error, - searching: false, - }, - 'resultsFacetValues' - ); + const { resultsFacetValues, ...partialState } = currentState; - store.setState(nextState); + store.setState({ + ...partialState, + isSearchStalled: nextIsSearchStalled, + error, + searching: false, + }); } function handleNewSearch() { if (!stalledSearchTimer) { stalledSearchTimer = setTimeout(() => { - const nextState = omit( - { - ...store.getState(), - isSearchStalled: true, - }, - 'resultsFacetValues' - ); + const { resultsFacetValues, ...partialState } = store.getState(); - store.setState(nextState); + store.setState({ + ...partialState, + isSearchStalled: true, + }); }, stalledSearchDelay); } } From 2e8d630328b3dd2b5fa3853b8400648abd73b550 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Fri, 17 May 2019 13:32:56 +0200 Subject: [PATCH 4/6] refactor(indexUtils): use new omit where possible --- .../react-instantsearch-core/src/core/indexUtils.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/react-instantsearch-core/src/core/indexUtils.js b/packages/react-instantsearch-core/src/core/indexUtils.js index 2816224e3d..2b956a4174 100644 --- a/packages/react-instantsearch-core/src/core/indexUtils.js +++ b/packages/react-instantsearch-core/src/core/indexUtils.js @@ -1,4 +1,5 @@ -import { has, omit, get } from 'lodash'; +import { has, omit as lodashOmit, get } from 'lodash'; +import { omit } from './utils'; export function getIndexId(context) { return hasMultipleIndices(context) @@ -239,11 +240,11 @@ function cleanUpValueWithSingleIndex({ if (namespace) { return { ...searchState, - [namespace]: omit(searchState[namespace], attribute), + [namespace]: omit(searchState[namespace], [attribute]), }; } - return omit(searchState, id); + return omit(searchState, [id]); } function cleanUpValueWithMultiIndex({ @@ -262,11 +263,11 @@ function cleanUpValueWithMultiIndex({ ...searchState.indices, [indexId]: { ...indexSearchState, - [namespace]: omit(indexSearchState[namespace], attribute), + [namespace]: omit(indexSearchState[namespace], [attribute]), }, }, }; } - return omit(searchState, `indices.${indexId}.${id}`); + return lodashOmit(searchState, `indices.${indexId}.${id}`); } From 039afcbdb4a072181e7d423c361c87af319eca2e Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Fri, 17 May 2019 16:18:59 +0200 Subject: [PATCH 5/6] refactor(indexutils): remove omit with path --- .../src/core/__tests__/indexUtils.js | 2 ++ .../src/core/indexUtils.js | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/react-instantsearch-core/src/core/__tests__/indexUtils.js b/packages/react-instantsearch-core/src/core/__tests__/indexUtils.js index 7ebfd88de9..475640cb3a 100644 --- a/packages/react-instantsearch-core/src/core/__tests__/indexUtils.js +++ b/packages/react-instantsearch-core/src/core/__tests__/indexUtils.js @@ -227,6 +227,7 @@ describe('utility method for manipulating the search state', () => { namespace: {}, }); }); + it('get results', () => { const searchResults = { results: { hits: ['some'] } }; @@ -235,6 +236,7 @@ describe('utility method for manipulating the search state', () => { expect(results).toEqual({ hits: ['some'] }); }); }); + describe('when there are multiple index', () => { let context = { multiIndexContext: { targetedIndex: 'first' } }; it('refine with no namespace', () => { diff --git a/packages/react-instantsearch-core/src/core/indexUtils.js b/packages/react-instantsearch-core/src/core/indexUtils.js index 2b956a4174..eb81c384dc 100644 --- a/packages/react-instantsearch-core/src/core/indexUtils.js +++ b/packages/react-instantsearch-core/src/core/indexUtils.js @@ -1,4 +1,4 @@ -import { has, omit as lodashOmit, get } from 'lodash'; +import { has, get } from 'lodash'; import { omit } from './utils'; export function getIndexId(context) { @@ -269,5 +269,15 @@ function cleanUpValueWithMultiIndex({ }; } - return lodashOmit(searchState, `indices.${indexId}.${id}`); + if (indexSearchState) { + return { + ...searchState, + indices: { + ...searchState.indices, + [indexId]: omit(indexSearchState, [id]), + }, + }; + } + + return searchState; } From 2786bc3b36c82504dd7f8c105843285ac4b6ea68 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Fri, 17 May 2019 16:29:56 +0200 Subject: [PATCH 6/6] chore: fix merge --- packages/react-instantsearch-core/src/core/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-instantsearch-core/src/core/utils.ts b/packages/react-instantsearch-core/src/core/utils.ts index b56bab4b5b..af8eddfcb8 100644 --- a/packages/react-instantsearch-core/src/core/utils.ts +++ b/packages/react-instantsearch-core/src/core/utils.ts @@ -101,4 +101,4 @@ export function omit(source: { [key: string]: any }, excluded: string[]) { target[key] = source[key]; } return target; -} \ No newline at end of file +}