import { BrowserBridge, Record } from 'groupby-api'; import { Action as ReduxAction, Store as ReduxStore } from 'redux'; import { Sayt } from 'sayt'; import Actions from './core/actions'; import ActionCreators from './core/actions/creators'; import Configuration from './core/configuration'; import Emitter from './core/emitter'; import Selectors from './core/selectors'; import Store from './core/store'; declare module 'redux' { interface Dispatch { (action: A): A; (action: A[]): A[]; (action: (state: Store.State) => A): A; (action: (state: Store.State) => A[]): A[]; } } export interface ParsedUrl { route: string; request: any; } export declare type Parse = (url: string) => Promise; export declare type Build = (type: string, state: Store.State) => string; export declare const STOREFRONT_APP_ID = "GroupBy StoreFront"; export interface History { parse: Parse; build: Build; pushState: (data: any, title: string, url: string) => void; replaceState: (data: any, title: string, url: string) => void; initialUrl: string; } declare class FluxCapacitor extends Emitter { __config: Configuration; /** * actions for modifying contents of the store */ actions: typeof ActionCreators; /** * selector functions for extracting data from the store */ selectors: typeof Selectors; /** * instances of all microservice clients */ clients: Configuration.Clients; /** * instance of the state store */ store: ReduxStore; /** * History-related helper methods; injected at service initialization time. */ history: History; /** * storefront config */ readonly config: Configuration; constructor(__config: Configuration); initHistory({ build, parse, initialUrl, pushState, replaceState }: History): void; /** * @deprecated */ saveState(route: string): void; pushState(urlState: Partial): void; replaceState(route: string, buildAndParse?: boolean): void; updateHistory({ method, request, url: urlParam, route, shouldFetch }: Partial): void; refreshState(state: any): void; search(query?: string): void; products(): void; moreRefinements(navigationName: string): void; moreProducts(amount: number): void; reset(query?: string, refinement?: { field: string; index: number; }): void; resize(pageSize: number): void; sort(index: number): void; refine(navigationName: string, index: number): void; unrefine(navigationName: string, index: number): void; detailsWithRouting(product: Store.Product | Record): void; switchCollection(collection: string): void; switchPage(page: number): void; countRecords(collection: string): void; autocomplete(query: string): void; saytSuggestions(query: string): void; saytProducts(query: string, refinements?: Actions.Payload.Autocomplete.Refinement[]): void; saytPastPurchases(query: string): void; pastPurchaseProducts(): void; displaySaytPastPurchases(): void; /** * create instances of all clients used to contact microservices */ static createClients(flux: FluxCapacitor): { bridge: BrowserBridge; sayt: Sayt; }; /** * create instance of Searchandiser API client */ static createBridge(config: Configuration, errorHandler: (err: Error) => void): BrowserBridge; /** * create instance of SAYT API client */ static createSayt(config: Configuration): Sayt; } export default FluxCapacitor;