@yext/chat-headless
Version:
A state manager library powered by Redux for Yext Chat integrations
1 lines • 7.12 kB
Source Map (JSON)
{"version":3,"file":"conversation.mjs","sources":["../../../../src/slices/conversation.ts"],"sourcesContent":["import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { ConversationState } from \"../models/slices/ConversationState\";\nimport { Message, MessageNotes } from \"@yext/chat-core\";\n\nconst BASE_STATE_LOCAL_STORAGE_KEY = \"yext_chat_state\";\n\nexport const initialState: ConversationState = {\n messages: [],\n isLoading: false,\n canSendMessage: true,\n};\n\nexport function getStateLocalStorageKey(\n hostname: string,\n botId: string\n): string {\n return `${BASE_STATE_LOCAL_STORAGE_KEY}__${hostname}__${botId}`;\n}\n\n/**\n * Loads the {@link ConversationState} from local storage.\n */\nexport const loadSessionState = (botId: string): ConversationState => {\n if (!localStorage) {\n console.warn(\n \"Local storage is not available. State will not be persisted while navigating across pages.\"\n );\n return initialState;\n }\n const hostname = window?.location?.hostname;\n if (!hostname) {\n console.warn(\n \"Unable to get hostname of current page. State will not be persisted while navigating across pages.\"\n );\n return initialState;\n }\n const savedState = localStorage.getItem(\n getStateLocalStorageKey(hostname, botId)\n );\n\n if (savedState) {\n try {\n const parsedState: ConversationState = JSON.parse(savedState);\n if (parsedState.messages.length > 0) {\n const lastTimestamp =\n parsedState.messages[parsedState.messages.length - 1].timestamp;\n const currentDate = new Date();\n const lastDate = new Date(lastTimestamp || 0);\n const diff = currentDate.getTime() - lastDate.getTime();\n // If the last message was sent within the last day, we consider the session to be active\n if (diff < 24 * 60 * 60 * 1000) {\n return parsedState;\n }\n localStorage.removeItem(getStateLocalStorageKey(hostname, botId));\n }\n } catch (e) {\n console.warn(\n \"Unabled to load saved state: error parsing state. Starting with a fresh state.\"\n );\n localStorage.removeItem(getStateLocalStorageKey(hostname, botId));\n }\n }\n\n return initialState;\n};\n\nexport const saveSessionState = (botId: string, state: ConversationState) => {\n if (!localStorage) {\n console.warn(\n \"Local storage is not available. State will not be persisted while navigating across pages.\"\n );\n return initialState;\n }\n const hostname = window?.location?.hostname;\n if (!hostname) {\n console.warn(\n \"Unable to get hostname of current page. State will not be persisted across page refreshes.\"\n );\n return initialState;\n }\n localStorage.setItem(\n getStateLocalStorageKey(hostname, botId),\n JSON.stringify(state)\n );\n};\n\n/**\n * Registers with Redux the slice of {@link State} pertaining to the loading status\n * of Chat Headless.\n */\nexport const conversationSlice = createSlice({\n name: \"conversation\",\n initialState,\n reducers: {\n setConversationId: (\n state: ConversationState,\n action: PayloadAction<string | undefined>\n ) => {\n state.conversationId = action.payload;\n },\n setMessages: (\n state: ConversationState,\n action: PayloadAction<Message[]>\n ) => {\n state.messages = action.payload;\n },\n addMessage: (state: ConversationState, action: PayloadAction<Message>) => {\n state.messages.push(action.payload);\n },\n setMessageNotes: (\n state: ConversationState,\n action: PayloadAction<MessageNotes>\n ) => {\n state.notes = action.payload;\n },\n setIsLoading: (\n state: ConversationState,\n action: PayloadAction<boolean>\n ) => {\n state.isLoading = action.payload;\n },\n setCanSendMessage: (\n state: ConversationState,\n action: PayloadAction<boolean>\n ) => {\n state.canSendMessage = action.payload;\n },\n },\n});\n\nexport const {\n setMessages,\n addMessage,\n setMessageNotes,\n setIsLoading,\n setConversationId,\n setCanSendMessage,\n} = conversationSlice.actions;\nexport default conversationSlice.reducer;\n"],"names":[],"mappings":"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"}