@opencx/widget-react-headless 4.0.36 → 4.0.38
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.
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),v=require("@opencx/widget-core"),M=require("uuid"),F="4.0.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),v=require("@opencx/widget-core"),M=require("uuid"),F="4.0.38";class R{constructor(t){this.components=[];const{components:n}=t;if(n&&n.forEach(o=>this.register(o)),this.components.length===0)throw new Error("No components registered");if(!this.get("fallback"))throw new Error("No fallback component registered")}register(t){const n=this.components.findIndex(o=>o.key===t.key);return n!==-1?this.components[n]=t:this.components.push(t),this}get(t){const n=this.components.find(o=>o.key.toUpperCase()===t.toUpperCase());return n||null}getComponent(t){var n;return(n=this.get(t))==null?void 0:n.component}}const y=u.createContext(null);function U({options:e,children:t,components:n,storage:o,loadingComponent:a}){const i=u.useRef(null),g=u.useRef(!1),[d,f]=u.useState(null),c=u.useMemo(()=>new R({components:n}),[n]);return u.useEffect(()=>{g.current||(g.current=!0,v.WidgetCtx.initialize({config:e,storage:o}).then(f).catch(console.error))},[]),d?u.createElement(y.Provider,{value:{widgetCtx:d,config:e,components:n,componentStore:c,version:F,contentIframeRef:i}},t):a||null}function p(){const e=u.useContext(y);if(!e)throw new Error("useWidget must be used within a WidgetProvider");return e}function w(){const{config:e}=p();return e}function m(e){return u.useSyncExternalStore(e.subscribe,e.get,e.get)}function W(){const{widgetCtx:e}=p();return{contactState:m(e.contactCtx.state),createUnverifiedContact:e.contactCtx.createUnverifiedContact}}function A(){const[e,t]=u.useState("ltr");return u.useEffect(()=>{const n=()=>{typeof document>"u"||t(window.getComputedStyle((window.top||window).document.body).direction)};n();const o=new MutationObserver(n);return o.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]}),o.observe(document.body,{attributes:!0,attributeFilter:["dir"]}),window.addEventListener("languagechange",n),()=>{o.disconnect(),window.removeEventListener("languagechange",n)}},[]),{dir:e}}function h(){const{widgetCtx:e}=p();return{messagesState:m(e.messageCtx.state),sendMessage:e.messageCtx.sendMessage}}function x(){const{widgetCtx:e}=p(),{oneOpenSessionAllowed:t}=w(),n=m(e.sessionCtx.sessionState),o=m(e.sessionCtx.sessionsState),{openSessions:a,closedSessions:i}=u.useMemo(()=>({openSessions:o.data.filter(d=>d.isOpened===!0),closedSessions:o.data.filter(d=>d.isOpened===!1)}),[o.data]),g=u.useMemo(()=>t?a.length===0:!0,[t,a.length]);return{sessionState:n,sessionsState:o,loadMoreSessions:e.sessionCtx.loadMoreSessions,resolveSession:e.sessionCtx.resolveSession,createStateCheckpoint:e.sessionCtx.createStateCheckpoint,openSessions:a,closedSessions:i,canCreateNewSession:g}}function T(){var i,g,d;const{sessionState:e}=x(),{messagesState:t}=h(),n=((i=e.session)==null?void 0:i.assignee.kind)==="ai",o=((d=(g=t.messages)==null?void 0:g.at(-1))==null?void 0:d.type)==="USER";return{isAwaitingBotReply:!!(t.isSendingMessageToAI||(n||e.isCreatingSession)&&(t.isSendingMessage||o))}}function P(){const{widgetCtx:e}=p();return{routerState:m(e.routerCtx.state),toSessionsScreen:e.routerCtx.toSessionsScreen,toChatScreen:e.routerCtx.toChatScreen}}const S=new Map;function k(){const[e,t]=u.useState([]),{widgetCtx:{api:n}}=p();function o(s){const r=s.map(l=>({file:l,id:M.v4(),status:"pending",progress:0}));t(l=>[...l,...r]),r.forEach(g)}function a(s,r){t(l=>l.map(C=>C.id===s?{...C,...r}:C))}function i(s){t(r=>r.filter(l=>l.id!==s))}const g=async s=>{const r=new AbortController;S.set(s.id,r);try{t(C=>C.map(b=>b.id===s.id?{...b,status:"uploading",progress:0}:b));const l=await n.uploadFile({file:s.file,abortSignal:r.signal,onProgress:C=>{a(s.id,{progress:C})}});a(s.id,{status:"success",fileUrl:l.fileUrl,progress:100})}catch(l){r.signal.aborted||a(s.id,{status:"error",error:l instanceof Error?l.message:"Upload failed",progress:0})}finally{S.delete(s.id)}},d=s=>{const r=S.get(s);r&&(r.abort(),S.delete(s)),i(s)},f=u.useMemo(()=>e.filter(s=>s.status==="success"&&s.fileUrl),[e]);function c(){S.forEach(s=>s.abort()),S.clear(),t([])}return u.useEffect(()=>()=>{S.forEach(s=>s.abort()),S.clear()},[]),{allFiles:e,appendFiles:o,handleCancelUpload:d,successFiles:f,emptyTheFiles:c,getFileById:s=>e.find(r=>r.id===s),getUploadProgress:s=>{var r;return((r=e.find(l=>l.id===s))==null?void 0:r.progress)??0},getUploadStatus:s=>{var r;return(r=e.find(l=>l.id===s))==null?void 0:r.status},hasErrors:e.some(s=>s.status==="error"),isUploading:e.some(s=>s.status==="uploading")}}const E=u.createContext(null);function O({children:e}){const t=w(),[n,o]=u.useState(()=>t.inline?!0:t.isOpen??!1);return u.useEffect(()=>{o(a=>t.isOpen??a)},[t.isOpen]),u.useEffect(()=>{const a=t.openAfterNSeconds;if(typeof a!="number"||isNaN(a))return;const i=setTimeout(()=>o(!0),a*1e3);return()=>clearTimeout(i)},[t.openAfterNSeconds]),u.createElement(E.Provider,{value:{isOpen:n,setIsOpen:o}},e)}function q(){const e=u.useContext(E);if(!e)throw new Error("useWidgetTrigger must be used within a WidgetTriggerProvider");return e}function N(){var d,f;const{widgetCtx:e}=p(),{modesComponents:t}=w(),{sessionState:n}=x(),o=e.modes,a=(d=n.session)==null?void 0:d.modeId,i=o.find(c=>c.id===a),g=(f=t==null?void 0:t.find(c=>{var s,r;return[(i==null?void 0:i.id)||"",((s=i==null?void 0:i.name)==null?void 0:s.toLowerCase())||"",((r=i==null?void 0:i.slug)==null?void 0:r.toLowerCase())||""].includes(c.key.toLowerCase())}))==null?void 0:f.component;return{modes:o,modesComponents:t,activeModeId:a,activeMode:i,Component:g}}function B(){const{widgetCtx:e}=p(),{messagesState:{messages:t}}=h(),{csatRequestedMessage:n,isCsatRequested:o,csatSubmittedMessage:a,isCsatSubmitted:i,submittedScore:g,submittedFeedback:d}=u.useMemo(()=>{const f=t.find(s=>s.type==="SYSTEM"&&s.subtype==="csat_requested"),c=t.findLast(s=>s.type==="SYSTEM"&&s.subtype==="csat_submitted");return{csatRequestedMessage:f,isCsatRequested:!!f&&!c,csatSubmittedMessage:c,isCsatSubmitted:!!c,submittedScore:c==null?void 0:c.data.payload.score,submittedFeedback:c==null?void 0:c.data.payload.feedback}},[t]);return{submitCsat:e.csatCtx.submitCsat,csatRequestedMessage:n,isCsatRequested:o,csatSubmittedMessage:a,isCsatSubmitted:i,submittedScore:g,submittedFeedback:d}}exports.WidgetProvider=U;exports.WidgetTriggerProvider=O;exports.useConfig=w;exports.useContact=W;exports.useCsat=B;exports.useDocumentDir=A;exports.useIsAwaitingBotReply=T;exports.useMessages=h;exports.useModes=N;exports.usePrimitiveState=m;exports.useSessions=x;exports.useUploadFiles=k;exports.useWidget=p;exports.useWidgetRouter=P;exports.useWidgetTrigger=q;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import E, { createContext as v, useRef as y, useState as b, useMemo as m, useEffect as C, useContext as F, useSyncExternalStore as k } from "react";
|
|
2
2
|
import { WidgetCtx as T } from "@opencx/widget-core";
|
|
3
3
|
import { v4 as W } from "uuid";
|
|
4
|
-
const O = "4.0.
|
|
4
|
+
const O = "4.0.38";
|
|
5
5
|
class P {
|
|
6
6
|
constructor(t) {
|
|
7
7
|
this.components = [];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opencx/widget-react-headless",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.38",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"swr": "^2.2.5",
|
|
22
22
|
"uuid": "^11.0.4",
|
|
23
|
-
"@opencx/widget-core": "4.0.
|
|
23
|
+
"@opencx/widget-core": "4.0.38"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@types/react": ">=18 <20",
|