Source: boost-pfs-components-only-instant-search.js

import jQ from 'jquery';

import Settings from './helpers/settings';
import Utils from './helpers/utils';
import Labels from './helpers/labels';
import Globals from './helpers/globals';
import Selector from './helpers/selector';
import Class from "./helpers/class";
import Analytics from "./helpers/analytics";

// API
import Api from "./helpers/api";
import InstantSearchApi from './api/instant-search-api';

// Enums
import InstantSearchEnum from "./enum/instant-search-enum";

// Instant Search Components
import SearchInput from './components/instant-search/instant-search-element/search-input';
import InstantSearch from './components/instant-search/instant-search';
import InstantSearchMobile from './components/instant-search/instant-search-style/instant-search-mobile';
import InstantSearchResult from "./components/instant-search/instant-search-style/instant-search-result";
import InstantSearchStyle from "./components/instant-search/instant-search-style/instant-search-style";
import InstantSearchResultStyle2 from "./components/instant-search/instant-search-style/instant-search-result-style2";

// Instant Search Block
import InstantSearchResultBlock from "./components/instant-search/instant-search-block/instant-search-result-block";
import InstantSearchResultBlockDym from "./components/instant-search/instant-search-block/instant-search-result-block-dym";
import InstantSearchResultBlockEmpty from "./components/instant-search/instant-search-block/instant-search-result-block-empty";
import InstantSearchResultBlockLoading from "./components/instant-search/instant-search-block/instant-search-result-block-loading";
import InstantSearchResultBlockViewAll from "./components/instant-search/instant-search-block/instant-search-result-block-view-all";

// Instant Search Item
import InstantSearchResultItem from "./components/instant-search/instant-search-item/instant-search-result-item";
import InstantSearchResultItemCollection from "./components/instant-search/instant-search-item/instant-search-result-item-collection";
import InstantSearchResultItemPage from "./components/instant-search/instant-search-item/instant-search-result-item-page";
import InstantSearchResultItemPopular from "./components/instant-search/instant-search-item/instant-search-result-item-popular";
import InstantSearchResultItemProduct from './components/instant-search/instant-search-item/instant-search-result-item-product';

// Instant Search Others
import AutocompleteMenuCustom from './components/instant-search/others/autocomplete-menu-custom';
import InstantSearchResultRedirect from "./components/instant-search/others/instant-search-result-redirect";

/**
 * Injects all components into a scope, to override and customize outside applib.
 * @param scope
 */
const inject = (scope) => {
	// Library
	scope.jQ = jQ;

	// Helpers
	scope.Analytics = Analytics;
	scope.Class = Class;
	scope.Globals = Globals;
	scope.Labels = Labels;
	scope.Selector = Selector;
	scope.Settings = Settings;
	scope.Utils = Utils;

	// Api
	scope.Api = Api;
	scope.InstantSearchApi = InstantSearchApi;

	// Enums
	scope.InstantSearchEnum = InstantSearchEnum;

	// Instant search
	scope.SearchInput = SearchInput;
	scope.InstantSearch = InstantSearch;
	scope.InstantSearchMobile = InstantSearchMobile;
	scope.InstantSearchResult = InstantSearchResult;
	scope.InstantSearchStyle = InstantSearchStyle;
	scope.InstantSearchResultStyle2 = InstantSearchResultStyle2;

	// Instant search result block
	scope.InstantSearchResultBlock = InstantSearchResultBlock;
	scope.InstantSearchResultBlockDym = InstantSearchResultBlockDym;
	scope.InstantSearchResultBlockEmpty = InstantSearchResultBlockEmpty;
	scope.InstantSearchResultBlockLoading = InstantSearchResultBlockLoading;
	scope.InstantSearchResultBlockViewAll = InstantSearchResultBlockViewAll;

	// Instant search item
	scope.InstantSearchResultItem = InstantSearchResultItem;
	scope.InstantSearchResultItemCollection = InstantSearchResultItemCollection;
	scope.InstantSearchResultItemPage = InstantSearchResultItemPage;
	scope.InstantSearchResultItemPopular = InstantSearchResultItemPopular;
	scope.InstantSearchResultItemProduct = InstantSearchResultItemProduct;

	// Instant search others
	scope.AutocompleteMenuCustom = AutocompleteMenuCustom;
	scope.InstantSearchResultRedirect = InstantSearchResultRedirect;
}

const Components = {
	inject: inject
}

export default Components;