vdb-ai-chat 1.0.77 → 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/chat-widget.js +461 -1
  2. package/lib/commonjs/api.js +27 -55
  3. package/lib/commonjs/api.js.map +1 -1
  4. package/lib/commonjs/components/ChatHeader.js +0 -2
  5. package/lib/commonjs/components/ChatHeader.js.map +1 -1
  6. package/lib/commonjs/components/ChatWidget.js +21 -55
  7. package/lib/commonjs/components/ChatWidget.js.map +1 -1
  8. package/lib/commonjs/components/LazyProductsFetcher.js +3 -5
  9. package/lib/commonjs/components/LazyProductsFetcher.js.map +1 -1
  10. package/lib/commonjs/components/utils.js +34 -42
  11. package/lib/commonjs/components/utils.js.map +1 -1
  12. package/lib/commonjs/contexts/ThemeProvider.js +21 -44
  13. package/lib/commonjs/contexts/ThemeProvider.js.map +1 -1
  14. package/lib/commonjs/index.web.js +6 -17
  15. package/lib/commonjs/index.web.js.map +1 -1
  16. package/lib/commonjs/storage.js +4 -14
  17. package/lib/commonjs/storage.js.map +1 -1
  18. package/lib/commonjs/theme.js +1 -229
  19. package/lib/commonjs/theme.js.map +1 -1
  20. package/lib/module/api.js +27 -53
  21. package/lib/module/api.js.map +1 -1
  22. package/lib/module/components/ChatHeader.js +0 -2
  23. package/lib/module/components/ChatHeader.js.map +1 -1
  24. package/lib/module/components/ChatWidget.js +22 -56
  25. package/lib/module/components/ChatWidget.js.map +1 -1
  26. package/lib/module/components/LazyProductsFetcher.js +3 -5
  27. package/lib/module/components/LazyProductsFetcher.js.map +1 -1
  28. package/lib/module/components/utils.js +34 -42
  29. package/lib/module/components/utils.js.map +1 -1
  30. package/lib/module/contexts/ThemeProvider.js +16 -39
  31. package/lib/module/contexts/ThemeProvider.js.map +1 -1
  32. package/lib/module/index.web.js +6 -17
  33. package/lib/module/index.web.js.map +1 -1
  34. package/lib/module/storage.js +4 -14
  35. package/lib/module/storage.js.map +1 -1
  36. package/lib/module/theme.js +0 -228
  37. package/lib/module/theme.js.map +1 -1
  38. package/lib/typescript/api.d.ts +2 -12
  39. package/lib/typescript/api.d.ts.map +1 -1
  40. package/lib/typescript/components/ChatHeader.d.ts.map +1 -1
  41. package/lib/typescript/components/ChatWidget.d.ts.map +1 -1
  42. package/lib/typescript/components/LazyProductsFetcher.d.ts +0 -3
  43. package/lib/typescript/components/LazyProductsFetcher.d.ts.map +1 -1
  44. package/lib/typescript/components/utils.d.ts +1 -0
  45. package/lib/typescript/components/utils.d.ts.map +1 -1
  46. package/lib/typescript/contexts/ThemeProvider.d.ts.map +1 -1
  47. package/lib/typescript/index.web.d.ts +1 -23
  48. package/lib/typescript/index.web.d.ts.map +1 -1
  49. package/lib/typescript/storage.d.ts.map +1 -1
  50. package/lib/typescript/theme.d.ts +0 -228
  51. package/lib/typescript/theme.d.ts.map +1 -1
  52. package/lib/typescript/types.d.ts +0 -4
  53. package/lib/typescript/types.d.ts.map +1 -1
  54. package/package.json +1 -2
  55. package/src/api.ts +24 -60
  56. package/src/components/ChatHeader.tsx +0 -2
  57. package/src/components/ChatWidget.tsx +86 -137
  58. package/src/components/LazyProductsFetcher.tsx +2 -7
  59. package/src/components/utils.ts +34 -42
  60. package/src/contexts/ThemeProvider.tsx +10 -32
  61. package/src/index.web.tsx +13 -59
  62. package/src/storage.ts +4 -14
  63. package/src/theme.ts +0 -230
  64. package/src/types.ts +0 -4
  65. package/lib/commonjs/components/ButtonContent.js +0 -54
  66. package/lib/commonjs/components/ButtonContent.js.map +0 -1
  67. package/lib/commonjs/components/FloatingChatButton.js +0 -197
  68. package/lib/commonjs/components/FloatingChatButton.js.map +0 -1
  69. package/lib/commonjs/config/storeConfigLoader.js +0 -161
  70. package/lib/commonjs/config/storeConfigLoader.js.map +0 -1
  71. package/lib/commonjs/config/types.js +0 -2
  72. package/lib/commonjs/config/types.js.map +0 -1
  73. package/lib/commonjs/utils/pluginUrlBuilder.js +0 -288
  74. package/lib/commonjs/utils/pluginUrlBuilder.js.map +0 -1
  75. package/lib/module/components/ButtonContent.js +0 -48
  76. package/lib/module/components/ButtonContent.js.map +0 -1
  77. package/lib/module/components/FloatingChatButton.js +0 -190
  78. package/lib/module/components/FloatingChatButton.js.map +0 -1
  79. package/lib/module/config/storeConfigLoader.js +0 -153
  80. package/lib/module/config/storeConfigLoader.js.map +0 -1
  81. package/lib/module/config/types.js +0 -2
  82. package/lib/module/config/types.js.map +0 -1
  83. package/lib/module/utils/pluginUrlBuilder.js +0 -279
  84. package/lib/module/utils/pluginUrlBuilder.js.map +0 -1
  85. package/lib/typescript/components/ButtonContent.d.ts +0 -5
  86. package/lib/typescript/components/ButtonContent.d.ts.map +0 -1
  87. package/lib/typescript/components/FloatingChatButton.d.ts +0 -8
  88. package/lib/typescript/components/FloatingChatButton.d.ts.map +0 -1
  89. package/lib/typescript/config/storeConfigLoader.d.ts +0 -25
  90. package/lib/typescript/config/storeConfigLoader.d.ts.map +0 -1
  91. package/lib/typescript/config/types.d.ts +0 -49
  92. package/lib/typescript/config/types.d.ts.map +0 -1
  93. package/lib/typescript/utils/pluginUrlBuilder.d.ts +0 -43
  94. package/lib/typescript/utils/pluginUrlBuilder.d.ts.map +0 -1
  95. package/src/components/ButtonContent.tsx +0 -54
  96. package/src/components/FloatingChatButton.tsx +0 -204
  97. package/src/config/storeConfigLoader.ts +0 -175
  98. package/src/config/types.ts +0 -51
  99. package/src/utils/pluginUrlBuilder.ts +0 -528
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vdb-ai-chat",
3
- "version": "1.0.77",
3
+ "version": "1.0.78",
4
4
  "description": "Cross-platform AI chat widget for React Native and Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -85,7 +85,6 @@
85
85
  "react-dom": "^18.3.1",
86
86
  "react-native": "0.76.0",
87
87
  "react-native-builder-bob": "^0.23.2",
88
- "react-native-svg": "15.12.1",
89
88
  "typescript": "^5.6.3",
90
89
  "webpack": "^5.96.1",
91
90
  "webpack-cli": "^5.1.4",
package/src/api.ts CHANGED
@@ -7,35 +7,11 @@ import {
7
7
  import Routes from "./routes";
8
8
  import { Storage } from "./storage";
9
9
  import type { ChatMessage } from "./types";
10
- import type { SearchApiDefaults } from "./config/types";
11
- import { buildPluginApiPayload } from "./utils/pluginUrlBuilder";
12
10
 
13
11
  // Generic params type reused for downstream APIs (e.g. product search payload)
14
12
  export type ChatApiParams = Record<string, any>;
15
13
 
16
- // Module-level token override - when set, this takes precedence over storage
17
- let tokenOverride: string | null = null;
18
-
19
- /**
20
- * Set a token override that will be used instead of reading from storage.
21
- * Pass null to clear the override and revert to storage-based token.
22
- */
23
- export function setTokenOverride(token: string | null): void {
24
- tokenOverride = token;
25
- }
26
-
27
- /**
28
- * Get the current token override (if any).
29
- */
30
- export function getTokenOverride(): string | null {
31
- return tokenOverride;
32
- }
33
-
34
14
  async function getUserToken(): Promise<string> {
35
- // If a token override is set, use it instead of storage
36
- if (tokenOverride) {
37
- return tokenOverride;
38
- }
39
15
  const userInfo = await Storage.getJSON<UserDetails>("persist:userInfo", {});
40
16
  const userData = JSON.parse(userInfo?.user || "{}");
41
17
  return userData?.token || "";
@@ -44,14 +20,14 @@ async function getUserToken(): Promise<string> {
44
20
  async function buildHeaders() {
45
21
  const token = await getUserToken();
46
22
  const iid = (await Storage.getItem("persist:appState")) || "{}";
47
- let installationId = "web";
23
+ let installationId = "";
48
24
  try {
49
25
  const parsed = JSON.parse(iid);
50
26
  installationId = parsed?.installationIdentifier
51
27
  ? JSON.parse(parsed.installationIdentifier)
52
- : "web";
28
+ : "";
53
29
  } catch {
54
- installationId = "web";
30
+ installationId = "";
55
31
  }
56
32
  const session = (await Storage.getItem("session_cookie")) || "";
57
33
 
@@ -414,28 +390,28 @@ export async function clearChatHistory(
414
390
  export async function getProducts(
415
391
  apiUrl: string,
416
392
  params: ChatApiParams,
417
- useAsPlugin?: boolean,
418
- apiDefaults?: SearchApiDefaults,
419
393
  ): Promise<any> {
420
- let payload: Record<string, any>;
421
-
422
- if (useAsPlugin) {
423
- payload = buildPluginApiPayload(params, apiDefaults);
424
- payload.page_size = 50;
425
- payload.page_number = 1;
426
- } else {
427
- payload = {
428
- ...params,
429
- page_size: 50,
430
- page_number: 1,
431
- };
432
- }
394
+ // let depth_percent_from: number | undefined;
395
+ // let depth_percent_to: number | undefined;
396
+ // let table_percent_from: number | undefined;
397
+ // let table_percent_to: number | undefined;
398
+
399
+ // if (userInfo?.user?.max_search_key_values) {
400
+ // depth_percent_from = userInfo.user.max_search_key_values.min_depth;
401
+ // depth_percent_to = userInfo.user.max_search_key_values.max_depth;
402
+ // table_percent_from = userInfo.user.max_search_key_values.min_table;
403
+ // table_percent_to = userInfo.user.max_search_key_values.max_table;
404
+ // }
433
405
 
434
406
  const res = await fetch(Routes.SEARCH_DIAMONDS(apiUrl), {
435
407
  method: "POST",
436
408
  headers: await buildHeaders(),
437
409
  body: JSON.stringify({
438
- vdb: payload,
410
+ vdb: {
411
+ ...params,
412
+ page_size: 50,
413
+ page_number: 1,
414
+ },
439
415
  }),
440
416
  });
441
417
 
@@ -451,28 +427,16 @@ export async function getProductsPaginated(
451
427
  apiUrl: string,
452
428
  params: ChatApiParams,
453
429
  pageNumber: number = 1,
454
- useAsPlugin?: boolean,
455
- apiDefaults?: SearchApiDefaults,
456
430
  ): Promise<any> {
457
- let payload: Record<string, any>;
458
-
459
- if (useAsPlugin) {
460
- payload = buildPluginApiPayload(params, apiDefaults);
461
- payload.page_size = 5;
462
- payload.page_number = pageNumber;
463
- } else {
464
- payload = {
465
- ...params,
466
- page_size: 5,
467
- page_number: pageNumber,
468
- };
469
- }
470
-
471
431
  const res = await fetch(Routes.SEARCH_DIAMONDS(apiUrl), {
472
432
  method: "POST",
473
433
  headers: await buildHeaders(),
474
434
  body: JSON.stringify({
475
- vdb: payload,
435
+ vdb: {
436
+ ...params,
437
+ page_size: 5,
438
+ page_number: pageNumber,
439
+ },
476
440
  }),
477
441
  });
478
442
 
@@ -74,7 +74,6 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
74
74
  <TouchableOpacity
75
75
  onPress={() => {
76
76
  trackEvent?.(AnalyticsEventNames.CHAT_CLEARED, {});
77
- console.log("Segment: Clear Chat tracked");
78
77
  onClearChat?.();
79
78
  }}
80
79
  >
@@ -86,7 +85,6 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
86
85
  style={styles.closeButton}
87
86
  onPress={() => {
88
87
  trackEvent?.(AnalyticsEventNames.WIDGET_CLOSED, {});
89
- console.log("Segment: Widget Close tracked");
90
88
  onClose?.();
91
89
  }}
92
90
  >
@@ -39,7 +39,6 @@ import {
39
39
  mapDiamondToRecommendationItem,
40
40
  normaliseMessages,
41
41
  sendUserMessage,
42
- setTokenOverride,
43
42
  } from "../api";
44
43
  import BetaNotice from "./BetaNotice";
45
44
  import ProductsList from "./ProductsList";
@@ -71,12 +70,6 @@ import {
71
70
  } from "../i18n";
72
71
  import { useGlobalData } from "../hooks/useGlobalData";
73
72
  import WelcomeScreen from "./WelcomeScreen";
74
- import {
75
- buildPluginItemUrl,
76
- buildPluginViewAllUrl,
77
- } from "../utils/pluginUrlBuilder";
78
- import type { StoreConfig } from "../config/types";
79
- import { loadStoreConfig } from "../config/storeConfigLoader";
80
73
 
81
74
  export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
82
75
  (
@@ -94,7 +87,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
94
87
  onViewAllPress,
95
88
  onItemPress: onItemPressProp,
96
89
  isBetaMode: isBetaModeProp,
97
- useAsPlugin,
98
90
  activeProductType,
99
91
  trackAnalyticsEvent,
100
92
  fromFilterScreen,
@@ -108,7 +100,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
108
100
  ref,
109
101
  ) => {
110
102
  const { t } = useTranslation();
111
- const [storeConfig, setStoreConfig] = useState<StoreConfig | null>(null);
112
103
  const [messages, setMessages] = useState<ChatMessage[]>(initialMessages);
113
104
  const [input, setInput] = useState("");
114
105
  const [loading, setLoading] = useState(false);
@@ -181,17 +172,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
181
172
  initI18n({ locale, translations });
182
173
  }, []);
183
174
 
184
- // Load store config when in plugin mode
185
- useEffect(() => {
186
- if (useAsPlugin) {
187
- loadStoreConfig().then((config) => {
188
- if (config) {
189
- setStoreConfig(config);
190
- }
191
- });
192
- }
193
- }, [useAsPlugin]);
194
-
195
175
  useEffect(() => {
196
176
  getChatHasInitialized().then(setChatHasInitializedState);
197
177
  }, []);
@@ -203,13 +183,7 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
203
183
  useEffect(() => {
204
184
  const loadAuthData = async () => {
205
185
  try {
206
- if (userTokenProp) {
207
- // If token is provided via props, set the override so API calls use it
208
- setTokenOverride(userTokenProp);
209
- setUserToken(userTokenProp);
210
- } else {
211
- // Clear any token override so API calls use storage
212
- setTokenOverride(null);
186
+ if (!userTokenProp) {
213
187
  const userInfo = await Storage.getJSON<UserDetails>(
214
188
  "persist:userInfo",
215
189
  {},
@@ -225,11 +199,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
225
199
  }
226
200
  };
227
201
  loadAuthData();
228
-
229
- // Cleanup: clear token override when component unmounts
230
- return () => {
231
- setTokenOverride(null);
232
- };
233
202
  }, [userTokenProp]);
234
203
 
235
204
  const setActiveProduct = async () => {
@@ -252,29 +221,21 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
252
221
  const stringifiedSearchPayload = JSON.stringify(searchPayload);
253
222
  const payload = item?.search_payload;
254
223
  if (!payload) return;
255
-
256
- let deepLinkUrl: string;
257
-
258
- if (useAsPlugin) {
259
- deepLinkUrl = buildPluginViewAllUrl(payload, storeConfig?.urlDefaults);
260
- window.open(deepLinkUrl, "_parent");
261
- } else {
262
- const isLabgrown =
263
- typeof payload.lab_grown === "string"
264
- ? payload.lab_grown === "true"
265
- : typeof payload.lab_grown === "boolean"
266
- ? payload.lab_grown
267
- : false;
268
- deepLinkUrl = `${apiUrl}webapp/${
269
- isLabgrown ? "lab-grown-diamonds" : "natural-diamonds"
270
- }/search?priceMode=${priceMode}&productType=${
271
- isLabgrown
272
- ? ProductCategory.LAB_GROWN_DIAMOND
273
- : ProductCategory.DIAMOND
274
- }&fromNewFilterScreen=false&filterSplitStep=1&sectionName=${
275
- searchPayload.pair === "pair" ? "Pairs" : "Single Stones"
276
- }&breadCrumbLabel=Stone%20Search&enterSecondFlow=false&saved_search=${encodeURIComponent(stringifiedSearchPayload)}`;
277
- }
224
+ const isLabgrown =
225
+ typeof payload.lab_grown === "string"
226
+ ? payload.lab_grown === "true"
227
+ : typeof payload.lab_grown === "boolean"
228
+ ? payload.lab_grown
229
+ : false;
230
+ const deepLinkUrl = `${apiUrl}webapp/${
231
+ isLabgrown ? "lab-grown-diamonds" : "natural-diamonds"
232
+ }/search?priceMode=${priceMode}&productType=${
233
+ isLabgrown
234
+ ? ProductCategory.LAB_GROWN_DIAMOND
235
+ : ProductCategory.DIAMOND
236
+ }&fromNewFilterScreen=false&filterSplitStep=1&sectionName=${
237
+ searchPayload.pair === "pair" ? "Pairs" : "Single Stones"
238
+ }&breadCrumbLabel=Stone%20Search&enterSecondFlow=false&saved_search=${encodeURIComponent(stringifiedSearchPayload)}`;
278
239
 
279
240
  if (onViewAllPress) {
280
241
  onViewAllPress(deepLinkUrl, payload);
@@ -282,25 +243,18 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
282
243
  window.open(deepLinkUrl, "_parent");
283
244
  }
284
245
  },
285
- [apiUrl, priceMode, onViewAllPress, useAsPlugin, storeConfig],
246
+ [apiUrl, priceMode, onViewAllPress],
286
247
  );
287
248
 
288
249
  const onItemPress = useCallback(
289
250
  (item: any) => {
290
- let deepLinkUrl: string;
291
-
292
- if (useAsPlugin) {
293
- deepLinkUrl = buildPluginItemUrl(item.id, storeConfig?.pdpLinkTemplate);
294
- window.open(deepLinkUrl, "_parent");
295
- } else {
296
- deepLinkUrl = `${apiUrl}webapp/${
297
- item.type === ProductCategory.LAB_GROWN_DIAMOND
298
- ? "lab-grown-diamonds"
299
- : "natural-diamonds"
300
- }/item-detail/${item.id}?productType=${
301
- item.type
302
- }&priceMode=${priceMode}&breadCrumbLabel=Stone%20Details`;
303
- }
251
+ const deepLinkUrl = `${apiUrl}webapp/${
252
+ item.type === ProductCategory.LAB_GROWN_DIAMOND
253
+ ? "lab-grown-diamonds"
254
+ : "natural-diamonds"
255
+ }/item-detail/${item.id}?productType=${
256
+ item.type
257
+ }&priceMode=${priceMode}&breadCrumbLabel=Stone%20Details`;
304
258
 
305
259
  if (onItemPressProp) {
306
260
  onItemPressProp(deepLinkUrl, item);
@@ -308,7 +262,7 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
308
262
  window.open(deepLinkUrl, "_parent");
309
263
  }
310
264
  },
311
- [apiUrl, priceMode, onItemPressProp, useAsPlugin, storeConfig],
265
+ [apiUrl, priceMode, onItemPressProp],
312
266
  );
313
267
 
314
268
  const hasAuth = useMemo(() => Boolean(userToken), [userToken]);
@@ -672,13 +626,17 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
672
626
  const productsResult = await getProducts(
673
627
  apiUrl,
674
628
  latestAssistant.search_payload,
675
- useAsPlugin,
676
- storeConfig?.searchApiDefaults,
677
629
  );
678
630
  trackAnalyticsEvent?.(AIEventNames.AI_CHAT_WIDGET, {
679
631
  action: AIEventTypes.SEARCH_INITIATED,
680
632
  search_payload: latestAssistant.search_payload,
681
633
  });
634
+ if (classic_search_filters) {
635
+ trackAnalyticsEvent?.(AIEventNames.AI_CHAT_WIDGET, {
636
+ action: AIEventTypes.CLASSIC_SEARCH_FILTERS,
637
+ classic_search_filters: classic_search_filters,
638
+ });
639
+ }
682
640
  const hasDiamonds =
683
641
  productsResult &&
684
642
  productsResult.response &&
@@ -807,7 +765,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
807
765
  sendMessage(trimmed);
808
766
  if (
809
767
  fromFilterScreen &&
810
- !fromFilterSplitScreen &&
811
768
  showWelcomeScreen &&
812
769
  chatHasInitialized === false
813
770
  ) {
@@ -838,12 +795,7 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
838
795
  setReloadLoadingIds((prev) => new Set(prev).add(id));
839
796
  const payload = msg?.search_payload;
840
797
  if (!payload || Object.keys(payload).length === 0) return;
841
- const productsResult = await getProducts(
842
- apiUrl,
843
- payload,
844
- useAsPlugin,
845
- storeConfig?.searchApiDefaults,
846
- );
798
+ const productsResult = await getProducts(apiUrl, payload);
847
799
  setProductsByMsg((prev) => ({ ...prev, [id]: productsResult }));
848
800
  } catch (e) {
849
801
  console.error("Reload results failed", e);
@@ -854,7 +806,7 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
854
806
  return next;
855
807
  });
856
808
  }
857
- }, [apiUrl, useAsPlugin, storeConfig]);
809
+ }, []);
858
810
 
859
811
  const handleShowMoreResults = useCallback(
860
812
  async (messageId: string, searchPayload: any) => {
@@ -872,8 +824,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
872
824
  apiUrl,
873
825
  searchPayload,
874
826
  nextPage,
875
- useAsPlugin,
876
- storeConfig?.searchApiDefaults,
877
827
  );
878
828
 
879
829
  if (newResults?.response?.body?.diamonds) {
@@ -915,18 +865,13 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
915
865
  });
916
866
  }
917
867
  },
918
- [apiUrl, loadingMoreResults, searchResultsPages, useAsPlugin, storeConfig],
868
+ [apiUrl, loadingMoreResults, searchResultsPages],
919
869
  );
920
870
 
921
871
  const handleShowLessResults = useCallback(
922
872
  async (messageId: string, searchPayload: any) => {
923
873
  try {
924
- const initialResults = await getProducts(
925
- apiUrl,
926
- searchPayload,
927
- useAsPlugin,
928
- storeConfig?.searchApiDefaults,
929
- );
874
+ const initialResults = await getProducts(apiUrl, searchPayload);
930
875
 
931
876
  if (initialResults?.response?.body?.diamonds) {
932
877
  setProductsByMsg((prev) => ({
@@ -943,7 +888,7 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
943
888
  console.error("Failed to show less results:", error);
944
889
  }
945
890
  },
946
- [apiUrl, useAsPlugin, storeConfig],
891
+ [apiUrl],
947
892
  );
948
893
 
949
894
  const handleRecommendationRequest = useCallback(
@@ -1588,27 +1533,28 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
1588
1533
  )}
1589
1534
  {(() => {
1590
1535
  const ordered = [...messages];
1591
- // Find the latest result message (last assistant with search_payload that has diamonds)
1592
- let latestResultMsgId: string | null = null;
1593
- for (let i = ordered.length - 1; i >= 0; i--) {
1594
- const msg = ordered[i];
1595
- const msgHasDiamonds = Boolean(
1596
- productsByMsg[msg.id]?.response?.body?.diamonds?.length > 0,
1597
- );
1598
- if (
1599
- msg.role === "assistant" &&
1600
- msg.search_payload &&
1601
- Object.keys(msg.search_payload).length > 0 &&
1602
- msgHasDiamonds
1603
- ) {
1604
- latestResultMsgId = msg.id;
1605
- break;
1606
- }
1607
- }
1536
+ // Find the latest result message (last assistant with search_payload that has diamonds)
1537
+ let latestResultMsgId: string | null = null;
1538
+ for (let i = ordered.length - 1; i >= 0; i--) {
1539
+ const msg = ordered[i];
1540
+ const msgHasDiamonds = Boolean(
1541
+ productsByMsg[msg.id]?.response?.body?.diamonds
1542
+ ?.length > 0,
1543
+ );
1544
+ if (
1545
+ msg.role === "assistant" &&
1546
+ msg.search_payload &&
1547
+ Object.keys(msg.search_payload).length > 0 &&
1548
+ msgHasDiamonds
1549
+ ) {
1550
+ latestResultMsgId = msg.id;
1551
+ break;
1552
+ }
1553
+ }
1608
1554
 
1609
1555
  return ordered.map((item, index) => {
1610
1556
  const isLatest = index === ordered.length - 1;
1611
- const isLatestResultMsg = item.id === latestResultMsgId;
1557
+ const isLatestResultMsg = item.id === latestResultMsgId;
1612
1558
  const hasDiamonds = Boolean(
1613
1559
  productsByMsg[item.id]?.response?.body?.diamonds &&
1614
1560
  productsByMsg[item.id]?.response?.body?.diamonds
@@ -1648,8 +1594,6 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
1648
1594
  priceMode={priceMode as string}
1649
1595
  messageId={item.id}
1650
1596
  payload={item.search_payload}
1651
- useAsPlugin={useAsPlugin}
1652
- searchApiDefaults={storeConfig?.searchApiDefaults}
1653
1597
  onFetched={(id, result) => {
1654
1598
  setProductsByMsg((prev) => ({
1655
1599
  ...prev,
@@ -1683,7 +1627,10 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
1683
1627
  data={(
1684
1628
  productsByMsg[item.id]?.response?.body
1685
1629
  ?.diamonds || []
1686
- ).slice(0, 5)}
1630
+ ).slice(
1631
+ 0,
1632
+ (searchResultsPages[item.id] || 1) * 5,
1633
+ )}
1687
1634
  totalResults={
1688
1635
  productsByMsg[item.id]?.response?.header
1689
1636
  ?.total_diamonds_found || 0
@@ -1708,31 +1655,33 @@ export const ChatWidget = forwardRef<ChatWidgetRef, ChatWidgetProps>(
1708
1655
  isLoadingMore={loadingMoreResults.has(item.id)}
1709
1656
  />
1710
1657
  )}
1711
- {/* Recommendation CTA - only show for latest result message and if not already requested */}
1712
- {item.role === "assistant" &&
1713
- hasDiamonds &&
1714
- isLatestResultMsg &&
1715
- globalData?.ai_chat_bot?.show_recommendation &&
1716
- !recommendationRequestedFor.has(item.id) && (
1717
- <RecommendationCTA
1718
- onPress={() => handleRecommendationRequest(item.id)}
1719
- loading={recommendationLoading.has(item.id)}
1720
- />
1721
- )}
1722
- {/* Display recommendation results - only for latest result message */}
1723
- {item.isRecommendation &&
1724
- item.sourceMessageId &&
1725
- item.sourceMessageId === latestResultMsgId &&
1726
- recommendationsByMsg[item.sourceMessageId] &&
1727
- recommendationsByMsg[item.sourceMessageId].length >
1728
- 0 && (
1729
- <RecommendationResults
1730
- recommendations={
1731
- recommendationsByMsg[item.sourceMessageId]
1732
- }
1733
- onItemPress={onItemPress}
1734
- />
1735
- )}
1658
+ {/* Recommendation CTA - only show for latest result message and if not already requested */}
1659
+ {item.role === "assistant" &&
1660
+ hasDiamonds &&
1661
+ isLatestResultMsg &&
1662
+ globalData?.ai_chat_bot?.show_recommendation &&
1663
+ !recommendationRequestedFor.has(item.id) && (
1664
+ <RecommendationCTA
1665
+ onPress={() =>
1666
+ handleRecommendationRequest(item.id)
1667
+ }
1668
+ loading={recommendationLoading.has(item.id)}
1669
+ />
1670
+ )}
1671
+ {/* Display recommendation results - only for latest result message */}
1672
+ {item.isRecommendation &&
1673
+ item.sourceMessageId &&
1674
+ item.sourceMessageId === latestResultMsgId &&
1675
+ recommendationsByMsg[item.sourceMessageId] &&
1676
+ recommendationsByMsg[item.sourceMessageId].length >
1677
+ 0 && (
1678
+ <RecommendationResults
1679
+ recommendations={
1680
+ recommendationsByMsg[item.sourceMessageId]
1681
+ }
1682
+ onItemPress={onItemPress}
1683
+ />
1684
+ )}
1736
1685
  {/* Suggestions are now rendered inside MessageBubble */}
1737
1686
  <MessageMetaRow
1738
1687
  message={item}
@@ -2,7 +2,6 @@ import React, { useEffect, useRef } from "react";
2
2
  import { View } from "react-native";
3
3
  import { getProducts } from "../api";
4
4
  import { useInViewport } from "../hooks/useInViewport";
5
- import type { SearchApiDefaults } from "../config/types";
6
5
 
7
6
  interface LazyProductsFetcherProps {
8
7
  messageId: string;
@@ -10,8 +9,6 @@ interface LazyProductsFetcherProps {
10
9
  onFetched: (messageId: string, data: any) => void;
11
10
  priceMode: string | null;
12
11
  apiUrl: string;
13
- useAsPlugin?: boolean;
14
- searchApiDefaults?: SearchApiDefaults;
15
12
  }
16
13
 
17
14
  const LazyProductsFetcher: React.FC<LazyProductsFetcherProps> = ({
@@ -20,8 +17,6 @@ const LazyProductsFetcher: React.FC<LazyProductsFetcherProps> = ({
20
17
  onFetched,
21
18
  priceMode,
22
19
  apiUrl,
23
- useAsPlugin,
24
- searchApiDefaults,
25
20
  }) => {
26
21
  const { ref, inView } = useInViewport<HTMLDivElement>();
27
22
  const fetchedRef = useRef(false);
@@ -34,14 +29,14 @@ const LazyProductsFetcher: React.FC<LazyProductsFetcherProps> = ({
34
29
  fetchedRef.current = true;
35
30
  (async () => {
36
31
  try {
37
- const result = await getProducts(apiUrl, payload, useAsPlugin, searchApiDefaults);
32
+ const result = await getProducts(apiUrl, payload);
38
33
  onFetched(messageId, result);
39
34
  } catch (e) {
40
35
  // eslint-disable-next-line no-console
41
36
  console.error("Lazy fetch products failed", e);
42
37
  }
43
38
  })();
44
- }, [inView, messageId, onFetched, payload, priceMode, useAsPlugin, searchApiDefaults]);
39
+ }, [inView, messageId, onFetched, payload, priceMode]);
45
40
 
46
41
  // Sentinel element; no visible UI needed
47
42
  return <View ref={ref as any} style={{ height: 1 }} />;