Skip to content

Commit

Permalink
added typeguard function for verticalResults
Browse files Browse the repository at this point in the history
  • Loading branch information
anguyen-yext2 committed Jun 11, 2024
1 parent 9554b3e commit 9874ad6
Show file tree
Hide file tree
Showing 10 changed files with 77 additions and 24 deletions.
13 changes: 13 additions & 0 deletions docs/search-headless.generativedirectanswerstate.isloading.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@yext/search-headless](./search-headless.md) &gt; [GenerativeDirectAnswerState](./search-headless.generativedirectanswerstate.md) &gt; [isLoading](./search-headless.generativedirectanswerstate.isloading.md)

## GenerativeDirectAnswerState.isLoading property

Whether the AI generated answer is currently loading or has finished loading.

<b>Signature:</b>

```typescript
isLoading?: boolean;
```
21 changes: 21 additions & 0 deletions docs/search-headless.generativedirectanswerstate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@yext/search-headless](./search-headless.md) &gt; [GenerativeDirectAnswerState](./search-headless.generativedirectanswerstate.md)

## GenerativeDirectAnswerState interface

Maintains the data for the latest generative direct answer.

<b>Signature:</b>

```typescript
export interface GenerativeDirectAnswerState
```

## Properties

| Property | Type | Description |
| --- | --- | --- |
| [isLoading?](./search-headless.generativedirectanswerstate.isloading.md) | boolean | <i>(Optional)</i> Whether the AI generated answer is currently loading or has finished loading. |
| [response?](./search-headless.generativedirectanswerstate.response.md) | [GenerativeDirectAnswerResponse](./search-headless.generativedirectanswerresponse.md) | <i>(Optional)</i> The generative direct answer response. |

13 changes: 13 additions & 0 deletions docs/search-headless.generativedirectanswerstate.response.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@yext/search-headless](./search-headless.md) &gt; [GenerativeDirectAnswerState](./search-headless.generativedirectanswerstate.md) &gt; [response](./search-headless.generativedirectanswerstate.response.md)

## GenerativeDirectAnswerState.response property

The generative direct answer response.

<b>Signature:</b>

```typescript
response?: GenerativeDirectAnswerResponse;
```
1 change: 1 addition & 0 deletions docs/search-headless.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
| [GenerativeDirectAnswerRequest](./search-headless.generativedirectanswerrequest.md) | Options which can be specified for a generative direct answer request. |
| [GenerativeDirectAnswerResponse](./search-headless.generativedirectanswerresponse.md) | A representation of a generative direct answer response. |
| [GenerativeDirectAnswerService](./search-headless.generativedirectanswerservice.md) | A service for generative direct answer requests. |
| [GenerativeDirectAnswerState](./search-headless.generativedirectanswerstate.md) | Maintains the data for the latest generative direct answer. |
| [HighlightedValue](./search-headless.highlightedvalue.md) | A field value and its substring matches as emphasized by the Search API. |
| [HolidayHours](./search-headless.holidayhours.md) | An interface for holiday hours to use in [BaseFieldValueDirectAnswer.value](./search-headless.basefieldvaluedirectanswer.value.md)<!-- -->. |
| [Hours](./search-headless.hours.md) | An interface for hours fields to use in [BaseFieldValueDirectAnswer.value](./search-headless.basefieldvaluedirectanswer.value.md)<!-- -->. |
Expand Down
2 changes: 1 addition & 1 deletion docs/search-headless.state.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export interface State
| --- | --- | --- |
| [directAnswer](./search-headless.state.directanswer.md) | [DirectAnswerState](./search-headless.directanswerstate.md) | Maintains the direct answer associated with the latest search. |
| [filters](./search-headless.state.filters.md) | [FiltersState](./search-headless.filtersstate.md) | Maintains the current state of facets and filters in the application. |
| [generativeDirectAnswer](./search-headless.state.generativedirectanswer.md) | GenerativeDirectAnswerState | Maintains the data for the latest universal search. |
| [generativeDirectAnswer](./search-headless.state.generativedirectanswer.md) | [GenerativeDirectAnswerState](./search-headless.generativedirectanswerstate.md) | Maintains the data for the latest universal search. |
| [location](./search-headless.state.location.md) | [LocationState](./search-headless.locationstate.md) | Maintains the user's location, if given, or the inferred location, that is used to bias search results. |
| [meta](./search-headless.state.meta.md) | [MetaState](./search-headless.metastate.md) | Maintains the metadata for Search Headless. |
| [query](./search-headless.state.query.md) | [QueryState](./search-headless.querystate.md) | Maintains the latest query and its associated data. |
Expand Down
7 changes: 6 additions & 1 deletion etc/search-headless.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,12 @@ export interface GenerativeDirectAnswerService {
generateAnswer(request: GenerativeDirectAnswerRequest): Promise<GenerativeDirectAnswerResponse>;
}

// @public
export interface GenerativeDirectAnswerState {
isLoading?: boolean;
response?: GenerativeDirectAnswerResponse;
}

// @public
export type HeadlessConfig = SearchConfig & {
headlessId?: string;
Expand Down Expand Up @@ -960,7 +966,6 @@ export enum SpellCheckType {
export interface State {
directAnswer: DirectAnswerState;
filters: FiltersState;
// Warning: (ae-forgotten-export) The symbol "GenerativeDirectAnswerState" needs to be exported by the entry point index.d.ts
generativeDirectAnswer: GenerativeDirectAnswerState;
location: LocationState;
meta: MetaState;
Expand Down
8 changes: 5 additions & 3 deletions src/http-manager.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
type ServiceType = 'universalQuery' | 'verticalQuery';
type ServiceType = 'universalQuery' | 'verticalQuery' | 'generativeDirectAnswer';

type ServiceIds = {
[key in ServiceType]: number;
Expand All @@ -18,12 +18,14 @@ export default class HttpManager {
constructor() {
this.latestRequestIds = {
universalQuery: 0,
verticalQuery: 0
verticalQuery: 0,
generativeDirectAnswer: 0
};

this.latestResponseIds = {
universalQuery: 0,
verticalQuery: 0
verticalQuery: 0,
generativeDirectAnswer: 0
};
}

Expand Down
1 change: 1 addition & 0 deletions src/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export { SessionTrackingState } from './slices/sessiontracking';
export { SpellCheckState } from './slices/spellcheck';
export { UniversalSearchState } from './slices/universal';
export { VerticalSearchState, AllResultsForVertical } from './slices/vertical';
export { GenerativeDirectAnswerState } from './slices/generativedirectanswer';

// utils models
export { BoundedRange, RangeBoundary } from './utils/boundedrange';
Expand Down
11 changes: 10 additions & 1 deletion src/models/slices/vertical.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,13 @@ export interface VerticalSearchState {
* The radius (in meters) to filter vertical searches by.
*/
locationRadius?: number
}
}

export function isVerticalResults(vertical: VerticalSearchState): vertical is VerticalResults {
return (vertical as VerticalResults).appliedQueryFilters !== undefined
&& (vertical as VerticalResults).queryDurationMillis !== undefined
&& (vertical as VerticalResults).results !== undefined
&& (vertical as VerticalResults).resultsCount !== undefined
&& (vertical as VerticalResults).source !== undefined
&& (vertical as VerticalResults).verticalKey !== undefined;
}
24 changes: 6 additions & 18 deletions src/search-headless.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { initialState as initialDirectAnswerState } from './slices/directanswer'
import { initialState as initialQueryRulesState } from './slices/queryrules';
import { initialState as initialSearchStatusState } from './slices/searchstatus';
import { initialState as initialGenerativeDirectAnswerState } from './slices/generativedirectanswer';
import { isVerticalResults } from './models/slices/vertical';

/**
* Provides the functionality for interacting with a Search experience.
Expand Down Expand Up @@ -566,29 +567,18 @@ export default class SearchHeadless {
* of undefined if there is no results defined in state
*/
async executeGenerativeDirectAnswer(): Promise<GenerativeDirectAnswerResponse | undefined> {
const thisRequestId = this.httpManager.updateRequestId('generativeDirectAnswer');
const searchId = this.state.meta.uuid;
if (!searchId) {
console.error('no search id supplied for generative direct answer');
return;
}
let requestName: 'universalQuery' | 'verticalQuery';
let results: VerticalResults[] | undefined;
if (this.state.meta.searchType === SearchTypeEnum.Vertical) {
requestName = 'verticalQuery';
if (this.state.vertical.appliedQueryFilters && this.state.vertical.queryDurationMillis
&& this.state.vertical.results && this.state.vertical.resultsCount
&& this.state.vertical.source && this.state.vertical.verticalKey ) {
results = [{
appliedQueryFilters: this.state.vertical.appliedQueryFilters,
queryDurationMillis: this.state.vertical.queryDurationMillis,
results: this.state.vertical.results,
resultsCount: this.state.vertical.resultsCount,
source: this.state.vertical.source,
verticalKey: this.state.vertical.verticalKey,
}];
if (isVerticalResults(this.state.vertical)) {
results = [this.state.vertical];
}
} else {
requestName = 'universalQuery';
results = this.state.universal.verticals;
}
if (!results || results.length === 0) {
Expand All @@ -600,7 +590,6 @@ export default class SearchHeadless {
console.error('no search term supplied for generative direct answer');
return;
}
const thisRequestId = this.httpManager.updateRequestId(requestName);
this.stateManager.dispatchEvent('generativeDirectAnswer/setIsLoading', true);

let response: GenerativeDirectAnswerResponse;
Expand All @@ -612,14 +601,14 @@ export default class SearchHeadless {
additionalHttpHeaders: this.additionalHttpHeaders
});
} catch (e) {
const isLatestResponse = this.httpManager.processRequestId(requestName, thisRequestId);
const isLatestResponse = this.httpManager.processRequestId('generativeDirectAnswer', thisRequestId);
if (isLatestResponse) {
this.stateManager.dispatchEvent('generativeDirectAnswer/setIsLoading', false);
}
return Promise.reject(e);
}

const isLatestResponse = this.httpManager.processRequestId(requestName, thisRequestId);
const isLatestResponse = this.httpManager.processRequestId('generativeDirectAnswer', thisRequestId);
if (!isLatestResponse) {
return response;
}
Expand All @@ -628,4 +617,3 @@ export default class SearchHeadless {
return response;
}
}

0 comments on commit 9874ad6

Please sign in to comment.