@telia-ace/knowledge-widget-bot-provider 1.3.24-rc.1 → 1.3.24-rc.2
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/contact-method-2cee6549.mjs +161 -0
- package/contact-method-c0036fb9.js +3 -0
- package/{contact-method-list-394c8856.mjs → contact-method-list-5ff0cd48.mjs} +2 -2
- package/{contact-method-list-5ba4ba0b.js → contact-method-list-9ac079e1.js} +1 -1
- package/{index-a559356e.mjs → index-cde433dd.mjs} +2 -2
- package/{index-dc30edd3.js → index-fecadd8c.js} +1 -1
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +9 -9
- package/contact-method-493fca20.mjs +0 -151
- package/contact-method-abc31fb9.js +0 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { jsx as $ } from "react/jsx-runtime";
|
|
2
|
+
import j from "@emotion/styled";
|
|
3
|
+
import { DataClient as x, DataType as B } from "@telia-ace/knowledge-data-client";
|
|
4
|
+
import { ContactMethod as H } from "@telia-ace/knowledge-widget-adapters";
|
|
5
|
+
import { useContainer as z, useDispatch as O, useConversation as R } from "@telia-ace/knowledge-widget-ui";
|
|
6
|
+
import { FormBuilder as _ } from "@telia-ace/widget-forms";
|
|
7
|
+
import { appendClassNames as G } from "@telia-ace/widget-utilities";
|
|
8
|
+
import { useState as I, useRef as V, useEffect as M, useCallback as q } from "react";
|
|
9
|
+
import { u as D } from "./index-cde433dd.mjs";
|
|
10
|
+
import "@telia-ace/widget-conversation";
|
|
11
|
+
import "@telia-ace/widget-services";
|
|
12
|
+
const ro = ({
|
|
13
|
+
contactMethodId: n,
|
|
14
|
+
guideId: a,
|
|
15
|
+
groupId: f,
|
|
16
|
+
className: E
|
|
17
|
+
}) => {
|
|
18
|
+
var h, v, k, w, S;
|
|
19
|
+
const [o, m] = I(), u = z(), F = O(), b = V(!0), y = R();
|
|
20
|
+
M(() => {
|
|
21
|
+
const { events: t } = u.get("$widget"), l = t.subscribe(
|
|
22
|
+
"bot-provider:form-submitted",
|
|
23
|
+
async (i, e) => {
|
|
24
|
+
var T;
|
|
25
|
+
if (((T = e.form.meta) == null ? void 0 : T.groupId) !== f || e.id !== o.id)
|
|
26
|
+
return;
|
|
27
|
+
y && (e.form.meta || (e.form.meta = {}), e.form.meta.conversation = y);
|
|
28
|
+
const c = await u.getAsync(
|
|
29
|
+
"contactMethods"
|
|
30
|
+
), r = {
|
|
31
|
+
...o,
|
|
32
|
+
body: {
|
|
33
|
+
...o.body,
|
|
34
|
+
form: e.form
|
|
35
|
+
}
|
|
36
|
+
}, { errors: d, valid: p, errorTypes: K } = await c.validate(
|
|
37
|
+
r
|
|
38
|
+
);
|
|
39
|
+
if (!p) {
|
|
40
|
+
const A = new _(o.body.form);
|
|
41
|
+
m(void 0), A.setValidationErrors(d), r.body = {
|
|
42
|
+
...r.body,
|
|
43
|
+
form: A.get()
|
|
44
|
+
}, m({ ...r });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const N = await c.submit(r);
|
|
48
|
+
r.confirmation = N, m(r);
|
|
49
|
+
}
|
|
50
|
+
), s = t.subscribe(
|
|
51
|
+
"bot-provider:evaluate",
|
|
52
|
+
async (i, e) => {
|
|
53
|
+
try {
|
|
54
|
+
if (console.log("### data.id", e.id), console.log("### contactMethodId", n), String(e.id) !== String(n)) {
|
|
55
|
+
console.log("### NO MATCH");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log("### MATCH");
|
|
59
|
+
const c = await u.getAsync(
|
|
60
|
+
"contactMethods"
|
|
61
|
+
);
|
|
62
|
+
console.log("### platform", c);
|
|
63
|
+
const r = await c.evaluate(o);
|
|
64
|
+
let d = {
|
|
65
|
+
...o,
|
|
66
|
+
body: {
|
|
67
|
+
...o.body,
|
|
68
|
+
form: r
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
console.log("### updatedForm", r);
|
|
72
|
+
const p = D(d, {
|
|
73
|
+
submit: "Skicka",
|
|
74
|
+
errors: {},
|
|
75
|
+
meta: { groupId: f }
|
|
76
|
+
});
|
|
77
|
+
d = {
|
|
78
|
+
...d,
|
|
79
|
+
body: p
|
|
80
|
+
}, m(d);
|
|
81
|
+
} catch (c) {
|
|
82
|
+
console.log("### CATCH", c);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
return () => {
|
|
87
|
+
l(), s();
|
|
88
|
+
};
|
|
89
|
+
}, [u, o, m, y]);
|
|
90
|
+
const C = (t, l, s = null) => {
|
|
91
|
+
if (t["ui:component"] && t["ui:component"] === "Date")
|
|
92
|
+
return Object.assign(t, {
|
|
93
|
+
"ui:bot": !0,
|
|
94
|
+
"ui:entrance": l
|
|
95
|
+
}), t;
|
|
96
|
+
for (const i in t)
|
|
97
|
+
if (typeof t[i] == "object" && t[i] !== null) {
|
|
98
|
+
const e = C(
|
|
99
|
+
t[i],
|
|
100
|
+
l,
|
|
101
|
+
t
|
|
102
|
+
);
|
|
103
|
+
if (e !== void 0)
|
|
104
|
+
return e;
|
|
105
|
+
}
|
|
106
|
+
}, g = q(
|
|
107
|
+
async (t) => {
|
|
108
|
+
const s = await (await x.getInstance(u)).fetch(
|
|
109
|
+
B.ContactMethod,
|
|
110
|
+
{
|
|
111
|
+
contactMethodId: t,
|
|
112
|
+
guideId: a
|
|
113
|
+
},
|
|
114
|
+
{ noCache: !0, isBot: !0 }
|
|
115
|
+
), i = D(s, {
|
|
116
|
+
submit: "Skicka",
|
|
117
|
+
errors: {},
|
|
118
|
+
meta: { groupId: f }
|
|
119
|
+
});
|
|
120
|
+
if (s.body = i, s.body.guideId = a, !b.current)
|
|
121
|
+
return null;
|
|
122
|
+
m(s);
|
|
123
|
+
},
|
|
124
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
125
|
+
[b]
|
|
126
|
+
);
|
|
127
|
+
return M(() => (g(n), () => {
|
|
128
|
+
b.current = !1;
|
|
129
|
+
}), [n, g]), o ? (o.clientName === "ace.callback" && ((h = o.body) != null && h.entrance) && C(o, (v = o.body) == null ? void 0 : v.entrance), /* @__PURE__ */ $(
|
|
130
|
+
J,
|
|
131
|
+
{
|
|
132
|
+
...o,
|
|
133
|
+
body: {
|
|
134
|
+
...o.body,
|
|
135
|
+
form: o.body.form ? {
|
|
136
|
+
...o.body.form,
|
|
137
|
+
data: (k = o.body.form) == null ? void 0 : k.data,
|
|
138
|
+
layout: { ...o.body.form.layout },
|
|
139
|
+
meta: (w = o.body.form) == null ? void 0 : w.meta,
|
|
140
|
+
schema: (S = o.body.form) == null ? void 0 : S.schema
|
|
141
|
+
} : void 0,
|
|
142
|
+
guideId: o.body.guideId
|
|
143
|
+
},
|
|
144
|
+
inline: !0,
|
|
145
|
+
expanded: !0,
|
|
146
|
+
dispatch: F,
|
|
147
|
+
className: G("humany-bot-contact-method", E)
|
|
148
|
+
}
|
|
149
|
+
)) : null;
|
|
150
|
+
}, J = j(H)`
|
|
151
|
+
padding: ${(n) => {
|
|
152
|
+
var a;
|
|
153
|
+
return (a = n.theme.sizes) == null ? void 0 : a.normal;
|
|
154
|
+
}} ${(n) => {
|
|
155
|
+
var a;
|
|
156
|
+
return (a = n.theme.sizes) == null ? void 0 : a.medium;
|
|
157
|
+
}};
|
|
158
|
+
`;
|
|
159
|
+
export {
|
|
160
|
+
ro as default
|
|
161
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("react/jsx-runtime"),B=require("@emotion/styled"),j=require("@telia-ace/knowledge-data-client"),H=require("@telia-ace/knowledge-widget-adapters"),C=require("@telia-ace/knowledge-widget-ui"),O=require("@telia-ace/widget-forms"),R=require("@telia-ace/widget-utilities"),b=require("react"),D=require("./index-fecadd8c.js");require("@telia-ace/widget-conversation");require("@telia-ace/widget-services");const $=({contactMethodId:n,guideId:s,groupId:f,className:E})=>{var w,k,q,S,T;const[e,d]=b.useState(),l=C.useContainer(),M=C.useDispatch(),y=b.useRef(!0),g=C.useConversation();b.useEffect(()=>{const{events:t}=l.get("$widget"),m=t.subscribe("bot-provider:form-submitted",async(i,o)=>{var A;if(((A=o.form.meta)==null?void 0:A.groupId)!==f||o.id!==e.id)return;g&&(o.form.meta||(o.form.meta={}),o.form.meta.conversation=g);const c=await l.getAsync("contactMethods"),r={...e,body:{...e.body,form:o.form}},{errors:u,valid:p,errorTypes:U}=await c.validate(r);if(!p){const F=new O.FormBuilder(e.body.form);d(void 0),F.setValidationErrors(u),r.body={...r.body,form:F.get()},d({...r});return}const x=await c.submit(r);r.confirmation=x,d(r)}),a=t.subscribe("bot-provider:evaluate",async(i,o)=>{try{if(console.log("### data.id",o.id),console.log("### contactMethodId",n),String(o.id)!==String(n)){console.log("### NO MATCH");return}console.log("### MATCH");const c=await l.getAsync("contactMethods");console.log("### platform",c);const r=await c.evaluate(e);let u={...e,body:{...e.body,form:r}};console.log("### updatedForm",r);const p=D.updateForm(u,{submit:"Skicka",errors:{},meta:{groupId:f}});u={...u,body:p},d(u)}catch(c){console.log("### CATCH",c)}});return()=>{m(),a()}},[l,e,d,g]);const v=(t,m,a=null)=>{if(t["ui:component"]&&t["ui:component"]==="Date")return Object.assign(t,{"ui:bot":!0,"ui:entrance":m}),t;for(const i in t)if(typeof t[i]=="object"&&t[i]!==null){const o=v(t[i],m,t);if(o!==void 0)return o}},h=b.useCallback(async t=>{const a=await(await j.DataClient.getInstance(l)).fetch(j.DataType.ContactMethod,{contactMethodId:t,guideId:s},{noCache:!0,isBot:!0}),i=D.updateForm(a,{submit:"Skicka",errors:{},meta:{groupId:f}});if(a.body=i,a.body.guideId=s,!y.current)return null;d(a)},[y]);return b.useEffect(()=>(h(n),()=>{y.current=!1}),[n,h]),e?(e.clientName==="ace.callback"&&((w=e.body)!=null&&w.entrance)&&v(e,(k=e.body)==null?void 0:k.entrance),N.jsx(z,{...e,body:{...e.body,form:e.body.form?{...e.body.form,data:(q=e.body.form)==null?void 0:q.data,layout:{...e.body.form.layout},meta:(S=e.body.form)==null?void 0:S.meta,schema:(T=e.body.form)==null?void 0:T.schema}:void 0,guideId:e.body.guideId},inline:!0,expanded:!0,dispatch:M,className:R.appendClassNames("humany-bot-contact-method",E)})):null},z=B(H.ContactMethod)`
|
|
2
|
+
padding: ${n=>{var s;return(s=n.theme.sizes)==null?void 0:s.normal}} ${n=>{var s;return(s=n.theme.sizes)==null?void 0:s.medium}};
|
|
3
|
+
`;exports.default=$;
|
|
@@ -3,11 +3,11 @@ import m from "@emotion/styled";
|
|
|
3
3
|
import { ContactList as M, ContactMethod as $ } from "@telia-ace/knowledge-widget-adapters";
|
|
4
4
|
import { useDispatch as b, useContainer as k } from "@telia-ace/knowledge-widget-ui";
|
|
5
5
|
import { useState as f, useEffect as E } from "react";
|
|
6
|
-
import S from "./contact-method-
|
|
6
|
+
import S from "./contact-method-2cee6549.mjs";
|
|
7
7
|
import "@telia-ace/knowledge-data-client";
|
|
8
8
|
import "@telia-ace/widget-forms";
|
|
9
9
|
import "@telia-ace/widget-utilities";
|
|
10
|
-
import "./index-
|
|
10
|
+
import "./index-cde433dd.mjs";
|
|
11
11
|
import "@telia-ace/widget-conversation";
|
|
12
12
|
import "@telia-ace/widget-services";
|
|
13
13
|
const F = ({ actions: t, entryId: e, groupId: y }) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("@emotion/styled"),y=require("@telia-ace/knowledge-widget-adapters"),g=require("@telia-ace/knowledge-widget-ui"),l=require("react"),b=require("./contact-method-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("@emotion/styled"),y=require("@telia-ace/knowledge-widget-adapters"),g=require("@telia-ace/knowledge-widget-ui"),l=require("react"),b=require("./contact-method-c0036fb9.js");require("@telia-ace/knowledge-data-client");require("@telia-ace/widget-forms");require("@telia-ace/widget-utilities");require("./index-fecadd8c.js");require("@telia-ace/widget-conversation");require("@telia-ace/widget-services");const k=({actions:e,entryId:t,groupId:x})=>{const q=g.useDispatch(),d=g.useContainer(),[m,C]=l.useState([]),[o,M]=l.useState([]);return l.useEffect(()=>{d.getAsync("contactMethods").then(n=>{if(!n)return;const c=e.map(async i=>{var h;if(!((h=i.data)!=null&&h.clientName))return null;const s=await n.handleAdapters(i.data);return{...s,...i.data,description:i.data.description?i.data.description:s.description,onClick:(p,r)=>{if(typeof s.onClick=="function"&&s.onClick(p,r),!p.defaultPrevented)if(r.inline&&!r.expanded)M([...o,r.id]);else{const{events:f}=d.get("$widget");f.dispatch("provider:open-contact-method",{entryId:t,contactMethod:r,actionKey:i.actionKey}),f.dispatch("tracking:contact-method-list-item-clicked",r)}}}});Promise.all(c).then(i=>{C(i.filter(s=>!!s))})})},[e,d,t,o]),m.length?a.jsx(j,{className:"humany-bot-contact-list",contactMethods:m,dispatch:q,itemRenderer:(n,c)=>(o.includes(n.id)||n.expanded)&&n.inline||n.clientName==="custom.link"?a.jsx(S,{contactMethodId:n.id,groupId:x,guideId:n.body.guideId}):a.jsx($,{...n,...c})}):null},j=u(y.ContactList)`
|
|
2
2
|
> ul > li {
|
|
3
3
|
a {
|
|
4
4
|
display: flex;
|
|
@@ -760,11 +760,11 @@ const it = async (s) => {
|
|
|
760
760
|
N(
|
|
761
761
|
s,
|
|
762
762
|
m.ContactList,
|
|
763
|
-
import("./contact-method-list-
|
|
763
|
+
import("./contact-method-list-5ff0cd48.mjs")
|
|
764
764
|
), N(
|
|
765
765
|
s,
|
|
766
766
|
m.ContactMethod,
|
|
767
|
-
import("./contact-method-
|
|
767
|
+
import("./contact-method-2cee6549.mjs")
|
|
768
768
|
), N(
|
|
769
769
|
s,
|
|
770
770
|
m.NotificationList,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var R=Object.defineProperty;var H=(n,t,e)=>t in n?R(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>(H(n,typeof t!="symbol"?t+"":t,e),e);const p=require("@telia-ace/widget-conversation"),N=require("@telia-ace/widget-services"),K=require("@telia-ace/widget-utilities"),P=require("@telia-ace/widget-forms");var f=(n=>(n.ContactMethod="ace-knowledge-bot-contact-method",n.ContactList="ace-knowledge-bot-contact-list",n.FeedbackList="ace-knowledge-bot-feedback-list",n.NotificationList="ace-knowledge-bot-notification-list",n.NoGoodAlternative="ace-knowledge-bot-no-good-alternative",n))(f||{});const $=n=>{if(n){const{type:t,content:e}=n;if(t&&e)return{type:t,content:e}}},A=({isUser:n,items:t=[],meta:e={}})=>{const s=K.uuid();return{id:s,isUser:n,items:t.map(a=>({id:a.id||K.uuid(),isUser:n,groupId:s,message:a.message||[]})),meta:e}},U=({id:n,title:t,defaultIcon:e,exits:[s],exitType:i,confirmationText:a,expandFormAutomatically:c,form:h,description:E},S={})=>{const{adapter:r}=s||{Adapter:{}},{clientName:o="",settings:g={},customClientName:v=""}=r,{validation:l}=S,d={id:n.toString(),title:t,description:E,symbol:$(e),clientName:o==="custom.adapter"?v:o,expanded:!0,inline:!0,body:{}};if(o.indexOf("phone")>-1||o.indexOf("freetext")>-1){const{displayTextBeforeClick:L,textBeforeClick:m}=g;L==="true"&&(d.expanded=!1,d.title=m),o.indexOf("phone.text")>-1?d.body.phoneNumber=g.phoneNumber:d.body.freetext=g.freetext}return(o.indexOf("chat.popup")>-1||o.indexOf("link")>-1||o==="custom.adapter"&&i==="custom")&&(d.body=g,d.body.confirmationFallback=a),o.indexOf("ace")>-1&&(d.body=g),h&&h.hasValueComponents&&(l?d.body.form=P.FormBuilder.fromLegacyForm(n.toString(),h,l).get():d.body.form=P.FormBuilder.fromLegacyForm(n.toString(),h).get(),c||(d.expanded=d.inline=!1),d.body=B(d,{submit:"Submit"})),S.guideId&&(d.body.guideId=S.guideId),d},G=n=>{const{localState:t}=n;return n.tags.includes("category")&&n.tags.includes("contact")?p.ConversationMessageListItemType.ItemList:n.tags.includes("suggestion")||(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching"?p.ConversationMessageListItemType.LinkList:(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching"?f.FeedbackList:(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching"?f.ContactList:p.ConversationMessageListItemType.ButtonList},q=(n,t)=>{const{knowledgeBotEndpoint:e}=t.properties();if(e)return`${e}/conversations`;const{data:s}=n.get("$settings");if(!s||!s.projection)throw new Error("Missing Knowledge Bot endpoint");return`${s.projection}/conversations`},B=(n,{submit:t,errors:e,meta:s})=>{var i;if((i=n==null?void 0:n.body)!=null&&i.form){const{body:a}=n,c=new P.FormBuilder(a.form);return a.form.layout.submit||c.createComponent(P.submitButton(t,"submit")),e&&c.setValidationErrors(e),s&&c.setMeta(s),{...a,form:c.get()}}return(n==null?void 0:n.body)||{}},O=async(n,t,e)=>{(await(await n.getAsync("dataClient")).getClient()).parameters.set(t,e)},b=({messageId:n,message:t,group:e})=>({id:n,message:t,groupId:e.id,isUser:e.isUser}),V=async(n,t,e)=>{const s=(r,o,g,v={actions:[],entryId:o.id,groupId:g})=>{const l=[];return v.actions=o.content.items.map(d=>{var m;const L={label:d.title,actionKey:d.actionKey,symbol:d.symbol?d.symbol:void 0,description:d.description||void 0};if(d.data){const w=o.actions[d.actionKey];r===f.ContactList?(l.push(d.data.id),L.data=U(d.data,{guideId:(m=w==null?void 0:w.guideId)==null?void 0:m.toString()})):L.data=d.data}return L}),r===f.ContactList&&(v.contactMethodIds=l),v},i=async(r,o,g=[],v)=>{var d,L;const l=K.uuid();switch(r.type!=="List"&&r.tags.includes("guide")&&((L=(d=r.content.hints)==null?void 0:d[0])!=null&&L.id)&&await O(n,"LastGuideId",r.content.hints[0].id),r.type){case"List":{const{header:m,items:w,html:x}=r.content,M=[];let C={actions:[],entryId:r.id,groupId:o.id};if(C.tags=r.tags||null,m&&(C.header=m),(w==null?void 0:w.length)>0){const u=G(r);if(C=s(u,r,o.id,C),g.length){const I=g.find(k=>k.tags.includes("paging")),T=g.find(k=>k.tags.includes("fallback"));if(I!=null&&I.content&&(o.meta.paging={actions:I.actions,items:I.content.items,localState:I.localState},I.content.items.forEach(k=>{C.actions.push({label:k.title,actionKey:k.actionKey,data:{groupId:v?v.id:o.id}})})),T){const k=T.content.items.find(F=>F.actionKey==="help");k&&(M.push(b({messageId:l,message:[p.ConversationMessageListItemType.Separator,void 0],group:o})),M.push(b({messageId:l,message:[f.NoGoodAlternative,{body:k.title}],group:o})))}}M.unshift(b({messageId:l,message:[u,C],group:o}))}return x&&M.unshift(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:x}],group:o})),M}case"Text":{const m=[];if(m.push(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.html}],group:o})),g.length){const w=g.find(u=>{var I;return u.type==="List"&&((I=u.localState)==null?void 0:I.$type)==="Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching"}),x=g.find(u=>u.tags.includes("dialog")),M=g.find(u=>u.tags.includes("feedback")),C=g.find(u=>u.tags.includes("contact")&&u.type==="Contact");if(C&&m.push(b({messageId:l,message:[f.ContactMethod,{contactMethodId:C.content.id,groupId:o.id,guideId:C.content.guideId}],group:o})),x&&m.push(b({messageId:l,message:[p.ConversationMessageListItemType.ButtonList,{actions:x.content.items.map(u=>({label:u.title,actionKey:u.actionKey,data:u.data}))}],group:o})),w){const u=s(f.ContactList,w,o.id);m.push(b({messageId:l,message:[p.ConversationMessageListItemType.Separator,void 0],group:o})),m.push(b({messageId:l,message:[f.ContactList,u],group:o}))}M&&m.push(b({messageId:l,group:o,message:[f.FeedbackList,{title:M.content.html,messageId:l,actions:M.content.items.map(u=>({actionKey:u.actionKey,label:u.title}))}]}))}return m}case"Contact":return[b({messageId:l,message:[f.ContactMethod,{contactMethodId:r.content.id,groupId:o.id,guideId:r.content.guideId}],group:o})];case"CategorizedNoticeList":{const m=[b({messageId:l,message:[f.NotificationList,{id:r.content.item.id.toString(),header:r.content.item.title,items:r.content.item.listNotices,symbol:r.content.item.defaultIcon}],group:o})];return(r.content.notices||[]).forEach(w=>{m.push(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:w.body}],group:o}))}),m}case"footerNotice":return[b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.item.body}],group:o})];case"Error":return[b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.message||"Something went wrong."}],group:o})];default:return[]}},a=r=>["CategorizedNoticeList","NoticeList"].includes(r.type)?(r.content.items||[]).reduce((o,g)=>(r.content.isInitialNotices&&o.push({...r,id:K.uuid(),type:g.type||r.type,content:{$type:r.content.$type,isInitialNotices:r.content.isInitialNotices,notices:g.notices,item:g}}),o),[]):r,c=new Map([["Text",1],["List",2],["Contact",3],["CategorizedNoticeList",10]]),h=[],E=t.sort((r,o)=>{const v=c.get(r.type)||20,l=c.get(o.type)||20;return v-l}).filter(r=>!r.relation).reduce((r,o)=>r.concat(a(o)),[]),S=r=>typeof r.actions.selector<"u";for(const r of E){const o=t.filter(l=>l.relation===r.id&&!S(l)),g=A({isUser:!1});(await i(r,g,o,e)).forEach(l=>{g.items.push(l)}),g.items.length&&h.push(g)}return h};class j{constructor(t,e,s,i){y(this,"globalState");y(this,"localState");y(this,"clientId");y(this,"entries");this.endpoint=t,this.events=e,this.store=s,this.container=i,this.clientId=K.uuid(),this.entries=[]}async start({silent:t}){const e=await this.store.read("globalState"),s=await this.store.read("localState"),i=await this.store.read("entries");if(this.globalState=e||this.globalState,this.localState=s||this.localState,this.entries=i||this.entries,t)return;const a=this.createInitialEnvelope();return await this.postEnvelope(a)}async sendMessage(t){const e={command:{phrase:t},globalState:this.globalState,clientId:this.clientId};return await this.postEnvelope(e)}async helpAction(){return this.postEnvelope({action:{key:"help",content:{$type:"Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching"}},globalState:this.globalState,clientId:this.clientId})}async nextAction(t){var s;const{paging:e}=t.meta;if((s=e.actions)!=null&&s.next)return this.postEnvelope({action:{key:"next",content:e.actions.next},localState:e.localState,globalState:this.globalState,clientId:this.clientId},t).then(i=>{const a=t.items.findIndex(c=>c.message[0]==="link-list");return a===-1||!i?t:{...t,meta:{...t.meta,...i[0].meta},items:[...t.items.slice(0,a),{...t.items[a],message:[i[0].items[0].message[0],{...t.items[a].message[1],...i[0].items[0].message[1]}]},...t.items.slice(a+1)]}})}async showContactMethodAction(t){const e=this.entries.find(i=>i.id===t.entryId),s=e==null?void 0:e.actions[t.actionKey];if(s)return this.postEnvelope({action:{key:t.actionKey,content:s},localState:e.localState,globalState:this.globalState,clientId:this.clientId})}async defaultAction(t){const e=this.getEntryOfAction(t);if(e)return this.postEnvelope({action:{key:t,content:e.actions[t]},localState:e.localState,globalState:this.globalState,clientId:this.clientId})}createInitialEnvelope(){return{command:{site:this.endpoint},clientId:this.clientId,globalState:{},funnel:this.container.get("$widget").name}}async postEnvelope(t,e){try{const s=await fetch(this.endpoint,this.getHttpOptions(t));if(!s.ok)throw s;const i=await s.json();return this.handleResponse(i,e)}catch(s){process.env.NODE_ENV!=="production"&&console.warn("Something went wrong when posting the envelope.");let i="Something went wrong";return(s.message==="Failed to fetch"||s.message==="NetworkError when attempting to fetch resource.")&&(i="Lost connection... Please try again."),this.events.dispatch("tracking:http-client-error",{message:i,error:s}),this.handleResponse({entries:[{id:K.uuid(),type:"Error",timestamp:new Date().toISOString(),content:{message:i},actions:{},tags:[]}]})}}async handleResponse(t,e){this.entries=this.entries.concat(t.entries),this.store.write(this.entries,"entries");const s=t.entries.find(a=>a.type==="Widget");return s&&this.events.dispatch("provider:widget-entry",s.content),t.globalState&&(this.globalState=t.globalState,this.store.write(t.globalState,"globalState")),this.localState=t.entries.reduce((a,c)=>c.localState?c.localState:a,void 0),this.store.write(this.localState,"localState"),await V(this.container,t.entries,e)}getHttpOptions(t){const e={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};return t.funnel=this.container.get("$widget").name,t.localState=t.localState||this.localState,Object.assign({},e,{body:JSON.stringify(t),credentials:"same-origin"})}getEntryOfAction(t){return this.entries.find(e=>!!e.actions[t])}}class z{constructor(t){y(this,"enabled",!0);y(this,"botProviderGlobalStateKey","bot-provider-global-state");y(this,"botProviderLocalStateKey","bot-provider-local-state");y(this,"botProviderEntriesKey","bot-provider-entries");y(this,"botProviderMetaStateKey","bot-provider-conversation-meta");this.container=t}getKey(t){let e;switch(t){case"localState":e=this.botProviderLocalStateKey;break;case"globalState":e=this.botProviderGlobalStateKey;break;case"entries":e=this.botProviderEntriesKey;break;case"meta":e=this.botProviderMetaStateKey;break}return e}async read(t){const e=this.getKey(t);if(!(!this.enabled||!e))return N.readStorage(this.container,e)}async write(t,e){const s=this.getKey(e);if(!this.enabled||!s)return;(await N.createStorageWriter(this.container,s,N.StorageCategory.Necessary))(t)}}class W{constructor(t,e,s){y(this,"agent");y(this,"user");y(this,"httpClient");y(this,"events");y(this,"groups",[]);y(this,"store");this.container=t,this.conversation=e;const{events:i}=this.container.get("$widget");this.events=i,this.store=new z(t),this.agent=e.createAgent({id:"knowledge-bot-agent",name:"",avatar:void 0}),this.user=e.user;const a=q(t,s);this.httpClient=new j(a,i,this.store,this.container),this.events.subscribe("provider:widget-entry",(c,h)=>{this.onWidgetEntryReceived(h)}),this.events.subscribe("provider:open-contact-method",async(c,h)=>{const E=await this.httpClient.showContactMethodAction(h);E&&(h.contactMethod.title&&this.printUserMessage(h.contactMethod.title),this.onMessagesReceived(E))})}async initialize(){var a;const t=this.conversation.loading(),e=await this.store.read("meta");e!=null&&e.agent&&this.agent.update({name:e.agent.name,avatar:e.agent.avatar});const s=await this.conversation.isRehydrated(),i=await this.httpClient.start({silent:((a=this.conversation.options)==null?void 0:a.silent)||s});i&&this.onMessagesReceived(i),t()}async onMessagesReceived(t){this.groups=this.groups.concat(t),t.forEach(e=>{const s=e.items.map(i=>i.message);e.isUser?e.writer=this.user.print(s):e.writer=this.agent.print(s)})}async onInput(t){const e=typeof t=="string"?t:t.actionKey;switch(e){case"next":{if(typeof t=="string")return;const s=this.groups.find(i=>{var a;return i.id===((a=t.data)==null?void 0:a.groupId)});if(s){const i=await this.httpClient.nextAction(s);if(i){const a=i.items.map(c=>c.message);s.meta.paging=i==null?void 0:i.meta.paging,s.writer.update(a)}}}break;case"help":{const s=this.conversation.loading(),i=await this.httpClient.helpAction();s(),i&&this.onMessagesReceived(i)}break;default:{typeof t!="string"&&t.label&&this.printUserMessage(t.label);const s=this.conversation.loading(),i=await this.httpClient.defaultAction(e);i&&this.onMessagesReceived(i),s()}break}}printUserMessage(t){const e=A({isUser:!0,items:[{id:K.uuid(),isUser:!0,message:[p.ConversationMessageListItemType.HTML,{body:t}]}]});return this.onMessagesReceived([e]),e}async onMessageSend(t){const e=this.conversation.loading(),s=await this.httpClient.sendMessage(t);await O(this.container,"phrase",t),this.printUserMessage(t),s&&this.onMessagesReceived(s),e()}async onWidgetEntryReceived(t){var r,o,g,v,l;if(t.agent){const d={name:t.agent.name,avatar:t.agent.avatar};this.agent.update(d),(await N.createStorageWriter(this.container,"bot-provider-conversation-meta",N.StorageCategory.Necessary))({agent:d})}const s=(await this.container.getAsync("components")).components().ofType("widget-header").select();if(!s)return;const i=await this.container.get("settings"),a=i==null?void 0:i.components["widget-header"],c=(o=(r=a==null?void 0:a.properties)==null?void 0:r.actions)==null?void 0:o.avatar,h=(g=a==null?void 0:a.properties)==null?void 0:g.header,E=(v=a==null?void 0:a.properties)==null?void 0:v.tagline,S={};!h&&(t!=null&&t.heading)&&(S.header=t.heading),!E&&(t!=null&&t.tagline)&&(S.tagline=t.tagline),!c&&((l=t==null?void 0:t.agent)!=null&&l.avatar)&&(S.actions={avatar:{position:"left",symbol:{type:"Uri",content:t.agent.avatar}}}),Object.keys(S).length>0&&s.writeProperties(S)}}const _=async n=>{const t=await p.ConversationPlatform.getInstance(n);p.registerCustomMessageComponent(n,f.ContactList,Promise.resolve().then(()=>require("./contact-method-list-5ba4ba0b.js"))),p.registerCustomMessageComponent(n,f.ContactMethod,Promise.resolve().then(()=>require("./contact-method-abc31fb9.js"))),p.registerCustomMessageComponent(n,f.NotificationList,Promise.resolve().then(()=>require("./notification-list-d4d9695d.js"))),p.registerCustomMessageComponent(n,f.NoGoodAlternative,Promise.resolve().then(()=>require("./no-good-alternative-0ced8ab9.js"))),p.registerCustomMessageComponent(n,f.FeedbackList,Promise.resolve().then(()=>require("./feedback-list-a27d3df3.js"))),t.registerProvider("ace-knowledge-bot",(e,s)=>{const i=new W(n,e,s);i.initialize();const a=[];return a.push(s.actions.watch("conversation.user-submit",(c,h)=>{i.onMessageSend(c.text)})),a.push(s.actions.watch("conversation.action",(c,h)=>(i.onInput(c),h(c)))),a.push(s.actions.create("evaluate",c=>{const{events:h}=n.get("$widget");h.dispatch("bot-provider:evaluate",c)})),a.push(s.actions.create("submit",c=>{const{events:h}=n.get("$widget");h.dispatch("bot-provider:form-submitted",c)})),()=>{a.forEach(c=>{c()})}})};exports.KnowledgeBotProviderPlugin=_;exports.updateForm=B;
|
|
1
|
+
"use strict";var R=Object.defineProperty;var H=(n,t,e)=>t in n?R(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var y=(n,t,e)=>(H(n,typeof t!="symbol"?t+"":t,e),e);const p=require("@telia-ace/widget-conversation"),N=require("@telia-ace/widget-services"),K=require("@telia-ace/widget-utilities"),P=require("@telia-ace/widget-forms");var f=(n=>(n.ContactMethod="ace-knowledge-bot-contact-method",n.ContactList="ace-knowledge-bot-contact-list",n.FeedbackList="ace-knowledge-bot-feedback-list",n.NotificationList="ace-knowledge-bot-notification-list",n.NoGoodAlternative="ace-knowledge-bot-no-good-alternative",n))(f||{});const $=n=>{if(n){const{type:t,content:e}=n;if(t&&e)return{type:t,content:e}}},A=({isUser:n,items:t=[],meta:e={}})=>{const s=K.uuid();return{id:s,isUser:n,items:t.map(a=>({id:a.id||K.uuid(),isUser:n,groupId:s,message:a.message||[]})),meta:e}},U=({id:n,title:t,defaultIcon:e,exits:[s],exitType:i,confirmationText:a,expandFormAutomatically:c,form:h,description:E},S={})=>{const{adapter:r}=s||{Adapter:{}},{clientName:o="",settings:g={},customClientName:v=""}=r,{validation:l}=S,d={id:n.toString(),title:t,description:E,symbol:$(e),clientName:o==="custom.adapter"?v:o,expanded:!0,inline:!0,body:{}};if(o.indexOf("phone")>-1||o.indexOf("freetext")>-1){const{displayTextBeforeClick:L,textBeforeClick:m}=g;L==="true"&&(d.expanded=!1,d.title=m),o.indexOf("phone.text")>-1?d.body.phoneNumber=g.phoneNumber:d.body.freetext=g.freetext}return(o.indexOf("chat.popup")>-1||o.indexOf("link")>-1||o==="custom.adapter"&&i==="custom")&&(d.body=g,d.body.confirmationFallback=a),o.indexOf("ace")>-1&&(d.body=g),h&&h.hasValueComponents&&(l?d.body.form=P.FormBuilder.fromLegacyForm(n.toString(),h,l).get():d.body.form=P.FormBuilder.fromLegacyForm(n.toString(),h).get(),c||(d.expanded=d.inline=!1),d.body=B(d,{submit:"Submit"})),S.guideId&&(d.body.guideId=S.guideId),d},G=n=>{const{localState:t}=n;return n.tags.includes("category")&&n.tags.includes("contact")?p.ConversationMessageListItemType.ItemList:n.tags.includes("suggestion")||(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching"?p.ConversationMessageListItemType.LinkList:(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching"?f.FeedbackList:(t==null?void 0:t.$type)==="Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching"?f.ContactList:p.ConversationMessageListItemType.ButtonList},q=(n,t)=>{const{knowledgeBotEndpoint:e}=t.properties();if(e)return`${e}/conversations`;const{data:s}=n.get("$settings");if(!s||!s.projection)throw new Error("Missing Knowledge Bot endpoint");return`${s.projection}/conversations`},B=(n,{submit:t,errors:e,meta:s})=>{var i;if((i=n==null?void 0:n.body)!=null&&i.form){const{body:a}=n,c=new P.FormBuilder(a.form);return a.form.layout.submit||c.createComponent(P.submitButton(t,"submit")),e&&c.setValidationErrors(e),s&&c.setMeta(s),{...a,form:c.get()}}return(n==null?void 0:n.body)||{}},O=async(n,t,e)=>{(await(await n.getAsync("dataClient")).getClient()).parameters.set(t,e)},b=({messageId:n,message:t,group:e})=>({id:n,message:t,groupId:e.id,isUser:e.isUser}),V=async(n,t,e)=>{const s=(r,o,g,v={actions:[],entryId:o.id,groupId:g})=>{const l=[];return v.actions=o.content.items.map(d=>{var m;const L={label:d.title,actionKey:d.actionKey,symbol:d.symbol?d.symbol:void 0,description:d.description||void 0};if(d.data){const w=o.actions[d.actionKey];r===f.ContactList?(l.push(d.data.id),L.data=U(d.data,{guideId:(m=w==null?void 0:w.guideId)==null?void 0:m.toString()})):L.data=d.data}return L}),r===f.ContactList&&(v.contactMethodIds=l),v},i=async(r,o,g=[],v)=>{var d,L;const l=K.uuid();switch(r.type!=="List"&&r.tags.includes("guide")&&((L=(d=r.content.hints)==null?void 0:d[0])!=null&&L.id)&&await O(n,"LastGuideId",r.content.hints[0].id),r.type){case"List":{const{header:m,items:w,html:x}=r.content,M=[];let C={actions:[],entryId:r.id,groupId:o.id};if(C.tags=r.tags||null,m&&(C.header=m),(w==null?void 0:w.length)>0){const u=G(r);if(C=s(u,r,o.id,C),g.length){const I=g.find(k=>k.tags.includes("paging")),T=g.find(k=>k.tags.includes("fallback"));if(I!=null&&I.content&&(o.meta.paging={actions:I.actions,items:I.content.items,localState:I.localState},I.content.items.forEach(k=>{C.actions.push({label:k.title,actionKey:k.actionKey,data:{groupId:v?v.id:o.id}})})),T){const k=T.content.items.find(F=>F.actionKey==="help");k&&(M.push(b({messageId:l,message:[p.ConversationMessageListItemType.Separator,void 0],group:o})),M.push(b({messageId:l,message:[f.NoGoodAlternative,{body:k.title}],group:o})))}}M.unshift(b({messageId:l,message:[u,C],group:o}))}return x&&M.unshift(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:x}],group:o})),M}case"Text":{const m=[];if(m.push(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.html}],group:o})),g.length){const w=g.find(u=>{var I;return u.type==="List"&&((I=u.localState)==null?void 0:I.$type)==="Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching"}),x=g.find(u=>u.tags.includes("dialog")),M=g.find(u=>u.tags.includes("feedback")),C=g.find(u=>u.tags.includes("contact")&&u.type==="Contact");if(C&&m.push(b({messageId:l,message:[f.ContactMethod,{contactMethodId:C.content.id,groupId:o.id,guideId:C.content.guideId}],group:o})),x&&m.push(b({messageId:l,message:[p.ConversationMessageListItemType.ButtonList,{actions:x.content.items.map(u=>({label:u.title,actionKey:u.actionKey,data:u.data}))}],group:o})),w){const u=s(f.ContactList,w,o.id);m.push(b({messageId:l,message:[p.ConversationMessageListItemType.Separator,void 0],group:o})),m.push(b({messageId:l,message:[f.ContactList,u],group:o}))}M&&m.push(b({messageId:l,group:o,message:[f.FeedbackList,{title:M.content.html,messageId:l,actions:M.content.items.map(u=>({actionKey:u.actionKey,label:u.title}))}]}))}return m}case"Contact":return[b({messageId:l,message:[f.ContactMethod,{contactMethodId:r.content.id,groupId:o.id,guideId:r.content.guideId}],group:o})];case"CategorizedNoticeList":{const m=[b({messageId:l,message:[f.NotificationList,{id:r.content.item.id.toString(),header:r.content.item.title,items:r.content.item.listNotices,symbol:r.content.item.defaultIcon}],group:o})];return(r.content.notices||[]).forEach(w=>{m.push(b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:w.body}],group:o}))}),m}case"footerNotice":return[b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.item.body}],group:o})];case"Error":return[b({messageId:l,message:[p.ConversationMessageListItemType.HTML,{body:r.content.message||"Something went wrong."}],group:o})];default:return[]}},a=r=>["CategorizedNoticeList","NoticeList"].includes(r.type)?(r.content.items||[]).reduce((o,g)=>(r.content.isInitialNotices&&o.push({...r,id:K.uuid(),type:g.type||r.type,content:{$type:r.content.$type,isInitialNotices:r.content.isInitialNotices,notices:g.notices,item:g}}),o),[]):r,c=new Map([["Text",1],["List",2],["Contact",3],["CategorizedNoticeList",10]]),h=[],E=t.sort((r,o)=>{const v=c.get(r.type)||20,l=c.get(o.type)||20;return v-l}).filter(r=>!r.relation).reduce((r,o)=>r.concat(a(o)),[]),S=r=>typeof r.actions.selector<"u";for(const r of E){const o=t.filter(l=>l.relation===r.id&&!S(l)),g=A({isUser:!1});(await i(r,g,o,e)).forEach(l=>{g.items.push(l)}),g.items.length&&h.push(g)}return h};class j{constructor(t,e,s,i){y(this,"globalState");y(this,"localState");y(this,"clientId");y(this,"entries");this.endpoint=t,this.events=e,this.store=s,this.container=i,this.clientId=K.uuid(),this.entries=[]}async start({silent:t}){const e=await this.store.read("globalState"),s=await this.store.read("localState"),i=await this.store.read("entries");if(this.globalState=e||this.globalState,this.localState=s||this.localState,this.entries=i||this.entries,t)return;const a=this.createInitialEnvelope();return await this.postEnvelope(a)}async sendMessage(t){const e={command:{phrase:t},globalState:this.globalState,clientId:this.clientId};return await this.postEnvelope(e)}async helpAction(){return this.postEnvelope({action:{key:"help",content:{$type:"Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching"}},globalState:this.globalState,clientId:this.clientId})}async nextAction(t){var s;const{paging:e}=t.meta;if((s=e.actions)!=null&&s.next)return this.postEnvelope({action:{key:"next",content:e.actions.next},localState:e.localState,globalState:this.globalState,clientId:this.clientId},t).then(i=>{const a=t.items.findIndex(c=>c.message[0]==="link-list");return a===-1||!i?t:{...t,meta:{...t.meta,...i[0].meta},items:[...t.items.slice(0,a),{...t.items[a],message:[i[0].items[0].message[0],{...t.items[a].message[1],...i[0].items[0].message[1]}]},...t.items.slice(a+1)]}})}async showContactMethodAction(t){const e=this.entries.find(i=>i.id===t.entryId),s=e==null?void 0:e.actions[t.actionKey];if(s)return this.postEnvelope({action:{key:t.actionKey,content:s},localState:e.localState,globalState:this.globalState,clientId:this.clientId})}async defaultAction(t){const e=this.getEntryOfAction(t);if(e)return this.postEnvelope({action:{key:t,content:e.actions[t]},localState:e.localState,globalState:this.globalState,clientId:this.clientId})}createInitialEnvelope(){return{command:{site:this.endpoint},clientId:this.clientId,globalState:{},funnel:this.container.get("$widget").name}}async postEnvelope(t,e){try{const s=await fetch(this.endpoint,this.getHttpOptions(t));if(!s.ok)throw s;const i=await s.json();return this.handleResponse(i,e)}catch(s){process.env.NODE_ENV!=="production"&&console.warn("Something went wrong when posting the envelope.");let i="Something went wrong";return(s.message==="Failed to fetch"||s.message==="NetworkError when attempting to fetch resource.")&&(i="Lost connection... Please try again."),this.events.dispatch("tracking:http-client-error",{message:i,error:s}),this.handleResponse({entries:[{id:K.uuid(),type:"Error",timestamp:new Date().toISOString(),content:{message:i},actions:{},tags:[]}]})}}async handleResponse(t,e){this.entries=this.entries.concat(t.entries),this.store.write(this.entries,"entries");const s=t.entries.find(a=>a.type==="Widget");return s&&this.events.dispatch("provider:widget-entry",s.content),t.globalState&&(this.globalState=t.globalState,this.store.write(t.globalState,"globalState")),this.localState=t.entries.reduce((a,c)=>c.localState?c.localState:a,void 0),this.store.write(this.localState,"localState"),await V(this.container,t.entries,e)}getHttpOptions(t){const e={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"}};return t.funnel=this.container.get("$widget").name,t.localState=t.localState||this.localState,Object.assign({},e,{body:JSON.stringify(t),credentials:"same-origin"})}getEntryOfAction(t){return this.entries.find(e=>!!e.actions[t])}}class z{constructor(t){y(this,"enabled",!0);y(this,"botProviderGlobalStateKey","bot-provider-global-state");y(this,"botProviderLocalStateKey","bot-provider-local-state");y(this,"botProviderEntriesKey","bot-provider-entries");y(this,"botProviderMetaStateKey","bot-provider-conversation-meta");this.container=t}getKey(t){let e;switch(t){case"localState":e=this.botProviderLocalStateKey;break;case"globalState":e=this.botProviderGlobalStateKey;break;case"entries":e=this.botProviderEntriesKey;break;case"meta":e=this.botProviderMetaStateKey;break}return e}async read(t){const e=this.getKey(t);if(!(!this.enabled||!e))return N.readStorage(this.container,e)}async write(t,e){const s=this.getKey(e);if(!this.enabled||!s)return;(await N.createStorageWriter(this.container,s,N.StorageCategory.Necessary))(t)}}class W{constructor(t,e,s){y(this,"agent");y(this,"user");y(this,"httpClient");y(this,"events");y(this,"groups",[]);y(this,"store");this.container=t,this.conversation=e;const{events:i}=this.container.get("$widget");this.events=i,this.store=new z(t),this.agent=e.createAgent({id:"knowledge-bot-agent",name:"",avatar:void 0}),this.user=e.user;const a=q(t,s);this.httpClient=new j(a,i,this.store,this.container),this.events.subscribe("provider:widget-entry",(c,h)=>{this.onWidgetEntryReceived(h)}),this.events.subscribe("provider:open-contact-method",async(c,h)=>{const E=await this.httpClient.showContactMethodAction(h);E&&(h.contactMethod.title&&this.printUserMessage(h.contactMethod.title),this.onMessagesReceived(E))})}async initialize(){var a;const t=this.conversation.loading(),e=await this.store.read("meta");e!=null&&e.agent&&this.agent.update({name:e.agent.name,avatar:e.agent.avatar});const s=await this.conversation.isRehydrated(),i=await this.httpClient.start({silent:((a=this.conversation.options)==null?void 0:a.silent)||s});i&&this.onMessagesReceived(i),t()}async onMessagesReceived(t){this.groups=this.groups.concat(t),t.forEach(e=>{const s=e.items.map(i=>i.message);e.isUser?e.writer=this.user.print(s):e.writer=this.agent.print(s)})}async onInput(t){const e=typeof t=="string"?t:t.actionKey;switch(e){case"next":{if(typeof t=="string")return;const s=this.groups.find(i=>{var a;return i.id===((a=t.data)==null?void 0:a.groupId)});if(s){const i=await this.httpClient.nextAction(s);if(i){const a=i.items.map(c=>c.message);s.meta.paging=i==null?void 0:i.meta.paging,s.writer.update(a)}}}break;case"help":{const s=this.conversation.loading(),i=await this.httpClient.helpAction();s(),i&&this.onMessagesReceived(i)}break;default:{typeof t!="string"&&t.label&&this.printUserMessage(t.label);const s=this.conversation.loading(),i=await this.httpClient.defaultAction(e);i&&this.onMessagesReceived(i),s()}break}}printUserMessage(t){const e=A({isUser:!0,items:[{id:K.uuid(),isUser:!0,message:[p.ConversationMessageListItemType.HTML,{body:t}]}]});return this.onMessagesReceived([e]),e}async onMessageSend(t){const e=this.conversation.loading(),s=await this.httpClient.sendMessage(t);await O(this.container,"phrase",t),this.printUserMessage(t),s&&this.onMessagesReceived(s),e()}async onWidgetEntryReceived(t){var r,o,g,v,l;if(t.agent){const d={name:t.agent.name,avatar:t.agent.avatar};this.agent.update(d),(await N.createStorageWriter(this.container,"bot-provider-conversation-meta",N.StorageCategory.Necessary))({agent:d})}const s=(await this.container.getAsync("components")).components().ofType("widget-header").select();if(!s)return;const i=await this.container.get("settings"),a=i==null?void 0:i.components["widget-header"],c=(o=(r=a==null?void 0:a.properties)==null?void 0:r.actions)==null?void 0:o.avatar,h=(g=a==null?void 0:a.properties)==null?void 0:g.header,E=(v=a==null?void 0:a.properties)==null?void 0:v.tagline,S={};!h&&(t!=null&&t.heading)&&(S.header=t.heading),!E&&(t!=null&&t.tagline)&&(S.tagline=t.tagline),!c&&((l=t==null?void 0:t.agent)!=null&&l.avatar)&&(S.actions={avatar:{position:"left",symbol:{type:"Uri",content:t.agent.avatar}}}),Object.keys(S).length>0&&s.writeProperties(S)}}const _=async n=>{const t=await p.ConversationPlatform.getInstance(n);p.registerCustomMessageComponent(n,f.ContactList,Promise.resolve().then(()=>require("./contact-method-list-9ac079e1.js"))),p.registerCustomMessageComponent(n,f.ContactMethod,Promise.resolve().then(()=>require("./contact-method-c0036fb9.js"))),p.registerCustomMessageComponent(n,f.NotificationList,Promise.resolve().then(()=>require("./notification-list-d4d9695d.js"))),p.registerCustomMessageComponent(n,f.NoGoodAlternative,Promise.resolve().then(()=>require("./no-good-alternative-0ced8ab9.js"))),p.registerCustomMessageComponent(n,f.FeedbackList,Promise.resolve().then(()=>require("./feedback-list-a27d3df3.js"))),t.registerProvider("ace-knowledge-bot",(e,s)=>{const i=new W(n,e,s);i.initialize();const a=[];return a.push(s.actions.watch("conversation.user-submit",(c,h)=>{i.onMessageSend(c.text)})),a.push(s.actions.watch("conversation.action",(c,h)=>(i.onInput(c),h(c)))),a.push(s.actions.create("evaluate",c=>{const{events:h}=n.get("$widget");h.dispatch("bot-provider:evaluate",c)})),a.push(s.actions.create("submit",c=>{const{events:h}=n.get("$widget");h.dispatch("bot-provider:form-submitted",c)})),()=>{a.forEach(c=>{c()})}})};exports.KnowledgeBotProviderPlugin=_;exports.updateForm=B;
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-fecadd8c.js");require("@telia-ace/widget-conversation");require("@telia-ace/widget-services");require("@telia-ace/widget-utilities");require("@telia-ace/widget-forms");exports.ConversationPlugin=e.KnowledgeBotProviderPlugin;
|
package/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
-
"version": "1.3.24-rc.
|
|
3
|
+
"version": "1.3.24-rc.2",
|
|
4
4
|
"main": "./index.js",
|
|
5
5
|
"types": "./index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@telia-ace/knowledge-data-client": "^1.3.24-rc.
|
|
14
|
-
"@telia-ace/knowledge-widget-adapters": "^1.3.24-rc.
|
|
15
|
-
"@telia-ace/knowledge-widget-ui": "^1.3.24-rc.
|
|
16
|
-
"@telia-ace/widget-conversation": "^1.3.24-rc.
|
|
17
|
-
"@telia-ace/widget-forms": "^1.3.24-rc.
|
|
18
|
-
"@telia-ace/widget-services": "^1.3.24-rc.
|
|
19
|
-
"@telia-ace/widget-utilities": "^1.3.24-rc.
|
|
13
|
+
"@telia-ace/knowledge-data-client": "^1.3.24-rc.2",
|
|
14
|
+
"@telia-ace/knowledge-widget-adapters": "^1.3.24-rc.2",
|
|
15
|
+
"@telia-ace/knowledge-widget-ui": "^1.3.24-rc.2",
|
|
16
|
+
"@telia-ace/widget-conversation": "^1.3.24-rc.2",
|
|
17
|
+
"@telia-ace/widget-forms": "^1.3.24-rc.2",
|
|
18
|
+
"@telia-ace/widget-services": "^1.3.24-rc.2",
|
|
19
|
+
"@telia-ace/widget-utilities": "^1.3.24-rc.2",
|
|
20
20
|
"@webprovisions/platform": "^1.1.4",
|
|
21
|
-
"@telia-ace/knowledge-widget-core": "^1.3.24-rc.
|
|
21
|
+
"@telia-ace/knowledge-widget-core": "^1.3.24-rc.2"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"@emotion/react": "11.11.1",
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { jsx as M } from "react/jsx-runtime";
|
|
2
|
-
import N from "@emotion/styled";
|
|
3
|
-
import { DataClient as T, DataType as z } from "@telia-ace/knowledge-data-client";
|
|
4
|
-
import { ContactMethod as A } from "@telia-ace/knowledge-widget-adapters";
|
|
5
|
-
import { useContainer as R, useDispatch as _, useConversation as G } from "@telia-ace/knowledge-widget-ui";
|
|
6
|
-
import { FormBuilder as I } from "@telia-ace/widget-forms";
|
|
7
|
-
import { appendClassNames as O } from "@telia-ace/widget-utilities";
|
|
8
|
-
import { useState as V, useRef as q, useEffect as $, useCallback as H } from "react";
|
|
9
|
-
import { u as j } from "./index-a559356e.mjs";
|
|
10
|
-
import "@telia-ace/widget-conversation";
|
|
11
|
-
import "@telia-ace/widget-services";
|
|
12
|
-
const rt = ({
|
|
13
|
-
contactMethodId: a,
|
|
14
|
-
guideId: n,
|
|
15
|
-
groupId: f,
|
|
16
|
-
className: x
|
|
17
|
-
}) => {
|
|
18
|
-
var h, g, k, w, S;
|
|
19
|
-
const [t, m] = V(), c = R(), B = _(), b = q(!0), l = G();
|
|
20
|
-
$(() => {
|
|
21
|
-
const { events: o } = c.get("$widget"), u = o.subscribe(
|
|
22
|
-
"bot-provider:form-submitted",
|
|
23
|
-
async (s, e) => {
|
|
24
|
-
var D;
|
|
25
|
-
if (((D = e.form.meta) == null ? void 0 : D.groupId) !== f || e.id !== t.id)
|
|
26
|
-
return;
|
|
27
|
-
l && (e.form.meta || (e.form.meta = {}), e.form.meta.conversation = l);
|
|
28
|
-
const y = await c.getAsync(
|
|
29
|
-
"contactMethods"
|
|
30
|
-
), r = {
|
|
31
|
-
...t,
|
|
32
|
-
body: {
|
|
33
|
-
...t.body,
|
|
34
|
-
form: e.form
|
|
35
|
-
}
|
|
36
|
-
}, { errors: d, valid: p, errorTypes: K } = await y.validate(
|
|
37
|
-
r
|
|
38
|
-
);
|
|
39
|
-
if (!p) {
|
|
40
|
-
const E = new I(t.body.form);
|
|
41
|
-
m(void 0), E.setValidationErrors(d), r.body = {
|
|
42
|
-
...r.body,
|
|
43
|
-
form: E.get()
|
|
44
|
-
}, m({ ...r });
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const F = await y.submit(r);
|
|
48
|
-
r.confirmation = F, m(r);
|
|
49
|
-
}
|
|
50
|
-
), i = o.subscribe(
|
|
51
|
-
"bot-provider:evaluate",
|
|
52
|
-
async (s, e) => {
|
|
53
|
-
if (String(e.id) !== String(a))
|
|
54
|
-
return;
|
|
55
|
-
const r = await (await c.getAsync(
|
|
56
|
-
"contactMethods"
|
|
57
|
-
)).evaluate(t);
|
|
58
|
-
let d = {
|
|
59
|
-
...t,
|
|
60
|
-
body: {
|
|
61
|
-
...t.body,
|
|
62
|
-
form: r
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const p = j(d, {
|
|
66
|
-
submit: "Skicka",
|
|
67
|
-
errors: {},
|
|
68
|
-
meta: { groupId: f }
|
|
69
|
-
});
|
|
70
|
-
d = {
|
|
71
|
-
...d,
|
|
72
|
-
body: p
|
|
73
|
-
}, m(d);
|
|
74
|
-
}
|
|
75
|
-
);
|
|
76
|
-
return () => {
|
|
77
|
-
u(), i();
|
|
78
|
-
};
|
|
79
|
-
}, [c, t, m, l]);
|
|
80
|
-
const C = (o, u, i = null) => {
|
|
81
|
-
if (o["ui:component"] && o["ui:component"] === "Date")
|
|
82
|
-
return Object.assign(o, {
|
|
83
|
-
"ui:bot": !0,
|
|
84
|
-
"ui:entrance": u
|
|
85
|
-
}), o;
|
|
86
|
-
for (const s in o)
|
|
87
|
-
if (typeof o[s] == "object" && o[s] !== null) {
|
|
88
|
-
const e = C(
|
|
89
|
-
o[s],
|
|
90
|
-
u,
|
|
91
|
-
o
|
|
92
|
-
);
|
|
93
|
-
if (e !== void 0)
|
|
94
|
-
return e;
|
|
95
|
-
}
|
|
96
|
-
}, v = H(
|
|
97
|
-
async (o) => {
|
|
98
|
-
const i = await (await T.getInstance(c)).fetch(
|
|
99
|
-
z.ContactMethod,
|
|
100
|
-
{
|
|
101
|
-
contactMethodId: o,
|
|
102
|
-
guideId: n
|
|
103
|
-
},
|
|
104
|
-
{ noCache: !0, isBot: !0 }
|
|
105
|
-
), s = j(i, {
|
|
106
|
-
submit: "Skicka",
|
|
107
|
-
errors: {},
|
|
108
|
-
meta: { groupId: f }
|
|
109
|
-
});
|
|
110
|
-
if (i.body = s, i.body.guideId = n, !b.current)
|
|
111
|
-
return null;
|
|
112
|
-
m(i);
|
|
113
|
-
},
|
|
114
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
115
|
-
[b]
|
|
116
|
-
);
|
|
117
|
-
return $(() => (v(a), () => {
|
|
118
|
-
b.current = !1;
|
|
119
|
-
}), [a, v]), t ? (t.clientName === "ace.callback" && ((h = t.body) != null && h.entrance) && C(t, (g = t.body) == null ? void 0 : g.entrance), /* @__PURE__ */ M(
|
|
120
|
-
J,
|
|
121
|
-
{
|
|
122
|
-
...t,
|
|
123
|
-
body: {
|
|
124
|
-
...t.body,
|
|
125
|
-
form: t.body.form ? {
|
|
126
|
-
...t.body.form,
|
|
127
|
-
data: (k = t.body.form) == null ? void 0 : k.data,
|
|
128
|
-
layout: { ...t.body.form.layout },
|
|
129
|
-
meta: (w = t.body.form) == null ? void 0 : w.meta,
|
|
130
|
-
schema: (S = t.body.form) == null ? void 0 : S.schema
|
|
131
|
-
} : void 0,
|
|
132
|
-
guideId: t.body.guideId
|
|
133
|
-
},
|
|
134
|
-
inline: !0,
|
|
135
|
-
expanded: !0,
|
|
136
|
-
dispatch: B,
|
|
137
|
-
className: O("humany-bot-contact-method", x)
|
|
138
|
-
}
|
|
139
|
-
)) : null;
|
|
140
|
-
}, J = N(A)`
|
|
141
|
-
padding: ${(a) => {
|
|
142
|
-
var n;
|
|
143
|
-
return (n = a.theme.sizes) == null ? void 0 : n.normal;
|
|
144
|
-
}} ${(a) => {
|
|
145
|
-
var n;
|
|
146
|
-
return (n = a.theme.sizes) == null ? void 0 : n.medium;
|
|
147
|
-
}};
|
|
148
|
-
`;
|
|
149
|
-
export {
|
|
150
|
-
rt as default
|
|
151
|
-
};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("react/jsx-runtime"),N=require("@emotion/styled"),F=require("@telia-ace/knowledge-data-client"),R=require("@telia-ace/knowledge-widget-adapters"),C=require("@telia-ace/knowledge-widget-ui"),$=require("@telia-ace/widget-forms"),z=require("@telia-ace/widget-utilities"),l=require("react"),x=require("./index-dc30edd3.js");require("@telia-ace/widget-conversation");require("@telia-ace/widget-services");const O=({contactMethodId:a,guideId:n,groupId:b,className:T})=>{var h,k,q,S,j;const[e,u]=l.useState(),c=C.useContainer(),A=C.useDispatch(),f=l.useRef(!0),y=C.useConversation();l.useEffect(()=>{const{events:t}=c.get("$widget"),m=t.subscribe("bot-provider:form-submitted",async(s,o)=>{var D;if(((D=o.form.meta)==null?void 0:D.groupId)!==b||o.id!==e.id)return;y&&(o.form.meta||(o.form.meta={}),o.form.meta.conversation=y);const p=await c.getAsync("contactMethods"),r={...e,body:{...e.body,form:o.form}},{errors:d,valid:g,errorTypes:W}=await p.validate(r);if(!g){const E=new $.FormBuilder(e.body.form);u(void 0),E.setValidationErrors(d),r.body={...r.body,form:E.get()},u({...r});return}const B=await p.submit(r);r.confirmation=B,u(r)}),i=t.subscribe("bot-provider:evaluate",async(s,o)=>{if(String(o.id)!==String(a))return;const r=await(await c.getAsync("contactMethods")).evaluate(e);let d={...e,body:{...e.body,form:r}};const g=x.updateForm(d,{submit:"Skicka",errors:{},meta:{groupId:b}});d={...d,body:g},u(d)});return()=>{m(),i()}},[c,e,u,y]);const v=(t,m,i=null)=>{if(t["ui:component"]&&t["ui:component"]==="Date")return Object.assign(t,{"ui:bot":!0,"ui:entrance":m}),t;for(const s in t)if(typeof t[s]=="object"&&t[s]!==null){const o=v(t[s],m,t);if(o!==void 0)return o}},w=l.useCallback(async t=>{const i=await(await F.DataClient.getInstance(c)).fetch(F.DataType.ContactMethod,{contactMethodId:t,guideId:n},{noCache:!0,isBot:!0}),s=x.updateForm(i,{submit:"Skicka",errors:{},meta:{groupId:b}});if(i.body=s,i.body.guideId=n,!f.current)return null;u(i)},[f]);return l.useEffect(()=>(w(a),()=>{f.current=!1}),[a,w]),e?(e.clientName==="ace.callback"&&((h=e.body)!=null&&h.entrance)&&v(e,(k=e.body)==null?void 0:k.entrance),M.jsx(U,{...e,body:{...e.body,form:e.body.form?{...e.body.form,data:(q=e.body.form)==null?void 0:q.data,layout:{...e.body.form.layout},meta:(S=e.body.form)==null?void 0:S.meta,schema:(j=e.body.form)==null?void 0:j.schema}:void 0,guideId:e.body.guideId},inline:!0,expanded:!0,dispatch:A,className:z.appendClassNames("humany-bot-contact-method",T)})):null},U=N(R.ContactMethod)`
|
|
2
|
-
padding: ${a=>{var n;return(n=a.theme.sizes)==null?void 0:n.normal}} ${a=>{var n;return(n=a.theme.sizes)==null?void 0:n.medium}};
|
|
3
|
-
`;exports.default=O;
|