packages/search-ui-engines-connector/src/index.ts (61 lines of code) (raw):
import type {
QueryConfig,
RequestState,
ResponseState,
AutocompleteResponseState,
APIConnector,
AutocompleteQueryConfig
} from "@elastic/search-ui";
import handleSearchRequest from "./handlers/search";
import handleAutocompleteRequest from "./handlers/autocomplete";
import { ConnectionOptions, Transporter } from "./types";
import { EngineTransporter } from "./handlers/transporter";
export * from "./types";
function isTransporter(
config: ConnectionOptions | Transporter
): config is Transporter {
return (config as Transporter).performRequest !== undefined;
}
class EngineConnector implements APIConnector {
private transporter: Transporter;
constructor(private config: ConnectionOptions | Transporter) {
if (isTransporter(config)) {
this.transporter = config;
} else {
if (!config.host) {
throw new Error("Engine Host must be provided.");
}
if (!config.engineName) {
throw new Error("Engine Name must be provided.");
}
if (!config.apiKey) {
throw new Error("API Key must be provided.");
}
const { host, engineName, apiKey } = config;
this.transporter = new EngineTransporter(host, engineName, apiKey);
}
}
// eslint-disable-next-line @typescript-eslint/no-empty-function
onResultClick(): void {}
// eslint-disable-next-line @typescript-eslint/no-empty-function
onAutocompleteResultClick(): void {}
async onSearch(
state: RequestState,
queryConfig: QueryConfig
): Promise<ResponseState> {
return handleSearchRequest({
state,
queryConfig,
transporter: this.transporter
});
}
async onAutocomplete(
state: RequestState,
queryConfig: AutocompleteQueryConfig
): Promise<AutocompleteResponseState> {
return handleAutocompleteRequest({
state,
queryConfig,
transporter: this.transporter
});
}
}
export default EngineConnector;