@telia-ace/knowledge-widget-types-grid 1.0.21 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/data/legacy-conversion.ts","../src/data/data-client.ts","../src/widget/services.ts","../src/widget/extended-widget.ts"],"sourcesContent":["import {\r\n CategoryApiResponse,\r\n ContactApiResponse,\r\n ContactCategoriesApiResponse,\r\n ContactMethodApiResponse,\r\n GuideApiResponse,\r\n GuideCategoriesApiResponse,\r\n GuideMatchApiResponse,\r\n GuideViewApiResponse,\r\n NoticeApiResponse,\r\n NoticeListApiResponse,\r\n TagListApiResponse,\r\n ValidationApiResult,\r\n} from '@telia-ace/knowledge-serviceclient';\r\nimport { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';\r\nimport {\r\n Category,\r\n DialogItem,\r\n DialogItemType,\r\n Guide,\r\n Notification,\r\n NotificationList,\r\n Symbol,\r\n Tag,\r\n} from '@telia-ace/knowledge-widget-core';\r\nimport { FormBuilder } from '@telia-ace/widget-forms';\r\nimport { DataError, ServiceClientQueryType } from './data-client';\r\n\r\nexport type MatchResult = {\r\n guides: Guide[];\r\n matches: number;\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n tags: Tag[];\r\n byCategory: { id: string; guides: Guide[]; matches: number }[];\r\n};\r\n\r\nexport type TagsResult = Tag[];\r\n\r\nexport type CategoriesResult = {\r\n categories: Category[];\r\n matches: number;\r\n};\r\n\r\nexport type NotificationResults = Pick<\r\n MatchResult,\r\n 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'\r\n>;\r\n\r\nexport type GuideResult = {\r\n guide: {\r\n id: string;\r\n title: string;\r\n body: string;\r\n modified: string;\r\n modifiedBy: string | null;\r\n publishedBy: string | null;\r\n published: string;\r\n connection: string;\r\n categories: number[];\r\n hasHandover: boolean;\r\n allowFeedback: boolean;\r\n seoMetaDescription: string | null;\r\n seoAllowIndex: boolean | null;\r\n perspective: string | null;\r\n perspectives: { [key: string]: string };\r\n translations?: { [key: string]: string };\r\n };\r\n related: Guide[];\r\n dialog: DialogItem[];\r\n contactMethods: ContactMethod[];\r\n tags: Tag[];\r\n error?: DataError;\r\n};\r\n\r\nexport type ContactsResult = {\r\n categories: Category[];\r\n contactMethods: ContactMethod[];\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n};\r\n\r\nexport type SubmissionResult = {\r\n contactMethod?: ContactMethod;\r\n valid: boolean;\r\n};\r\n\r\nconst convertLegacySymbol = (symbol?: { Type: string; Content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { Type, Content } = symbol;\r\n if (Type && Content) {\r\n return { type: Type, content: Content };\r\n }\r\n }\r\n};\r\n\r\nconst mapLegacyCategoriesRecursively = (categories: CategoryApiResponse[]): Category[] => {\r\n return categories.map((c) => {\r\n const category: Category = {\r\n id: c.Id.toString(),\r\n title: c.Name,\r\n symbol: convertLegacySymbol(c.DefaultIcon),\r\n activeSymbol: c.ActiveIcon && convertLegacySymbol(c.ActiveIcon),\r\n description: c.Description || (c.Attributes && c.Attributes.description) || '',\r\n matches: c.GuidesCount,\r\n };\r\n if (c.Children && c.Children.length) {\r\n category.items = mapLegacyCategoriesRecursively(c.Children);\r\n }\r\n return category;\r\n });\r\n};\r\n\r\nconst mapNotices = (source: NoticeApiResponse[], type: string): Notification[] => {\r\n return source\r\n .filter(({ Type }) => Type === type)\r\n .map(({ Id, Title, Body }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n }));\r\n};\r\n\r\nconst mapNotificationLists = (source: NoticeListApiResponse[]): NotificationList[] => {\r\n return source.map(({ Id, Title, DefaultIcon, ListNotices, Notices }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n defaultHeaderOptions: {\r\n visible: !!ListNotices.length,\r\n },\r\n notifications: (ListNotices || [])\r\n .concat(Notices || [])\r\n .map(({ Id, Title, Body, Type, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n expandable: Type === 'listNotice',\r\n })),\r\n }));\r\n};\r\n\r\nconst mapContactMethodSettings = (\r\n {\r\n Id,\r\n Title,\r\n DefaultIcon,\r\n Exits: [Exit],\r\n ExitType,\r\n ConfirmationText,\r\n ExpandFormAutomatically,\r\n Form,\r\n Description,\r\n }: ContactApiResponse,\r\n Validation?: ValidationApiResult\r\n): ContactMethod => {\r\n const { Adapter } = Exit || { Adapter: {} };\r\n const { ClientName = '', Settings = {}, CustomClientName = '' } = Adapter;\r\n\r\n const settings: ContactMethod = {\r\n id: Id.toString(),\r\n title: Title,\r\n description: Description,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n clientName: ClientName === 'custom.adapter' ? CustomClientName : ClientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (ClientName.indexOf('phone') > -1 || ClientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = Settings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (ClientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = Settings.phoneNumber;\r\n } else {\r\n settings.body.freetext = Settings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n ClientName.indexOf('chat.popup') > -1 ||\r\n ClientName.indexOf('link') > -1 ||\r\n (ClientName === 'custom.adapter' && ExitType === 'custom')\r\n ) {\r\n settings.body = Settings;\r\n settings.body.confirmationFallback = ConfirmationText;\r\n }\r\n\r\n if (ClientName.indexOf('ace') > -1) {\r\n settings.body = Settings;\r\n }\r\n\r\n if (Form && Form.HasValueComponents) {\r\n if (Validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form, Validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form).get();\r\n }\r\n if (!ExpandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n }\r\n\r\n return settings;\r\n};\r\n\r\ntype Modify<T, R> = Omit<T, keyof R> & R;\r\ntype ExtendedGuideMatchApiResponse = Modify<\r\n GuideMatchApiResponse,\r\n {\r\n ByCategory: { Id: string; Matches: GuideApiResponse[]; TotalMatches: number }[];\r\n }\r\n>;\r\n\r\nconst mapTags = (tags: TagListApiResponse[] = []): Tag[] => {\r\n return tags.map(({ Id, Title, TotalMatches, Symbol, DefaultIcon, ActiveIcon }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n matches: TotalMatches,\r\n symbol: convertLegacySymbol(DefaultIcon || Symbol),\r\n defaultIcon: convertLegacySymbol(DefaultIcon),\r\n activeIcon: convertLegacySymbol(ActiveIcon),\r\n }));\r\n};\r\n\r\nconst mapGuides = (guides: GuideApiResponse[]) => {\r\n return guides.map(({ Id, Title, Tags, FirstPublishedDate, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n published: FirstPublishedDate,\r\n modified: Modified,\r\n }));\r\n};\r\n\r\nexport const formatLegacyData = (type: ServiceClientQueryType, data: any) => {\r\n switch (type) {\r\n case ServiceClientQueryType.MatchByCategory:\r\n case ServiceClientQueryType.Match: {\r\n const result: MatchResult = {\r\n guides: [],\r\n matches: 0,\r\n topNotifications: [],\r\n middleNotifications: [],\r\n bottomNotifications: [],\r\n notificationLists: [],\r\n tags: [],\r\n byCategory: [],\r\n };\r\n const {\r\n Matches,\r\n TotalMatches,\r\n Notices,\r\n NoticeLists,\r\n Tags,\r\n ByCategory,\r\n }: ExtendedGuideMatchApiResponse = data;\r\n\r\n result.guides = mapGuides(Matches);\r\n\r\n result.matches = TotalMatches;\r\n\r\n result.byCategory = (ByCategory || []).map(({ Id, Matches, TotalMatches }) => ({\r\n id: Id,\r\n guides: mapGuides(Matches),\r\n matches: TotalMatches,\r\n }));\r\n\r\n result.tags = mapTags(Tags);\r\n\r\n result.notificationLists = mapNotificationLists(NoticeLists || []);\r\n\r\n result.topNotifications = mapNotices(Notices || [], 'noticeRowTop');\r\n\r\n result.middleNotifications = mapNotices(Notices || [], 'noticeRowMiddle');\r\n\r\n result.bottomNotifications = mapNotices(Notices || [], 'footerNotice');\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n const { Children, GuidesCountTotal }: GuideCategoriesApiResponse = data;\r\n\r\n const result: CategoriesResult = {\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n matches: GuidesCountTotal,\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n const {\r\n Id,\r\n Title,\r\n Body,\r\n Related,\r\n Options,\r\n ConnectionId,\r\n ContactMethods,\r\n EnableFeedback,\r\n HandoverExists,\r\n FirstPublishedDate,\r\n Modified,\r\n ModifiedByDisplayName,\r\n FirstPublishedByDisplayName,\r\n Categories,\r\n Tags,\r\n SeoMetaDescription,\r\n SeoAllowIndex,\r\n Perspectives,\r\n PerspectiveKey,\r\n Translations,\r\n }: GuideViewApiResponse = data;\r\n\r\n /* \r\n PerspectiveKey is always null when on the \"top level\" of a dialog tree\r\n OR when navigating down a dialog tree in the \"Default answer version\"\r\n Note: The \"Default answer version\" is not the same as a given guides\r\n default answer version. The \"Default answer version\" is always the answer\r\n version in Perspectives with the key \"Default\".\r\n */\r\n const perspective =\r\n PerspectiveKey ||\r\n Object.values(Perspectives).find((connection) => connection === ConnectionId) ||\r\n Perspectives['Default'] ||\r\n null;\r\n\r\n const result: GuideResult = {\r\n guide: {\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n published: FirstPublishedDate,\r\n modifiedBy: ModifiedByDisplayName,\r\n publishedBy: FirstPublishedByDisplayName,\r\n connection: ConnectionId,\r\n categories: Categories,\r\n hasHandover: HandoverExists,\r\n allowFeedback: EnableFeedback,\r\n seoMetaDescription: SeoMetaDescription,\r\n seoAllowIndex: SeoAllowIndex,\r\n perspectives: Perspectives,\r\n perspective,\r\n translations: Object.keys(Translations || {}).reduce<{\r\n [key: string]: string;\r\n }>((acc, key) => {\r\n acc[key] = Translations[key].toString();\r\n return acc;\r\n }, {}),\r\n },\r\n related: mapGuides(Related || []),\r\n dialog: [],\r\n contactMethods: (ContactMethods || []).map((cm) => mapContactMethodSettings(cm)),\r\n tags: mapTags(Tags),\r\n };\r\n\r\n (Options || []).forEach(({ CanAccess, Description, ConnectionId, Properties }) => {\r\n if (!CanAccess) {\r\n return;\r\n }\r\n\r\n const item: DialogItem = {\r\n id: Id.toString(),\r\n title: Description,\r\n connection: ConnectionId,\r\n type: DialogItemType.default,\r\n parent: {\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n },\r\n };\r\n\r\n if (Properties.Type === 'Guide' || Properties.Type === 'Link') {\r\n Properties.Id && (item.id = Properties.Id.toString());\r\n Properties.Uri && (item.href = Properties.Uri);\r\n Properties.Target && (item.target = Properties.Target);\r\n switch (Properties.Type) {\r\n case 'Guide':\r\n item.type = DialogItemType.guide;\r\n break;\r\n case 'Link':\r\n item.type = DialogItemType.link;\r\n break;\r\n }\r\n }\r\n\r\n result.dialog.push(item);\r\n });\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n const { Children, Matches, Notices, NoticeLists }: ContactCategoriesApiResponse = data;\r\n\r\n const result: ContactsResult = {\r\n contactMethods: (Matches || []).map((cm) => mapContactMethodSettings(cm)),\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n const { ContactMethod }: ContactMethodApiResponse = data;\r\n\r\n return mapContactMethodSettings(ContactMethod || {});\r\n }\r\n case ServiceClientQueryType.Tags:\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return mapTags(data || []);\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n const { Notices, NoticeLists } = data;\r\n\r\n return {\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n }\r\n default:\r\n return {};\r\n }\r\n};\r\n","import { ServiceClient } from '@telia-ace/knowledge-serviceclient';\r\nimport { WidgetRenderState } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n deepClone,\r\n removeNullAndUndefinedValues,\r\n shallowCompare,\r\n} from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport { formatLegacyData } from './legacy-conversion';\r\n\r\nexport type Subscriber = (...args: any[]) => void;\r\n\r\nexport enum DataType {\r\n Guide = 'guide',\r\n Guides = 'guides',\r\n GuidesByCategory = 'guides-by-category',\r\n RowNotifications = 'row-notices',\r\n NotificationLists = 'notification-lists',\r\n GuideCategories = 'guide-categories',\r\n ContactMethodCategories = 'contact-method-categories',\r\n ContactMethod = 'contact-method',\r\n ContactMethods = 'contact-methods',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n}\r\n\r\nexport type DataError = {\r\n status: number;\r\n message: string;\r\n};\r\n\r\nexport enum ServiceClientQueryType {\r\n Match = 'match',\r\n Categories = 'categories',\r\n Guide = 'guide',\r\n Contacts = 'contacts',\r\n ContactMethod = 'contact-method',\r\n MatchByCategory = 'match-by-category',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n Notifications = 'notifications',\r\n}\r\n\r\nexport enum FeedbackType {\r\n Positive = 'Positive',\r\n Negative = 'Negative',\r\n}\r\n\r\nexport type QueryParameters = {\r\n guideId?: string | number;\r\n categories?: string | number | string[] | number[];\r\n tagId?: string | number;\r\n connection?: string;\r\n\r\n contactMethodCategoryId?: string | number;\r\n contactMethodId?: string | number;\r\n\r\n searchPhrase?: string | number;\r\n take?: string | number;\r\n [key: string]: any;\r\n\r\n expandCategories?: 'none' | 'children' | 'descendants';\r\n sorting?: SortingType;\r\n guideIds?: string[];\r\n};\r\n\r\nexport enum SortingType {\r\n POPULARITY_DESCENDING = 'popularity-descending',\r\n ALPHABETIC_ASCENDING = 'alphabetic-ascending',\r\n ALPHABETIC_DESCENDING = 'alphabetic-descending',\r\n MODIFIED_ASCENDING = 'modified-ascending',\r\n MODIFIED_DESCENDING = 'modified-descending',\r\n PUBLISHED_ASCENDING = 'published-ascending',\r\n PUBLISHED_DESCENDING = 'published-descending',\r\n}\r\n\r\nexport type Query = {\r\n params: QueryParameters;\r\n resolved: boolean;\r\n loading: boolean;\r\n error?: DataError;\r\n data: any;\r\n resolvers: {\r\n resolve: (data: any) => void;\r\n reject: (data: any) => void;\r\n }[];\r\n};\r\n\r\nexport const determineServiceClientQueryType = (type: DataType): ServiceClientQueryType => {\r\n switch (type) {\r\n case DataType.Guides:\r\n return ServiceClientQueryType.Match;\r\n case DataType.GuidesByCategory:\r\n return ServiceClientQueryType.MatchByCategory;\r\n case DataType.Guide:\r\n return ServiceClientQueryType.Guide;\r\n case DataType.GuideCategories:\r\n return ServiceClientQueryType.Categories;\r\n case DataType.ContactMethodCategories:\r\n case DataType.ContactMethods:\r\n return ServiceClientQueryType.Contacts;\r\n case DataType.ContactMethod:\r\n return ServiceClientQueryType.ContactMethod;\r\n case DataType.Tags:\r\n return ServiceClientQueryType.Tags;\r\n case DataType.TagsOnGuides:\r\n return ServiceClientQueryType.TagsOnGuides;\r\n case DataType.NotificationLists:\r\n case DataType.RowNotifications:\r\n return ServiceClientQueryType.Notifications;\r\n default:\r\n throw 'error';\r\n }\r\n};\r\n\r\nconst widgetIsHidden = async (container: Container) => {\r\n const { invoke } = container.get('$widget');\r\n const renderState = await invoke('renderState');\r\n return renderState === WidgetRenderState.hidden;\r\n};\r\n\r\nexport default class DataClient {\r\n private queries: Map<ServiceClientQueryType, Query[]> = new Map();\r\n private lastTake: number = 0;\r\n public events: EventManager;\r\n constructor(private container: Container, private matchingClient: ServiceClient) {\r\n this.events = (<Widget>container.get('$widget')).events;\r\n\r\n this.events.subscribe('widget:settings-updated', () => (this.queries = new Map()));\r\n\r\n this.events.subscribe('widget:render-state-changed', (event, { next, previous }) => {\r\n if (previous === WidgetRenderState.hidden && next === WidgetRenderState.open) {\r\n this.fetchAllUnresolvedQueries();\r\n }\r\n });\r\n }\r\n\r\n static getInstance(container: Container): Promise<DataClient> {\r\n return container.getAsync('dataClient');\r\n }\r\n\r\n private getUnresolvedQueries = () => {\r\n let unresolvedCount = 0;\r\n this.queries.forEach((queries, type) => {\r\n const hasUnresolved = queries.some((query: Query) => !query.resolved);\r\n if (hasUnresolved) {\r\n unresolvedCount = +1;\r\n }\r\n });\r\n return unresolvedCount;\r\n };\r\n\r\n public fetch(type: DataType, params: QueryParameters): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (params.take) {\r\n this.lastTake = +(params.take || 0);\r\n }\r\n\r\n removeNullAndUndefinedValues(params);\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n const index = queries.indexOf(query);\r\n if (query.resolved) {\r\n this.events.dispatch('data-client:fetched', {\r\n params,\r\n type: serviceClientQueryType,\r\n response: query.data,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n this.track(query.data, serviceClientQueryType, query.error);\r\n if (query.data && query.error) {\r\n reject({ error: query.error });\r\n } else {\r\n resolve(query.data);\r\n }\r\n } else {\r\n query.resolvers.push({ resolve, reject });\r\n }\r\n queries.splice(index, 1);\r\n queries.push(query);\r\n this.queries.set(serviceClientQueryType, queries);\r\n if (!query.loading && !query.resolved) {\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n } else {\r\n queries.push({\r\n params,\r\n resolved: false,\r\n loading: true,\r\n data: {},\r\n resolvers: [{ resolve, reject }],\r\n });\r\n this.queries.set(serviceClientQueryType, queries);\r\n\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n }).then((res) => deepClone(res));\r\n }\r\n\r\n // query the cached data\r\n public read(\r\n type: DataType,\r\n options: {\r\n select?: (data: any) => any; // either return all data by the DataType, or use an selector\r\n }\r\n ) {\r\n const { select } = options;\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n\r\n const result = queries.reduce<any[]>((acc, query) => {\r\n if (typeof select === 'function') {\r\n const match = select(query.data);\r\n if (match) {\r\n acc.push(match);\r\n }\r\n } else {\r\n acc.push(query.data);\r\n }\r\n return acc;\r\n }, []);\r\n return result;\r\n }\r\n\r\n public feedback(id: string, connection: string, feedback: FeedbackType): Promise<any> {\r\n return this.matchingClient.giveFeedback(id, connection, feedback);\r\n }\r\n\r\n private setLoadingStatus(\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n loading: boolean\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n query.loading = loading;\r\n }\r\n this.queries.set(type, queries);\r\n }\r\n\r\n private async runQuery(type: ServiceClientQueryType, params: QueryParameters) {\r\n const {\r\n searchPhrase = '',\r\n categories = '0',\r\n contactMethodCategoryId = '0',\r\n contactMethodId = '0',\r\n tagId = undefined,\r\n take = 5,\r\n connection = '',\r\n guideId,\r\n expandCategories = 'descendants',\r\n currentCategory,\r\n sorting = SortingType.POPULARITY_DESCENDING,\r\n guideIds = [],\r\n } = params;\r\n\r\n const trimmedPhrase = searchPhrase.toString().trim();\r\n if (await widgetIsHidden(this.container)) {\r\n return Promise.resolve();\r\n }\r\n\r\n switch (type) {\r\n case ServiceClientQueryType.Match: {\r\n const formatSortingValues = (sorting: string) => {\r\n const [type, direction] = sorting.split('-');\r\n const sortKeysMap = new Map([\r\n ['popularity', 'popularity'],\r\n ['alphabetic', 'title'],\r\n ['modified', 'lastModified'],\r\n ['published', 'firstPublished'],\r\n ]);\r\n\r\n return {\r\n type: sortKeysMap.get(type),\r\n direction: direction,\r\n };\r\n };\r\n\r\n if (guideIds.length) {\r\n return this.matchingClient\r\n .customRequest('guides', 'POST', {\r\n configuration: { ids: guideIds, take: +take },\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n sorting: formatSortingValues(sorting),\r\n ids: guideIds,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.MatchByCategory: {\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n groupByCategory: true,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n return this.matchingClient\r\n .getGuide(guideId, { connectionId: connection })\r\n .then((guide) => {\r\n if (guide) {\r\n this.handleResponse(guide, type, params);\r\n }\r\n })\r\n .catch((e) => {\r\n const error = {\r\n message: 'Something went wrong.',\r\n status: e.status || 400,\r\n };\r\n if (error.status === 404) {\r\n error.message = 'The guide could not be found.';\r\n }\r\n this.handleResponse({}, type, params, error);\r\n });\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n return this.matchingClient\r\n .getCategories({ phrase: trimmedPhrase, expand: expandCategories, tags: tagId })\r\n .then(\r\n (categories) => categories && this.handleResponse(categories, type, params)\r\n );\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n if (guideId) {\r\n return this.matchingClient\r\n .contactMethods(+guideId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n return this.matchingClient\r\n .contacts(+contactMethodCategoryId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n return this.matchingClient\r\n .getContactMethod(+contactMethodId, { guideId, currentCategory })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Tags: {\r\n return this.matchingClient\r\n .customRequest('tags', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return this.matchingClient\r\n .customRequest('tagsonguides', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n tags: tagId,\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n return this.matchingClient\r\n .customRequest('notices', 'GET', {\r\n configuration: {\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n }\r\n }\r\n\r\n handleResponse(\r\n data: any = {},\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n error?: DataError\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const existing = queries.find((q) => shallowCompare(q.params, params));\r\n if (existing) {\r\n const formatted = error ? error : formatLegacyData(type, data);\r\n this.track(formatted, type, error);\r\n existing.resolvers.forEach((r) => {\r\n if (error) {\r\n r.reject({ error: formatted });\r\n } else {\r\n r.resolve(formatted);\r\n }\r\n });\r\n\r\n const index = queries.indexOf(existing);\r\n if (index > -1) {\r\n queries.splice(index, 1);\r\n }\r\n queries.push({ ...existing, error, resolvers: [], data: formatted, resolved: true });\r\n this.setLoadingStatus(type, params, false);\r\n this.queries.set(type, queries);\r\n if (!error) {\r\n this.events.dispatch('data-client:fetched', {\r\n type,\r\n params,\r\n response: formatted,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n private fetchAllUnresolvedQueries() {\r\n for (const [queryType, queries] of this.queries) {\r\n queries\r\n .filter((query: Query) => !query.resolved)\r\n .forEach((query) => {\r\n this.runQuery(queryType, query.params);\r\n });\r\n }\r\n }\r\n\r\n private track(data: any = {}, type: ServiceClientQueryType, error?: DataError) {\r\n const widget = this.container.get('$widget');\r\n if (widget && !error) {\r\n widget.events.dispatch('tracking:service-client-response', {\r\n type,\r\n data,\r\n });\r\n } else if (widget) {\r\n widget.events.dispatch('tracking:service-client-error', {\r\n type,\r\n error,\r\n });\r\n }\r\n }\r\n\r\n static create(container: Container): Promise<DataClient> {\r\n return container\r\n .getAsync('matchingClient')\r\n .then((matchingClient) => new DataClient(container, matchingClient));\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\n\r\nexport const createContactMethodPlatform = (container: Container) => {\r\n return import('@telia-ace/knowledge-widget-adapters').then(({ ContactMethodPlatform }) => {\r\n return ContactMethodPlatform.create(container);\r\n });\r\n};\r\n\r\nexport const createDataClient = (container: Container) => {\r\n return import('../data').then(({ DataClient }) => {\r\n return DataClient.create(container);\r\n });\r\n};\r\n","import { Widget } from '@telia-ace/widget-types-grid';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { createContactMethodPlatform, createDataClient } from './services';\r\n\r\nexport default class ExtendedWidget extends Widget {\r\n constructor(container: Container) {\r\n super(container);\r\n\r\n this.container.registerAsync('contactMethods', () =>\r\n createContactMethodPlatform(this.container)\r\n );\r\n this.container.registerAsync('dataClient', () => createDataClient(this.container));\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/data/legacy-conversion.ts","../src/data/data-client.ts","../src/widget/services.ts","../src/widget/extended-widget.ts"],"sourcesContent":["import {\r\n CategoryApiResponse,\r\n ContactApiResponse,\r\n ContactCategoriesApiResponse,\r\n ContactMethodApiResponse,\r\n GuideApiResponse,\r\n GuideCategoriesApiResponse,\r\n GuideMatchApiResponse,\r\n GuideViewApiResponse,\r\n NoticeApiResponse,\r\n NoticeListApiResponse,\r\n TagListApiResponse,\r\n ValidationApiResult,\r\n} from '@telia-ace/knowledge-serviceclient';\r\nimport { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';\r\nimport {\r\n Category,\r\n DialogItem,\r\n DialogItemType,\r\n Guide,\r\n Notification,\r\n NotificationList,\r\n Symbol,\r\n Tag,\r\n} from '@telia-ace/knowledge-widget-core';\r\nimport { FormBuilder } from '@telia-ace/widget-forms';\r\nimport { DataError, ServiceClientQueryType } from './data-client';\r\n\r\nexport type MatchResult = {\r\n guides: Guide[];\r\n matches: number;\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n tags: Tag[];\r\n byCategory: { id: string; guides: Guide[]; matches: number }[];\r\n};\r\n\r\nexport type TagsResult = Tag[];\r\n\r\nexport type CategoriesResult = {\r\n categories: Category[];\r\n matches: number;\r\n};\r\n\r\nexport type NotificationResults = Pick<\r\n MatchResult,\r\n 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'\r\n>;\r\n\r\nexport type GuideResult = {\r\n guide: {\r\n id: string;\r\n title: string;\r\n body: string;\r\n modified: string;\r\n modifiedBy: string | null;\r\n publishedBy: string | null;\r\n published: string;\r\n connection: string;\r\n categories: number[];\r\n hasHandover: boolean;\r\n allowFeedback: boolean;\r\n seoMetaDescription: string | null;\r\n seoAllowIndex: boolean | null;\r\n perspective: string | null;\r\n perspectives: { [key: string]: string };\r\n translations?: { [key: string]: string };\r\n };\r\n related: Guide[];\r\n dialog: DialogItem[];\r\n contactMethods: ContactMethod[];\r\n tags: Tag[];\r\n error?: DataError;\r\n};\r\n\r\nexport type ContactsResult = {\r\n categories: Category[];\r\n contactMethods: ContactMethod[];\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n};\r\n\r\nexport type SubmissionResult = {\r\n contactMethod?: ContactMethod;\r\n valid: boolean;\r\n};\r\n\r\nconst convertLegacySymbol = (symbol?: { Type: string; Content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { Type, Content } = symbol;\r\n if (Type && Content) {\r\n return { type: Type, content: Content };\r\n }\r\n }\r\n};\r\n\r\nconst mapLegacyCategoriesRecursively = (categories: CategoryApiResponse[]): Category[] => {\r\n return categories.map((c) => {\r\n const category: Category = {\r\n id: c.Id.toString(),\r\n title: c.Name,\r\n symbol: convertLegacySymbol(c.DefaultIcon),\r\n activeSymbol: c.ActiveIcon && convertLegacySymbol(c.ActiveIcon),\r\n description: c.Description || (c.Attributes && c.Attributes.description) || '',\r\n matches: c.GuidesCount,\r\n };\r\n if (c.Children && c.Children.length) {\r\n category.items = mapLegacyCategoriesRecursively(c.Children);\r\n }\r\n return category;\r\n });\r\n};\r\n\r\nconst mapNotices = (source: NoticeApiResponse[], type: string): Notification[] => {\r\n return source\r\n .filter(({ Type }) => Type === type)\r\n .map(({ Id, Title, Body }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n }));\r\n};\r\n\r\nconst mapNotificationLists = (source: NoticeListApiResponse[]): NotificationList[] => {\r\n return source.map(({ Id, Title, DefaultIcon, ListNotices, Notices }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n defaultHeaderOptions: {\r\n visible: !!ListNotices.length,\r\n },\r\n notifications: (ListNotices || [])\r\n .concat(Notices || [])\r\n .map(({ Id, Title, Body, Type, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n expandable: Type === 'listNotice',\r\n })),\r\n }));\r\n};\r\n\r\nconst mapContactMethodSettings = (\r\n {\r\n Id,\r\n Title,\r\n DefaultIcon,\r\n Exits: [Exit],\r\n ExitType,\r\n ConfirmationText,\r\n ExpandFormAutomatically,\r\n Form,\r\n Description,\r\n }: ContactApiResponse,\r\n Validation?: ValidationApiResult\r\n): ContactMethod => {\r\n const { Adapter } = Exit || { Adapter: {} };\r\n const { ClientName = '', Settings = {}, CustomClientName = '' } = Adapter;\r\n\r\n const settings: ContactMethod = {\r\n id: Id.toString(),\r\n title: Title,\r\n description: Description,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n clientName: ClientName === 'custom.adapter' ? CustomClientName : ClientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (ClientName.indexOf('phone') > -1 || ClientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = Settings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (ClientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = Settings.phoneNumber;\r\n } else {\r\n settings.body.freetext = Settings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n ClientName.indexOf('chat.popup') > -1 ||\r\n ClientName.indexOf('link') > -1 ||\r\n (ClientName === 'custom.adapter' && ExitType === 'custom')\r\n ) {\r\n settings.body = Settings;\r\n settings.body.confirmationFallback = ConfirmationText;\r\n }\r\n\r\n if (ClientName.indexOf('ace') > -1) {\r\n settings.body = Settings;\r\n }\r\n\r\n if (Form && Form.HasValueComponents) {\r\n if (Validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form, Validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form).get();\r\n }\r\n if (!ExpandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n }\r\n\r\n return settings;\r\n};\r\n\r\ntype Modify<T, R> = Omit<T, keyof R> & R;\r\ntype ExtendedGuideMatchApiResponse = Modify<\r\n GuideMatchApiResponse,\r\n {\r\n ByCategory: { Id: string; Matches: GuideApiResponse[]; TotalMatches: number }[];\r\n }\r\n>;\r\n\r\nconst mapTags = (tags: TagListApiResponse[] = []): Tag[] => {\r\n return tags.map(({ Id, Title, TotalMatches, Symbol, DefaultIcon, ActiveIcon }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n matches: TotalMatches,\r\n symbol: convertLegacySymbol(DefaultIcon || Symbol),\r\n defaultIcon: convertLegacySymbol(DefaultIcon),\r\n activeIcon: convertLegacySymbol(ActiveIcon),\r\n }));\r\n};\r\n\r\nconst mapGuides = (guides: GuideApiResponse[]) => {\r\n return guides.map(({ Id, Title, Tags, FirstPublishedDate, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n published: FirstPublishedDate,\r\n modified: Modified,\r\n }));\r\n};\r\n\r\nexport const formatLegacyData = (type: ServiceClientQueryType, data: any) => {\r\n switch (type) {\r\n case ServiceClientQueryType.MatchByCategory:\r\n case ServiceClientQueryType.Match: {\r\n const result: MatchResult = {\r\n guides: [],\r\n matches: 0,\r\n topNotifications: [],\r\n middleNotifications: [],\r\n bottomNotifications: [],\r\n notificationLists: [],\r\n tags: [],\r\n byCategory: [],\r\n };\r\n const {\r\n Matches,\r\n TotalMatches,\r\n Notices,\r\n NoticeLists,\r\n Tags,\r\n ByCategory,\r\n }: ExtendedGuideMatchApiResponse = data;\r\n\r\n result.guides = mapGuides(Matches);\r\n\r\n result.matches = TotalMatches;\r\n\r\n result.byCategory = (ByCategory || []).map(({ Id, Matches, TotalMatches }) => ({\r\n id: Id,\r\n guides: mapGuides(Matches),\r\n matches: TotalMatches,\r\n }));\r\n\r\n result.tags = mapTags(Tags);\r\n\r\n result.notificationLists = mapNotificationLists(NoticeLists || []);\r\n\r\n result.topNotifications = mapNotices(Notices || [], 'noticeRowTop');\r\n\r\n result.middleNotifications = mapNotices(Notices || [], 'noticeRowMiddle');\r\n\r\n result.bottomNotifications = mapNotices(Notices || [], 'footerNotice');\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n const { Children, GuidesCountTotal }: GuideCategoriesApiResponse = data;\r\n\r\n const result: CategoriesResult = {\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n matches: GuidesCountTotal,\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n const {\r\n Id,\r\n Title,\r\n Body,\r\n Related,\r\n Options,\r\n ConnectionId,\r\n ContactMethods,\r\n EnableFeedback,\r\n HandoverExists,\r\n FirstPublishedDate,\r\n Modified,\r\n ModifiedByDisplayName,\r\n FirstPublishedByDisplayName,\r\n Categories,\r\n Tags,\r\n SeoMetaDescription,\r\n SeoAllowIndex,\r\n Perspectives,\r\n PerspectiveKey,\r\n Translations,\r\n }: GuideViewApiResponse = data;\r\n\r\n /* \r\n PerspectiveKey is always null when on the \"top level\" of a dialog tree\r\n OR when navigating down a dialog tree in the \"Default answer version\"\r\n Note: The \"Default answer version\" is not the same as a given guides\r\n default answer version. The \"Default answer version\" is always the answer\r\n version in Perspectives with the key \"Default\".\r\n */\r\n const perspective =\r\n PerspectiveKey ||\r\n Object.values(Perspectives).find((connection) => connection === ConnectionId) ||\r\n Perspectives['Default'] ||\r\n null;\r\n\r\n const result: GuideResult = {\r\n guide: {\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n published: FirstPublishedDate,\r\n modifiedBy: ModifiedByDisplayName,\r\n publishedBy: FirstPublishedByDisplayName,\r\n connection: ConnectionId,\r\n categories: Categories,\r\n hasHandover: HandoverExists,\r\n allowFeedback: EnableFeedback,\r\n seoMetaDescription: SeoMetaDescription,\r\n seoAllowIndex: SeoAllowIndex,\r\n perspectives: Perspectives,\r\n perspective,\r\n translations: Object.keys(Translations || {}).reduce<{\r\n [key: string]: string;\r\n }>((acc, key) => {\r\n acc[key] = Translations[key].toString();\r\n return acc;\r\n }, {}),\r\n },\r\n related: mapGuides(Related || []),\r\n dialog: [],\r\n contactMethods: (ContactMethods || []).map((cm) => mapContactMethodSettings(cm)),\r\n tags: mapTags(Tags),\r\n };\r\n\r\n (Options || []).forEach(({ CanAccess, Description, ConnectionId, Properties }) => {\r\n if (!CanAccess) {\r\n return;\r\n }\r\n\r\n const item: DialogItem = {\r\n id: Id.toString(),\r\n title: Description,\r\n connection: ConnectionId,\r\n type: DialogItemType.default,\r\n parent: {\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n },\r\n };\r\n\r\n if (Properties.Type === 'Guide' || Properties.Type === 'Link') {\r\n Properties.Id && (item.id = Properties.Id.toString());\r\n Properties.Uri && (item.href = Properties.Uri);\r\n Properties.Target && (item.target = Properties.Target);\r\n switch (Properties.Type) {\r\n case 'Guide':\r\n item.type = DialogItemType.guide;\r\n break;\r\n case 'Link':\r\n item.type = DialogItemType.link;\r\n break;\r\n }\r\n }\r\n\r\n result.dialog.push(item);\r\n });\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n const { Children, Matches, Notices, NoticeLists }: ContactCategoriesApiResponse = data;\r\n\r\n const result: ContactsResult = {\r\n contactMethods: (Matches || []).map((cm) => mapContactMethodSettings(cm)),\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n const { ContactMethod }: ContactMethodApiResponse = data;\r\n\r\n return mapContactMethodSettings(ContactMethod || {});\r\n }\r\n case ServiceClientQueryType.Tags:\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return mapTags(data || []);\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n const { Notices, NoticeLists } = data;\r\n\r\n return {\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n }\r\n default:\r\n return {};\r\n }\r\n};\r\n","import { ServiceClient } from '@telia-ace/knowledge-serviceclient';\r\nimport { WidgetRenderState } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n deepClone,\r\n removeNullAndUndefinedValues,\r\n shallowCompare,\r\n} from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport { formatLegacyData } from './legacy-conversion';\r\n\r\nexport type Subscriber = (...args: any[]) => void;\r\n\r\nexport enum DataType {\r\n Guide = 'guide',\r\n Guides = 'guides',\r\n GuidesByCategory = 'guides-by-category',\r\n RowNotifications = 'row-notices',\r\n NotificationLists = 'notification-lists',\r\n GuideCategories = 'guide-categories',\r\n ContactMethodCategories = 'contact-method-categories',\r\n ContactMethod = 'contact-method',\r\n ContactMethods = 'contact-methods',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n}\r\n\r\nexport type DataError = {\r\n status: number;\r\n message: string;\r\n};\r\n\r\nexport enum ServiceClientQueryType {\r\n Match = 'match',\r\n Categories = 'categories',\r\n Guide = 'guide',\r\n Contacts = 'contacts',\r\n ContactMethod = 'contact-method',\r\n MatchByCategory = 'match-by-category',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n Notifications = 'notifications',\r\n}\r\n\r\nexport enum FeedbackType {\r\n Positive = 'Positive',\r\n Negative = 'Negative',\r\n}\r\n\r\nexport type QueryParameters = {\r\n guideId?: string | number;\r\n categories?: string | number | string[] | number[];\r\n tagId?: string | number;\r\n connection?: string;\r\n\r\n contactMethodCategoryId?: string | number;\r\n contactMethodId?: string | number;\r\n\r\n searchPhrase?: string | number;\r\n take?: string | number;\r\n [key: string]: any;\r\n\r\n expandCategories?: 'none' | 'children' | 'descendants';\r\n sorting?: SortingType;\r\n guideIds?: string[];\r\n};\r\n\r\nexport enum SortingType {\r\n POPULARITY_DESCENDING = 'popularity-descending',\r\n ALPHABETIC_ASCENDING = 'alphabetic-ascending',\r\n ALPHABETIC_DESCENDING = 'alphabetic-descending',\r\n MODIFIED_ASCENDING = 'modified-ascending',\r\n MODIFIED_DESCENDING = 'modified-descending',\r\n PUBLISHED_ASCENDING = 'published-ascending',\r\n PUBLISHED_DESCENDING = 'published-descending',\r\n}\r\n\r\nexport type Query = {\r\n params: QueryParameters;\r\n resolved: boolean;\r\n loading: boolean;\r\n error?: DataError;\r\n data: any;\r\n resolvers: {\r\n resolve: (data: any) => void;\r\n reject: (data: any) => void;\r\n }[];\r\n};\r\n\r\nexport const determineServiceClientQueryType = (type: DataType): ServiceClientQueryType => {\r\n switch (type) {\r\n case DataType.Guides:\r\n return ServiceClientQueryType.Match;\r\n case DataType.GuidesByCategory:\r\n return ServiceClientQueryType.MatchByCategory;\r\n case DataType.Guide:\r\n return ServiceClientQueryType.Guide;\r\n case DataType.GuideCategories:\r\n return ServiceClientQueryType.Categories;\r\n case DataType.ContactMethodCategories:\r\n case DataType.ContactMethods:\r\n return ServiceClientQueryType.Contacts;\r\n case DataType.ContactMethod:\r\n return ServiceClientQueryType.ContactMethod;\r\n case DataType.Tags:\r\n return ServiceClientQueryType.Tags;\r\n case DataType.TagsOnGuides:\r\n return ServiceClientQueryType.TagsOnGuides;\r\n case DataType.NotificationLists:\r\n case DataType.RowNotifications:\r\n return ServiceClientQueryType.Notifications;\r\n default:\r\n throw 'error';\r\n }\r\n};\r\n\r\nconst widgetIsHidden = async (container: Container) => {\r\n const { invoke } = container.get('$widget');\r\n const renderState = await invoke('renderState');\r\n return renderState === WidgetRenderState.hidden;\r\n};\r\n\r\nexport default class DataClient {\r\n private queries: Map<ServiceClientQueryType, Query[]> = new Map();\r\n private lastTake: number = 0;\r\n public events: EventManager;\r\n constructor(private container: Container, private matchingClient: ServiceClient) {\r\n this.events = (<Widget>container.get('$widget')).events;\r\n\r\n this.events.subscribe('widget:settings-updated', () => (this.queries = new Map()));\r\n\r\n this.events.subscribe('widget:render-state-changed', (event, { next, previous }) => {\r\n if (previous === WidgetRenderState.hidden && next === WidgetRenderState.open) {\r\n this.fetchAllUnresolvedQueries();\r\n }\r\n });\r\n }\r\n\r\n static getInstance(container: Container): Promise<DataClient> {\r\n return container.getAsync('dataClient');\r\n }\r\n\r\n private getUnresolvedQueries = () => {\r\n let unresolvedCount = 0;\r\n this.queries.forEach((queries, type) => {\r\n const hasUnresolved = queries.some((query: Query) => !query.resolved);\r\n if (hasUnresolved) {\r\n unresolvedCount = +1;\r\n }\r\n });\r\n return unresolvedCount;\r\n };\r\n\r\n public fetch(type: DataType, params: QueryParameters): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (params.take) {\r\n this.lastTake = +(params.take || 0);\r\n }\r\n\r\n removeNullAndUndefinedValues(params);\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n const index = queries.indexOf(query);\r\n if (query.resolved) {\r\n this.events.dispatch('data-client:fetched', {\r\n params,\r\n type: serviceClientQueryType,\r\n response: query.data,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n this.track(query.data, serviceClientQueryType, query.error);\r\n if (query.data && query.error) {\r\n reject({ error: query.error });\r\n } else {\r\n resolve(query.data);\r\n }\r\n } else {\r\n query.resolvers.push({ resolve, reject });\r\n }\r\n queries.splice(index, 1);\r\n queries.push(query);\r\n this.queries.set(serviceClientQueryType, queries);\r\n if (!query.loading && !query.resolved) {\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n } else {\r\n queries.push({\r\n params,\r\n resolved: false,\r\n loading: true,\r\n data: {},\r\n resolvers: [{ resolve, reject }],\r\n });\r\n this.queries.set(serviceClientQueryType, queries);\r\n\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n }).then((res) => deepClone(res));\r\n }\r\n\r\n // query the cached data\r\n public read(\r\n type: DataType,\r\n options: {\r\n select?: (data: any) => any; // either return all data by the DataType, or use an selector\r\n }\r\n ) {\r\n const { select } = options;\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n\r\n const result = queries.reduce<any[]>((acc, query) => {\r\n if (typeof select === 'function') {\r\n const match = select(query.data);\r\n if (match) {\r\n acc.push(match);\r\n }\r\n } else {\r\n acc.push(query.data);\r\n }\r\n return acc;\r\n }, []);\r\n return result;\r\n }\r\n\r\n public feedback(id: string, connection: string, feedback: FeedbackType): Promise<any> {\r\n return this.matchingClient.giveFeedback(id, connection, feedback);\r\n }\r\n\r\n private setLoadingStatus(\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n loading: boolean\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n query.loading = loading;\r\n }\r\n this.queries.set(type, queries);\r\n }\r\n\r\n private async runQuery(type: ServiceClientQueryType, params: QueryParameters) {\r\n const {\r\n searchPhrase = '',\r\n categories = '0',\r\n contactMethodCategoryId = '0',\r\n contactMethodId = '0',\r\n tagId = undefined,\r\n take = 5,\r\n connection = '',\r\n guideId,\r\n expandCategories = 'descendants',\r\n currentCategory,\r\n sorting = SortingType.POPULARITY_DESCENDING,\r\n guideIds = [],\r\n } = params;\r\n\r\n const trimmedPhrase = searchPhrase.toString().trim();\r\n if (await widgetIsHidden(this.container)) {\r\n return Promise.resolve();\r\n }\r\n\r\n switch (type) {\r\n case ServiceClientQueryType.Match: {\r\n const formatSortingValues = (sorting: string) => {\r\n const [type, direction] = sorting.split('-');\r\n const sortKeysMap = new Map([\r\n ['popularity', 'popularity'],\r\n ['alphabetic', 'title'],\r\n ['modified', 'lastModified'],\r\n ['published', 'firstPublished'],\r\n ]);\r\n\r\n return {\r\n type: sortKeysMap.get(type),\r\n direction: direction,\r\n };\r\n };\r\n\r\n if (guideIds.length) {\r\n return this.matchingClient\r\n .customRequest('guides', 'POST', {\r\n configuration: { ids: guideIds, take: +take },\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n sorting: formatSortingValues(sorting),\r\n ids: guideIds,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.MatchByCategory: {\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n groupByCategory: true,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n return this.matchingClient\r\n .getGuide(guideId, { connectionId: connection })\r\n .then((guide) => {\r\n if (guide) {\r\n this.handleResponse(guide, type, params);\r\n }\r\n })\r\n .catch((e) => {\r\n const error = {\r\n message: 'Something went wrong.',\r\n status: e.status || 400,\r\n };\r\n if (error.status === 404) {\r\n error.message = 'The guide could not be found.';\r\n }\r\n this.handleResponse({}, type, params, error);\r\n });\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n return this.matchingClient\r\n .getCategories({ phrase: trimmedPhrase, expand: expandCategories, tags: tagId })\r\n .then(\r\n (categories) => categories && this.handleResponse(categories, type, params)\r\n );\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n if (guideId) {\r\n return this.matchingClient\r\n .contactMethods(+guideId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n return this.matchingClient\r\n .contacts(+contactMethodCategoryId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n return this.matchingClient\r\n .getContactMethod(+contactMethodId, { guideId, currentCategory })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Tags: {\r\n return this.matchingClient\r\n .customRequest('tags', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return this.matchingClient\r\n .customRequest('tagsonguides', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n tags: tagId,\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n return this.matchingClient\r\n .customRequest('notices', 'GET', {\r\n configuration: {\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n }\r\n }\r\n\r\n handleResponse(\r\n data: any = {},\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n error?: DataError\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const existing = queries.find((q) => shallowCompare(q.params, params));\r\n if (existing) {\r\n const formatted = error ? error : formatLegacyData(type, data);\r\n this.track(formatted, type, error);\r\n existing.resolvers.forEach((r) => {\r\n if (error) {\r\n r.reject({ error: formatted });\r\n } else {\r\n r.resolve(formatted);\r\n }\r\n });\r\n\r\n const index = queries.indexOf(existing);\r\n if (index > -1) {\r\n queries.splice(index, 1);\r\n }\r\n queries.push({ ...existing, error, resolvers: [], data: formatted, resolved: true });\r\n this.setLoadingStatus(type, params, false);\r\n this.queries.set(type, queries);\r\n if (!error) {\r\n this.events.dispatch('data-client:fetched', {\r\n type,\r\n params,\r\n response: formatted,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n private fetchAllUnresolvedQueries() {\r\n for (const [queryType, queries] of this.queries) {\r\n queries\r\n .filter((query: Query) => !query.resolved)\r\n .forEach((query) => {\r\n this.runQuery(queryType, query.params);\r\n });\r\n }\r\n }\r\n\r\n private track(data: any = {}, type: ServiceClientQueryType, error?: DataError) {\r\n const widget = this.container.get('$widget');\r\n if (widget && !error) {\r\n widget.events.dispatch('tracking:service-client-response', {\r\n type,\r\n data,\r\n });\r\n } else if (widget) {\r\n widget.events.dispatch('tracking:service-client-error', {\r\n type,\r\n error,\r\n });\r\n }\r\n }\r\n\r\n static create(container: Container): Promise<DataClient> {\r\n return container\r\n .getAsync('matchingClient')\r\n .then((matchingClient) => new DataClient(container, matchingClient));\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\n\r\nexport const createContactMethodPlatform = (container: Container) => {\r\n return import('@telia-ace/knowledge-widget-adapters').then(({ ContactMethodPlatform }) => {\r\n return ContactMethodPlatform.create(container);\r\n });\r\n};\r\n\r\nexport const createDataClient = (container: Container) => {\r\n return import('../data').then(({ DataClient }) => {\r\n return DataClient.create(container);\r\n });\r\n};\r\n","import { Widget } from '@telia-ace/widget-types-grid';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { createContactMethodPlatform, createDataClient } from './services';\r\n\r\nexport default class ExtendedWidget extends Widget {\r\n constructor(container: Container) {\r\n super(container);\r\n\r\n this.container.registerAsync('contactMethods', () =>\r\n createContactMethodPlatform(this.container)\r\n );\r\n this.container.registerAsync('dataClient', () => createDataClient(this.container));\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "@telia-ace/knowledge-widget-types-grid",
3
- "version": "1.0.21",
3
+ "version": "1.0.25",
4
4
  "description": "Extended type definition for Grid widget.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
7
7
  "keywords": [
8
8
  "telia"
9
9
  ],
10
- "module": "dist/index.js",
10
+ "exports": {
11
+ "development": "./src/index.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "type": "module",
11
15
  "types": "dist/index.d.ts",
12
16
  "files": [
13
17
  "LICENSE.txt",
@@ -24,13 +28,13 @@
24
28
  },
25
29
  "sideEffects": false,
26
30
  "dependencies": {
27
- "@telia-ace/knowledge-serviceclient": "^1.0.5",
28
- "@telia-ace/knowledge-widget-adapters": "^1.0.21",
29
- "@telia-ace/knowledge-widget-core": "^1.0.12",
30
- "@telia-ace/widget-forms": "^1.0.16",
31
- "@telia-ace/widget-types-grid": "^1.0.16",
31
+ "@telia-ace/knowledge-serviceclient": "^1.0.6",
32
+ "@telia-ace/knowledge-widget-adapters": "^1.0.25",
33
+ "@telia-ace/knowledge-widget-core": "^1.0.16",
34
+ "@telia-ace/widget-forms": "^1.0.19",
35
+ "@telia-ace/widget-types-grid": "^1.0.19",
32
36
  "@telia-ace/widget-utilities": "^1.0.2",
33
37
  "@webprovisions/platform": "^1.1.2"
34
38
  },
35
- "gitHead": "cde52221fa0fcbc5936d9186958b0a21cbba9aa7"
39
+ "gitHead": "321711ae47ffe611d0ce45c51965e6441b4d894e"
36
40
  }
package/dist/index2.js DELETED
@@ -1,6 +0,0 @@
1
- export { DataClient, DataType, FeedbackType, ServiceClientQueryType, SortingType, determineServiceClientQueryType, formatLegacyData } from "./index.js";
2
- import "@telia-ace/widget-types-grid";
3
- import "@telia-ace/knowledge-widget-core";
4
- import "@telia-ace/widget-utilities";
5
- import "@telia-ace/widget-forms";
6
- //# sourceMappingURL=index2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}