@opencx/widget-react-headless 4.0.3 → 4.0.5
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 i=require("react"),E=require("@opencx/widget-core"),F=require("swr"),W=require("uuid"),P="4.0.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),E=require("@opencx/widget-core"),F=require("swr"),W=require("uuid"),P="4.0.3";class U{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 b=i.createContext(null);function M({options:e,children:t,components:n,storage:o,loadingComponent:u}){const c=i.useRef(null),d=i.useRef(!1),[l,C]=i.useState(null),p=i.useMemo(()=>new U({components:n}),[n]);return i.useEffect(()=>{d.current||(d.current=!0,E.WidgetCtx.initialize({config:e,storage:o}).then(C))},[]),l?i.createElement(b.Provider,{value:{widgetCtx:l,config:e,components:n,componentStore:p,version:P,contentIframeRef:c}},t):u||null}function g(){const e=i.useContext(b);if(!e)throw new Error("useWidget must be used within a WidgetProvider");return e}function w(){const{config:e}=g();return e}function m(e){return i.useSyncExternalStore(e.subscribe,e.get,e.get)}function R(){const{widgetCtx:e}=g();return{contactState:m(e.contactCtx.state),createUnverifiedContact:e.contactCtx.createUnverifiedContact}}function A(){const[e,t]=i.useState("ltr");return i.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 y(){const{widgetCtx:e}=g();return{messagesState:m(e.messageCtx.state),sendMessage:e.messageCtx.sendMessage}}function x(){const{widgetCtx:e}=g(),{oneOpenSessionAllowed:t}=w(),n=m(e.sessionCtx.sessionState),o=m(e.sessionCtx.sessionsState),{openSessions:u,closedSessions:c}=i.useMemo(()=>({openSessions:o.data.filter(l=>l.isOpened===!0),closedSessions:o.data.filter(l=>l.isOpened===!1)}),[o.data]),d=i.useMemo(()=>t?u.length===0:!0,[t,u.length]);return{sessionState:n,sessionsState:o,loadMoreSessions:e.sessionCtx.loadMoreSessions,resolveSession:e.sessionCtx.resolveSession,createStateCheckpoint:e.sessionCtx.createStateCheckpoint,openSessions:u,closedSessions:c,canCreateNewSession:d}}function O(){var d;const{sessionState:e}=x(),{messagesState:t}=y(),n=((d=e.session)==null?void 0:d.assignee.kind)==="ai",o=t.messages.length>0?t.messages[t.messages.length-1]:null,u=(o==null?void 0:o.type)==="FROM_USER";return{isAwaitingBotReply:(n||e.isCreatingSession)&&(t.isSendingMessage||u)}}function T(){const{widgetCtx:e}=g();return F([e.config.token],e.api.widgetPrelude,{revalidateOnFocus:!1})}function k(){const{widgetCtx:e}=g();return{routerState:m(e.routerCtx.state),toSessionsScreen:e.routerCtx.toSessionsScreen,toChatScreen:e.routerCtx.toChatScreen}}const f=new Map;function D(){const[e,t]=i.useState([]),{widgetCtx:{api:n}}=g();function o(s){const r=s.map(a=>({file:a,id:W.v4(),status:"pending",progress:0}));t(a=>[...a,...r]),r.forEach(d)}function u(s,r){t(a=>a.map(S=>S.id===s?{...S,...r}:S))}function c(s){t(r=>r.filter(a=>a.id!==s))}const d=async s=>{const r=new AbortController;f.set(s.id,r);try{t(S=>S.map(h=>h.id===s.id?{...h,status:"uploading",progress:0}:h));const a=await n.uploadFile({file:s.file,abortSignal:r.signal,onProgress:S=>{u(s.id,{progress:S})}});u(s.id,{status:"success",fileUrl:a.fileUrl,progress:100})}catch(a){r.signal.aborted||u(s.id,{status:"error",error:a instanceof Error?a.message:"Upload failed",progress:0})}finally{f.delete(s.id)}},l=s=>{const r=f.get(s);r&&(r.abort(),f.delete(s)),c(s)},C=i.useMemo(()=>e.filter(s=>s.status==="success"&&s.fileUrl),[e]);function p(){f.forEach(s=>s.abort()),f.clear(),t([])}return i.useEffect(()=>()=>{f.forEach(s=>s.abort()),f.clear()},[]),{allFiles:e,appendFiles:o,handleCancelUpload:l,successFiles:C,emptyTheFiles:p,getFileById:s=>e.find(r=>r.id===s),getUploadProgress:s=>{var r;return((r=e.find(a=>a.id===s))==null?void 0:r.progress)??0},getUploadStatus:s=>{var r;return(r=e.find(a=>a.id===s))==null?void 0:r.status},hasErrors:e.some(s=>s.status==="error"),isUploading:e.some(s=>s.status==="uploading")}}const v=i.createContext(null);function N({children:e}){const t=w(),[n,o]=i.useState(()=>t.inline?!0:t.isOpen??!1);return i.useEffect(()=>{o(u=>t.isOpen??u)},[t.isOpen]),i.useEffect(()=>{const u=t.openAfterNSeconds;if(typeof u!="number"||isNaN(u))return;const c=setTimeout(()=>o(!0),u*1e3);return()=>clearTimeout(c)},[t.openAfterNSeconds]),i.createElement(v.Provider,{value:{isOpen:n,setIsOpen:o}},e)}function B(){const e=i.useContext(v);if(!e)throw new Error("useWidgetTrigger must be used within a WidgetTriggerProvider");return e}function L(){var l,C;const{widgetCtx:e}=g(),{modesComponents:t}=w(),{sessionState:n}=x(),o=e.modes,u=(l=n.session)==null?void 0:l.modeId,c=o.find(p=>p.id===u),d=(C=t==null?void 0:t.find(p=>{var s,r;return[(c==null?void 0:c.id)||"",((s=c==null?void 0:c.name)==null?void 0:s.toLowerCase())||"",((r=c==null?void 0:c.slug)==null?void 0:r.toLowerCase())||""].includes(p.key.toLowerCase())}))==null?void 0:C.component;return{modes:o,modesComponents:t,activeModeId:u,activeMode:c,Component:d}}exports.WidgetProvider=M;exports.WidgetTriggerProvider=N;exports.useConfig=w;exports.useContact=R;exports.useDocumentDir=A;exports.useIsAwaitingBotReply=O;exports.useMessages=y;exports.useModes=L;exports.usePreludeData=T;exports.usePrimitiveState=m;exports.useSessions=x;exports.useUploadFiles=D;exports.useWidget=g;exports.useWidgetRouter=k;exports.useWidgetTrigger=B;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import v, { createContext as E, useRef as y, useState as h, useMemo as w, useEff
|
|
|
2
2
|
import { WidgetCtx as P } from "@opencx/widget-core";
|
|
3
3
|
import R from "swr";
|
|
4
4
|
import { v4 as k } from "uuid";
|
|
5
|
-
const M = "4.0.
|
|
5
|
+
const M = "4.0.3";
|
|
6
6
|
class N {
|
|
7
7
|
constructor(t) {
|
|
8
8
|
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.5",
|
|
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.5"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@types/react": ">=18 <20",
|