import ApiCall from "./ApiCall"; import { PresetSchema } from "./Preset"; import type { DocumentSchema, SearchParams } from "./Documents"; import { MultiSearchRequestsSchema } from "./MultiSearch"; import { normalizeArrayableParams } from "./Utils"; const RESOURCEPATH = "/presets"; export interface PresetCreateSchema< T extends DocumentSchema, Infix extends string, > { value: SearchParams | MultiSearchRequestsSchema; } export interface PresetsRetrieveSchema { presets: PresetSchema[]; } export default class Presets { constructor(private apiCall: ApiCall) {} async upsert( presetId: string, params: PresetCreateSchema, ): Promise> { if (typeof params.value === "object" && "searches" in params.value) { const normalizedParams = params.value.searches.map((search) => normalizeArrayableParams, Infix>(search), ); return this.apiCall.put>(this.endpointPath(presetId), { value: { searches: normalizedParams }, }); } const normalizedParams = normalizeArrayableParams< T, SearchParams, Infix >(params.value); return this.apiCall.put>(this.endpointPath(presetId), { value: normalizedParams, }); } async retrieve(): Promise< PresetsRetrieveSchema > { return this.apiCall.get>(this.endpointPath()); } private endpointPath(operation?: string): string { return `${Presets.RESOURCEPATH}${ operation === undefined ? "" : "/" + encodeURIComponent(operation) }`; } static get RESOURCEPATH(): string { return RESOURCEPATH; } }