@telia-ace/knowledge-widget-bot-provider 0.0.1-alpha.55 → 0.0.1-alpha.59
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/client/chat.client.d.ts +16 -0
- package/dist/client/contact-method.client.d.ts +25 -0
- package/dist/client/http.client.d.ts +23 -0
- package/dist/client/middleware.client.d.ts +14 -0
- package/dist/contact-method.15886c3d.js +66 -0
- package/dist/contact-method.15886c3d.js.map +1 -0
- package/dist/contract/custom-component/contact-method-item.d.ts +8 -0
- package/dist/contract/custom-component/contact-method-list.d.ts +7 -0
- package/dist/contract/custom-component/contact-method.d.ts +3 -0
- package/dist/contract/enum/server-entry-type.enum.d.ts +7 -0
- package/dist/contract/model/conversation-api-model/list.model.d.ts +5 -0
- package/dist/contract/model/conversation-api-model/message.model.d.ts +7 -0
- package/dist/contract/model/http/action.model.d.ts +3 -0
- package/dist/contract/model/http/client-action.model.d.ts +4 -0
- package/dist/contract/model/http/client-envelope.model.d.ts +9 -0
- package/dist/contract/model/http/connect-options.model.d.ts +5 -0
- package/dist/contract/model/http/global-state.model.d.ts +8 -0
- package/dist/contract/model/http/http-client-options.model.d.ts +5 -0
- package/dist/contract/model/http/server-entry.model.d.ts +11 -0
- package/dist/contract/model/http/server-envelope.model.d.ts +10 -0
- package/dist/contract/model/middleware/aggregator-state.model.d.ts +4 -0
- package/dist/contract/model/shared/loose-object.model.d.ts +3 -0
- package/dist/helper/chat.helper.d.ts +8 -0
- package/dist/helper/http.helper.d.ts +13 -0
- package/dist/helper/middleware.helper.d.ts +12 -0
- package/dist/helper/store.helper.d.ts +22 -0
- package/dist/index.js +671 -5
- package/dist/index.js.map +1 -1
- package/dist/interface/entry.interface.d.ts +20 -0
- package/dist/interface/middleware/paging.interface.d.ts +4 -0
- package/dist/interface/middleware/processor.interface.d.ts +10 -0
- package/package.json +12 -11
- package/dist/contact-method-list.js +0 -112
- package/dist/contact-method-list.js.map +0 -1
- package/dist/contact-method.js +0 -154
- package/dist/contact-method.js.map +0 -1
- package/dist/entry-handler.d.ts +0 -2
- package/dist/feedback-list.js +0 -72
- package/dist/feedback-list.js.map +0 -1
- package/dist/http-client.d.ts +0 -42
- package/dist/index2.js +0 -917
- package/dist/index2.js.map +0 -1
- package/dist/no-good-alternative.js +0 -46
- package/dist/no-good-alternative.js.map +0 -1
- package/dist/notification-list.js +0 -74
- package/dist/notification-list.js.map +0 -1
- package/dist/provider.d.ts +0 -25
- package/dist/store.d.ts +0 -15
- package/dist/styles.js +0 -13
- package/dist/styles.js.map +0 -1
- package/dist/types.d.ts +0 -79
- package/dist/ui/contact-method-list.d.ts +0 -10
- package/dist/ui/contact-method.d.ts +0 -9
- package/dist/ui/feedback-list.d.ts +0 -8
- package/dist/ui/no-good-alternative.d.ts +0 -6
- package/dist/ui/notification-list.d.ts +0 -11
- package/dist/ui/styles.d.ts +0 -1
- package/dist/utils.d.ts +0 -26
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/contract/enum/server-entry-type.enum.ts","../src/helper/chat.helper.ts","../src/helper/middleware.helper.ts","../src/helper/store.helper.ts","../src/interface/entry.interface.ts","../src/client/chat.client.ts","../src/client/contact-method.client.ts","../src/helper/http.helper.ts","../src/interface/middleware/paging.interface.ts","../src/interface/middleware/processor.interface.ts","../src/client/middleware.client.ts","../src/client/http.client.ts","../src/plugin.ts"],"sourcesContent":["export enum ServerEntryTypeEnum {\r\n Widget,\r\n Text,\r\n Contact,\r\n List,\r\n Error,\r\n}\r\n","export class ChatHelper {\r\n private static user: any;\r\n private static agent: any;\r\n\r\n static setUser(user: any) {\r\n this.user = user;\r\n }\r\n\r\n static setAgent(agent: any) {\r\n this.agent = agent;\r\n }\r\n \r\n static getUser(): any {\r\n return this.user;\r\n }\r\n \r\n static getAgent(): any {\r\n return this.agent;\r\n }\r\n}\r\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\r\nimport { Message } from '../contract/model/conversation-api-model/message.model';\r\n\r\nexport class MiddlewareHelper {\r\n private static sessionMessageStorageVariable: string = 'conversation-plugin-messages';\r\n private static container: any;\r\n private static widget: any;\r\n\r\n static setContainer(container: any) {\r\n MiddlewareHelper.container = container;\r\n }\r\n\r\n static setWidget(widget: any) {\r\n this.widget = widget;\r\n }\r\n\r\n static getContainer(): any {\r\n return this.container;\r\n }\r\n\r\n static getWidget(): any {\r\n return this.widget;\r\n }\r\n\r\n static setEntrySessionStorage = async (messages: Message[]) => {\r\n createStorageWriter(\r\n MiddlewareHelper.container,\r\n MiddlewareHelper.sessionMessageStorageVariable,\r\n StorageCategory.Necessary\r\n ).then((write) => {\r\n return write(messages);\r\n });\r\n };\r\n\r\n static getEntrySessionStorage(): Promise<any> {\r\n return readStorage(this.container, this.sessionMessageStorageVariable);\r\n }\r\n}\r\n","import { Message } from '../contract/model/conversation-api-model/message.model';\r\nimport { ClientAction } from '../contract/model/http/client-action.model';\r\nimport { GlobalState } from '../contract/model/http/global-state.model';\r\nimport { ServerEntry } from '../contract/model/http/server-entry.model';\r\nimport { LooseObject } from '../contract/model/shared/loose-object.model';\r\nimport { MiddlewareHelper } from './middleware.helper';\r\n\r\nexport class StoreHelper {\r\n private static messageStore: Message[] = [];\r\n private static globalState: GlobalState;\r\n\r\n constructor() {\r\n StoreHelper.globalState = {\r\n completedInteractionsCount: 0,\r\n lastBotGuide: 0,\r\n site: 'https://localhost:8080/',\r\n invincibleParameters: {},\r\n };\r\n }\r\n\r\n static insertOrUpdateMessageArrayStore(messageArray: Message[], entry?: any) {\r\n messageArray\r\n .filter((o) => !!o)\r\n .forEach((t) => {\r\n if (!this.messageStore.find((o) => o.id == t.id)) this.insertMessageToStore(t);\r\n else {\r\n this.updateMessageInStore(t, entry);\r\n }\r\n });\r\n\r\n MiddlewareHelper.setEntrySessionStorage(this.messageStore);\r\n }\r\n\r\n private static insertMessageToStore(message: Message) {\r\n this.messageStore.push(message);\r\n }\r\n\r\n private static updateMessageInStore(message: Message, entry?: any) {\r\n message.conversationEntry = entry;\r\n let index = this.messageStore.findIndex((o) => o.id == message.id);\r\n this.messageStore[index] = message;\r\n }\r\n\r\n static checkIdInMessageStore(id: string): boolean {\r\n return this.messageStore.find((o) => o.id == id) === undefined;\r\n }\r\n\r\n static getLocalState(action: string): LooseObject | undefined {\r\n const entry: ServerEntry | undefined = this.getEntry(action);\r\n return entry?.localState;\r\n }\r\n\r\n static getGlobalState(): GlobalState {\r\n return StoreHelper.globalState;\r\n }\r\n\r\n static setGlobalState(state: GlobalState) {\r\n StoreHelper.globalState = state;\r\n }\r\n\r\n static getAction(action: string): ClientAction {\r\n const entry: ServerEntry | undefined = this.getEntry(action);\r\n\r\n return {\r\n key: action,\r\n content: entry?.actions[action],\r\n };\r\n }\r\n\r\n static getCommand(text: string): LooseObject {\r\n return { phrase: text };\r\n }\r\n\r\n static getEntry(action: string): ServerEntry | undefined {\r\n let entry: ServerEntry | undefined = undefined;\r\n this.getEntryStore().forEach((o) => {\r\n if (o.actions[action]) {\r\n entry = o;\r\n }\r\n });\r\n return entry;\r\n }\r\n\r\n static getMessage(id: string): Message | undefined {\r\n return this.messageStore.find((o) => o.id == id);\r\n }\r\n\r\n static getEntryStore(): ServerEntry[] {\r\n return this.messageStore\r\n .filter((o) => !!o.entry)\r\n .map((o) => {\r\n return o.entry;\r\n });\r\n }\r\n}\r\n","import { DataClient, DataType } from '@telia-ace/knowledge-widget-types-grid';\r\nimport {\r\n ConversationMessageListItemType,\r\n ConverstationMessageItem\r\n} from '@telia-ace/widget-conversation';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { ServerEntryTypeEnum } from '../contract/enum/server-entry-type.enum';\r\nimport { Message } from '../contract/model/conversation-api-model/message.model';\r\nimport { ServerEntry } from '../contract/model/http/server-entry.model';\r\nimport { StoreHelper } from '../helper/store.helper';\r\n\r\nexport default class EntryInterface {\r\n private helpActionKey = 'help';\r\n private nextActionKey = 'next';\r\n\r\n constructor(private container: Container) {}\r\n\r\n // transform the entry based on its type\r\n async transform(entry: ServerEntry): Promise<Message | undefined> {\r\n const entryType = (<any>ServerEntryTypeEnum)[entry.type];\r\n switch (entryType) {\r\n case ServerEntryTypeEnum.List:\r\n return {\r\n id: entry.id,\r\n message: this.listTransform(entry),\r\n entry: entry,\r\n isUser: false,\r\n };\r\n case ServerEntryTypeEnum.Text:\r\n return {\r\n id: entry.id,\r\n message: this.textTransform(entry),\r\n entry: entry,\r\n isUser: false,\r\n };\r\n case ServerEntryTypeEnum.Text:\r\n return {\r\n id: entry.id,\r\n message: this.listTransform(entry),\r\n entry: entry,\r\n isUser: false,\r\n };\r\n case ServerEntryTypeEnum.Contact:\r\n return {\r\n id: entry.id,\r\n message: await this.transformContactMethod(entry),\r\n entry: entry,\r\n isUser: false,\r\n };\r\n }\r\n }\r\n\r\n async transformContactMethod(entry: ServerEntry): Promise<any> {\r\n const dataClient: DataClient = await this.container.getAsync('dataClient');\r\n\r\n const contactMethods = [];\r\n const contactMethod = await dataClient.fetch(DataType.ContactMethod, {\r\n contactMethodId: entry.content.id,\r\n });\r\n\r\n if (contactMethod) {\r\n contactMethod.expanded = true;\r\n contactMethods.push(contactMethod);\r\n }\r\n\r\n return {\r\n type: 'ace-knowledge-contact-method',\r\n contactMethods: contactMethods,\r\n };\r\n }\r\n\r\n // transform an array of entries\r\n async transformArray(entryArray: ServerEntry[]): Promise<Message[]> {\r\n let returnArray: Message[] = [];\r\n for (const o of entryArray) {\r\n let x = await this.transform(o);\r\n if (!!x) returnArray.push(x);\r\n }\r\n return returnArray;\r\n }\r\n\r\n // gets the text that should be printed as a user message on action\r\n getUserMessage(action: string) {\r\n let entry = StoreHelper.getEntry(action);\r\n\r\n return this.getTitleFromEntry(entry, action);\r\n }\r\n\r\n private listTransform(entry: ServerEntry): any {\r\n if (entry.type === 'Contact') {\r\n // TODO: is this needed\r\n return undefined;\r\n }\r\n\r\n if (!entry.content) return undefined;\r\n\r\n let object = this.getListActions(\r\n entry.content.items,\r\n this.getContentText(entry),\r\n entry.actions,\r\n entry.localState\r\n );\r\n\r\n return object;\r\n }\r\n\r\n private getContentText(entry: ServerEntry): object | undefined {\r\n if (entry.content.html) return { body: entry.content.html };\r\n if (entry.content.header) return { title: entry.content.header };\r\n }\r\n\r\n private textTransform(entry: ServerEntry): any {\r\n if (!!entry.content.items) return this.listTransform(entry);\r\n return [\r\n ConversationMessageListItemType.HTML,\r\n { body: entry.content.html.replace('\\n', '') },\r\n ];\r\n }\r\n\r\n private getListActions(items: any[], text: any, actions: any, state: any): object {\r\n let list: ConverstationMessageItem<any>[] = [];\r\n let mainListContent: { [key: string]: string } = {};\r\n let mainList: any = [this.getListType(state), { actions: mainListContent }];\r\n if (text && text.title) {\r\n list.push([ConversationMessageListItemType.Header, text.title]);\r\n }\r\n if (text && text.body) {\r\n list.push([ConversationMessageListItemType.HTML, { body: text.body }]);\r\n }\r\n list.push(mainList);\r\n items.forEach((o) => {\r\n switch (o.actionKey) {\r\n case this.helpActionKey: {\r\n list.push([ConversationMessageListItemType.Separator, undefined]);\r\n list.push([\r\n ConversationMessageListItemType.NoGoodAlternative,\r\n { body: o.title },\r\n ]);\r\n break;\r\n }\r\n case this.nextActionKey: {\r\n if (!!actions['next'] && actions['next'].take === items.length + 1)\r\n mainListContent[o.actionKey] = o.title;\r\n break;\r\n }\r\n default: {\r\n mainListContent[o.actionKey] = o.title;\r\n }\r\n }\r\n });\r\n return list;\r\n }\r\n\r\n private getListType(state: any) {\r\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching')\r\n return ConversationMessageListItemType.LinkList;\r\n else if (\r\n state?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\r\n )\r\n return ConversationMessageListItemType.FeedbackList;\r\n else return ConversationMessageListItemType.ButtonList;\r\n }\r\n\r\n private getTitleFromEntry(entry: ServerEntry | undefined, action: string): string | undefined {\r\n if (!!entry) {\r\n const entryType = (<any>ServerEntryTypeEnum)[entry.type];\r\n switch (entryType) {\r\n case ServerEntryTypeEnum.List:\r\n return this.getTitleFromList(entry, action);\r\n case ServerEntryTypeEnum.Text:\r\n return this.textTransform(entry);\r\n }\r\n }\r\n }\r\n\r\n private getTitleFromList(entry: ServerEntry, action: string): string {\r\n return (<Array<any>>entry.content.items).find((o) => o.actionKey == action).title;\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\nimport { v4 as newGuid } from 'uuid';\r\nimport { ServerEntryTypeEnum } from '../contract/enum/server-entry-type.enum';\r\nimport { Message } from '../contract/model/conversation-api-model/message.model';\r\nimport { ServerEntry } from '../contract/model/http/server-entry.model';\r\nimport { ChatHelper } from '../helper/chat.helper';\r\nimport { StoreHelper } from '../helper/store.helper';\r\nimport EntryInterface from '../interface/entry.interface';\r\n\r\nexport default class ChatClient {\r\n entryInterface: EntryInterface;\r\n constructor(container: Container) {\r\n this.entryInterface = new EntryInterface(container);\r\n }\r\n\r\n // Initialize from setting the user and agent for the Helper\r\n static initialize(user: any, agent: any) {\r\n ChatHelper.setUser(user);\r\n ChatHelper.setAgent(agent);\r\n }\r\n\r\n // function for posting the messages\r\n processMessageArrayAndStoreIt(messages: Message[]) {\r\n messages\r\n .filter((o) => o && o != null)\r\n .forEach((o) => {\r\n if (o.isUser) this.postUserMessage(o);\r\n else this.postAgentMessage(o);\r\n });\r\n StoreHelper.insertOrUpdateMessageArrayStore(messages);\r\n }\r\n\r\n // function for updating current messages\r\n updateMessageArrayAndStoreIt(messages: Message[]) {\r\n let conversationEntry = undefined;\r\n messages.forEach((o) => {\r\n let message = StoreHelper.getMessage(o.id);\r\n message?.conversationEntry.update(o.message);\r\n conversationEntry = message?.conversationEntry;\r\n });\r\n\r\n StoreHelper.insertOrUpdateMessageArrayStore(messages, conversationEntry);\r\n }\r\n\r\n // function for posting a message for the user actions, such as button clicks\r\n printUserMessageAndStoreIt(action: string) {\r\n if (action == 'next' || action == 'help') return;\r\n\r\n let entry = StoreHelper.getEntry(action);\r\n\r\n let message = {\r\n id: newGuid(),\r\n message: !entry ? action : this.getTitleFromEntry(entry, action),\r\n isUser: true,\r\n };\r\n\r\n this.postUserMessage(message);\r\n StoreHelper.insertOrUpdateMessageArrayStore([message]);\r\n }\r\n\r\n private postUserMessage(message: Message) {\r\n ChatHelper.getUser().print(message.message);\r\n }\r\n\r\n private postAgentMessage(message: Message) {\r\n message.conversationEntry = ChatHelper.getAgent().print(message.message);\r\n }\r\n\r\n private getTitleFromEntry(entry: ServerEntry, action: string): string {\r\n const entryType = (<any>ServerEntryTypeEnum)[entry.type];\r\n switch (entryType) {\r\n case ServerEntryTypeEnum.List:\r\n return this.getTitleFromList(entry, action);\r\n case ServerEntryTypeEnum.Text:\r\n return this.getTitleFromText(entry, action);\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n private getTitleFromText(entry: ServerEntry, action: string): any {\r\n if (!!entry.content.items) return this.getTitleFromList(entry, action);\r\n else return entry.content.html;\r\n }\r\n\r\n private getTitleFromList(entry: ServerEntry, action: string): string {\r\n return (<Array<any>>entry.content.items).find((o) => o.actionKey == action).title;\r\n }\r\n}\r\n","import { ContactMethodPlatform } from '@telia-ace/knowledge-widget-adapters';\r\nimport { DataClient, DataType } from '@telia-ace/knowledge-widget-types-grid';\r\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { StoreHelper } from '../helper/store.helper';\r\nimport ChatClient from './chat.client';\r\n\r\nexport class ContactMethodClient {\r\n private static dataClient: DataClient;\r\n private static contactMethodPlatform: ContactMethodPlatform;\r\n private static contactMessageEntryArray: any[] = [];\r\n private static agent: any;\r\n private chatClient: ChatClient;\r\n private static container: any;\r\n\r\n constructor(container: Container) {\r\n this.chatClient = new ChatClient(container);\r\n }\r\n\r\n static initialize(\r\n container: any,\r\n dataClient: DataClient,\r\n contactMethodPlatform: ContactMethodPlatform,\r\n agent: any\r\n ) {\r\n this.dataClient = dataClient;\r\n this.contactMethodPlatform = contactMethodPlatform;\r\n this.agent = agent;\r\n this.container = container;\r\n }\r\n\r\n // function for handling forms as contact methods\r\n handleNewForm = async (errors: any, entry: any) => {\r\n this.updateForm(entry.contactMethods, {\r\n submit: 'Submit',\r\n errors: errors,\r\n });\r\n entry.entry.update({\r\n contactMethods: entry.contactMethods,\r\n type: 'ace-knowledge-contact-method',\r\n noPadding: true,\r\n });\r\n };\r\n\r\n // function for receiving the contact method based on the input\r\n handleContactMethod = async (input: string = '') => {\r\n if (input == 'contact') {\r\n await this.handleContactCategoryList(input);\r\n } else {\r\n let contactMethods = await this.loadContactMethods(\r\n input.split('/')[1], // type\r\n input.split('/')[0] // id\r\n );\r\n\r\n if (!!contactMethods.body?.form) {\r\n this.handleForm(input, contactMethods);\r\n } else if (!contactMethods.expanded && contactMethods.inline) {\r\n this.handleSingleContactMethod(contactMethods);\r\n } else if (!!contactMethods.contactMethods) {\r\n this.handleContactMethodList(input, contactMethods);\r\n }\r\n }\r\n };\r\n\r\n // validation of the form provided\r\n validate(form: any) {\r\n let entry = ContactMethodClient.contactMessageEntryArray.find(\r\n (o) => o.id == form.schema.id\r\n );\r\n ContactMethodClient.contactMethodPlatform.validate(entry.contactMethods).then((result) => {\r\n this.handleNewForm(result.errors, entry);\r\n if (result.valid) {\r\n this.submit(entry);\r\n this.removeForm(entry);\r\n }\r\n });\r\n }\r\n\r\n private handleContactCategoryList = async (input: string) => {\r\n let newGuid = uuidv4();\r\n let type = DataType.ContactMethodCategories;\r\n let contactMethods = await this.loadContactMethods(type);\r\n this.chatClient.printUserMessageAndStoreIt(input);\r\n this.printMessage(newGuid, contactMethods);\r\n };\r\n\r\n private handleForm(input: string, contactMethods: any) {\r\n let title = input.split('/')[2];\r\n contactMethods.expanded = true;\r\n this.updateForm(contactMethods, {\r\n submit: 'Submit',\r\n errors: undefined,\r\n });\r\n this.printMessage(contactMethods.id, contactMethods, title);\r\n }\r\n\r\n private handleContactMethodList(input: string, contactMethods: any) {\r\n let title = input.split('/')[2];\r\n let newGuid = uuidv4();\r\n this.printMessage(newGuid, contactMethods, title);\r\n }\r\n\r\n private handleSingleContactMethod(contactMethods: any) {\r\n let entry = ContactMethodClient.contactMessageEntryArray.find((o) =>\r\n o.contactMethods.contactMethods.find((t: any) => t.id == contactMethods.id)\r\n );\r\n let curCM = entry.contactMethods.contactMethods.find((t: any) => t.id == contactMethods.id);\r\n curCM.expanded = true;\r\n let message = {\r\n contactMethods: entry.contactMethods,\r\n type: 'ace-knowledge-contact-method',\r\n noPadding: true,\r\n };\r\n StoreHelper.insertOrUpdateMessageArrayStore([\r\n {\r\n id: entry.id,\r\n message: message,\r\n isUser: false,\r\n },\r\n ]);\r\n entry.entry.update(message);\r\n }\r\n\r\n private submit(entry: any) {\r\n ContactMethodClient.contactMethodPlatform.submit(entry.contactMethods).then((result) => {\r\n if (!!result) ContactMethodClient.agent.print(result);\r\n });\r\n }\r\n\r\n private removeForm(entry: any) {\r\n entry.entry.remove();\r\n ContactMethodClient.contactMessageEntryArray.splice(\r\n ContactMethodClient.contactMessageEntryArray.indexOf(entry),\r\n 1\r\n );\r\n }\r\n\r\n private printMessage(\r\n newGuid: string,\r\n contactMethods: any,\r\n title: string | undefined = undefined\r\n ) {\r\n if (ContactMethodClient.contactMessageEntryArray.find((o) => o.id == contactMethods.id)) {\r\n let entry = ContactMethodClient.contactMessageEntryArray.find(\r\n (o) => o.id == contactMethods.id\r\n );\r\n let message = {\r\n contactMethods: contactMethods,\r\n type: 'ace-knowledge-contact-method',\r\n noPadding: true,\r\n };\r\n entry.entry.update(message);\r\n StoreHelper.insertOrUpdateMessageArrayStore([\r\n {\r\n id: entry.guid,\r\n message: message,\r\n isUser: false,\r\n },\r\n ]);\r\n } else {\r\n if (title) this.chatClient.printUserMessageAndStoreIt(title);\r\n let message = {\r\n contactMethods: contactMethods,\r\n type: 'ace-knowledge-contact-method',\r\n noPadding: true,\r\n };\r\n let entry = ContactMethodClient.agent.print(message);\r\n StoreHelper.insertOrUpdateMessageArrayStore([\r\n {\r\n id: newGuid,\r\n message: message,\r\n isUser: false,\r\n },\r\n ]);\r\n ContactMethodClient.contactMessageEntryArray.push({\r\n id: newGuid,\r\n contactMethods: contactMethods,\r\n entry: entry,\r\n });\r\n }\r\n }\r\n\r\n private loadContactMethods(dataType: string, id: string | undefined = undefined): Promise<any> {\r\n switch (dataType) {\r\n case DataType.ContactMethodCategories: {\r\n return ContactMethodClient.container\r\n .getAsync('matchingClient')\r\n .then((matchingClient: any) => {\r\n return matchingClient.customRequest('/contactmethods', 'GET', {});\r\n })\r\n .then((contactMethods: any) => {\r\n return contactMethods;\r\n });\r\n // return ContactMethodClient.dataClient\r\n // .fetch(DataType.ContactMethods, { contactMethodCategoryId: id })\r\n // .then((contactMethods) => contactMethods);\r\n }\r\n case DataType.ContactMethods: {\r\n if (!!id) {\r\n return ContactMethodClient.dataClient\r\n .fetch(DataType.ContactMethod, { contactMethodId: id })\r\n .then((contactMethods) => contactMethods);\r\n } else {\r\n return ContactMethodClient.dataClient\r\n .fetch(DataType.ContactMethods, {})\r\n .then((contactMethods) => contactMethods);\r\n }\r\n }\r\n case DataType.ContactMethodCategories: {\r\n return ContactMethodClient.dataClient\r\n .fetch(DataType.ContactMethods, { contactMethodCategoryId: id })\r\n .then((contactMethods) => contactMethods);\r\n }\r\n default: {\r\n return Promise.resolve(undefined);\r\n }\r\n }\r\n }\r\n\r\n private updateForm = (contactMethod: any, properties: any) => {\r\n if (contactMethod?.body?.form) {\r\n const { body } = contactMethod;\r\n const builder = new FormBuilder(body.form);\r\n\r\n if (!body.form.layout || !body.form.layout.submit) {\r\n builder.createComponent(submitButton(properties.submit, 'submit'));\r\n }\r\n\r\n if (properties.errors) {\r\n builder.setValidationErrors(properties.errors);\r\n }\r\n\r\n return {\r\n ...body,\r\n form: builder.get(),\r\n };\r\n }\r\n return contactMethod?.body || {};\r\n };\r\n}\r\n","export class HttpHelper {\r\n static fetchOptions = {\r\n method: 'POST',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n };\r\n\r\n static combineUrl(basePath: string, path: string) {\r\n return basePath + path;\r\n }\r\n\r\n static managedSubdomainSuffixes = ['stage', 'alpha', 'beta', 'gamma'];\r\n\r\n static parseSubdomain = (input: string) => {\r\n const index = input.lastIndexOf('-');\r\n const lastPart = input.substr(index + 1);\r\n if (HttpHelper.managedSubdomainSuffixes.indexOf(lastPart) > -1) {\r\n return input.substr(0, index);\r\n }\r\n return input;\r\n };\r\n\r\n static getCredentials(): string | undefined {\r\n return 'same-origin';\r\n }\r\n}\r\n","import { ServerEntry } from \"../../contract/model/http/server-entry.model\";\r\nimport { StoreHelper } from \"../../helper/store.helper\";\r\n\r\nexport default class PagingInterface {\r\n process(entries: ServerEntry[]): ServerEntry[] {\r\n const pagingEntry = entries.find((e) => e.tags.indexOf(\"paging\") > -1);\r\n\r\n if (pagingEntry) {\r\n const stream = StoreHelper.getEntryStore().filter(\r\n (e) => e.tags.indexOf(\"paging\") > -1 && e.id === pagingEntry.id\r\n );\r\n\r\n if (stream.length > 0) {\r\n // Get the paging entry with the highest take count\r\n const last = stream.reduce((acc, entry) => {\r\n if (\r\n entry.actions.next &&\r\n entry.actions.next.take >= acc.actions.next.take\r\n ) {\r\n return entry;\r\n }\r\n return acc;\r\n }, stream[0]); // tslint:disable-line:align\r\n\r\n // If there is a paging entry with higher take count than the entry to be written,\r\n // it should be updated to use the paging data from the highest take count entry\r\n if (last.actions.next.take > pagingEntry.actions.next.take) {\r\n entries.forEach((entry) => {\r\n if (entry.id === pagingEntry.id) {\r\n entry.actions.next = {\r\n ...entry.actions.next,\r\n take: last.actions.next.take,\r\n skip: last.actions.next.skip,\r\n };\r\n }\r\n });\r\n }\r\n }\r\n\r\n // if items is null or undefined it should\r\n // overwrite with an empty array\r\n entries.forEach((entry) => {\r\n if (\r\n entry.id === pagingEntry.id &&\r\n entry.content &&\r\n entry.content.timestamp\r\n ) {\r\n entry.content = {\r\n ...entry.content,\r\n items: (entry.content && entry.content.items) || [],\r\n };\r\n }\r\n });\r\n }\r\n\r\n return entries;\r\n }\r\n}\r\n","import { Action } from '../../contract/model/http/action.model';\r\nimport { ServerEntry } from '../../contract/model/http/server-entry.model';\r\n\r\nexport default class ProcessorInterface {\r\n process(entries: ServerEntry[]): ServerEntry[] {\r\n let processedEntries = entries;\r\n\r\n processedEntries = this.deletePaging(processedEntries);\r\n processedEntries = this.delete(processedEntries);\r\n processedEntries = this.merge(processedEntries);\r\n processedEntries = this.moveLoader(processedEntries);\r\n\r\n return processedEntries;\r\n }\r\n\r\n processUpdate(entry: ServerEntry | undefined, updateEntryArray: ServerEntry[]): ServerEntry[] {\r\n updateEntryArray\r\n .filter((t) => t.type == 'List')\r\n .forEach((o) => {\r\n o.content?.items.forEach((t: any) => {\r\n if (!entry?.content.items.find((p: any) => p.actionKey == t.actionKey))\r\n entry?.content.items.push(t);\r\n });\r\n Object.keys(o.actions).forEach((t) => {\r\n this.handleActionUpdateOrInsert(entry?.actions, t, o.actions);\r\n });\r\n });\r\n\r\n //moves the show more and if it helped to the end if it is needed\r\n var itemArray: any[] = entry?.content.items;\r\n\r\n if (itemArray.find((o) => o.actionKey == 'next')) {\r\n itemArray.push(\r\n itemArray.splice(\r\n itemArray.indexOf(itemArray.find((o) => o.actionKey == 'next')),\r\n 1\r\n )[0]\r\n );\r\n }\r\n\r\n if (itemArray.find((o) => o.actionKey == 'help')) {\r\n itemArray.push(\r\n itemArray.splice(\r\n itemArray.indexOf(itemArray.find((o) => o.actionKey == 'help')),\r\n 1\r\n )[0]\r\n );\r\n }\r\n\r\n return entry ? [entry] : [];\r\n }\r\n\r\n private handleActionUpdateOrInsert(\r\n currentArray: Action | undefined,\r\n actionKey: string,\r\n action: Action\r\n ) {\r\n if (!!currentArray) currentArray[actionKey] = action[actionKey];\r\n }\r\n\r\n private deletePaging(entries: ServerEntry[]): ServerEntry[] {\r\n return entries.filter((entry) => {\r\n const isEmptyPaging =\r\n entry.type === 'List' &&\r\n entry.tags &&\r\n entry.tags.indexOf('paging') > -1 &&\r\n typeof entry.content === 'undefined';\r\n return !isEmptyPaging;\r\n });\r\n }\r\n\r\n private delete(entries: ServerEntry[]): ServerEntry[] {\r\n return entries.filter((entry) => entry.content !== null);\r\n }\r\n\r\n private merge(entries: ServerEntry[]): ServerEntry[] {\r\n const output: ServerEntry[] = [];\r\n\r\n const merge = (source: any, target: any = {}): any => {\r\n const content: any = {};\r\n if (source == null) {\r\n return null;\r\n }\r\n\r\n if (target) {\r\n Object.keys(target).forEach((key) => {\r\n content[key] = target[key];\r\n });\r\n }\r\n\r\n Object.keys(source).forEach((key) => {\r\n if (key == 'items') {\r\n if (!content[key]) content[key] = [];\r\n content[key] = content[key].concat(source[key]);\r\n } else if (key == 'html') content[key] = content[key] + source[key];\r\n else content[key] = source[key];\r\n });\r\n\r\n return content;\r\n };\r\n\r\n const mergeLocalState = (source: any, target: any): any => {\r\n if (source == null) return null;\r\n\r\n if (Object.keys(source.actions).length === 0) return target.localState;\r\n\r\n if (Object.keys(target.actions).length === 0) return source.localState;\r\n\r\n return target.localState;\r\n };\r\n\r\n entries.forEach((entry) => {\r\n if (entry.relation) {\r\n let existingEntry = entries.find((o) => o.id == entry.relation);\r\n\r\n if (existingEntry) {\r\n const existingIndex = output.indexOf(existingEntry);\r\n existingEntry.localState = mergeLocalState(entry, existingEntry);\r\n existingEntry.content = merge(entry.content, existingEntry.content);\r\n existingEntry.actions = merge(entry.actions, existingEntry.actions);\r\n output[existingIndex] = existingEntry;\r\n }\r\n } else {\r\n output.push(entry);\r\n }\r\n });\r\n\r\n return output;\r\n }\r\n\r\n private moveLoader(entries: ServerEntry[]): ServerEntry[] {\r\n // Moves the loader component to last position in stream\r\n const loaderEntry = entries.find((e) => e.id === 'loader');\r\n\r\n if (!loaderEntry) {\r\n return entries;\r\n }\r\n\r\n const loaderIndex = entries.indexOf(loaderEntry);\r\n if (loaderIndex > -1) {\r\n entries.splice(entries.length - 1, 0, entries.splice(loaderIndex, 1)[0]);\r\n }\r\n return entries;\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\nimport { ServerEntry } from '../contract/model/http/server-entry.model';\r\nimport { ChatHelper } from '../helper/chat.helper';\r\nimport { MiddlewareHelper } from '../helper/middleware.helper';\r\nimport { StoreHelper } from '../helper/store.helper';\r\nimport EntryInterface from '../interface/entry.interface';\r\nimport PagingInterface from '../interface/middleware/paging.interface';\r\nimport ProcessorInterface from '../interface/middleware/processor.interface';\r\nimport ChatClient from './chat.client';\r\n\r\nexport default class MiddlewareClient {\r\n private paging: PagingInterface;\r\n private processor: ProcessorInterface;\r\n private entryInterface: EntryInterface;\r\n private chatClient: ChatClient;\r\n\r\n constructor(container: Container) {\r\n this.paging = new PagingInterface();\r\n this.processor = new ProcessorInterface();\r\n this.entryInterface = new EntryInterface(container);\r\n this.chatClient = new ChatClient(container);\r\n }\r\n\r\n static initialize(container: any, widget: any) {\r\n MiddlewareHelper.setContainer(container);\r\n MiddlewareHelper.setWidget(widget);\r\n }\r\n\r\n // called on all standard scenarios like actions and user messages\r\n async handleEntries(entries: ServerEntry[], action?: string) {\r\n const widgetEntry = (entries || []).find((e) => e.type === 'Widget');\r\n\r\n if (widgetEntry) {\r\n const agent = ChatHelper.getAgent();\r\n\r\n if (agent) {\r\n agent.update({\r\n name: widgetEntry.content.agent.name,\r\n avatar: widgetEntry.content.agent.avatar,\r\n });\r\n }\r\n }\r\n\r\n let o = this.executeMiddlewares(entries, false, action);\r\n let messageArray = await this.entryInterface.transformArray(o);\r\n this.chatClient.processMessageArrayAndStoreIt(messageArray);\r\n }\r\n\r\n // called on situations such as paging changes\r\n // when no new entries will be printed\r\n async handleUpdate(entries: ServerEntry[], action?: string) {\r\n let o = this.executeMiddlewares(entries, true, action);\r\n let messageArray = await this.entryInterface.transformArray(o);\r\n this.chatClient.updateMessageArrayAndStoreIt(messageArray);\r\n }\r\n\r\n // checks whether the action was of an update type\r\n checkForUpdate(input: string) {\r\n return input === 'next';\r\n }\r\n\r\n private executeMiddlewares(\r\n entries: ServerEntry[],\r\n isUpdate: boolean,\r\n action?: string\r\n ): ServerEntry[] {\r\n if (isUpdate && action)\r\n entries = this.processor.processUpdate(StoreHelper.getEntry(action), entries);\r\n else {\r\n entries = this.processor.process(entries);\r\n }\r\n entries = this.paging.process(entries);\r\n\r\n return entries;\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\nimport { ClientEnvelope } from '../contract/model/http/client-envelope.model';\r\nimport { HttpClientOptions } from '../contract/model/http/http-client-options.model';\r\nimport { ServerEnvelope } from '../contract/model/http/server-envelope.model';\r\nimport { HttpHelper } from '../helper/http.helper';\r\nimport { MiddlewareHelper } from '../helper/middleware.helper';\r\nimport { StoreHelper } from '../helper/store.helper';\r\nimport ChatClient from './chat.client';\r\nimport MiddlewareClient from './middleware.client';\r\n\r\nexport class HttpClient {\r\n private endpointUrl: string;\r\n private clientId: string | undefined;\r\n private projectionPath: string;\r\n private apiEndpoint: string;\r\n private options: HttpClientOptions;\r\n private middlewareClient: MiddlewareClient;\r\n private chatClient: ChatClient;\r\n\r\n constructor(endpoint: string, clientId: string, container: Container) {\r\n this.options = {\r\n credentials: HttpHelper.getCredentials(),\r\n clientId: clientId,\r\n };\r\n this.apiEndpoint = endpoint;\r\n this.projectionPath = window.location.href;\r\n this.endpointUrl = HttpHelper.combineUrl(this.projectionPath, 'conversations');\r\n this.clientId = this.options.clientId;\r\n this.middlewareClient = new MiddlewareClient(container);\r\n this.chatClient = new ChatClient(container);\r\n }\r\n\r\n firstHit() {\r\n // On first hit if there are entries stored in the storage, use them\r\n // Otherwise start a new session\r\n MiddlewareHelper.getEntrySessionStorage().then((o) => {\r\n if (o && o.length > 0) this.chatClient.processMessageArrayAndStoreIt(o);\r\n else {\r\n let envelope = this.constructFirstHitEnvelope();\r\n this.postAndHandleTheData(envelope);\r\n }\r\n });\r\n }\r\n\r\n // for updates, such as paging changes\r\n handleUpdate(action: string) {\r\n let envelope = this.constructInputEnvelope(action);\r\n this.postAndHandleTheUpdateData(envelope, action);\r\n // return this.postAndReturnTheData(envelope, action).then((o) => {\r\n // return o.entries;\r\n // });\r\n }\r\n\r\n // for action clicks\r\n handleInput(action: string) {\r\n let envelope = this.constructInputEnvelope(action);\r\n this.postAndHandleTheData(envelope, action);\r\n }\r\n\r\n // for text entries by user\r\n handlePhrase(phrase: string) {\r\n let envelope = this.constructPhraseEnvelope(phrase);\r\n this.postAndHandleTheData(envelope);\r\n }\r\n\r\n private postAndHandleTheData(envelope: ClientEnvelope, action?: string) {\r\n return fetch(this.apiEndpoint, this.getHttpOptions(envelope))\r\n .then((response) => {\r\n if (response.ok) return response.json();\r\n throw response;\r\n })\r\n .then((data) => {\r\n this.handleResponseData(data, action);\r\n })\r\n .catch((err) => console.log(err));\r\n }\r\n\r\n private postAndHandleTheUpdateData(envelope: ClientEnvelope, action?: string): Promise<any> {\r\n return fetch(this.apiEndpoint, this.getHttpOptions(envelope))\r\n .then((response) => {\r\n if (response.ok) return response.json();\r\n throw response;\r\n })\r\n .then((data) => {\r\n this.handleUpdateResponseData(data, action);\r\n })\r\n .catch((err) => console.log(err));\r\n }\r\n\r\n private getHttpOptions(envelope: ClientEnvelope) {\r\n return Object.assign({}, HttpHelper.fetchOptions, {\r\n body: JSON.stringify(envelope),\r\n credentials: <RequestCredentials>this.options.credentials,\r\n });\r\n }\r\n\r\n private constructInputEnvelope(action: string): ClientEnvelope {\r\n return {\r\n action: StoreHelper.getAction(action),\r\n localState: StoreHelper.getLocalState(action),\r\n globalState: StoreHelper.getGlobalState(),\r\n clientId: this.clientId,\r\n };\r\n }\r\n\r\n private constructPhraseEnvelope(phrase: string): ClientEnvelope {\r\n return {\r\n command: { phrase: phrase },\r\n globalState: StoreHelper.getGlobalState(),\r\n clientId: this.clientId,\r\n };\r\n }\r\n\r\n private constructFirstHitEnvelope(): ClientEnvelope {\r\n return {\r\n command: { site: this.endpointUrl },\r\n clientId: this.clientId,\r\n globalState: {},\r\n };\r\n }\r\n\r\n private handleResponseData(envelope: ServerEnvelope, action?: string) {\r\n StoreHelper.setGlobalState(envelope.globalState);\r\n this.middlewareClient.handleEntries(envelope.entries, action);\r\n }\r\n\r\n private handleUpdateResponseData(envelope: ServerEnvelope, action?: string) {\r\n this.middlewareClient.handleUpdate(envelope.entries, action);\r\n }\r\n}\r\n","import { ContactMethodPlatform } from '@telia-ace/knowledge-widget-adapters';\r\nimport { DataClient } from '@telia-ace/knowledge-widget-types-grid';\r\nimport {\r\n ConversationPlatform,\r\n registerCustomMessageComponent\r\n} from '@telia-ace/widget-conversation';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { v4 } from 'uuid';\r\nimport ChatClient from './client/chat.client';\r\nimport { ContactMethodClient } from './client/contact-method.client';\r\nimport { HttpClient } from './client/http.client';\r\nimport MiddlewareClient from './client/middleware.client';\r\n\r\nconst getKnowledgeBotEndpoint = (\r\n container: Container,\r\n component: any /*: ComponentNodeController */\r\n // ComponentNodeController type differs from component passed into registerProvider\r\n) => {\r\n const { knowledgeBotEndpoint } = component.properties();\r\n\r\n if (knowledgeBotEndpoint) {\r\n return `${knowledgeBotEndpoint}/conversations`;\r\n }\r\n\r\n const { data } = container.get('$settings');\r\n\r\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\r\n\r\n return `${data.projection}/conversations`;\r\n};\r\n\r\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\r\n const dataClient = await DataClient.getInstance(container);\r\n const platform = await ConversationPlatform.getInstance(container);\r\n const contactMethodPlatform = await ContactMethodPlatform.getInstance(container);\r\n registerCustomMessageComponent(\r\n container,\r\n 'ace-knowledge-contact-method',\r\n import('./contract/custom-component/contact-method')\r\n );\r\n\r\n platform.registerProvider('chat.bot', (conversation, component) => {\r\n const endpoint = getKnowledgeBotEndpoint(container, component);\r\n\r\n const clientId = v4();\r\n\r\n const agent = conversation.createAgent({\r\n name: '',\r\n avatar: undefined,\r\n });\r\n\r\n // passes the user and the agent to the Chat Helper\r\n ChatClient.initialize(conversation.user, agent);\r\n\r\n // passes the conversation provider to the Contact Method Client\r\n ContactMethodClient.initialize(container, dataClient, contactMethodPlatform, agent);\r\n\r\n // passes the container and the widget to the Middleware Store\r\n MiddlewareClient.initialize(container, container.get('$widget'));\r\n\r\n // executes to decide on what to do on first load\r\n let httpClient = new HttpClient(endpoint, clientId, container);\r\n httpClient.firstHit();\r\n\r\n component.actions.create('evaluate', (input) => {\r\n let cmClient = new ContactMethodClient(container);\r\n cmClient.handleNewForm(input.form, input.form.id);\r\n });\r\n component.actions.create('validate', (input) => {\r\n let cmClient = new ContactMethodClient(container);\r\n cmClient.validate(input.form);\r\n });\r\n component.actions.create('submit', (input) => {\r\n let cmClient = new ContactMethodClient(container);\r\n cmClient.validate(input.form);\r\n });\r\n\r\n component.actions.watch('conversation.user-typing', (input, next) => {\r\n return next(input);\r\n });\r\n\r\n component.actions.watch('conversation.user-submit', (input, next) => {\r\n let httpClient = new HttpClient(endpoint, clientId, container);\r\n httpClient.handlePhrase(input.text);\r\n return next(input);\r\n });\r\n\r\n component.actions.watch('conversation.form', (input, next) => {\r\n return next(input);\r\n });\r\n\r\n component.actions.watch('conversation.action', (input, next) => {\r\n let chatClient = new ChatClient(container);\r\n let cmClient = new ContactMethodClient(container);\r\n // if (input === 'contact' || input.split('/').length > 1) {\r\n // cmClient.handleContactMethod(input);\r\n // return next(input);\r\n // }\r\n if (input.split('/').length > 1) {\r\n cmClient.handleContactMethod(input);\r\n return next(input);\r\n }\r\n\r\n let middlewareClient = new MiddlewareClient(container);\r\n let httpClient = new HttpClient(endpoint, clientId, container);\r\n\r\n // this is an update check, as it requires\r\n // a lot different logic and no user message\r\n if (middlewareClient.checkForUpdate(input)) {\r\n httpClient.handleUpdate(input);\r\n\r\n return next(input);\r\n }\r\n\r\n chatClient.printUserMessageAndStoreIt(input);\r\n\r\n httpClient.handleInput(input);\r\n\r\n return next(input);\r\n });\r\n });\r\n};\r\n\r\nexport default KnowledgeBotProviderPlugin;\r\n"],"names":["newGuid","uuidv4"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Container } from '@webprovisions/platform';
|
|
2
|
+
import { Message } from '../contract/model/conversation-api-model/message.model';
|
|
3
|
+
import { ServerEntry } from '../contract/model/http/server-entry.model';
|
|
4
|
+
export default class EntryInterface {
|
|
5
|
+
private container;
|
|
6
|
+
private helpActionKey;
|
|
7
|
+
private nextActionKey;
|
|
8
|
+
constructor(container: Container);
|
|
9
|
+
transform(entry: ServerEntry): Promise<Message | undefined>;
|
|
10
|
+
transformContactMethod(entry: ServerEntry): Promise<any>;
|
|
11
|
+
transformArray(entryArray: ServerEntry[]): Promise<Message[]>;
|
|
12
|
+
getUserMessage(action: string): string | undefined;
|
|
13
|
+
private listTransform;
|
|
14
|
+
private getContentText;
|
|
15
|
+
private textTransform;
|
|
16
|
+
private getListActions;
|
|
17
|
+
private getListType;
|
|
18
|
+
private getTitleFromEntry;
|
|
19
|
+
private getTitleFromList;
|
|
20
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ServerEntry } from '../../contract/model/http/server-entry.model';
|
|
2
|
+
export default class ProcessorInterface {
|
|
3
|
+
process(entries: ServerEntry[]): ServerEntry[];
|
|
4
|
+
processUpdate(entry: ServerEntry | undefined, updateEntryArray: ServerEntry[]): ServerEntry[];
|
|
5
|
+
private handleActionUpdateOrInsert;
|
|
6
|
+
private deletePaging;
|
|
7
|
+
private delete;
|
|
8
|
+
private merge;
|
|
9
|
+
private moveLoader;
|
|
10
|
+
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-bot-provider",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.59",
|
|
4
4
|
"description": "Bot Provider Plugin ACE Knowledge Widgets.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"telia"
|
|
9
9
|
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"type": "module",
|
|
12
12
|
"types": "dist/index.d.ts",
|
|
13
13
|
"files": [
|
|
14
14
|
"LICENSE.txt",
|
|
@@ -25,14 +25,15 @@
|
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@telia-ace/knowledge-widget-adapters": "^1.0.
|
|
29
|
-
"@telia-ace/knowledge-widget-types-grid": "^1.0.
|
|
30
|
-
"@telia-ace/knowledge-widget-ui": "^1.0.
|
|
31
|
-
"@telia-ace/widget-conversation": "^1.0.
|
|
32
|
-
"@telia-ace/widget-forms": "^1.0.
|
|
33
|
-
"@telia-ace/widget-services": "^1.0.
|
|
28
|
+
"@telia-ace/knowledge-widget-adapters": "^1.0.26",
|
|
29
|
+
"@telia-ace/knowledge-widget-types-grid": "^1.0.26",
|
|
30
|
+
"@telia-ace/knowledge-widget-ui": "^1.0.23",
|
|
31
|
+
"@telia-ace/widget-conversation": "^1.0.26",
|
|
32
|
+
"@telia-ace/widget-forms": "^1.0.20",
|
|
33
|
+
"@telia-ace/widget-services": "^1.0.13",
|
|
34
34
|
"@telia-ace/widget-utilities": "^1.0.2",
|
|
35
|
-
"@webprovisions/bootstrapping": "^1.0.12"
|
|
35
|
+
"@webprovisions/bootstrapping": "^1.0.12",
|
|
36
|
+
"uuid": "^8.3.2"
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
38
39
|
"react": "^16.8.0",
|
|
@@ -41,5 +42,5 @@
|
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/uuid": "^8.3.4"
|
|
43
44
|
},
|
|
44
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "236c65b59b887cbf825c8ee81ce935607e46b9e2"
|
|
45
46
|
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
import { ContactList, ContactMethod as ContactMethod$1 } from "@telia-ace/knowledge-widget-adapters";
|
|
21
|
-
import { useDispatch, useContainer } from "@telia-ace/knowledge-widget-ui";
|
|
22
|
-
import React, { useState, useMemo } from "react";
|
|
23
|
-
import styled from "styled-components";
|
|
24
|
-
import ContactMethod from "./contact-method.js";
|
|
25
|
-
import "@telia-ace/knowledge-widget-types-grid";
|
|
26
|
-
import "@telia-ace/widget-forms";
|
|
27
|
-
import "./index2.js";
|
|
28
|
-
import "@telia-ace/widget-conversation";
|
|
29
|
-
import "@telia-ace/widget-services";
|
|
30
|
-
import "@telia-ace/widget-utilities";
|
|
31
|
-
const ContactMethodList = ({ actions, entryId, groupId }) => {
|
|
32
|
-
const dispatch = useDispatch();
|
|
33
|
-
const container = useContainer();
|
|
34
|
-
const [expanded, setExpanded] = useState([]);
|
|
35
|
-
const items = useMemo(() => {
|
|
36
|
-
return actions.map((action) => {
|
|
37
|
-
return __spreadProps(__spreadValues({}, action.data), {
|
|
38
|
-
onClick: (_event, data) => {
|
|
39
|
-
if (data.inline && !data.expanded) {
|
|
40
|
-
setExpanded([...expanded, data.id]);
|
|
41
|
-
} else {
|
|
42
|
-
const { events } = container.get("$widget");
|
|
43
|
-
events.dispatch("provider:open-contact-method", {
|
|
44
|
-
entryId,
|
|
45
|
-
contactMethod: data,
|
|
46
|
-
actionKey: action.actionKey
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}, [actions, container, entryId, expanded]);
|
|
53
|
-
if (!items.length) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
return /* @__PURE__ */ React.createElement(StyledContactList, {
|
|
57
|
-
contactMethods: items,
|
|
58
|
-
dispatch,
|
|
59
|
-
itemRenderer: (cm, props) => {
|
|
60
|
-
const isExpanded = expanded.includes(cm.id) || cm.expanded;
|
|
61
|
-
if (isExpanded && cm.inline) {
|
|
62
|
-
return /* @__PURE__ */ React.createElement(StyledContactMethod, {
|
|
63
|
-
contactMethodId: cm.id,
|
|
64
|
-
groupId,
|
|
65
|
-
guideId: cm.body.guideId
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return /* @__PURE__ */ React.createElement(StyledGenericContactMethod, __spreadValues(__spreadValues({}, cm), props));
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
const StyledContactList = styled(ContactList)`
|
|
73
|
-
> ul > li {
|
|
74
|
-
a {
|
|
75
|
-
display: flex;
|
|
76
|
-
align-items: center;
|
|
77
|
-
outline-offset: -2px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
&:not(:last-child) {
|
|
81
|
-
${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
`;
|
|
85
|
-
const StyledContactMethod = styled(ContactMethod)`
|
|
86
|
-
i {
|
|
87
|
-
margin: 0 ${(p) => {
|
|
88
|
-
var _a;
|
|
89
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.medium;
|
|
90
|
-
}} 0 0;
|
|
91
|
-
display: flex;
|
|
92
|
-
justify-content: center;
|
|
93
|
-
align-items: center;
|
|
94
|
-
}
|
|
95
|
-
`;
|
|
96
|
-
const StyledGenericContactMethod = styled(ContactMethod$1)`
|
|
97
|
-
padding: ${(p) => {
|
|
98
|
-
var _a;
|
|
99
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.medium;
|
|
100
|
-
}};
|
|
101
|
-
i {
|
|
102
|
-
margin: 0 ${(p) => {
|
|
103
|
-
var _a;
|
|
104
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.medium;
|
|
105
|
-
}} 0 0;
|
|
106
|
-
display: flex;
|
|
107
|
-
justify-content: center;
|
|
108
|
-
align-items: center;
|
|
109
|
-
}
|
|
110
|
-
`;
|
|
111
|
-
export { ContactMethodList as default };
|
|
112
|
-
//# sourceMappingURL=contact-method-list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method-list.js","sources":["../src/ui/contact-method-list.tsx"],"sourcesContent":["import {\r\n ContactList,\r\n ContactMethod as GenericContactMethod,\r\n} from '@telia-ace/knowledge-widget-adapters';\r\nimport { useContainer, useDispatch } from '@telia-ace/knowledge-widget-ui';\r\nimport React, { useMemo, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { ActionItem } from '../types';\r\nimport ContactMethod from './contact-method';\r\n\r\ntype Props = {\r\n actions: ActionItem[];\r\n contactMethodIds?: string[];\r\n entryId: string;\r\n groupId: string;\r\n};\r\nconst ContactMethodList: React.FC<Props> = ({ actions, entryId, groupId }) => {\r\n const dispatch = useDispatch();\r\n const container = useContainer();\r\n const [expanded, setExpanded] = useState<string[]>([]);\r\n\r\n const items = useMemo<any[]>(() => {\r\n return actions.map((action) => {\r\n return {\r\n ...action.data,\r\n onClick: (_event: any, data: any) => {\r\n if (data.inline && !data.expanded) {\r\n setExpanded([...expanded, data.id]);\r\n } else {\r\n const { events } = container.get('$widget');\r\n events.dispatch('provider:open-contact-method', {\r\n entryId,\r\n contactMethod: data,\r\n actionKey: action.actionKey,\r\n });\r\n }\r\n },\r\n };\r\n });\r\n }, [actions, container, entryId, expanded]);\r\n\r\n if (!items.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n <StyledContactList\r\n contactMethods={items}\r\n dispatch={dispatch}\r\n itemRenderer={(cm: any, props: any) => {\r\n const isExpanded = expanded.includes(cm.id) || cm.expanded;\r\n if (isExpanded && cm.inline) {\r\n return (\r\n <StyledContactMethod\r\n contactMethodId={cm.id}\r\n groupId={groupId}\r\n guideId={cm.body.guideId}\r\n />\r\n );\r\n }\r\n return <StyledGenericContactMethod {...cm} {...props} />;\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ContactMethodList;\r\n\r\nconst StyledContactList = styled(ContactList)`\r\n > ul > li {\r\n a {\r\n display: flex;\r\n align-items: center;\r\n outline-offset: -2px;\r\n }\r\n\r\n &:not(:last-child) {\r\n ${(p) => p.theme.border && `border-bottom: ${p.theme.border};`}\r\n }\r\n }\r\n`;\r\n\r\nconst StyledContactMethod = styled(ContactMethod)`\r\n i {\r\n margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n`;\r\nconst StyledGenericContactMethod = styled(GenericContactMethod)`\r\n padding: ${(p) => p.theme.sizes?.medium};\r\n i {\r\n margin: 0 ${(p) => p.theme.sizes?.medium} 0 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n`;\r\n"],"names":["GenericContactMethod"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAM,oBAAqC,CAAC,EAAE,SAAS,SAAS,cAAc;AAC1E,QAAM,WAAW;AACjB,QAAM,YAAY;AAClB,QAAM,CAAC,UAAU,eAAe,SAAmB,CAAE,CAAA;AAE/C,QAAA,QAAQ,QAAe,MAAM;AACxB,WAAA,QAAQ,IAAI,CAAC,WAAW;AACpB,aAAA,iCACA,OAAO,OADP;AAAA,QAEH,SAAS,CAAC,QAAa,SAAc;AACjC,cAAI,KAAK,UAAU,CAAC,KAAK,UAAU;AAC/B,wBAAY,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;AAAA,UAAA,OAC/B;AACH,kBAAM,EAAE,WAAW,UAAU,IAAI,SAAS;AAC1C,mBAAO,SAAS,gCAAgC;AAAA,cAC5C;AAAA,cACA,eAAe;AAAA,cACf,WAAW,OAAO;AAAA,YAAA,CACrB;AAAA,UACL;AAAA,QACJ;AAAA,MAAA;AAAA,IACJ,CACH;AAAA,KACF,CAAC,SAAS,WAAW,SAAS,QAAQ,CAAC;AAEtC,MAAA,CAAC,MAAM,QAAQ;AACR,WAAA;AAAA,EACX;AAEA,SACK,sBAAA,cAAA,mBAAA;AAAA,IACG,gBAAgB;AAAA,IAChB;AAAA,IACA,cAAc,CAAC,IAAS,UAAe;AACnC,YAAM,aAAa,SAAS,SAAS,GAAG,EAAE,KAAK,GAAG;AAC9C,UAAA,cAAc,GAAG,QAAQ;AACzB,eACK,sBAAA,cAAA,qBAAA;AAAA,UACG,iBAAiB,GAAG;AAAA,UACpB;AAAA,UACA,SAAS,GAAG,KAAK;AAAA,QAAA,CACrB;AAAA,MAER;AACA,aAAQ,sBAAA,cAAA,4BAAA,kCAA+B,KAAQ,MAAO;AAAA,IAC1D;AAAA,EAAA,CACJ;AAER;AAIA,MAAM,oBAAoB,OAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAS9B,CAAC,MAAM,EAAE,MAAM,UAAU,kBAAkB,EAAE,MAAM;AAAA;AAAA;AAAA;AAKjE,MAAM,sBAAsB,OAAO,aAAa;AAAA;AAAA,oBAE5B,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAM1C,MAAM,6BAA6B,OAAOA,eAAoB;AAAA,eAC/C,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA,oBAEjB,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;"}
|
package/dist/contact-method.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
var __async = (__this, __arguments, generator) => {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
var fulfilled = (value) => {
|
|
23
|
-
try {
|
|
24
|
-
step(generator.next(value));
|
|
25
|
-
} catch (e) {
|
|
26
|
-
reject(e);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var rejected = (value) => {
|
|
30
|
-
try {
|
|
31
|
-
step(generator.throw(value));
|
|
32
|
-
} catch (e) {
|
|
33
|
-
reject(e);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
import { ContactMethod as ContactMethod$1 } from "@telia-ace/knowledge-widget-adapters";
|
|
41
|
-
import { DataType } from "@telia-ace/knowledge-widget-types-grid";
|
|
42
|
-
import { useContainer, useDispatch } from "@telia-ace/knowledge-widget-ui";
|
|
43
|
-
import { FormBuilder } from "@telia-ace/widget-forms";
|
|
44
|
-
import React, { useState, useRef, useEffect, useCallback } from "react";
|
|
45
|
-
import styled from "styled-components";
|
|
46
|
-
import { u as updateForm } from "./index2.js";
|
|
47
|
-
import "@telia-ace/widget-conversation";
|
|
48
|
-
import "@telia-ace/widget-services";
|
|
49
|
-
import "@telia-ace/widget-utilities";
|
|
50
|
-
const ContactMethod = ({ contactMethodId, guideId, groupId, className }) => {
|
|
51
|
-
const [contactMethod, setContactMethod] = useState();
|
|
52
|
-
const container = useContainer();
|
|
53
|
-
const dispatch = useDispatch();
|
|
54
|
-
const mountedRef = useRef(true);
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
const { events } = container.get("$widget");
|
|
57
|
-
const unsubscribe = events.subscribe("bot-provider:form-submitted", (_, data) => __async(this, null, function* () {
|
|
58
|
-
var _a;
|
|
59
|
-
if (((_a = data.form.meta) == null ? void 0 : _a.groupId) !== groupId || data.id !== contactMethod.id) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const platform = yield container.getAsync("contactMethods");
|
|
63
|
-
const updatedMethod = __spreadProps(__spreadValues({}, contactMethod), {
|
|
64
|
-
body: __spreadProps(__spreadValues({}, contactMethod.body), {
|
|
65
|
-
form: data.form
|
|
66
|
-
})
|
|
67
|
-
});
|
|
68
|
-
const { errors, valid, errorTypes } = yield platform.validate(updatedMethod);
|
|
69
|
-
if (!valid) {
|
|
70
|
-
const builder = new FormBuilder(contactMethod.body.form);
|
|
71
|
-
setContactMethod(void 0);
|
|
72
|
-
builder.setValidationErrors(errors);
|
|
73
|
-
updatedMethod.body = __spreadProps(__spreadValues({}, updatedMethod.body), {
|
|
74
|
-
form: builder.get()
|
|
75
|
-
});
|
|
76
|
-
setContactMethod(__spreadValues({}, updatedMethod));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const result = yield platform.submit(updatedMethod);
|
|
80
|
-
updatedMethod.confirmation = result;
|
|
81
|
-
setContactMethod(updatedMethod);
|
|
82
|
-
}));
|
|
83
|
-
const unsubscribeEvaluate = events.subscribe("bot-provider:evaluate", (_, data) => __async(this, null, function* () {
|
|
84
|
-
if (data.id != contactMethodId) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const platform = yield container.getAsync("contactMethods");
|
|
88
|
-
const updatedForm = yield platform.evaluate(contactMethod);
|
|
89
|
-
let updatedMethod = __spreadProps(__spreadValues({}, contactMethod), {
|
|
90
|
-
body: __spreadProps(__spreadValues({}, contactMethod.body), {
|
|
91
|
-
form: updatedForm
|
|
92
|
-
})
|
|
93
|
-
});
|
|
94
|
-
const updatedBody = updateForm(updatedMethod, {
|
|
95
|
-
submit: "Submit",
|
|
96
|
-
errors: {},
|
|
97
|
-
meta: { groupId }
|
|
98
|
-
});
|
|
99
|
-
updatedMethod = __spreadProps(__spreadValues({}, updatedMethod), {
|
|
100
|
-
body: updatedBody
|
|
101
|
-
});
|
|
102
|
-
setContactMethod(updatedMethod);
|
|
103
|
-
}));
|
|
104
|
-
return () => {
|
|
105
|
-
unsubscribe();
|
|
106
|
-
unsubscribeEvaluate();
|
|
107
|
-
};
|
|
108
|
-
}, [container, contactMethod, setContactMethod]);
|
|
109
|
-
const fetchContactMethod = useCallback((id) => __async(this, null, function* () {
|
|
110
|
-
const dataClient = yield container.getAsync("dataClient");
|
|
111
|
-
const cm = yield dataClient.fetch(DataType.ContactMethod, {
|
|
112
|
-
contactMethodId: id,
|
|
113
|
-
guideId
|
|
114
|
-
});
|
|
115
|
-
const body = updateForm(cm, {
|
|
116
|
-
submit: "Submit",
|
|
117
|
-
errors: {},
|
|
118
|
-
meta: { groupId }
|
|
119
|
-
});
|
|
120
|
-
cm.body = body;
|
|
121
|
-
cm.body.guideId = guideId;
|
|
122
|
-
if (!mountedRef.current) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
setContactMethod(cm);
|
|
126
|
-
}), [mountedRef]);
|
|
127
|
-
useEffect(() => {
|
|
128
|
-
fetchContactMethod(contactMethodId);
|
|
129
|
-
return () => {
|
|
130
|
-
mountedRef.current = false;
|
|
131
|
-
};
|
|
132
|
-
}, [contactMethodId, fetchContactMethod]);
|
|
133
|
-
if (!contactMethod) {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
return /* @__PURE__ */ React.createElement(StyledGenericContactMethod, __spreadProps(__spreadValues({}, contactMethod), {
|
|
137
|
-
body: contactMethod.body,
|
|
138
|
-
inline: true,
|
|
139
|
-
expanded: true,
|
|
140
|
-
dispatch,
|
|
141
|
-
className
|
|
142
|
-
}));
|
|
143
|
-
};
|
|
144
|
-
const StyledGenericContactMethod = styled(ContactMethod$1)`
|
|
145
|
-
padding: ${(p) => {
|
|
146
|
-
var _a;
|
|
147
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
|
|
148
|
-
}} ${(p) => {
|
|
149
|
-
var _a;
|
|
150
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.medium;
|
|
151
|
-
}};
|
|
152
|
-
`;
|
|
153
|
-
export { ContactMethod as default };
|
|
154
|
-
//# sourceMappingURL=contact-method.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contact-method.js","sources":["../src/ui/contact-method.tsx"],"sourcesContent":["import {\r\n ContactMethod as GenericContactMethod,\r\n ContactMethodPlatform,\r\n} from '@telia-ace/knowledge-widget-adapters';\r\nimport { DataType } from '@telia-ace/knowledge-widget-types-grid';\r\nimport { useContainer, useDispatch } from '@telia-ace/knowledge-widget-ui';\r\nimport { FormBuilder } from '@telia-ace/widget-forms';\r\nimport { Widget } from '@webprovisions/platform';\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { updateForm } from '../utils';\r\n\r\ntype Props = {\r\n contactMethodId: string;\r\n groupId: string;\r\n guideId?: string;\r\n className?: string;\r\n};\r\nconst ContactMethod: React.FC<Props> = ({ contactMethodId, guideId, groupId, className }) => {\r\n const [contactMethod, setContactMethod] = useState<any>();\r\n const container = useContainer();\r\n const dispatch = useDispatch();\r\n const mountedRef = useRef<boolean>(true);\r\n\r\n useEffect(() => {\r\n const { events } = container.get('$widget') as Widget;\r\n\r\n const unsubscribe = events.subscribe('bot-provider:form-submitted', async (_, data) => {\r\n // making sure that this is the form that is submitted\r\n if (data.form.meta?.groupId !== groupId || data.id !== contactMethod.id) {\r\n return;\r\n }\r\n\r\n const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\r\n\r\n const updatedMethod = {\r\n ...contactMethod,\r\n body: {\r\n ...contactMethod.body,\r\n form: data.form,\r\n },\r\n };\r\n\r\n const { errors, valid, errorTypes } = await platform.validate(updatedMethod);\r\n\r\n if (!valid) {\r\n const builder = new FormBuilder(contactMethod.body.form);\r\n setContactMethod(undefined);\r\n\r\n builder.setValidationErrors(errors);\r\n\r\n updatedMethod.body = {\r\n ...updatedMethod.body,\r\n form: builder.get(),\r\n };\r\n\r\n setContactMethod({ ...updatedMethod });\r\n return;\r\n }\r\n\r\n const result = await platform.submit(updatedMethod);\r\n\r\n updatedMethod.confirmation = result;\r\n setContactMethod(updatedMethod);\r\n });\r\n\r\n const unsubscribeEvaluate = events.subscribe('bot-provider:evaluate', async (_, data) => {\r\n if (data.id != contactMethodId) {\r\n return;\r\n }\r\n\r\n const platform = (await container.getAsync('contactMethods')) as ContactMethodPlatform;\r\n\r\n const updatedForm = await platform.evaluate(contactMethod);\r\n\r\n let updatedMethod = {\r\n ...contactMethod,\r\n body: {\r\n ...contactMethod.body,\r\n form: updatedForm,\r\n },\r\n };\r\n\r\n const updatedBody = updateForm(updatedMethod, {\r\n submit: 'Submit',\r\n errors: {},\r\n meta: { groupId },\r\n });\r\n\r\n updatedMethod = {\r\n ...updatedMethod,\r\n body: updatedBody,\r\n };\r\n\r\n setContactMethod(updatedMethod);\r\n });\r\n\r\n return () => {\r\n unsubscribe();\r\n unsubscribeEvaluate();\r\n };\r\n }, [container, contactMethod, setContactMethod]);\r\n\r\n const fetchContactMethod = useCallback(\r\n async (id: string) => {\r\n const dataClient = await container.getAsync('dataClient');\r\n\r\n const cm = await dataClient.fetch(DataType.ContactMethod, {\r\n contactMethodId: id,\r\n guideId,\r\n });\r\n\r\n const body = updateForm(cm, {\r\n submit: 'Submit',\r\n errors: {},\r\n meta: { groupId },\r\n });\r\n cm.body = body;\r\n cm.body.guideId = guideId;\r\n\r\n if (!mountedRef.current) {\r\n return null;\r\n }\r\n setContactMethod(cm);\r\n },\r\n [mountedRef]\r\n );\r\n\r\n useEffect(() => {\r\n fetchContactMethod(contactMethodId);\r\n return () => {\r\n mountedRef.current = false; // clean up\r\n };\r\n }, [contactMethodId, fetchContactMethod]);\r\n\r\n if (!contactMethod) {\r\n return null;\r\n }\r\n return (\r\n <StyledGenericContactMethod\r\n {...contactMethod}\r\n body={contactMethod.body}\r\n inline={true}\r\n expanded={true}\r\n dispatch={dispatch}\r\n className={className}\r\n />\r\n );\r\n};\r\n\r\nexport default ContactMethod;\r\n\r\nconst StyledGenericContactMethod = styled(GenericContactMethod)`\r\n padding: ${(p) => p.theme.sizes?.normal} ${(p) => p.theme.sizes?.medium};\r\n`;\r\n"],"names":["GenericContactMethod"],"mappings":"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"}
|
package/dist/entry-handler.d.ts
DELETED
package/dist/feedback-list.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { useDispatch, Icon, List, list, Button, buttonCss, invertedHoverButton } from "@telia-ace/knowledge-widget-ui";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import styled from "styled-components";
|
|
4
|
-
import { m as messageContentPadding } from "./styles.js";
|
|
5
|
-
const FeedbackList = ({ actions }) => {
|
|
6
|
-
const dispatch = useDispatch();
|
|
7
|
-
return /* @__PURE__ */ React.createElement(StyledButtonList, {
|
|
8
|
-
items: actions,
|
|
9
|
-
"data-direction": "vertical",
|
|
10
|
-
renderItem: (item) => {
|
|
11
|
-
return /* @__PURE__ */ React.createElement("li", {
|
|
12
|
-
key: item.actionKey
|
|
13
|
-
}, /* @__PURE__ */ React.createElement(FeedbackButton, {
|
|
14
|
-
className: "humany-feedback-button",
|
|
15
|
-
disabled: false,
|
|
16
|
-
"aria-pressed": true,
|
|
17
|
-
"data-selected": true,
|
|
18
|
-
onClick: () => {
|
|
19
|
-
dispatch("action", item.actionKey);
|
|
20
|
-
}
|
|
21
|
-
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
22
|
-
faIcon: item.actionKey == "yes" ? "smile-o" : "frown-o"
|
|
23
|
-
}), /* @__PURE__ */ React.createElement("span", null, item.label)));
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
const StyledButtonList = styled(List)`
|
|
28
|
-
${list}
|
|
29
|
-
${messageContentPadding}
|
|
30
|
-
display: flex;
|
|
31
|
-
gap: ${(p) => {
|
|
32
|
-
var _a;
|
|
33
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.normal;
|
|
34
|
-
}};
|
|
35
|
-
flex-direction: ${(p) => p["data-direction"] === "horizontal" ? "row" : "column"};
|
|
36
|
-
> li {
|
|
37
|
-
flex: 1;
|
|
38
|
-
margin: 0;
|
|
39
|
-
}
|
|
40
|
-
`;
|
|
41
|
-
const FeedbackButton = styled(Button)`
|
|
42
|
-
${buttonCss}
|
|
43
|
-
font-size: ${(p) => {
|
|
44
|
-
var _a;
|
|
45
|
-
return (_a = p.theme.fonts) == null ? void 0 : _a.normal;
|
|
46
|
-
}};
|
|
47
|
-
border-color: ${(p) => {
|
|
48
|
-
var _a;
|
|
49
|
-
return (_a = p.theme.colors) == null ? void 0 : _a.primary;
|
|
50
|
-
}};
|
|
51
|
-
font-weight: 300;
|
|
52
|
-
display: block;
|
|
53
|
-
width: 100%;
|
|
54
|
-
|
|
55
|
-
${(p) => {
|
|
56
|
-
var _a;
|
|
57
|
-
return invertedHoverButton({
|
|
58
|
-
primaryColor: `${(_a = p.theme.colors) == null ? void 0 : _a.primary}`,
|
|
59
|
-
secondaryColor: "#FFFFFF"
|
|
60
|
-
});
|
|
61
|
-
}}
|
|
62
|
-
i {
|
|
63
|
-
margin: 0 ${(p) => {
|
|
64
|
-
var _a;
|
|
65
|
-
return (_a = p.theme.sizes) == null ? void 0 : _a.small;
|
|
66
|
-
}} 0 0;
|
|
67
|
-
}
|
|
68
|
-
span {
|
|
69
|
-
}
|
|
70
|
-
`;
|
|
71
|
-
export { FeedbackList as default };
|
|
72
|
-
//# sourceMappingURL=feedback-list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-list.js","sources":["../src/ui/feedback-list.tsx"],"sourcesContent":["import {\r\n Button,\r\n buttonCss,\r\n Icon,\r\n invertedHoverButton,\r\n list,\r\n List,\r\n useDispatch,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport { messageContentPadding } from './styles';\r\n\r\ntype Props = {\r\n actions: { [key: string]: string }[];\r\n};\r\nconst FeedbackList: React.FC<Props> = ({ actions }) => {\r\n const dispatch = useDispatch();\r\n return (\r\n <StyledButtonList\r\n items={actions}\r\n data-direction={'vertical'}\r\n renderItem={(item: any) => {\r\n return (\r\n <li key={item.actionKey}>\r\n <FeedbackButton\r\n className=\"humany-feedback-button\"\r\n disabled={false}\r\n aria-pressed={true}\r\n data-selected={true}\r\n onClick={() => {\r\n dispatch('action', item.actionKey);\r\n }}\r\n >\r\n <Icon faIcon={item.actionKey == 'yes' ? 'smile-o' : 'frown-o'} />\r\n <span>{item.label}</span>\r\n </FeedbackButton>\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default FeedbackList;\r\n\r\nconst StyledButtonList = styled(List)<{ 'data-direction': 'horizontal' | 'vertical' } & any>`\r\n ${list}\r\n ${messageContentPadding}\r\n display: flex;\r\n gap: ${(p) => p.theme.sizes?.normal};\r\n flex-direction: ${(p) => (p['data-direction'] === 'horizontal' ? 'row' : 'column')};\r\n > li {\r\n flex: 1;\r\n margin: 0;\r\n }\r\n`;\r\n\r\nconst FeedbackButton = styled(Button)<{\r\n 'data-selected': boolean;\r\n}>`\r\n ${buttonCss}\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n border-color: ${(p) => p.theme.colors?.primary};\r\n font-weight: 300;\r\n display: block;\r\n width: 100%;\r\n\r\n ${(p) =>\r\n invertedHoverButton({\r\n primaryColor: `${p.theme.colors?.primary}`,\r\n secondaryColor: '#FFFFFF',\r\n })}\r\n i {\r\n margin: 0 ${(p) => p.theme.sizes?.small} 0 0;\r\n }\r\n span {\r\n }\r\n`;\r\n"],"names":[],"mappings":";;;;AAgBM,MAAA,eAAgC,CAAC,EAAE,cAAc;AACnD,QAAM,WAAW;AACjB,SACK,sBAAA,cAAA,kBAAA;AAAA,IACG,OAAO;AAAA,IACP,kBAAgB;AAAA,IAChB,YAAY,CAAC,SAAc;AACvB,aACK,sBAAA,cAAA,MAAA;AAAA,QAAG,KAAK,KAAK;AAAA,MAAA,GACT,sBAAA,cAAA,gBAAA;AAAA,QACG,WAAU;AAAA,QACV,UAAU;AAAA,QACV,gBAAc;AAAA,QACd,iBAAe;AAAA,QACf,SAAS,MAAM;AACF,mBAAA,UAAU,KAAK,SAAS;AAAA,QACrC;AAAA,MAAA,GAEC,sBAAA,cAAA,MAAA;AAAA,QAAK,QAAQ,KAAK,aAAa,QAAQ,YAAY;AAAA,MAAA,CAAW,GAC9D,sBAAA,cAAA,QAAA,MAAM,KAAK,KAAM,CACtB,CACJ;AAAA,IAER;AAAA,EAAA,CACJ;AAER;AAIA,MAAM,mBAAmB,OAAO,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA;AAAA,WAEK,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA,sBACX,CAAC,MAAO,EAAE,sBAAsB,eAAe,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7E,MAAM,iBAAiB,OAAO,MAAM;AAAA,MAG9B;AAAA,iBACW,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA,oBACnB,CAAC,MAAM;;AAAA,iBAAE,MAAM,WAAR,mBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrC,CAAC;;AACC,6BAAoB;AAAA,IAChB,cAAc,GAAG,QAAE,MAAM,WAAR,mBAAgB;AAAA,IACjC,gBAAgB;AAAA,EACpB,CAAC;AAAA;AAAA;AAAA,oBAEW,CAAC,MAAM;;AAAA,iBAAE,MAAM,UAAR,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;;"}
|