From f9ab9720d2d1081ec477dd17f03ec6d741f31a0c Mon Sep 17 00:00:00 2001 From: nikhiln Date: Thu, 26 Sep 2024 13:00:49 +0530 Subject: [PATCH 1/3] Changes added to call /productInfo on locale or sessionId change --- packages/klevu-core/src/connection/moi/moi.ts | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/packages/klevu-core/src/connection/moi/moi.ts b/packages/klevu-core/src/connection/moi/moi.ts index 100a8edf..09d3440f 100644 --- a/packages/klevu-core/src/connection/moi/moi.ts +++ b/packages/klevu-core/src/connection/moi/moi.ts @@ -337,7 +337,7 @@ export async function startMoi( ...(options.channelId && { channelId: options.channelId }), ...(options.locale && { locale: options.locale }), } - const storedSession = await getStoredSession() + const storedSession = getStoredSession() let menu: MoiMenuOptions["menuOptions"] let genericOptions: MoiResponseGenericOptions["genericOptions"] @@ -375,6 +375,9 @@ export async function startMoi( shouldSendMessage = storedSession.PQA[PQAKey].messages.length === 0 } } + if (storedSession.context.locale !== ctx.locale) { + shouldSendMessage = true + } } } @@ -556,18 +559,21 @@ export class MoiSession { throw new Error("Cannot save PQA session without url or productId") } - saveSession({ - context: this.context, - PQA: { - [PQAkey]: { - menu: this.menu, - genericOptions: this.genericOptions, - messages: this.messages, - feedbacks: this.feedbacks, - questions: this.questions || [], + saveSession( + { + context: this.context, + PQA: { + [PQAkey]: { + menu: this.menu, + genericOptions: this.genericOptions, + messages: this.messages, + feedbacks: this.feedbacks, + questions: this.questions || [], + }, }, }, - }) + { config: this.config, options: this.options } + ) } } async addFeedback(messageId: string, thumbs: "up" | "down", reason?: string) { @@ -601,7 +607,10 @@ function getStoredSession(): MoiSavedSession | undefined { return JSON.parse(storedSession) as MoiSavedSession } -function saveSession(session: MoiSavedSession) { +async function saveSession( + session: MoiSavedSession, + settings?: { config: KlevuConfig; options: MoiStartOptions } +) { const saved = KlevuStorage.getItem(STORAGE_KEY) let parsed: Partial = {} if (saved) { @@ -616,11 +625,23 @@ function saveSession(session: MoiSavedSession) { parsed.MOI = session.MOI break case "PQA": + let shouldResendProductInfo = + parsed.context?.sessionId !== session.context.sessionId parsed.context = session.context if (!parsed.PQA) { parsed.PQA = {} } + if (settings && shouldResendProductInfo) { + try { + const productInfo = settings.options?.productInfo + if (productInfo) { + await saveProductInfo(settings.config, productInfo) + } + } catch (err) { + console.warn("Failed to save regenerated product Info", err) + } + } if (!key || !session.PQA) { throw new Error("No url, productId or PQA session") From c45e2143062dfa65a2414054e807e7f8ca36388f Mon Sep 17 00:00:00 2001 From: nikhiln Date: Thu, 26 Sep 2024 13:07:11 +0530 Subject: [PATCH 2/3] fix quality check issues --- packages/klevu-core/src/connection/moi/moi.ts | 3 ++- packages/klevu-ui/package-lock.json | 2 +- packages/klevu-ui/package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/klevu-core/src/connection/moi/moi.ts b/packages/klevu-core/src/connection/moi/moi.ts index 09d3440f..f5ded3a1 100644 --- a/packages/klevu-core/src/connection/moi/moi.ts +++ b/packages/klevu-core/src/connection/moi/moi.ts @@ -612,6 +612,7 @@ async function saveSession( settings?: { config: KlevuConfig; options: MoiStartOptions } ) { const saved = KlevuStorage.getItem(STORAGE_KEY) + let shouldResendProductInfo = false let parsed: Partial = {} if (saved) { parsed = JSON.parse(saved) as MoiSavedSession @@ -625,7 +626,7 @@ async function saveSession( parsed.MOI = session.MOI break case "PQA": - let shouldResendProductInfo = + shouldResendProductInfo = parsed.context?.sessionId !== session.context.sessionId parsed.context = session.context diff --git a/packages/klevu-ui/package-lock.json b/packages/klevu-ui/package-lock.json index 184a51d5..2fcf9427 100644 --- a/packages/klevu-ui/package-lock.json +++ b/packages/klevu-ui/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.5.3", - "@klevu/core": "^5.5.0", + "@klevu/core": "file:../klevu-core", "@stencil/core": "^4.4.0", "axios": "^1.5.1", "lit-html": "^2.8.0", diff --git a/packages/klevu-ui/package.json b/packages/klevu-ui/package.json index c0ec96e9..efd256c7 100644 --- a/packages/klevu-ui/package.json +++ b/packages/klevu-ui/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@floating-ui/dom": "^1.5.3", - "@klevu/core": "^5.5.0", + "@klevu/core": "file:../klevu-core", "@stencil/core": "^4.4.0", "axios": "^1.5.1", "lit-html": "^2.8.0", From 757761badc540d0f6075ee0001800c5707c9e386 Mon Sep 17 00:00:00 2001 From: nikhiln Date: Thu, 10 Oct 2024 18:44:50 +0530 Subject: [PATCH 3/3] update to boolean --- packages/klevu-core/src/connection/moi/moi.ts | 4 +++- .../klevu-product-query/klevu-product-query.stories.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/klevu-core/src/connection/moi/moi.ts b/packages/klevu-core/src/connection/moi/moi.ts index f5ded3a1..bef73420 100644 --- a/packages/klevu-core/src/connection/moi/moi.ts +++ b/packages/klevu-core/src/connection/moi/moi.ts @@ -626,8 +626,10 @@ async function saveSession( parsed.MOI = session.MOI break case "PQA": - shouldResendProductInfo = + shouldResendProductInfo = !!( + parsed.context?.sessionId && parsed.context?.sessionId !== session.context.sessionId + ) parsed.context = session.context if (!parsed.PQA) { diff --git a/packages/klevu-ui/src/components/klevu-product-query/klevu-product-query.stories.ts b/packages/klevu-ui/src/components/klevu-product-query/klevu-product-query.stories.ts index 4b113d5e..35053263 100644 --- a/packages/klevu-ui/src/components/klevu-product-query/klevu-product-query.stories.ts +++ b/packages/klevu-ui/src/components/klevu-product-query/klevu-product-query.stories.ts @@ -225,7 +225,7 @@ export const WithAdditionalData: StoryObj = { export const WithProductInfoAndItemId: StoryObj = { args: { productId: "7585342095542", - pqaWidgetId: "pqa-6d4a4513-2d81-4ed7-84a5-59f40f7b7b95", + pqaWidgetId: "pqa-bf93b743-f148-42aa-b8b5-d1cf0504ab4b", productInfoGenerator: "getProductInfo()", itemId: "7585342095542", itemGroupId: "7585342095542", @@ -297,7 +297,7 @@ export const WithProductInfoAndItemId: StoryObj = { export const EmbeddedView: StoryObj = { args: { productId: "7585342095542", - pqaWidgetId: "pqa-6d4a4513-2d81-4ed7-84a5-59f40f7b7b95", + pqaWidgetId: "pqa-bf93b743-f148-42aa-b8b5-d1cf0504ab4b", productInfoGenerator: "getProductInfo()", itemId: "7585342095542", itemGroupId: "7585342095542",