Skip to content

Commit 1cb915a

Browse files
vid277cdxker
authored andcommitted
fix: accept string and default search query object for starter questions
1 parent d0d3b70 commit 1cb915a

4 files changed

Lines changed: 57 additions & 24 deletions

File tree

clients/search-component/src/TrieveModal/Chat/SuggestedQuestions.tsx

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import React from "react";
2+
import React from "react";
23
import { useSuggestedQuestions } from "../../utils/hooks/useSuggestedQuestions";
34
import { useChatState } from "../../utils/hooks/chat-context";
45
import {
56
AiQuestion,
67
isAiQuestion,
8+
isDefaultSearchQuery,
79
useModalState,
810
} from "../../utils/hooks/modal-context";
911
import { cn } from "../../utils/styles";
1012
import { useAutoAnimate } from "@formkit/auto-animate/react";
1113
import { ArrowRotateRightIcon, SparklesIcon } from "../icons";
1214
import { AIInitialMessage } from "./AIInitalMessage";
15+
import { DefaultSearchQuery } from "trieve-ts-sdk";
1316

1417
export const SuggestedQuestions = ({
1518
onMessageSend,
@@ -20,21 +23,37 @@ export const SuggestedQuestions = ({
2023
const { suggestedQuestions, isLoadingSuggestedQueries, getQuestions } =
2124
useSuggestedQuestions();
2225

23-
const { props, trieveSDK, fingerprint, abTreatment } = useModalState();
26+
const { props, trieveSDK, fingerprint, abTreatment } =
27+
useModalState();
2428
const [parent] = useAutoAnimate({ duration: 100 });
2529

2630
if (messages.length) {
2731
return null;
2832
}
2933

30-
const handleSuggestedQuestion = async (q: string | AiQuestion) => {
31-
setCurrentQuestion(isAiQuestion(q) ? q.questionText : q);
32-
askQuestion(
33-
isAiQuestion(q) ? q.questionText : q,
34-
undefined,
35-
isAiQuestion(q) ? (q.products?.map((p) => p.groupId) ?? []) : undefined,
36-
isAiQuestion(q) && q.promptForAI !== "" ? q.promptForAI : undefined,
37-
);
34+
const handleSuggestedQuestion = async (
35+
q: AiQuestion | DefaultSearchQuery | string,
36+
) => {
37+
console.log("q", q);
38+
setCurrentQuestion(isAiQuestion(q) ? q.questionText : isDefaultSearchQuery(q) ? q.query ?? "" : q);
39+
40+
if (!isDefaultSearchQuery(q)) {
41+
askQuestion(
42+
isAiQuestion(q) ? q.questionText : q,
43+
undefined,
44+
isAiQuestion(q) ? (q.products?.map((p) => p.groupId) ?? []) : undefined,
45+
isAiQuestion(q) && q.promptForAI !== "" ? q.promptForAI : undefined,
46+
);
47+
} else {
48+
askQuestion(
49+
isAiQuestion(q) ? q.questionText : isDefaultSearchQuery(q) ? q.query ?? "" : q,
50+
undefined,
51+
isAiQuestion(q) ? (q.products?.map((p) => p.groupId) ?? []) : undefined,
52+
isAiQuestion(q) && q.promptForAI !== "" ? q.promptForAI : undefined,
53+
undefined,
54+
q.imageUrl ?? "",
55+
);
56+
}
3857

3958
const requestId =
4059
messages[messages.length - 1]?.queryId ??
@@ -46,7 +65,7 @@ export const SuggestedQuestions = ({
4665
user_id: fingerprint,
4766
location: window.location.href,
4867
metadata: {
49-
followup_query: q,
68+
followup_query: isAiQuestion(q) ? q.questionText : isDefaultSearchQuery(q) ? q.query ?? "" : q,
5069
component_props: props,
5170
ab_treatment: abTreatment,
5271
},
@@ -100,17 +119,17 @@ export const SuggestedQuestions = ({
100119
onClick={() => {
101120
handleSuggestedQuestion(q);
102121
}}
103-
key={isAiQuestion(q) ? q.questionText : q}
122+
key={isAiQuestion(q) ? q.questionText : isDefaultSearchQuery(q) ? q.query ?? "": q}
104123
className={`suggested-question tv-flex tv-gap-1 tv-items-center${
105124
isLoadingSuggestedQueries ? " loading" : ""
106125
}`}
107126
>
108127
<SparklesIcon fill="none" width={15} height={15} />
109-
{isAiQuestion(q) ? q.questionText : q}
128+
{isAiQuestion(q) ? q.questionText : isDefaultSearchQuery(q) ? q.query ?? "": q}
110129
</button>
111130
))}
112131
</div>
113132
</div>
114133
</div>
115134
);
116-
};
135+
};

clients/search-component/src/TrieveModal/Search/SuggestedQueries.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React, { useCallback, useEffect, useState } from "react";
22
import { cn } from "../../utils/styles";
3-
import { useModalState } from "../../utils/hooks/modal-context";
4-
import { SuggestedQueriesResponse } from "trieve-ts-sdk";
3+
import { useModalState, isDefaultSearchQuery } from "../../utils/hooks/modal-context";
4+
import { DefaultSearchQuery } from "trieve-ts-sdk";
55
import { getSuggestedQueries } from "../../utils/trieve";
66

77
export const SuggestedQueries = () => {
88
const { props, query, setQuery, imageUrl, trieveSDK } = useModalState();
99
const [isLoading, setIsLoading] = useState(false);
1010
const [suggestedQueries, setSuggestedQueries] = useState<
11-
SuggestedQueriesResponse["queries"]
11+
(DefaultSearchQuery | string)[]
1212
>([]);
1313

1414
const getQueries = useCallback(
@@ -27,11 +27,25 @@ export const SuggestedQueries = () => {
2727
[query],
2828
);
2929

30+
const handleSendSuggestedQuery = (q: DefaultSearchQuery | string) => {
31+
if (isDefaultSearchQuery(q)) {
32+
setQuery(q.query ?? "");
33+
34+
if (q.imageUrl) {
35+
setImageUrl(q.imageUrl);
36+
}
37+
} else {
38+
setQuery(q);
39+
}
40+
};
41+
3042
useEffect(() => {
3143
const defaultQueries =
32-
props.defaultSearchQueries?.filter((q) => q !== "") ?? [];
44+
props.defaultSearchQueries && props.defaultSearchQueries.length > 0 && isDefaultSearchQuery(props.defaultSearchQueries[0])
45+
? props.defaultSearchQueries
46+
: props.defaultSearchQueries?.filter((q) => q !== "") ?? [];
3347

34-
if (defaultQueries.length) {
48+
if (props.defaultSearchQueries?.length) {
3549
setSuggestedQueries(defaultQueries);
3650
return;
3751
}
@@ -64,8 +78,8 @@ export const SuggestedQueries = () => {
6478
<div className="suggested-query loading">Loading...</div>
6579
) : (
6680
suggestedQueries.map((q) => {
67-
q = q.replace(/^-|\*$/g, "");
68-
q = q.trim();
81+
let query = isDefaultSearchQuery(q) ? q.query?.replace(/^-|\*$/g, "") : q;
82+
query = query?.trim();
6983
return (
7084
<button
7185
onClick={() => setQuery(q)}

clients/search-component/src/utils/hooks/modal-context.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ export type ModalProps = {
163163
allowRefreshSuggestedQueries?: boolean;
164164
followupQuestions?: boolean;
165165
numberOfSuggestions?: number;
166-
defaultSearchQueries?: string[];
167-
defaultAiQuestions?: string[] | AiQuestion[];
166+
defaultSearchQueries?: DefaultSearchQuery[] | string[];
167+
defaultAiQuestions?: AiQuestion[] | DefaultSearchQuery[] | string[];
168168
brandLogoImgSrcUrl?: string;
169169
brandName?: string;
170170
problemLink?: string;

clients/search-component/src/utils/hooks/useFollowupQuestions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useEffect, useMemo, useState } from "react";
22
import { getSuggestedQuestions } from "../trieve";
3-
import { useModalState } from "./modal-context";
3+
import { isDefaultSearchQuery, useModalState } from "./modal-context";
44
import { useChatState } from "./chat-context";
55

66
export const useFollowupQuestions = () => {
@@ -48,7 +48,7 @@ export const useFollowupQuestions = () => {
4848
setSuggestedQuestions((prev) => ({
4949
...prev,
5050
[prevMessage.text]: queries.queries.map((q) => {
51-
return q.replace(/^[\d.-]+\s*/, "").trim();
51+
return isDefaultSearchQuery(q) ? q.query?.replace(/^[\d.-]+\s*/, "").trim() ?? "" : q;
5252
}),
5353
}));
5454
setIsLoadingSuggestedQueries(false);

0 commit comments

Comments
 (0)