@telia-ace/knowledge-widget-types-grid 1.0.28 → 1.0.30

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/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
- Copyright © 2021, Telia Company AB. All rights reserved.
2
-
3
- THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
- THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
- AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
1
+ Copyright © 2021, Telia Company AB. All rights reserved.
2
+
3
+ THIS PACKAGE AND CONTAINING SOFTWARE IS PART OF
4
+ THE HUMANY SERVICE. BY USING THIS SOFTWARE YOU
5
+ AGREE TO THE FOLLOWING TERMS AND CONDITIONS:
6
6
  http://www.humany.com/legal
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # `@telia-ace/knowledge-widget-types-grid`
2
-
3
- Extended type definition for ACE One Widget (exported as `GridWidget`).
4
- Adds DataClient and ContactMethodPlatform to the grid widget type.
1
+ # `@telia-ace/knowledge-widget-types-grid`
2
+
3
+ Extended type definition for ACE One Widget (exported as `GridWidget`).
4
+ Adds DataClient and ContactMethodPlatform to the grid widget type.
@@ -1,91 +1,91 @@
1
- import { ServiceClient } from '@telia-ace/knowledge-serviceclient';
2
- import { Container, EventManager } from '@webprovisions/platform';
3
- export declare type Subscriber = (...args: any[]) => void;
4
- export declare enum DataType {
5
- Guide = "guide",
6
- Guides = "guides",
7
- GuidesByCategory = "guides-by-category",
8
- RowNotifications = "row-notices",
9
- NotificationLists = "notification-lists",
10
- GuideCategories = "guide-categories",
11
- ContactMethodCategories = "contact-method-categories",
12
- ContactMethod = "contact-method",
13
- ContactMethods = "contact-methods",
14
- Tags = "tags",
15
- TagsOnGuides = "tagsonguides"
16
- }
17
- export declare type DataError = {
18
- status: number;
19
- message: string;
20
- };
21
- export declare enum ServiceClientQueryType {
22
- Match = "match",
23
- Categories = "categories",
24
- Guide = "guide",
25
- Contacts = "contacts",
26
- ContactMethod = "contact-method",
27
- MatchByCategory = "match-by-category",
28
- Tags = "tags",
29
- TagsOnGuides = "tagsonguides",
30
- Notifications = "notifications"
31
- }
32
- export declare enum FeedbackType {
33
- Positive = "Positive",
34
- Negative = "Negative"
35
- }
36
- export declare type QueryParameters = {
37
- guideId?: string | number;
38
- categories?: string | number | string[] | number[];
39
- tagId?: string | number;
40
- connection?: string;
41
- contactMethodCategoryId?: string | number;
42
- contactMethodId?: string | number;
43
- searchPhrase?: string | number;
44
- take?: string | number;
45
- [key: string]: any;
46
- expandCategories?: 'none' | 'children' | 'descendants';
47
- sorting?: SortingType;
48
- guideIds?: string[];
49
- };
50
- export declare enum SortingType {
51
- POPULARITY_DESCENDING = "popularity-descending",
52
- ALPHABETIC_ASCENDING = "alphabetic-ascending",
53
- ALPHABETIC_DESCENDING = "alphabetic-descending",
54
- MODIFIED_ASCENDING = "modified-ascending",
55
- MODIFIED_DESCENDING = "modified-descending",
56
- PUBLISHED_ASCENDING = "published-ascending",
57
- PUBLISHED_DESCENDING = "published-descending"
58
- }
59
- export declare type Query = {
60
- params: QueryParameters;
61
- resolved: boolean;
62
- loading: boolean;
63
- error?: DataError;
64
- data: any;
65
- resolvers: {
66
- resolve: (data: any) => void;
67
- reject: (data: any) => void;
68
- }[];
69
- };
70
- export declare const determineServiceClientQueryType: (type: DataType) => ServiceClientQueryType;
71
- export default class DataClient {
72
- private container;
73
- private matchingClient;
74
- private queries;
75
- private lastTake;
76
- events: EventManager;
77
- constructor(container: Container, matchingClient: ServiceClient);
78
- static getInstance(container: Container): Promise<DataClient>;
79
- private getUnresolvedQueries;
80
- fetch(type: DataType, params: QueryParameters): Promise<any>;
81
- read(type: DataType, options: {
82
- select?: (data: any) => any;
83
- }): any[];
84
- feedback(id: string, connection: string, feedback: FeedbackType): Promise<any>;
85
- private setLoadingStatus;
86
- private runQuery;
87
- handleResponse(data: any, type: ServiceClientQueryType, params: QueryParameters, error?: DataError): void;
88
- private fetchAllUnresolvedQueries;
89
- private track;
90
- static create(container: Container): Promise<DataClient>;
91
- }
1
+ import { ServiceClient } from '@telia-ace/knowledge-serviceclient';
2
+ import { Container, EventManager } from '@webprovisions/platform';
3
+ export declare type Subscriber = (...args: any[]) => void;
4
+ export declare enum DataType {
5
+ Guide = "guide",
6
+ Guides = "guides",
7
+ GuidesByCategory = "guides-by-category",
8
+ RowNotifications = "row-notices",
9
+ NotificationLists = "notification-lists",
10
+ GuideCategories = "guide-categories",
11
+ ContactMethodCategories = "contact-method-categories",
12
+ ContactMethod = "contact-method",
13
+ ContactMethods = "contact-methods",
14
+ Tags = "tags",
15
+ TagsOnGuides = "tagsonguides"
16
+ }
17
+ export declare type DataError = {
18
+ status: number;
19
+ message: string;
20
+ };
21
+ export declare enum ServiceClientQueryType {
22
+ Match = "match",
23
+ Categories = "categories",
24
+ Guide = "guide",
25
+ Contacts = "contacts",
26
+ ContactMethod = "contact-method",
27
+ MatchByCategory = "match-by-category",
28
+ Tags = "tags",
29
+ TagsOnGuides = "tagsonguides",
30
+ Notifications = "notifications"
31
+ }
32
+ export declare enum FeedbackType {
33
+ Positive = "Positive",
34
+ Negative = "Negative"
35
+ }
36
+ export declare type QueryParameters = {
37
+ guideId?: string | number;
38
+ categories?: string | number | string[] | number[];
39
+ tagId?: string | number;
40
+ connection?: string;
41
+ contactMethodCategoryId?: string | number;
42
+ contactMethodId?: string | number;
43
+ searchPhrase?: string | number;
44
+ take?: string | number;
45
+ [key: string]: any;
46
+ expandCategories?: 'none' | 'children' | 'descendants';
47
+ sorting?: SortingType;
48
+ guideIds?: string[];
49
+ };
50
+ export declare enum SortingType {
51
+ POPULARITY_DESCENDING = "popularity-descending",
52
+ ALPHABETIC_ASCENDING = "alphabetic-ascending",
53
+ ALPHABETIC_DESCENDING = "alphabetic-descending",
54
+ MODIFIED_ASCENDING = "modified-ascending",
55
+ MODIFIED_DESCENDING = "modified-descending",
56
+ PUBLISHED_ASCENDING = "published-ascending",
57
+ PUBLISHED_DESCENDING = "published-descending"
58
+ }
59
+ export declare type Query = {
60
+ params: QueryParameters;
61
+ resolved: boolean;
62
+ loading: boolean;
63
+ error?: DataError;
64
+ data: any;
65
+ resolvers: {
66
+ resolve: (data: any) => void;
67
+ reject: (data: any) => void;
68
+ }[];
69
+ };
70
+ export declare const determineServiceClientQueryType: (type: DataType) => ServiceClientQueryType;
71
+ export default class DataClient {
72
+ private container;
73
+ private matchingClient;
74
+ private queries;
75
+ private lastTake;
76
+ events: EventManager;
77
+ constructor(container: Container, matchingClient: ServiceClient);
78
+ static getInstance(container: Container): Promise<DataClient>;
79
+ private getUnresolvedQueries;
80
+ fetch(type: DataType, params: QueryParameters): Promise<any>;
81
+ read(type: DataType, options: {
82
+ select?: (data: any) => any;
83
+ }): any[];
84
+ feedback(id: string, connection: string, feedback: FeedbackType): Promise<any>;
85
+ private setLoadingStatus;
86
+ private runQuery;
87
+ handleResponse(data: any, type: ServiceClientQueryType, params: QueryParameters, error?: DataError): void;
88
+ private fetchAllUnresolvedQueries;
89
+ private track;
90
+ static create(container: Container): Promise<DataClient>;
91
+ }
@@ -1,3 +1,3 @@
1
- export * from './data-client';
2
- export { default as DataClient } from './data-client';
3
- export * from './legacy-conversion';
1
+ export * from './data-client';
2
+ export { default as DataClient } from './data-client';
3
+ export * from './legacy-conversion';
@@ -1,75 +1,75 @@
1
- import { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';
2
- import { Category, DialogItem, Guide, Notification, NotificationList, Tag } from '@telia-ace/knowledge-widget-core';
3
- import { DataError, ServiceClientQueryType } from './data-client';
4
- export declare type MatchResult = {
5
- guides: Guide[];
6
- matches: number;
7
- topNotifications: Notification[];
8
- middleNotifications: Notification[];
9
- bottomNotifications: Notification[];
10
- notificationLists: NotificationList[];
11
- tags: Tag[];
12
- byCategory: {
13
- id: string;
14
- guides: Guide[];
15
- matches: number;
16
- }[];
17
- };
18
- export declare type TagsResult = Tag[];
19
- export declare type CategoriesResult = {
20
- categories: Category[];
21
- matches: number;
22
- };
23
- export declare type NotificationResults = Pick<MatchResult, 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'>;
24
- export declare type GuideResult = {
25
- guide: {
26
- id: string;
27
- title: string;
28
- body: string;
29
- modified: string;
30
- modifiedBy: string | null;
31
- publishedBy: string | null;
32
- published: string;
33
- connection: string;
34
- categories: number[];
35
- hasHandover: boolean;
36
- allowFeedback: boolean;
37
- seoMetaDescription: string | null;
38
- seoAllowIndex: boolean | null;
39
- perspective: string | null;
40
- perspectives: {
41
- [key: string]: string;
42
- };
43
- translations?: {
44
- [key: string]: string;
45
- };
46
- };
47
- related: Guide[];
48
- dialog: DialogItem[];
49
- contactMethods: ContactMethod[];
50
- tags: Tag[];
51
- error?: DataError;
52
- };
53
- export declare type ContactsResult = {
54
- categories: Category[];
55
- contactMethods: ContactMethod[];
56
- topNotifications: Notification[];
57
- middleNotifications: Notification[];
58
- bottomNotifications: Notification[];
59
- notificationLists: NotificationList[];
60
- };
61
- export declare type SubmissionResult = {
62
- contactMethod?: ContactMethod;
63
- valid: boolean;
64
- };
65
- export declare const formatLegacyData: (type: ServiceClientQueryType, data: any) => Tag[] | MatchResult | CategoriesResult | ContactMethod | GuideResult | ContactsResult | {
66
- topNotifications: Notification[];
67
- middleNotifications: Notification[];
68
- bottomNotifications: Notification[];
69
- notificationLists: NotificationList[];
70
- } | {
71
- topNotifications?: undefined;
72
- middleNotifications?: undefined;
73
- bottomNotifications?: undefined;
74
- notificationLists?: undefined;
75
- };
1
+ import { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';
2
+ import { Category, DialogItem, Guide, Notification, NotificationList, Tag } from '@telia-ace/knowledge-widget-core';
3
+ import { DataError, ServiceClientQueryType } from './data-client';
4
+ export declare type MatchResult = {
5
+ guides: Guide[];
6
+ matches: number;
7
+ topNotifications: Notification[];
8
+ middleNotifications: Notification[];
9
+ bottomNotifications: Notification[];
10
+ notificationLists: NotificationList[];
11
+ tags: Tag[];
12
+ byCategory: {
13
+ id: string;
14
+ guides: Guide[];
15
+ matches: number;
16
+ }[];
17
+ };
18
+ export declare type TagsResult = Tag[];
19
+ export declare type CategoriesResult = {
20
+ categories: Category[];
21
+ matches: number;
22
+ };
23
+ export declare type NotificationResults = Pick<MatchResult, 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'>;
24
+ export declare type GuideResult = {
25
+ guide: {
26
+ id: string;
27
+ title: string;
28
+ body: string;
29
+ modified: string;
30
+ modifiedBy: string | null;
31
+ publishedBy: string | null;
32
+ published: string;
33
+ connection: string;
34
+ categories: number[];
35
+ hasHandover: boolean;
36
+ allowFeedback: boolean;
37
+ seoMetaDescription: string | null;
38
+ seoAllowIndex: boolean | null;
39
+ perspective: string | null;
40
+ perspectives: {
41
+ [key: string]: string;
42
+ };
43
+ translations?: {
44
+ [key: string]: string;
45
+ };
46
+ };
47
+ related: Guide[];
48
+ dialog: DialogItem[];
49
+ contactMethods: ContactMethod[];
50
+ tags: Tag[];
51
+ error?: DataError;
52
+ };
53
+ export declare type ContactsResult = {
54
+ categories: Category[];
55
+ contactMethods: ContactMethod[];
56
+ topNotifications: Notification[];
57
+ middleNotifications: Notification[];
58
+ bottomNotifications: Notification[];
59
+ notificationLists: NotificationList[];
60
+ };
61
+ export declare type SubmissionResult = {
62
+ contactMethod?: ContactMethod;
63
+ valid: boolean;
64
+ };
65
+ export declare const formatLegacyData: (type: ServiceClientQueryType, data: any) => Tag[] | MatchResult | CategoriesResult | ContactMethod | GuideResult | ContactsResult | {
66
+ topNotifications: Notification[];
67
+ middleNotifications: Notification[];
68
+ bottomNotifications: Notification[];
69
+ notificationLists: NotificationList[];
70
+ } | {
71
+ topNotifications?: undefined;
72
+ middleNotifications?: undefined;
73
+ bottomNotifications?: undefined;
74
+ notificationLists?: undefined;
75
+ };
@@ -12,4 +12,4 @@ export {
12
12
  c as determineServiceClientQueryType,
13
13
  l as formatLegacyData
14
14
  };
15
- //# sourceMappingURL=index.a2cdbc37.js.map
15
+ //# sourceMappingURL=index.aba60d50.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.aba60d50.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { Component, DetachedComponent, genericComponentStyling, NotFound, } from '@telia-ace/widget-types-grid';
2
- export * from './data';
3
- export { GridWidget } from './widget';
1
+ export { Component, DetachedComponent, genericComponentStyling, NotFound, } from '@telia-ace/widget-types-grid';
2
+ export * from './data';
3
+ export { GridWidget } from './widget';
package/dist/index.js CHANGED
@@ -1,16 +1,17 @@
1
- var j = Object.defineProperty, Y = Object.defineProperties;
2
- var z = Object.getOwnPropertyDescriptors;
3
- var P = Object.getOwnPropertySymbols;
4
- var J = Object.prototype.hasOwnProperty, X = Object.prototype.propertyIsEnumerable;
5
- var H = (i, e, t) => e in i ? j(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, F = (i, e) => {
1
+ var Y = Object.defineProperty, z = Object.defineProperties;
2
+ var J = Object.getOwnPropertyDescriptors;
3
+ var F = Object.getOwnPropertySymbols;
4
+ var X = Object.prototype.hasOwnProperty, Z = Object.prototype.propertyIsEnumerable;
5
+ var R = (i, e, t) => e in i ? Y(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, Q = (i, e) => {
6
6
  for (var t in e || (e = {}))
7
- J.call(e, t) && H(i, t, e[t]);
8
- if (P)
9
- for (var t of P(e))
10
- X.call(e, t) && H(i, t, e[t]);
7
+ X.call(e, t) && R(i, t, e[t]);
8
+ if (F)
9
+ for (var t of F(e))
10
+ Z.call(e, t) && R(i, t, e[t]);
11
11
  return i;
12
- }, Q = (i, e) => Y(i, z(e));
13
- var E = (i, e, t) => new Promise((n, s) => {
12
+ }, _ = (i, e) => z(i, J(e));
13
+ var A = (i, e, t) => (R(i, typeof e != "symbol" ? e + "" : e, t), t);
14
+ var S = (i, e, t) => new Promise((n, s) => {
14
15
  var a = (d) => {
15
16
  try {
16
17
  o(t.next(d));
@@ -26,35 +27,35 @@ var E = (i, e, t) => new Promise((n, s) => {
26
27
  }, o = (d) => d.done ? n(d.value) : Promise.resolve(d.value).then(a, c);
27
28
  o((t = t.apply(i, e)).next());
28
29
  });
29
- import { Widget as Z } from "@telia-ace/widget-types-grid";
30
- import { Component as Ct, DetachedComponent as bt, NotFound as yt, genericComponentStyling as Nt } from "@telia-ace/widget-types-grid";
31
- import { DialogItemType as R, WidgetRenderState as O } from "@telia-ace/knowledge-widget-core";
32
- import { removeNullAndUndefinedValues as tt, shallowCompare as S, deepClone as et } from "@telia-ace/widget-utilities";
33
- import { FormBuilder as _ } from "@telia-ace/widget-forms";
34
- const v = (i) => {
30
+ import { Widget as tt } from "@telia-ace/widget-types-grid";
31
+ import { Component as bt, DetachedComponent as yt, NotFound as vt, genericComponentStyling as Nt } from "@telia-ace/widget-types-grid";
32
+ import { DialogItemType as G, WidgetRenderState as B } from "@telia-ace/knowledge-widget-core";
33
+ import { removeNullAndUndefinedValues as et, shallowCompare as q, deepClone as it } from "@telia-ace/widget-utilities";
34
+ import { FormBuilder as W } from "@telia-ace/widget-forms";
35
+ const N = (i) => {
35
36
  if (i) {
36
37
  const { Type: e, Content: t } = i;
37
38
  if (e && t)
38
39
  return { type: e, content: t };
39
40
  }
40
- }, D = (i) => i.map((e) => {
41
+ }, T = (i) => i.map((e) => {
41
42
  const t = {
42
43
  id: e.Id.toString(),
43
44
  title: e.Name,
44
- symbol: v(e.DefaultIcon),
45
- activeSymbol: e.ActiveIcon && v(e.ActiveIcon),
45
+ symbol: N(e.DefaultIcon),
46
+ activeSymbol: e.ActiveIcon && N(e.ActiveIcon),
46
47
  description: e.Description || e.Attributes && e.Attributes.description || "",
47
48
  matches: e.GuidesCount
48
49
  };
49
- return e.Children && e.Children.length && (t.items = D(e.Children)), t;
50
+ return e.Children && e.Children.length && (t.items = T(e.Children)), t;
50
51
  }), y = (i, e) => i.filter(({ Type: t }) => t === e).map(({ Id: t, Title: n, Body: s }) => ({
51
52
  id: t.toString(),
52
53
  title: n,
53
54
  body: s
54
- })), G = (i) => i.map(({ Id: e, Title: t, DefaultIcon: n, ListNotices: s, Notices: a }) => ({
55
+ })), L = (i) => i.map(({ Id: e, Title: t, DefaultIcon: n, ListNotices: s, Notices: a }) => ({
55
56
  id: e.toString(),
56
57
  title: t,
57
- symbol: v(n),
58
+ symbol: N(n),
58
59
  defaultHeaderOptions: {
59
60
  visible: !!s.length
60
61
  },
@@ -65,7 +66,7 @@ const v = (i) => {
65
66
  modified: f,
66
67
  expandable: h === "listNotice"
67
68
  }))
68
- })), q = ({
69
+ })), O = ({
69
70
  Id: i,
70
71
  Title: e,
71
72
  DefaultIcon: t,
@@ -80,7 +81,7 @@ const v = (i) => {
80
81
  id: i.toString(),
81
82
  title: e,
82
83
  description: d,
83
- symbol: v(t),
84
+ symbol: N(t),
84
85
  clientName: g === "custom.adapter" ? I : g,
85
86
  expanded: !0,
86
87
  inline: !0,
@@ -90,21 +91,21 @@ const v = (i) => {
90
91
  const { displayTextBeforeClick: m, textBeforeClick: r } = C;
91
92
  m === "true" && (u.expanded = !1, u.title = r), g.indexOf("phone.text") > -1 ? u.body.phoneNumber = C.phoneNumber : u.body.freetext = C.freetext;
92
93
  }
93
- return (g.indexOf("chat.popup") > -1 || g.indexOf("link") > -1 || g === "custom.adapter" && s === "custom") && (u.body = C, u.body.confirmationFallback = a), g.indexOf("ace") > -1 && (u.body = C), o && o.HasValueComponents && (h ? u.body.form = _.fromLegacyForm(i.toString(), o, h).get() : u.body.form = _.fromLegacyForm(i.toString(), o).get(), c || (u.expanded = u.inline = !1)), u;
94
- }, A = (i = []) => i.map(({ Id: e, Title: t, TotalMatches: n, Symbol: s, DefaultIcon: a, ActiveIcon: c }) => ({
94
+ return (g.indexOf("chat.popup") > -1 || g.indexOf("link") > -1 || g === "custom.adapter" && s === "custom") && (u.body = C, u.body.confirmationFallback = a), g.indexOf("ace") > -1 && (u.body = C), o && o.HasValueComponents && (h ? u.body.form = W.fromLegacyForm(i.toString(), o, h).get() : u.body.form = W.fromLegacyForm(i.toString(), o).get(), c || (u.expanded = u.inline = !1)), u;
95
+ }, x = (i = []) => i.map(({ Id: e, Title: t, TotalMatches: n, Symbol: s, DefaultIcon: a, ActiveIcon: c }) => ({
95
96
  id: e.toString(),
96
97
  title: t,
97
98
  matches: n,
98
- symbol: v(a || s),
99
- defaultIcon: v(a),
100
- activeIcon: v(c)
101
- })), L = (i) => i.map(({ Id: e, Title: t, Tags: n, FirstPublishedDate: s, Modified: a }) => ({
99
+ symbol: N(a || s),
100
+ defaultIcon: N(a),
101
+ activeIcon: N(c)
102
+ })), D = (i) => i.map(({ Id: e, Title: t, Tags: n, FirstPublishedDate: s, Modified: a }) => ({
102
103
  id: e.toString(),
103
104
  title: t,
104
- tags: A(n),
105
+ tags: x(n),
105
106
  published: s,
106
107
  modified: a
107
- })), it = (i, e) => {
108
+ })), st = (i, e) => {
108
109
  switch (i) {
109
110
  case p.MatchByCategory:
110
111
  case p.Match: {
@@ -125,16 +126,16 @@ const v = (i) => {
125
126
  Tags: o,
126
127
  ByCategory: d
127
128
  } = e;
128
- return t.guides = L(n), t.matches = s, t.byCategory = (d || []).map(({ Id: h, Matches: f, TotalMatches: g }) => ({
129
+ return t.guides = D(n), t.matches = s, t.byCategory = (d || []).map(({ Id: h, Matches: f, TotalMatches: g }) => ({
129
130
  id: h,
130
- guides: L(f),
131
+ guides: D(f),
131
132
  matches: g
132
- })), t.tags = A(o), t.notificationLists = G(c || []), t.topNotifications = y(a || [], "noticeRowTop"), t.middleNotifications = y(a || [], "noticeRowMiddle"), t.bottomNotifications = y(a || [], "footerNotice"), t;
133
+ })), t.tags = x(o), t.notificationLists = L(c || []), t.topNotifications = y(a || [], "noticeRowTop"), t.middleNotifications = y(a || [], "noticeRowMiddle"), t.bottomNotifications = y(a || [], "footerNotice"), t;
133
134
  }
134
135
  case p.Categories: {
135
136
  const { Children: t, GuidesCountTotal: n } = e;
136
137
  return {
137
- categories: D(t || []),
138
+ categories: T(t || []),
138
139
  matches: n
139
140
  };
140
141
  }
@@ -156,11 +157,11 @@ const v = (i) => {
156
157
  Categories: m,
157
158
  Tags: r,
158
159
  SeoMetaDescription: l,
159
- SeoAllowIndex: k,
160
+ SeoAllowIndex: E,
160
161
  Perspectives: w,
161
- PerspectiveKey: B,
162
- Translations: T
163
- } = e, $ = B || Object.values(w).find((N) => N === o) || w.Default || null, U = {
162
+ PerspectiveKey: U,
163
+ Translations: P
164
+ } = e, V = U || Object.values(w).find((v) => v === o) || w.Default || null, H = {
164
165
  guide: {
165
166
  id: t.toString(),
166
167
  title: n,
@@ -174,75 +175,75 @@ const v = (i) => {
174
175
  hasHandover: f,
175
176
  allowFeedback: h,
176
177
  seoMetaDescription: l,
177
- seoAllowIndex: k,
178
+ seoAllowIndex: E,
178
179
  perspectives: w,
179
- perspective: $,
180
- translations: Object.keys(T || {}).reduce((N, x) => (N[x] = T[x].toString(), N), {})
180
+ perspective: V,
181
+ translations: Object.keys(P || {}).reduce((v, k) => (v[k] = P[k].toString(), v), {})
181
182
  },
182
- related: L(a || []),
183
+ related: D(a || []),
183
184
  dialog: [],
184
- contactMethods: (d || []).map((N) => q(N)),
185
- tags: A(r)
185
+ contactMethods: (d || []).map((v) => O(v)),
186
+ tags: x(r)
186
187
  };
187
- return (c || []).forEach(({ CanAccess: N, Description: x, ConnectionId: V, Properties: b }) => {
188
- if (!N)
188
+ return (c || []).forEach(({ CanAccess: v, Description: k, ConnectionId: j, Properties: b }) => {
189
+ if (!v)
189
190
  return;
190
191
  const M = {
191
192
  id: t.toString(),
192
- title: x,
193
- connection: V,
194
- type: R.default,
193
+ title: k,
194
+ connection: j,
195
+ type: G.default,
195
196
  parent: {
196
197
  id: t.toString(),
197
198
  title: n,
198
- tags: A(r)
199
+ tags: x(r)
199
200
  }
200
201
  };
201
202
  if (b.Type === "Guide" || b.Type === "Link")
202
203
  switch (b.Id && (M.id = b.Id.toString()), b.Uri && (M.href = b.Uri), b.Target && (M.target = b.Target), b.Type) {
203
204
  case "Guide":
204
- M.type = R.guide;
205
+ M.type = G.guide;
205
206
  break;
206
207
  case "Link":
207
- M.type = R.link;
208
+ M.type = G.link;
208
209
  break;
209
210
  }
210
- U.dialog.push(M);
211
- }), U;
211
+ H.dialog.push(M);
212
+ }), H;
212
213
  }
213
214
  case p.Contacts: {
214
215
  const { Children: t, Matches: n, Notices: s, NoticeLists: a } = e;
215
216
  return {
216
- contactMethods: (n || []).map((o) => q(o)),
217
- categories: D(t || []),
217
+ contactMethods: (n || []).map((o) => O(o)),
218
+ categories: T(t || []),
218
219
  topNotifications: y(s || [], "noticeRowTop"),
219
220
  middleNotifications: y(s || [], "noticeRowMiddle"),
220
221
  bottomNotifications: y(s || [], "footerNotice"),
221
- notificationLists: G(a || [])
222
+ notificationLists: L(a || [])
222
223
  };
223
224
  }
224
225
  case p.ContactMethod: {
225
226
  const { ContactMethod: t } = e;
226
- return q(t || {});
227
+ return O(t || {});
227
228
  }
228
229
  case p.Tags:
229
230
  case p.TagsOnGuides:
230
- return A(e || []);
231
+ return x(e || []);
231
232
  case p.Notifications: {
232
233
  const { Notices: t, NoticeLists: n } = e;
233
234
  return {
234
235
  topNotifications: y(t || [], "noticeRowTop"),
235
236
  middleNotifications: y(t || [], "noticeRowMiddle"),
236
237
  bottomNotifications: y(t || [], "footerNotice"),
237
- notificationLists: G(n || [])
238
+ notificationLists: L(n || [])
238
239
  };
239
240
  }
240
241
  default:
241
242
  return {};
242
243
  }
243
244
  };
244
- var st = /* @__PURE__ */ ((i) => (i.Guide = "guide", i.Guides = "guides", i.GuidesByCategory = "guides-by-category", i.RowNotifications = "row-notices", i.NotificationLists = "notification-lists", i.GuideCategories = "guide-categories", i.ContactMethodCategories = "contact-method-categories", i.ContactMethod = "contact-method", i.ContactMethods = "contact-methods", i.Tags = "tags", i.TagsOnGuides = "tagsonguides", i))(st || {}), p = /* @__PURE__ */ ((i) => (i.Match = "match", i.Categories = "categories", i.Guide = "guide", i.Contacts = "contacts", i.ContactMethod = "contact-method", i.MatchByCategory = "match-by-category", i.Tags = "tags", i.TagsOnGuides = "tagsonguides", i.Notifications = "notifications", i))(p || {}), nt = /* @__PURE__ */ ((i) => (i.Positive = "Positive", i.Negative = "Negative", i))(nt || {}), ot = /* @__PURE__ */ ((i) => (i.POPULARITY_DESCENDING = "popularity-descending", i.ALPHABETIC_ASCENDING = "alphabetic-ascending", i.ALPHABETIC_DESCENDING = "alphabetic-descending", i.MODIFIED_ASCENDING = "modified-ascending", i.MODIFIED_DESCENDING = "modified-descending", i.PUBLISHED_ASCENDING = "published-ascending", i.PUBLISHED_DESCENDING = "published-descending", i))(ot || {});
245
- const W = (i) => {
245
+ var nt = /* @__PURE__ */ ((i) => (i.Guide = "guide", i.Guides = "guides", i.GuidesByCategory = "guides-by-category", i.RowNotifications = "row-notices", i.NotificationLists = "notification-lists", i.GuideCategories = "guide-categories", i.ContactMethodCategories = "contact-method-categories", i.ContactMethod = "contact-method", i.ContactMethods = "contact-methods", i.Tags = "tags", i.TagsOnGuides = "tagsonguides", i))(nt || {}), p = /* @__PURE__ */ ((i) => (i.Match = "match", i.Categories = "categories", i.Guide = "guide", i.Contacts = "contacts", i.ContactMethod = "contact-method", i.MatchByCategory = "match-by-category", i.Tags = "tags", i.TagsOnGuides = "tagsonguides", i.Notifications = "notifications", i))(p || {}), ot = /* @__PURE__ */ ((i) => (i.Positive = "Positive", i.Negative = "Negative", i))(ot || {}), at = /* @__PURE__ */ ((i) => (i.POPULARITY_DESCENDING = "popularity-descending", i.ALPHABETIC_ASCENDING = "alphabetic-ascending", i.ALPHABETIC_DESCENDING = "alphabetic-descending", i.MODIFIED_ASCENDING = "modified-ascending", i.MODIFIED_DESCENDING = "modified-descending", i.PUBLISHED_ASCENDING = "published-ascending", i.PUBLISHED_DESCENDING = "published-descending", i))(at || {});
246
+ const K = (i) => {
246
247
  switch (i) {
247
248
  case "guides":
248
249
  return "match";
@@ -267,19 +268,23 @@ const W = (i) => {
267
268
  default:
268
269
  throw "error";
269
270
  }
270
- }, at = (i) => E(void 0, null, function* () {
271
+ }, rt = (i) => S(void 0, null, function* () {
271
272
  const { invoke: e } = i.get("$widget");
272
- return (yield e("renderState")) === O.hidden;
273
+ return (yield e("renderState")) === B.hidden;
273
274
  });
274
- class K {
275
+ class $ {
275
276
  constructor(e, t) {
276
- this.container = e, this.matchingClient = t, this.queries = /* @__PURE__ */ new Map(), this.lastTake = 0, this.getUnresolvedQueries = () => {
277
- let n = 0;
278
- return this.queries.forEach((s, a) => {
279
- s.some((o) => !o.resolved) && (n = 1);
280
- }), n;
281
- }, this.events = e.get("$widget").events, this.events.subscribe("widget:settings-updated", () => this.queries = /* @__PURE__ */ new Map()), this.events.subscribe("widget:render-state-changed", (n, { next: s, previous: a }) => {
282
- a === O.hidden && s === O.open && this.fetchAllUnresolvedQueries();
277
+ A(this, "queries", /* @__PURE__ */ new Map());
278
+ A(this, "lastTake", 0);
279
+ A(this, "events");
280
+ A(this, "getUnresolvedQueries", () => {
281
+ let e = 0;
282
+ return this.queries.forEach((t, n) => {
283
+ t.some((a) => !a.resolved) && (e = 1);
284
+ }), e;
285
+ });
286
+ this.container = e, this.matchingClient = t, this.events = e.get("$widget").events, this.events.subscribe("widget:settings-updated", () => this.queries = /* @__PURE__ */ new Map()), this.events.subscribe("widget:render-state-changed", (n, { next: s, previous: a }) => {
287
+ a === B.hidden && s === B.open && this.fetchAllUnresolvedQueries();
283
288
  });
284
289
  }
285
290
  static getInstance(e) {
@@ -287,8 +292,8 @@ class K {
287
292
  }
288
293
  fetch(e, t) {
289
294
  return new Promise((n, s) => {
290
- t.take && (this.lastTake = +(t.take || 0)), tt(t);
291
- const a = W(e), c = this.queries.get(a) || [], o = c.find((d) => S(d.params, t));
295
+ t.take && (this.lastTake = +(t.take || 0)), et(t);
296
+ const a = K(e), c = this.queries.get(a) || [], o = c.find((d) => q(d.params, t));
292
297
  if (o) {
293
298
  const d = c.indexOf(o);
294
299
  if (o.resolved ? (this.events.dispatch("data-client:fetched", {
@@ -306,10 +311,10 @@ class K {
306
311
  data: {},
307
312
  resolvers: [{ resolve: n, reject: s }]
308
313
  }), this.queries.set(a, c), this.runQuery(a, t);
309
- }).then((n) => et(n));
314
+ }).then((n) => it(n));
310
315
  }
311
316
  read(e, t) {
312
- const { select: n } = t, s = W(e);
317
+ const { select: n } = t, s = K(e);
313
318
  return (this.queries.get(s) || []).reduce((o, d) => {
314
319
  if (typeof n == "function") {
315
320
  const h = n(d.data);
@@ -323,11 +328,11 @@ class K {
323
328
  return this.matchingClient.giveFeedback(e, t, n);
324
329
  }
325
330
  setLoadingStatus(e, t, n) {
326
- const s = this.queries.get(e) || [], a = s.find((c) => S(c.params, t));
331
+ const s = this.queries.get(e) || [], a = s.find((c) => q(c.params, t));
327
332
  a && (a.loading = n), this.queries.set(e, s);
328
333
  }
329
334
  runQuery(e, t) {
330
- return E(this, null, function* () {
335
+ return S(this, null, function* () {
331
336
  const {
332
337
  searchPhrase: n = "",
333
338
  categories: s = "0",
@@ -342,19 +347,19 @@ class K {
342
347
  sorting: I = "popularity-descending",
343
348
  guideIds: u = []
344
349
  } = t, m = n.toString().trim();
345
- if (yield at(this.container))
350
+ if (yield rt(this.container))
346
351
  return Promise.resolve();
347
352
  switch (e) {
348
353
  case "match": {
349
354
  const r = (l) => {
350
- const [k, w] = l.split("-");
355
+ const [E, w] = l.split("-");
351
356
  return {
352
357
  type: (/* @__PURE__ */ new Map([
353
358
  ["popularity", "popularity"],
354
359
  ["alphabetic", "title"],
355
360
  ["modified", "lastModified"],
356
361
  ["published", "firstPublished"]
357
- ])).get(k),
362
+ ])).get(E),
358
363
  direction: w
359
364
  };
360
365
  };
@@ -386,7 +391,9 @@ class K {
386
391
  l.status === 404 && (l.message = "The guide could not be found."), this.handleResponse({}, e, t, l);
387
392
  });
388
393
  case "categories":
389
- return this.matchingClient.getCategories({ phrase: m, expand: g, tags: o }).then((r) => r && this.handleResponse(r, e, t));
394
+ return this.matchingClient.getCategories({ phrase: m, expand: g, tags: o }).then(
395
+ (r) => r && this.handleResponse(r, e, t)
396
+ );
390
397
  case "contacts":
391
398
  return f ? this.matchingClient.contactMethods(+f, { phrase: m }).then((r) => r && this.handleResponse(r, e, t)) : this.matchingClient.contacts(+a, { phrase: m }).then((r) => r && this.handleResponse(r, e, t));
392
399
  case "contact-method":
@@ -419,14 +426,14 @@ class K {
419
426
  });
420
427
  }
421
428
  handleResponse(e = {}, t, n, s) {
422
- const a = this.queries.get(t) || [], c = a.find((o) => S(o.params, n));
429
+ const a = this.queries.get(t) || [], c = a.find((o) => q(o.params, n));
423
430
  if (c) {
424
- const o = s || it(t, e);
431
+ const o = s || st(t, e);
425
432
  this.track(o, t, s), c.resolvers.forEach((h) => {
426
433
  s ? h.reject({ error: o }) : h.resolve(o);
427
434
  });
428
435
  const d = a.indexOf(c);
429
- d > -1 && a.splice(d, 1), a.push(Q(F({}, c), { error: s, resolvers: [], data: o, resolved: !0 })), this.setLoadingStatus(t, n, !1), this.queries.set(t, a), s || this.events.dispatch("data-client:fetched", {
436
+ d > -1 && a.splice(d, 1), a.push(_(Q({}, c), { error: s, resolvers: [], data: o, resolved: !0 })), this.setLoadingStatus(t, n, !1), this.queries.set(t, a), s || this.events.dispatch("data-client:fetched", {
430
437
  type: t,
431
438
  params: n,
432
439
  response: o,
@@ -451,27 +458,30 @@ class K {
451
458
  });
452
459
  }
453
460
  static create(e) {
454
- return e.getAsync("matchingClient").then((t) => new K(e, t));
461
+ return e.getAsync("matchingClient").then((t) => new $(e, t));
455
462
  }
456
463
  }
457
- const rt = (i) => import("@telia-ace/knowledge-widget-adapters").then(({ ContactMethodPlatform: e }) => e.create(i)), ct = (i) => import("./index.a2cdbc37.js").then(({ DataClient: e }) => e.create(i));
458
- class ft extends Z {
464
+ const ct = (i) => import("@telia-ace/knowledge-widget-adapters").then(({ ContactMethodPlatform: e }) => e.create(i)), dt = (i) => import("./index.aba60d50.js").then(({ DataClient: e }) => e.create(i));
465
+ class mt extends tt {
459
466
  constructor(e) {
460
- super(e), this.container.registerAsync("contactMethods", () => rt(this.container)), this.container.registerAsync("dataClient", () => ct(this.container));
467
+ super(e), this.container.registerAsync(
468
+ "contactMethods",
469
+ () => ct(this.container)
470
+ ), this.container.registerAsync("dataClient", () => dt(this.container));
461
471
  }
462
472
  }
463
473
  export {
464
- Ct as Component,
465
- K as DataClient,
466
- st as DataType,
467
- bt as DetachedComponent,
468
- nt as FeedbackType,
469
- ft as GridWidget,
470
- yt as NotFound,
474
+ bt as Component,
475
+ $ as DataClient,
476
+ nt as DataType,
477
+ yt as DetachedComponent,
478
+ ot as FeedbackType,
479
+ mt as GridWidget,
480
+ vt as NotFound,
471
481
  p as ServiceClientQueryType,
472
- ot as SortingType,
473
- W as determineServiceClientQueryType,
474
- it as formatLegacyData,
482
+ at as SortingType,
483
+ K as determineServiceClientQueryType,
484
+ st as formatLegacyData,
475
485
  Nt as genericComponentStyling
476
486
  };
477
487
  //# sourceMappingURL=index.js.map
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 {\n CategoryApiResponse,\n ContactApiResponse,\n ContactCategoriesApiResponse,\n ContactMethodApiResponse,\n GuideApiResponse,\n GuideCategoriesApiResponse,\n GuideMatchApiResponse,\n GuideViewApiResponse,\n NoticeApiResponse,\n NoticeListApiResponse,\n TagListApiResponse,\n ValidationApiResult,\n} from '@telia-ace/knowledge-serviceclient';\nimport { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';\nimport {\n Category,\n DialogItem,\n DialogItemType,\n Guide,\n Notification,\n NotificationList,\n Symbol,\n Tag,\n} from '@telia-ace/knowledge-widget-core';\nimport { FormBuilder } from '@telia-ace/widget-forms';\nimport { DataError, ServiceClientQueryType } from './data-client';\n\nexport type MatchResult = {\n guides: Guide[];\n matches: number;\n topNotifications: Notification[];\n middleNotifications: Notification[];\n bottomNotifications: Notification[];\n notificationLists: NotificationList[];\n tags: Tag[];\n byCategory: { id: string; guides: Guide[]; matches: number }[];\n};\n\nexport type TagsResult = Tag[];\n\nexport type CategoriesResult = {\n categories: Category[];\n matches: number;\n};\n\nexport type NotificationResults = Pick<\n MatchResult,\n 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'\n>;\n\nexport type GuideResult = {\n guide: {\n id: string;\n title: string;\n body: string;\n modified: string;\n modifiedBy: string | null;\n publishedBy: string | null;\n published: string;\n connection: string;\n categories: number[];\n hasHandover: boolean;\n allowFeedback: boolean;\n seoMetaDescription: string | null;\n seoAllowIndex: boolean | null;\n perspective: string | null;\n perspectives: { [key: string]: string };\n translations?: { [key: string]: string };\n };\n related: Guide[];\n dialog: DialogItem[];\n contactMethods: ContactMethod[];\n tags: Tag[];\n error?: DataError;\n};\n\nexport type ContactsResult = {\n categories: Category[];\n contactMethods: ContactMethod[];\n topNotifications: Notification[];\n middleNotifications: Notification[];\n bottomNotifications: Notification[];\n notificationLists: NotificationList[];\n};\n\nexport type SubmissionResult = {\n contactMethod?: ContactMethod;\n valid: boolean;\n};\n\nconst convertLegacySymbol = (symbol?: { Type: string; Content: string }): Symbol | undefined => {\n if (symbol) {\n const { Type, Content } = symbol;\n if (Type && Content) {\n return { type: Type, content: Content };\n }\n }\n};\n\nconst mapLegacyCategoriesRecursively = (categories: CategoryApiResponse[]): Category[] => {\n return categories.map((c) => {\n const category: Category = {\n id: c.Id.toString(),\n title: c.Name,\n symbol: convertLegacySymbol(c.DefaultIcon),\n activeSymbol: c.ActiveIcon && convertLegacySymbol(c.ActiveIcon),\n description: c.Description || (c.Attributes && c.Attributes.description) || '',\n matches: c.GuidesCount,\n };\n if (c.Children && c.Children.length) {\n category.items = mapLegacyCategoriesRecursively(c.Children);\n }\n return category;\n });\n};\n\nconst mapNotices = (source: NoticeApiResponse[], type: string): Notification[] => {\n return source\n .filter(({ Type }) => Type === type)\n .map(({ Id, Title, Body }) => ({\n id: Id.toString(),\n title: Title,\n body: Body,\n }));\n};\n\nconst mapNotificationLists = (source: NoticeListApiResponse[]): NotificationList[] => {\n return source.map(({ Id, Title, DefaultIcon, ListNotices, Notices }) => ({\n id: Id.toString(),\n title: Title,\n symbol: convertLegacySymbol(DefaultIcon),\n defaultHeaderOptions: {\n visible: !!ListNotices.length,\n },\n notifications: (ListNotices || [])\n .concat(Notices || [])\n .map(({ Id, Title, Body, Type, Modified }) => ({\n id: Id.toString(),\n title: Title,\n body: Body,\n modified: Modified,\n expandable: Type === 'listNotice',\n })),\n }));\n};\n\nconst mapContactMethodSettings = (\n {\n Id,\n Title,\n DefaultIcon,\n Exits: [Exit],\n ExitType,\n ConfirmationText,\n ExpandFormAutomatically,\n Form,\n Description,\n }: ContactApiResponse,\n Validation?: ValidationApiResult\n): ContactMethod => {\n const { Adapter } = Exit || { Adapter: {} };\n const { ClientName = '', Settings = {}, CustomClientName = '' } = Adapter;\n\n const settings: ContactMethod = {\n id: Id.toString(),\n title: Title,\n description: Description,\n symbol: convertLegacySymbol(DefaultIcon),\n clientName: ClientName === 'custom.adapter' ? CustomClientName : ClientName,\n expanded: true,\n inline: true,\n body: {},\n };\n\n if (ClientName.indexOf('phone') > -1 || ClientName.indexOf('freetext') > -1) {\n const { displayTextBeforeClick, textBeforeClick } = Settings;\n if (displayTextBeforeClick === 'true') {\n settings.expanded = false;\n settings.title = textBeforeClick;\n }\n\n if (ClientName.indexOf('phone.text') > -1) {\n settings.body.phoneNumber = Settings.phoneNumber;\n } else {\n settings.body.freetext = Settings.freetext;\n }\n }\n\n if (\n ClientName.indexOf('chat.popup') > -1 ||\n ClientName.indexOf('link') > -1 ||\n (ClientName === 'custom.adapter' && ExitType === 'custom')\n ) {\n settings.body = Settings;\n settings.body.confirmationFallback = ConfirmationText;\n }\n\n if (ClientName.indexOf('ace') > -1) {\n settings.body = Settings;\n }\n\n if (Form && Form.HasValueComponents) {\n if (Validation) {\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form, Validation).get();\n } else {\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form).get();\n }\n if (!ExpandFormAutomatically) {\n settings.expanded = settings.inline = false;\n }\n }\n\n return settings;\n};\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\ntype ExtendedGuideMatchApiResponse = Modify<\n GuideMatchApiResponse,\n {\n ByCategory: { Id: string; Matches: GuideApiResponse[]; TotalMatches: number }[];\n }\n>;\n\nconst mapTags = (tags: TagListApiResponse[] = []): Tag[] => {\n return tags.map(({ Id, Title, TotalMatches, Symbol, DefaultIcon, ActiveIcon }) => ({\n id: Id.toString(),\n title: Title,\n matches: TotalMatches,\n symbol: convertLegacySymbol(DefaultIcon || Symbol),\n defaultIcon: convertLegacySymbol(DefaultIcon),\n activeIcon: convertLegacySymbol(ActiveIcon),\n }));\n};\n\nconst mapGuides = (guides: GuideApiResponse[]) => {\n return guides.map(({ Id, Title, Tags, FirstPublishedDate, Modified }) => ({\n id: Id.toString(),\n title: Title,\n tags: mapTags(Tags),\n published: FirstPublishedDate,\n modified: Modified,\n }));\n};\n\nexport const formatLegacyData = (type: ServiceClientQueryType, data: any) => {\n switch (type) {\n case ServiceClientQueryType.MatchByCategory:\n case ServiceClientQueryType.Match: {\n const result: MatchResult = {\n guides: [],\n matches: 0,\n topNotifications: [],\n middleNotifications: [],\n bottomNotifications: [],\n notificationLists: [],\n tags: [],\n byCategory: [],\n };\n const {\n Matches,\n TotalMatches,\n Notices,\n NoticeLists,\n Tags,\n ByCategory,\n }: ExtendedGuideMatchApiResponse = data;\n\n result.guides = mapGuides(Matches);\n\n result.matches = TotalMatches;\n\n result.byCategory = (ByCategory || []).map(({ Id, Matches, TotalMatches }) => ({\n id: Id,\n guides: mapGuides(Matches),\n matches: TotalMatches,\n }));\n\n result.tags = mapTags(Tags);\n\n result.notificationLists = mapNotificationLists(NoticeLists || []);\n\n result.topNotifications = mapNotices(Notices || [], 'noticeRowTop');\n\n result.middleNotifications = mapNotices(Notices || [], 'noticeRowMiddle');\n\n result.bottomNotifications = mapNotices(Notices || [], 'footerNotice');\n\n return result;\n }\n case ServiceClientQueryType.Categories: {\n const { Children, GuidesCountTotal }: GuideCategoriesApiResponse = data;\n\n const result: CategoriesResult = {\n categories: mapLegacyCategoriesRecursively(Children || []),\n matches: GuidesCountTotal,\n };\n\n return result;\n }\n case ServiceClientQueryType.Guide: {\n const {\n Id,\n Title,\n Body,\n Related,\n Options,\n ConnectionId,\n ContactMethods,\n EnableFeedback,\n HandoverExists,\n FirstPublishedDate,\n Modified,\n ModifiedByDisplayName,\n FirstPublishedByDisplayName,\n Categories,\n Tags,\n SeoMetaDescription,\n SeoAllowIndex,\n Perspectives,\n PerspectiveKey,\n Translations,\n }: GuideViewApiResponse = data;\n\n /* \n PerspectiveKey is always null when on the \"top level\" of a dialog tree\n OR when navigating down a dialog tree in the \"Default answer version\"\n Note: The \"Default answer version\" is not the same as a given guides\n default answer version. The \"Default answer version\" is always the answer\n version in Perspectives with the key \"Default\".\n */\n const perspective =\n PerspectiveKey ||\n Object.values(Perspectives).find((connection) => connection === ConnectionId) ||\n Perspectives['Default'] ||\n null;\n\n const result: GuideResult = {\n guide: {\n id: Id.toString(),\n title: Title,\n body: Body,\n modified: Modified,\n published: FirstPublishedDate,\n modifiedBy: ModifiedByDisplayName,\n publishedBy: FirstPublishedByDisplayName,\n connection: ConnectionId,\n categories: Categories,\n hasHandover: HandoverExists,\n allowFeedback: EnableFeedback,\n seoMetaDescription: SeoMetaDescription,\n seoAllowIndex: SeoAllowIndex,\n perspectives: Perspectives,\n perspective,\n translations: Object.keys(Translations || {}).reduce<{\n [key: string]: string;\n }>((acc, key) => {\n acc[key] = Translations[key].toString();\n return acc;\n }, {}),\n },\n related: mapGuides(Related || []),\n dialog: [],\n contactMethods: (ContactMethods || []).map((cm) => mapContactMethodSettings(cm)),\n tags: mapTags(Tags),\n };\n\n (Options || []).forEach(({ CanAccess, Description, ConnectionId, Properties }) => {\n if (!CanAccess) {\n return;\n }\n\n const item: DialogItem = {\n id: Id.toString(),\n title: Description,\n connection: ConnectionId,\n type: DialogItemType.default,\n parent: {\n id: Id.toString(),\n title: Title,\n tags: mapTags(Tags),\n },\n };\n\n if (Properties.Type === 'Guide' || Properties.Type === 'Link') {\n Properties.Id && (item.id = Properties.Id.toString());\n Properties.Uri && (item.href = Properties.Uri);\n Properties.Target && (item.target = Properties.Target);\n switch (Properties.Type) {\n case 'Guide':\n item.type = DialogItemType.guide;\n break;\n case 'Link':\n item.type = DialogItemType.link;\n break;\n }\n }\n\n result.dialog.push(item);\n });\n\n return result;\n }\n case ServiceClientQueryType.Contacts: {\n const { Children, Matches, Notices, NoticeLists }: ContactCategoriesApiResponse = data;\n\n const result: ContactsResult = {\n contactMethods: (Matches || []).map((cm) => mapContactMethodSettings(cm)),\n categories: mapLegacyCategoriesRecursively(Children || []),\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\n notificationLists: mapNotificationLists(NoticeLists || []),\n };\n\n return result;\n }\n case ServiceClientQueryType.ContactMethod: {\n const { ContactMethod }: ContactMethodApiResponse = data;\n\n return mapContactMethodSettings(ContactMethod || {});\n }\n case ServiceClientQueryType.Tags:\n case ServiceClientQueryType.TagsOnGuides: {\n return mapTags(data || []);\n }\n case ServiceClientQueryType.Notifications: {\n const { Notices, NoticeLists } = data;\n\n return {\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\n notificationLists: mapNotificationLists(NoticeLists || []),\n };\n }\n default:\n return {};\n }\n};\n","import { ServiceClient } from '@telia-ace/knowledge-serviceclient';\nimport { WidgetRenderState } from '@telia-ace/knowledge-widget-core';\nimport {\n deepClone,\n removeNullAndUndefinedValues,\n shallowCompare,\n} from '@telia-ace/widget-utilities';\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\nimport { formatLegacyData } from './legacy-conversion';\n\nexport type Subscriber = (...args: any[]) => void;\n\nexport enum DataType {\n Guide = 'guide',\n Guides = 'guides',\n GuidesByCategory = 'guides-by-category',\n RowNotifications = 'row-notices',\n NotificationLists = 'notification-lists',\n GuideCategories = 'guide-categories',\n ContactMethodCategories = 'contact-method-categories',\n ContactMethod = 'contact-method',\n ContactMethods = 'contact-methods',\n Tags = 'tags',\n TagsOnGuides = 'tagsonguides',\n}\n\nexport type DataError = {\n status: number;\n message: string;\n};\n\nexport enum ServiceClientQueryType {\n Match = 'match',\n Categories = 'categories',\n Guide = 'guide',\n Contacts = 'contacts',\n ContactMethod = 'contact-method',\n MatchByCategory = 'match-by-category',\n Tags = 'tags',\n TagsOnGuides = 'tagsonguides',\n Notifications = 'notifications',\n}\n\nexport enum FeedbackType {\n Positive = 'Positive',\n Negative = 'Negative',\n}\n\nexport type QueryParameters = {\n guideId?: string | number;\n categories?: string | number | string[] | number[];\n tagId?: string | number;\n connection?: string;\n\n contactMethodCategoryId?: string | number;\n contactMethodId?: string | number;\n\n searchPhrase?: string | number;\n take?: string | number;\n [key: string]: any;\n\n expandCategories?: 'none' | 'children' | 'descendants';\n sorting?: SortingType;\n guideIds?: string[];\n};\n\nexport enum SortingType {\n POPULARITY_DESCENDING = 'popularity-descending',\n ALPHABETIC_ASCENDING = 'alphabetic-ascending',\n ALPHABETIC_DESCENDING = 'alphabetic-descending',\n MODIFIED_ASCENDING = 'modified-ascending',\n MODIFIED_DESCENDING = 'modified-descending',\n PUBLISHED_ASCENDING = 'published-ascending',\n PUBLISHED_DESCENDING = 'published-descending',\n}\n\nexport type Query = {\n params: QueryParameters;\n resolved: boolean;\n loading: boolean;\n error?: DataError;\n data: any;\n resolvers: {\n resolve: (data: any) => void;\n reject: (data: any) => void;\n }[];\n};\n\nexport const determineServiceClientQueryType = (type: DataType): ServiceClientQueryType => {\n switch (type) {\n case DataType.Guides:\n return ServiceClientQueryType.Match;\n case DataType.GuidesByCategory:\n return ServiceClientQueryType.MatchByCategory;\n case DataType.Guide:\n return ServiceClientQueryType.Guide;\n case DataType.GuideCategories:\n return ServiceClientQueryType.Categories;\n case DataType.ContactMethodCategories:\n case DataType.ContactMethods:\n return ServiceClientQueryType.Contacts;\n case DataType.ContactMethod:\n return ServiceClientQueryType.ContactMethod;\n case DataType.Tags:\n return ServiceClientQueryType.Tags;\n case DataType.TagsOnGuides:\n return ServiceClientQueryType.TagsOnGuides;\n case DataType.NotificationLists:\n case DataType.RowNotifications:\n return ServiceClientQueryType.Notifications;\n default:\n throw 'error';\n }\n};\n\nconst widgetIsHidden = async (container: Container) => {\n const { invoke } = container.get('$widget');\n const renderState = await invoke('renderState');\n return renderState === WidgetRenderState.hidden;\n};\n\nexport default class DataClient {\n private queries: Map<ServiceClientQueryType, Query[]> = new Map();\n private lastTake: number = 0;\n public events: EventManager;\n constructor(private container: Container, private matchingClient: ServiceClient) {\n this.events = (<Widget>container.get('$widget')).events;\n\n this.events.subscribe('widget:settings-updated', () => (this.queries = new Map()));\n\n this.events.subscribe('widget:render-state-changed', (event, { next, previous }) => {\n if (previous === WidgetRenderState.hidden && next === WidgetRenderState.open) {\n this.fetchAllUnresolvedQueries();\n }\n });\n }\n\n static getInstance(container: Container): Promise<DataClient> {\n return container.getAsync('dataClient');\n }\n\n private getUnresolvedQueries = () => {\n let unresolvedCount = 0;\n this.queries.forEach((queries, type) => {\n const hasUnresolved = queries.some((query: Query) => !query.resolved);\n if (hasUnresolved) {\n unresolvedCount = +1;\n }\n });\n return unresolvedCount;\n };\n\n public fetch(type: DataType, params: QueryParameters): Promise<any> {\n return new Promise((resolve, reject) => {\n if (params.take) {\n this.lastTake = +(params.take || 0);\n }\n\n removeNullAndUndefinedValues(params);\n const serviceClientQueryType = determineServiceClientQueryType(type);\n const queries = this.queries.get(serviceClientQueryType) || [];\n const query = queries.find((q) => shallowCompare(q.params, params));\n\n if (query) {\n const index = queries.indexOf(query);\n if (query.resolved) {\n this.events.dispatch('data-client:fetched', {\n params,\n type: serviceClientQueryType,\n response: query.data,\n unresolvedQueries: this.getUnresolvedQueries(),\n });\n this.track(query.data, serviceClientQueryType, query.error);\n if (query.data && query.error) {\n reject({ error: query.error });\n } else {\n resolve(query.data);\n }\n } else {\n query.resolvers.push({ resolve, reject });\n }\n queries.splice(index, 1);\n queries.push(query);\n this.queries.set(serviceClientQueryType, queries);\n if (!query.loading && !query.resolved) {\n return this.runQuery(serviceClientQueryType, params);\n }\n } else {\n queries.push({\n params,\n resolved: false,\n loading: true,\n data: {},\n resolvers: [{ resolve, reject }],\n });\n this.queries.set(serviceClientQueryType, queries);\n\n return this.runQuery(serviceClientQueryType, params);\n }\n }).then((res) => deepClone(res));\n }\n\n // query the cached data\n public read(\n type: DataType,\n options: {\n select?: (data: any) => any; // either return all data by the DataType, or use an selector\n }\n ) {\n const { select } = options;\n const serviceClientQueryType = determineServiceClientQueryType(type);\n const queries = this.queries.get(serviceClientQueryType) || [];\n\n const result = queries.reduce<any[]>((acc, query) => {\n if (typeof select === 'function') {\n const match = select(query.data);\n if (match) {\n acc.push(match);\n }\n } else {\n acc.push(query.data);\n }\n return acc;\n }, []);\n return result;\n }\n\n public feedback(id: string, connection: string, feedback: FeedbackType): Promise<any> {\n return this.matchingClient.giveFeedback(id, connection, feedback);\n }\n\n private setLoadingStatus(\n type: ServiceClientQueryType,\n params: QueryParameters,\n loading: boolean\n ) {\n const queries = this.queries.get(type) || [];\n const query = queries.find((q) => shallowCompare(q.params, params));\n\n if (query) {\n query.loading = loading;\n }\n this.queries.set(type, queries);\n }\n\n private async runQuery(type: ServiceClientQueryType, params: QueryParameters) {\n const {\n searchPhrase = '',\n categories = '0',\n contactMethodCategoryId = '0',\n contactMethodId = '0',\n tagId = undefined,\n take = 5,\n connection = '',\n guideId,\n expandCategories = 'descendants',\n currentCategory,\n sorting = SortingType.POPULARITY_DESCENDING,\n guideIds = [],\n } = params;\n\n const trimmedPhrase = searchPhrase.toString().trim();\n if (await widgetIsHidden(this.container)) {\n return Promise.resolve();\n }\n\n switch (type) {\n case ServiceClientQueryType.Match: {\n const formatSortingValues = (sorting: string) => {\n const [type, direction] = sorting.split('-');\n const sortKeysMap = new Map([\n ['popularity', 'popularity'],\n ['alphabetic', 'title'],\n ['modified', 'lastModified'],\n ['published', 'firstPublished'],\n ]);\n\n return {\n type: sortKeysMap.get(type),\n direction: direction,\n };\n };\n\n if (guideIds.length) {\n return this.matchingClient\n .customRequest('guides', 'POST', {\n configuration: { ids: guideIds, take: +take },\n })\n .then((matches) => matches && this.handleResponse(matches, type, params));\n }\n\n return this.matchingClient\n .match(trimmedPhrase, {\n categories:\n categories === '0'\n ? []\n : Array.isArray(categories)\n ? categories\n : [+categories],\n take: +take,\n tags: tagId,\n sorting: formatSortingValues(sorting),\n ids: guideIds,\n })\n .then((matches) => matches && this.handleResponse(matches, type, params));\n }\n case ServiceClientQueryType.MatchByCategory: {\n return this.matchingClient\n .match(trimmedPhrase, {\n groupByCategory: true,\n categories:\n categories === '0'\n ? []\n : Array.isArray(categories)\n ? categories\n : [+categories],\n take: +take,\n tags: tagId,\n })\n .then((matches) => matches && this.handleResponse(matches, type, params));\n }\n case ServiceClientQueryType.Guide: {\n return this.matchingClient\n .getGuide(guideId, { connectionId: connection })\n .then((guide) => {\n if (guide) {\n this.handleResponse(guide, type, params);\n }\n })\n .catch((e) => {\n const error = {\n message: 'Something went wrong.',\n status: e.status || 400,\n };\n if (error.status === 404) {\n error.message = 'The guide could not be found.';\n }\n this.handleResponse({}, type, params, error);\n });\n }\n case ServiceClientQueryType.Categories: {\n return this.matchingClient\n .getCategories({ phrase: trimmedPhrase, expand: expandCategories, tags: tagId })\n .then(\n (categories) => categories && this.handleResponse(categories, type, params)\n );\n }\n case ServiceClientQueryType.Contacts: {\n if (guideId) {\n return this.matchingClient\n .contactMethods(+guideId, { phrase: trimmedPhrase })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n return this.matchingClient\n .contacts(+contactMethodCategoryId, { phrase: trimmedPhrase })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n case ServiceClientQueryType.ContactMethod: {\n return this.matchingClient\n .getContactMethod(+contactMethodId, { guideId, currentCategory })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n case ServiceClientQueryType.Tags: {\n return this.matchingClient\n .customRequest('tags', 'GET', {\n configuration: {\n take: 999999,\n phrase: trimmedPhrase,\n categories:\n categories === '0'\n ? []\n : Array.isArray(categories)\n ? categories\n : [+categories],\n },\n })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n case ServiceClientQueryType.TagsOnGuides: {\n return this.matchingClient\n .customRequest('tagsonguides', 'GET', {\n configuration: {\n take: 999999,\n phrase: trimmedPhrase,\n categories:\n categories === '0'\n ? []\n : Array.isArray(categories)\n ? categories\n : [+categories],\n tags: tagId,\n },\n })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n case ServiceClientQueryType.Notifications: {\n return this.matchingClient\n .customRequest('notices', 'GET', {\n configuration: {\n phrase: trimmedPhrase,\n categories:\n categories === '0'\n ? []\n : Array.isArray(categories)\n ? categories\n : [+categories],\n },\n })\n .then((result) => result && this.handleResponse(result, type, params));\n }\n }\n }\n\n handleResponse(\n data: any = {},\n type: ServiceClientQueryType,\n params: QueryParameters,\n error?: DataError\n ) {\n const queries = this.queries.get(type) || [];\n const existing = queries.find((q) => shallowCompare(q.params, params));\n if (existing) {\n const formatted = error ? error : formatLegacyData(type, data);\n this.track(formatted, type, error);\n existing.resolvers.forEach((r) => {\n if (error) {\n r.reject({ error: formatted });\n } else {\n r.resolve(formatted);\n }\n });\n\n const index = queries.indexOf(existing);\n if (index > -1) {\n queries.splice(index, 1);\n }\n queries.push({ ...existing, error, resolvers: [], data: formatted, resolved: true });\n this.setLoadingStatus(type, params, false);\n this.queries.set(type, queries);\n if (!error) {\n this.events.dispatch('data-client:fetched', {\n type,\n params,\n response: formatted,\n unresolvedQueries: this.getUnresolvedQueries(),\n });\n }\n }\n }\n\n private fetchAllUnresolvedQueries() {\n for (const [queryType, queries] of this.queries) {\n queries\n .filter((query: Query) => !query.resolved)\n .forEach((query) => {\n this.runQuery(queryType, query.params);\n });\n }\n }\n\n private track(data: any = {}, type: ServiceClientQueryType, error?: DataError) {\n const widget = this.container.get('$widget');\n if (widget && !error) {\n widget.events.dispatch('tracking:service-client-response', {\n type,\n data,\n });\n } else if (widget) {\n widget.events.dispatch('tracking:service-client-error', {\n type,\n error,\n });\n }\n }\n\n static create(container: Container): Promise<DataClient> {\n return container\n .getAsync('matchingClient')\n .then((matchingClient) => new DataClient(container, matchingClient));\n }\n}\n","import { Container } from '@webprovisions/platform';\n\nexport const createContactMethodPlatform = (container: Container) => {\n return import('@telia-ace/knowledge-widget-adapters').then(({ ContactMethodPlatform }) => {\n return ContactMethodPlatform.create(container);\n });\n};\n\nexport const createDataClient = (container: Container) => {\n return import('../data').then(({ DataClient }) => {\n return DataClient.create(container);\n });\n};\n","import { Widget } from '@telia-ace/widget-types-grid';\nimport { Container } from '@webprovisions/platform';\nimport { createContactMethodPlatform, createDataClient } from './services';\n\nexport default class ExtendedWidget extends Widget {\n constructor(container: Container) {\n super(container);\n\n this.container.registerAsync('contactMethods', () =>\n createContactMethodPlatform(this.container)\n );\n this.container.registerAsync('dataClient', () => createDataClient(this.container));\n }\n}\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":["convertLegacySymbol","symbol","Type","Content","mapLegacyCategoriesRecursively","categories","c","category","mapNotices","source","type","Id","Title","Body","mapNotificationLists","DefaultIcon","ListNotices","Notices","Modified","mapContactMethodSettings","Exit","ExitType","ConfirmationText","ExpandFormAutomatically","Form","Description","Validation","Adapter","ClientName","Settings","CustomClientName","settings","displayTextBeforeClick","textBeforeClick","FormBuilder","mapTags","tags","TotalMatches","Symbol","ActiveIcon","mapGuides","guides","Tags","FirstPublishedDate","formatLegacyData","data","ServiceClientQueryType","result","Matches","NoticeLists","ByCategory","Children","GuidesCountTotal","Related","Options","ConnectionId","ContactMethods","EnableFeedback","HandoverExists","ModifiedByDisplayName","FirstPublishedByDisplayName","Categories","SeoMetaDescription","SeoAllowIndex","Perspectives","PerspectiveKey","Translations","perspective","connection","acc","key","cm","CanAccess","Properties","item","DialogItemType","ContactMethod","DataType","FeedbackType","SortingType","determineServiceClientQueryType","widgetIsHidden","container","__async","invoke","WidgetRenderState","DataClient","matchingClient","__publicField","unresolvedCount","queries","query","event","next","previous","params","resolve","reject","removeNullAndUndefinedValues","serviceClientQueryType","q","shallowCompare","index","res","deepClone","options","select","match","id","feedback","loading","searchPhrase","contactMethodCategoryId","contactMethodId","tagId","take","guideId","expandCategories","currentCategory","sorting","guideIds","trimmedPhrase","formatSortingValues","direction","matches","guide","e","error","existing","formatted","r","__spreadProps","__spreadValues","queryType","widget","createContactMethodPlatform","ContactMethodPlatform","createDataClient","ExtendedWidget","Widget"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Widget } from '@telia-ace/widget-types-grid';
2
- import { Container } from '@webprovisions/platform';
3
- export default class ExtendedWidget extends Widget {
4
- constructor(container: Container);
5
- }
1
+ import { Widget } from '@telia-ace/widget-types-grid';
2
+ import { Container } from '@webprovisions/platform';
3
+ export default class ExtendedWidget extends Widget {
4
+ constructor(container: Container);
5
+ }
@@ -1 +1 @@
1
- export { default as GridWidget } from './extended-widget';
1
+ export { default as GridWidget } from './extended-widget';
@@ -1,3 +1,3 @@
1
- import { Container } from '@webprovisions/platform';
2
- export declare const createContactMethodPlatform: (container: Container) => Promise<import("@telia-ace/knowledge-widget-adapters/dist/contact-methods/platform").default>;
3
- export declare const createDataClient: (container: Container) => Promise<import("../data").DataClient>;
1
+ import { Container } from '@webprovisions/platform';
2
+ export declare const createContactMethodPlatform: (container: Container) => Promise<import("@telia-ace/knowledge-widget-adapters/dist/contact-methods/platform").default>;
3
+ export declare const createDataClient: (container: Container) => Promise<import("../data").DataClient>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telia-ace/knowledge-widget-types-grid",
3
- "version": "1.0.28",
3
+ "version": "1.0.30",
4
4
  "description": "Extended type definition for Grid widget.",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "Telia Company AB",
@@ -8,6 +8,7 @@
8
8
  "telia"
9
9
  ],
10
10
  "main": "dist/index.js",
11
+ "sourceMain": "src/index.ts",
11
12
  "type": "module",
12
13
  "types": "dist/index.d.ts",
13
14
  "files": [
@@ -25,12 +26,13 @@
25
26
  },
26
27
  "sideEffects": false,
27
28
  "dependencies": {
28
- "@telia-ace/knowledge-serviceclient": "^1.0.7",
29
- "@telia-ace/knowledge-widget-adapters": "^1.0.27",
30
- "@telia-ace/knowledge-widget-core": "^1.0.17",
31
- "@telia-ace/widget-forms": "^1.0.20",
32
- "@telia-ace/widget-types-grid": "^1.0.22",
33
- "@telia-ace/widget-utilities": "^1.0.2",
29
+ "@telia-ace/knowledge-serviceclient": "^1.0.8",
30
+ "@telia-ace/knowledge-widget-adapters": "^1.0.29",
31
+ "@telia-ace/knowledge-widget-core": "^1.0.19",
32
+ "@telia-ace/widget-forms": "^1.0.22",
33
+ "@telia-ace/widget-types-grid": "^1.0.24",
34
+ "@telia-ace/widget-utilities": "^1.0.4",
34
35
  "@webprovisions/platform": "^1.1.2"
35
- }
36
+ },
37
+ "gitHead": "dc024eefcfc33ad8e67b35e5f266bf4a58eb2c48"
36
38
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.a2cdbc37.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}