@telia-ace/knowledge-widget-types-grid 1.0.29 → 1.0.31-next.0
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 +5 -5
- package/README.md +4 -4
- package/dist/data/data-client.d.ts +91 -91
- package/dist/data/index.d.ts +3 -3
- package/dist/data/legacy-conversion.d.ts +75 -75
- package/dist/{index.a2cdbc37.js → index.aba60d50.js} +1 -1
- package/dist/index.aba60d50.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +112 -102
- package/dist/index.js.map +1 -1
- package/dist/widget/extended-widget.d.ts +5 -5
- package/dist/widget/index.d.ts +1 -1
- package/dist/widget/services.d.ts +3 -3
- package/package.json +9 -8
- package/dist/index.a2cdbc37.js.map +0 -1
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
|
+
}
|
package/dist/data/index.d.ts
CHANGED
|
@@ -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
|
+
};
|
|
@@ -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
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
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
|
-
|
|
8
|
-
if (
|
|
9
|
-
for (var t of
|
|
10
|
-
|
|
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
|
-
},
|
|
13
|
-
var
|
|
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
|
|
30
|
-
import { Component as
|
|
31
|
-
import { DialogItemType as
|
|
32
|
-
import { removeNullAndUndefinedValues as
|
|
33
|
-
import { FormBuilder as
|
|
34
|
-
const
|
|
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
|
-
},
|
|
41
|
+
}, T = (i) => i.map((e) => {
|
|
41
42
|
const t = {
|
|
42
43
|
id: e.Id.toString(),
|
|
43
44
|
title: e.Name,
|
|
44
|
-
symbol:
|
|
45
|
-
activeSymbol: 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 =
|
|
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
|
-
})),
|
|
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:
|
|
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
|
-
})),
|
|
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:
|
|
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 =
|
|
94
|
-
},
|
|
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:
|
|
99
|
-
defaultIcon:
|
|
100
|
-
activeIcon:
|
|
101
|
-
})),
|
|
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:
|
|
105
|
+
tags: x(n),
|
|
105
106
|
published: s,
|
|
106
107
|
modified: a
|
|
107
|
-
})),
|
|
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 =
|
|
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:
|
|
131
|
+
guides: D(f),
|
|
131
132
|
matches: g
|
|
132
|
-
})), t.tags =
|
|
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:
|
|
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:
|
|
160
|
+
SeoAllowIndex: E,
|
|
160
161
|
Perspectives: w,
|
|
161
|
-
PerspectiveKey:
|
|
162
|
-
Translations:
|
|
163
|
-
} = e,
|
|
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:
|
|
178
|
+
seoAllowIndex: E,
|
|
178
179
|
perspectives: w,
|
|
179
|
-
perspective:
|
|
180
|
-
translations: Object.keys(
|
|
180
|
+
perspective: V,
|
|
181
|
+
translations: Object.keys(P || {}).reduce((v, k) => (v[k] = P[k].toString(), v), {})
|
|
181
182
|
},
|
|
182
|
-
related:
|
|
183
|
+
related: D(a || []),
|
|
183
184
|
dialog: [],
|
|
184
|
-
contactMethods: (d || []).map((
|
|
185
|
-
tags:
|
|
185
|
+
contactMethods: (d || []).map((v) => O(v)),
|
|
186
|
+
tags: x(r)
|
|
186
187
|
};
|
|
187
|
-
return (c || []).forEach(({ CanAccess:
|
|
188
|
-
if (!
|
|
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:
|
|
193
|
-
connection:
|
|
194
|
-
type:
|
|
193
|
+
title: k,
|
|
194
|
+
connection: j,
|
|
195
|
+
type: G.default,
|
|
195
196
|
parent: {
|
|
196
197
|
id: t.toString(),
|
|
197
198
|
title: n,
|
|
198
|
-
tags:
|
|
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 =
|
|
205
|
+
M.type = G.guide;
|
|
205
206
|
break;
|
|
206
207
|
case "Link":
|
|
207
|
-
M.type =
|
|
208
|
+
M.type = G.link;
|
|
208
209
|
break;
|
|
209
210
|
}
|
|
210
|
-
|
|
211
|
-
}),
|
|
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) =>
|
|
217
|
-
categories:
|
|
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:
|
|
222
|
+
notificationLists: L(a || [])
|
|
222
223
|
};
|
|
223
224
|
}
|
|
224
225
|
case p.ContactMethod: {
|
|
225
226
|
const { ContactMethod: t } = e;
|
|
226
|
-
return
|
|
227
|
+
return O(t || {});
|
|
227
228
|
}
|
|
228
229
|
case p.Tags:
|
|
229
230
|
case p.TagsOnGuides:
|
|
230
|
-
return
|
|
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:
|
|
238
|
+
notificationLists: L(n || [])
|
|
238
239
|
};
|
|
239
240
|
}
|
|
240
241
|
default:
|
|
241
242
|
return {};
|
|
242
243
|
}
|
|
243
244
|
};
|
|
244
|
-
var
|
|
245
|
-
const
|
|
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
|
-
},
|
|
271
|
+
}, rt = (i) => S(void 0, null, function* () {
|
|
271
272
|
const { invoke: e } = i.get("$widget");
|
|
272
|
-
return (yield e("renderState")) ===
|
|
273
|
+
return (yield e("renderState")) === B.hidden;
|
|
273
274
|
});
|
|
274
|
-
class
|
|
275
|
+
class $ {
|
|
275
276
|
constructor(e, t) {
|
|
276
|
-
this
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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)),
|
|
291
|
-
const a =
|
|
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) =>
|
|
314
|
+
}).then((n) => it(n));
|
|
310
315
|
}
|
|
311
316
|
read(e, t) {
|
|
312
|
-
const { select: n } = t, s =
|
|
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) =>
|
|
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
|
|
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
|
|
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 [
|
|
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(
|
|
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(
|
|
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) =>
|
|
429
|
+
const a = this.queries.get(t) || [], c = a.find((o) => q(o.params, n));
|
|
423
430
|
if (c) {
|
|
424
|
-
const o = s ||
|
|
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(
|
|
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
|
|
461
|
+
return e.getAsync("matchingClient").then((t) => new $(e, t));
|
|
455
462
|
}
|
|
456
463
|
}
|
|
457
|
-
const
|
|
458
|
-
class
|
|
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(
|
|
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
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
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
|
-
|
|
473
|
-
|
|
474
|
-
|
|
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 {\r\n CategoryApiResponse,\r\n ContactApiResponse,\r\n ContactCategoriesApiResponse,\r\n ContactMethodApiResponse,\r\n GuideApiResponse,\r\n GuideCategoriesApiResponse,\r\n GuideMatchApiResponse,\r\n GuideViewApiResponse,\r\n NoticeApiResponse,\r\n NoticeListApiResponse,\r\n TagListApiResponse,\r\n ValidationApiResult,\r\n} from '@telia-ace/knowledge-serviceclient';\r\nimport { ContactMethodType as ContactMethod } from '@telia-ace/knowledge-widget-adapters';\r\nimport {\r\n Category,\r\n DialogItem,\r\n DialogItemType,\r\n Guide,\r\n Notification,\r\n NotificationList,\r\n Symbol,\r\n Tag,\r\n} from '@telia-ace/knowledge-widget-core';\r\nimport { FormBuilder } from '@telia-ace/widget-forms';\r\nimport { DataError, ServiceClientQueryType } from './data-client';\r\n\r\nexport type MatchResult = {\r\n guides: Guide[];\r\n matches: number;\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n tags: Tag[];\r\n byCategory: { id: string; guides: Guide[]; matches: number }[];\r\n};\r\n\r\nexport type TagsResult = Tag[];\r\n\r\nexport type CategoriesResult = {\r\n categories: Category[];\r\n matches: number;\r\n};\r\n\r\nexport type NotificationResults = Pick<\r\n MatchResult,\r\n 'topNotifications' | 'middleNotifications' | 'bottomNotifications' | 'notificationLists'\r\n>;\r\n\r\nexport type GuideResult = {\r\n guide: {\r\n id: string;\r\n title: string;\r\n body: string;\r\n modified: string;\r\n modifiedBy: string | null;\r\n publishedBy: string | null;\r\n published: string;\r\n connection: string;\r\n categories: number[];\r\n hasHandover: boolean;\r\n allowFeedback: boolean;\r\n seoMetaDescription: string | null;\r\n seoAllowIndex: boolean | null;\r\n perspective: string | null;\r\n perspectives: { [key: string]: string };\r\n translations?: { [key: string]: string };\r\n };\r\n related: Guide[];\r\n dialog: DialogItem[];\r\n contactMethods: ContactMethod[];\r\n tags: Tag[];\r\n error?: DataError;\r\n};\r\n\r\nexport type ContactsResult = {\r\n categories: Category[];\r\n contactMethods: ContactMethod[];\r\n topNotifications: Notification[];\r\n middleNotifications: Notification[];\r\n bottomNotifications: Notification[];\r\n notificationLists: NotificationList[];\r\n};\r\n\r\nexport type SubmissionResult = {\r\n contactMethod?: ContactMethod;\r\n valid: boolean;\r\n};\r\n\r\nconst convertLegacySymbol = (symbol?: { Type: string; Content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { Type, Content } = symbol;\r\n if (Type && Content) {\r\n return { type: Type, content: Content };\r\n }\r\n }\r\n};\r\n\r\nconst mapLegacyCategoriesRecursively = (categories: CategoryApiResponse[]): Category[] => {\r\n return categories.map((c) => {\r\n const category: Category = {\r\n id: c.Id.toString(),\r\n title: c.Name,\r\n symbol: convertLegacySymbol(c.DefaultIcon),\r\n activeSymbol: c.ActiveIcon && convertLegacySymbol(c.ActiveIcon),\r\n description: c.Description || (c.Attributes && c.Attributes.description) || '',\r\n matches: c.GuidesCount,\r\n };\r\n if (c.Children && c.Children.length) {\r\n category.items = mapLegacyCategoriesRecursively(c.Children);\r\n }\r\n return category;\r\n });\r\n};\r\n\r\nconst mapNotices = (source: NoticeApiResponse[], type: string): Notification[] => {\r\n return source\r\n .filter(({ Type }) => Type === type)\r\n .map(({ Id, Title, Body }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n }));\r\n};\r\n\r\nconst mapNotificationLists = (source: NoticeListApiResponse[]): NotificationList[] => {\r\n return source.map(({ Id, Title, DefaultIcon, ListNotices, Notices }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n defaultHeaderOptions: {\r\n visible: !!ListNotices.length,\r\n },\r\n notifications: (ListNotices || [])\r\n .concat(Notices || [])\r\n .map(({ Id, Title, Body, Type, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n expandable: Type === 'listNotice',\r\n })),\r\n }));\r\n};\r\n\r\nconst mapContactMethodSettings = (\r\n {\r\n Id,\r\n Title,\r\n DefaultIcon,\r\n Exits: [Exit],\r\n ExitType,\r\n ConfirmationText,\r\n ExpandFormAutomatically,\r\n Form,\r\n Description,\r\n }: ContactApiResponse,\r\n Validation?: ValidationApiResult\r\n): ContactMethod => {\r\n const { Adapter } = Exit || { Adapter: {} };\r\n const { ClientName = '', Settings = {}, CustomClientName = '' } = Adapter;\r\n\r\n const settings: ContactMethod = {\r\n id: Id.toString(),\r\n title: Title,\r\n description: Description,\r\n symbol: convertLegacySymbol(DefaultIcon),\r\n clientName: ClientName === 'custom.adapter' ? CustomClientName : ClientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (ClientName.indexOf('phone') > -1 || ClientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = Settings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (ClientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = Settings.phoneNumber;\r\n } else {\r\n settings.body.freetext = Settings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n ClientName.indexOf('chat.popup') > -1 ||\r\n ClientName.indexOf('link') > -1 ||\r\n (ClientName === 'custom.adapter' && ExitType === 'custom')\r\n ) {\r\n settings.body = Settings;\r\n settings.body.confirmationFallback = ConfirmationText;\r\n }\r\n\r\n if (ClientName.indexOf('ace') > -1) {\r\n settings.body = Settings;\r\n }\r\n\r\n if (Form && Form.HasValueComponents) {\r\n if (Validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form, Validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(Id.toString(), Form).get();\r\n }\r\n if (!ExpandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n }\r\n\r\n return settings;\r\n};\r\n\r\ntype Modify<T, R> = Omit<T, keyof R> & R;\r\ntype ExtendedGuideMatchApiResponse = Modify<\r\n GuideMatchApiResponse,\r\n {\r\n ByCategory: { Id: string; Matches: GuideApiResponse[]; TotalMatches: number }[];\r\n }\r\n>;\r\n\r\nconst mapTags = (tags: TagListApiResponse[] = []): Tag[] => {\r\n return tags.map(({ Id, Title, TotalMatches, Symbol, DefaultIcon, ActiveIcon }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n matches: TotalMatches,\r\n symbol: convertLegacySymbol(DefaultIcon || Symbol),\r\n defaultIcon: convertLegacySymbol(DefaultIcon),\r\n activeIcon: convertLegacySymbol(ActiveIcon),\r\n }));\r\n};\r\n\r\nconst mapGuides = (guides: GuideApiResponse[]) => {\r\n return guides.map(({ Id, Title, Tags, FirstPublishedDate, Modified }) => ({\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n published: FirstPublishedDate,\r\n modified: Modified,\r\n }));\r\n};\r\n\r\nexport const formatLegacyData = (type: ServiceClientQueryType, data: any) => {\r\n switch (type) {\r\n case ServiceClientQueryType.MatchByCategory:\r\n case ServiceClientQueryType.Match: {\r\n const result: MatchResult = {\r\n guides: [],\r\n matches: 0,\r\n topNotifications: [],\r\n middleNotifications: [],\r\n bottomNotifications: [],\r\n notificationLists: [],\r\n tags: [],\r\n byCategory: [],\r\n };\r\n const {\r\n Matches,\r\n TotalMatches,\r\n Notices,\r\n NoticeLists,\r\n Tags,\r\n ByCategory,\r\n }: ExtendedGuideMatchApiResponse = data;\r\n\r\n result.guides = mapGuides(Matches);\r\n\r\n result.matches = TotalMatches;\r\n\r\n result.byCategory = (ByCategory || []).map(({ Id, Matches, TotalMatches }) => ({\r\n id: Id,\r\n guides: mapGuides(Matches),\r\n matches: TotalMatches,\r\n }));\r\n\r\n result.tags = mapTags(Tags);\r\n\r\n result.notificationLists = mapNotificationLists(NoticeLists || []);\r\n\r\n result.topNotifications = mapNotices(Notices || [], 'noticeRowTop');\r\n\r\n result.middleNotifications = mapNotices(Notices || [], 'noticeRowMiddle');\r\n\r\n result.bottomNotifications = mapNotices(Notices || [], 'footerNotice');\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n const { Children, GuidesCountTotal }: GuideCategoriesApiResponse = data;\r\n\r\n const result: CategoriesResult = {\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n matches: GuidesCountTotal,\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n const {\r\n Id,\r\n Title,\r\n Body,\r\n Related,\r\n Options,\r\n ConnectionId,\r\n ContactMethods,\r\n EnableFeedback,\r\n HandoverExists,\r\n FirstPublishedDate,\r\n Modified,\r\n ModifiedByDisplayName,\r\n FirstPublishedByDisplayName,\r\n Categories,\r\n Tags,\r\n SeoMetaDescription,\r\n SeoAllowIndex,\r\n Perspectives,\r\n PerspectiveKey,\r\n Translations,\r\n }: GuideViewApiResponse = data;\r\n\r\n /* \r\n PerspectiveKey is always null when on the \"top level\" of a dialog tree\r\n OR when navigating down a dialog tree in the \"Default answer version\"\r\n Note: The \"Default answer version\" is not the same as a given guides\r\n default answer version. The \"Default answer version\" is always the answer\r\n version in Perspectives with the key \"Default\".\r\n */\r\n const perspective =\r\n PerspectiveKey ||\r\n Object.values(Perspectives).find((connection) => connection === ConnectionId) ||\r\n Perspectives['Default'] ||\r\n null;\r\n\r\n const result: GuideResult = {\r\n guide: {\r\n id: Id.toString(),\r\n title: Title,\r\n body: Body,\r\n modified: Modified,\r\n published: FirstPublishedDate,\r\n modifiedBy: ModifiedByDisplayName,\r\n publishedBy: FirstPublishedByDisplayName,\r\n connection: ConnectionId,\r\n categories: Categories,\r\n hasHandover: HandoverExists,\r\n allowFeedback: EnableFeedback,\r\n seoMetaDescription: SeoMetaDescription,\r\n seoAllowIndex: SeoAllowIndex,\r\n perspectives: Perspectives,\r\n perspective,\r\n translations: Object.keys(Translations || {}).reduce<{\r\n [key: string]: string;\r\n }>((acc, key) => {\r\n acc[key] = Translations[key].toString();\r\n return acc;\r\n }, {}),\r\n },\r\n related: mapGuides(Related || []),\r\n dialog: [],\r\n contactMethods: (ContactMethods || []).map((cm) => mapContactMethodSettings(cm)),\r\n tags: mapTags(Tags),\r\n };\r\n\r\n (Options || []).forEach(({ CanAccess, Description, ConnectionId, Properties }) => {\r\n if (!CanAccess) {\r\n return;\r\n }\r\n\r\n const item: DialogItem = {\r\n id: Id.toString(),\r\n title: Description,\r\n connection: ConnectionId,\r\n type: DialogItemType.default,\r\n parent: {\r\n id: Id.toString(),\r\n title: Title,\r\n tags: mapTags(Tags),\r\n },\r\n };\r\n\r\n if (Properties.Type === 'Guide' || Properties.Type === 'Link') {\r\n Properties.Id && (item.id = Properties.Id.toString());\r\n Properties.Uri && (item.href = Properties.Uri);\r\n Properties.Target && (item.target = Properties.Target);\r\n switch (Properties.Type) {\r\n case 'Guide':\r\n item.type = DialogItemType.guide;\r\n break;\r\n case 'Link':\r\n item.type = DialogItemType.link;\r\n break;\r\n }\r\n }\r\n\r\n result.dialog.push(item);\r\n });\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n const { Children, Matches, Notices, NoticeLists }: ContactCategoriesApiResponse = data;\r\n\r\n const result: ContactsResult = {\r\n contactMethods: (Matches || []).map((cm) => mapContactMethodSettings(cm)),\r\n categories: mapLegacyCategoriesRecursively(Children || []),\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n\r\n return result;\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n const { ContactMethod }: ContactMethodApiResponse = data;\r\n\r\n return mapContactMethodSettings(ContactMethod || {});\r\n }\r\n case ServiceClientQueryType.Tags:\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return mapTags(data || []);\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n const { Notices, NoticeLists } = data;\r\n\r\n return {\r\n topNotifications: mapNotices(Notices || [], 'noticeRowTop'),\r\n middleNotifications: mapNotices(Notices || [], 'noticeRowMiddle'),\r\n bottomNotifications: mapNotices(Notices || [], 'footerNotice'),\r\n notificationLists: mapNotificationLists(NoticeLists || []),\r\n };\r\n }\r\n default:\r\n return {};\r\n }\r\n};\r\n","import { ServiceClient } from '@telia-ace/knowledge-serviceclient';\r\nimport { WidgetRenderState } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n deepClone,\r\n removeNullAndUndefinedValues,\r\n shallowCompare,\r\n} from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport { formatLegacyData } from './legacy-conversion';\r\n\r\nexport type Subscriber = (...args: any[]) => void;\r\n\r\nexport enum DataType {\r\n Guide = 'guide',\r\n Guides = 'guides',\r\n GuidesByCategory = 'guides-by-category',\r\n RowNotifications = 'row-notices',\r\n NotificationLists = 'notification-lists',\r\n GuideCategories = 'guide-categories',\r\n ContactMethodCategories = 'contact-method-categories',\r\n ContactMethod = 'contact-method',\r\n ContactMethods = 'contact-methods',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n}\r\n\r\nexport type DataError = {\r\n status: number;\r\n message: string;\r\n};\r\n\r\nexport enum ServiceClientQueryType {\r\n Match = 'match',\r\n Categories = 'categories',\r\n Guide = 'guide',\r\n Contacts = 'contacts',\r\n ContactMethod = 'contact-method',\r\n MatchByCategory = 'match-by-category',\r\n Tags = 'tags',\r\n TagsOnGuides = 'tagsonguides',\r\n Notifications = 'notifications',\r\n}\r\n\r\nexport enum FeedbackType {\r\n Positive = 'Positive',\r\n Negative = 'Negative',\r\n}\r\n\r\nexport type QueryParameters = {\r\n guideId?: string | number;\r\n categories?: string | number | string[] | number[];\r\n tagId?: string | number;\r\n connection?: string;\r\n\r\n contactMethodCategoryId?: string | number;\r\n contactMethodId?: string | number;\r\n\r\n searchPhrase?: string | number;\r\n take?: string | number;\r\n [key: string]: any;\r\n\r\n expandCategories?: 'none' | 'children' | 'descendants';\r\n sorting?: SortingType;\r\n guideIds?: string[];\r\n};\r\n\r\nexport enum SortingType {\r\n POPULARITY_DESCENDING = 'popularity-descending',\r\n ALPHABETIC_ASCENDING = 'alphabetic-ascending',\r\n ALPHABETIC_DESCENDING = 'alphabetic-descending',\r\n MODIFIED_ASCENDING = 'modified-ascending',\r\n MODIFIED_DESCENDING = 'modified-descending',\r\n PUBLISHED_ASCENDING = 'published-ascending',\r\n PUBLISHED_DESCENDING = 'published-descending',\r\n}\r\n\r\nexport type Query = {\r\n params: QueryParameters;\r\n resolved: boolean;\r\n loading: boolean;\r\n error?: DataError;\r\n data: any;\r\n resolvers: {\r\n resolve: (data: any) => void;\r\n reject: (data: any) => void;\r\n }[];\r\n};\r\n\r\nexport const determineServiceClientQueryType = (type: DataType): ServiceClientQueryType => {\r\n switch (type) {\r\n case DataType.Guides:\r\n return ServiceClientQueryType.Match;\r\n case DataType.GuidesByCategory:\r\n return ServiceClientQueryType.MatchByCategory;\r\n case DataType.Guide:\r\n return ServiceClientQueryType.Guide;\r\n case DataType.GuideCategories:\r\n return ServiceClientQueryType.Categories;\r\n case DataType.ContactMethodCategories:\r\n case DataType.ContactMethods:\r\n return ServiceClientQueryType.Contacts;\r\n case DataType.ContactMethod:\r\n return ServiceClientQueryType.ContactMethod;\r\n case DataType.Tags:\r\n return ServiceClientQueryType.Tags;\r\n case DataType.TagsOnGuides:\r\n return ServiceClientQueryType.TagsOnGuides;\r\n case DataType.NotificationLists:\r\n case DataType.RowNotifications:\r\n return ServiceClientQueryType.Notifications;\r\n default:\r\n throw 'error';\r\n }\r\n};\r\n\r\nconst widgetIsHidden = async (container: Container) => {\r\n const { invoke } = container.get('$widget');\r\n const renderState = await invoke('renderState');\r\n return renderState === WidgetRenderState.hidden;\r\n};\r\n\r\nexport default class DataClient {\r\n private queries: Map<ServiceClientQueryType, Query[]> = new Map();\r\n private lastTake: number = 0;\r\n public events: EventManager;\r\n constructor(private container: Container, private matchingClient: ServiceClient) {\r\n this.events = (<Widget>container.get('$widget')).events;\r\n\r\n this.events.subscribe('widget:settings-updated', () => (this.queries = new Map()));\r\n\r\n this.events.subscribe('widget:render-state-changed', (event, { next, previous }) => {\r\n if (previous === WidgetRenderState.hidden && next === WidgetRenderState.open) {\r\n this.fetchAllUnresolvedQueries();\r\n }\r\n });\r\n }\r\n\r\n static getInstance(container: Container): Promise<DataClient> {\r\n return container.getAsync('dataClient');\r\n }\r\n\r\n private getUnresolvedQueries = () => {\r\n let unresolvedCount = 0;\r\n this.queries.forEach((queries, type) => {\r\n const hasUnresolved = queries.some((query: Query) => !query.resolved);\r\n if (hasUnresolved) {\r\n unresolvedCount = +1;\r\n }\r\n });\r\n return unresolvedCount;\r\n };\r\n\r\n public fetch(type: DataType, params: QueryParameters): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (params.take) {\r\n this.lastTake = +(params.take || 0);\r\n }\r\n\r\n removeNullAndUndefinedValues(params);\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n const index = queries.indexOf(query);\r\n if (query.resolved) {\r\n this.events.dispatch('data-client:fetched', {\r\n params,\r\n type: serviceClientQueryType,\r\n response: query.data,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n this.track(query.data, serviceClientQueryType, query.error);\r\n if (query.data && query.error) {\r\n reject({ error: query.error });\r\n } else {\r\n resolve(query.data);\r\n }\r\n } else {\r\n query.resolvers.push({ resolve, reject });\r\n }\r\n queries.splice(index, 1);\r\n queries.push(query);\r\n this.queries.set(serviceClientQueryType, queries);\r\n if (!query.loading && !query.resolved) {\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n } else {\r\n queries.push({\r\n params,\r\n resolved: false,\r\n loading: true,\r\n data: {},\r\n resolvers: [{ resolve, reject }],\r\n });\r\n this.queries.set(serviceClientQueryType, queries);\r\n\r\n return this.runQuery(serviceClientQueryType, params);\r\n }\r\n }).then((res) => deepClone(res));\r\n }\r\n\r\n // query the cached data\r\n public read(\r\n type: DataType,\r\n options: {\r\n select?: (data: any) => any; // either return all data by the DataType, or use an selector\r\n }\r\n ) {\r\n const { select } = options;\r\n const serviceClientQueryType = determineServiceClientQueryType(type);\r\n const queries = this.queries.get(serviceClientQueryType) || [];\r\n\r\n const result = queries.reduce<any[]>((acc, query) => {\r\n if (typeof select === 'function') {\r\n const match = select(query.data);\r\n if (match) {\r\n acc.push(match);\r\n }\r\n } else {\r\n acc.push(query.data);\r\n }\r\n return acc;\r\n }, []);\r\n return result;\r\n }\r\n\r\n public feedback(id: string, connection: string, feedback: FeedbackType): Promise<any> {\r\n return this.matchingClient.giveFeedback(id, connection, feedback);\r\n }\r\n\r\n private setLoadingStatus(\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n loading: boolean\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const query = queries.find((q) => shallowCompare(q.params, params));\r\n\r\n if (query) {\r\n query.loading = loading;\r\n }\r\n this.queries.set(type, queries);\r\n }\r\n\r\n private async runQuery(type: ServiceClientQueryType, params: QueryParameters) {\r\n const {\r\n searchPhrase = '',\r\n categories = '0',\r\n contactMethodCategoryId = '0',\r\n contactMethodId = '0',\r\n tagId = undefined,\r\n take = 5,\r\n connection = '',\r\n guideId,\r\n expandCategories = 'descendants',\r\n currentCategory,\r\n sorting = SortingType.POPULARITY_DESCENDING,\r\n guideIds = [],\r\n } = params;\r\n\r\n const trimmedPhrase = searchPhrase.toString().trim();\r\n if (await widgetIsHidden(this.container)) {\r\n return Promise.resolve();\r\n }\r\n\r\n switch (type) {\r\n case ServiceClientQueryType.Match: {\r\n const formatSortingValues = (sorting: string) => {\r\n const [type, direction] = sorting.split('-');\r\n const sortKeysMap = new Map([\r\n ['popularity', 'popularity'],\r\n ['alphabetic', 'title'],\r\n ['modified', 'lastModified'],\r\n ['published', 'firstPublished'],\r\n ]);\r\n\r\n return {\r\n type: sortKeysMap.get(type),\r\n direction: direction,\r\n };\r\n };\r\n\r\n if (guideIds.length) {\r\n return this.matchingClient\r\n .customRequest('guides', 'POST', {\r\n configuration: { ids: guideIds, take: +take },\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n sorting: formatSortingValues(sorting),\r\n ids: guideIds,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.MatchByCategory: {\r\n return this.matchingClient\r\n .match(trimmedPhrase, {\r\n groupByCategory: true,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n take: +take,\r\n tags: tagId,\r\n })\r\n .then((matches) => matches && this.handleResponse(matches, type, params));\r\n }\r\n case ServiceClientQueryType.Guide: {\r\n return this.matchingClient\r\n .getGuide(guideId, { connectionId: connection })\r\n .then((guide) => {\r\n if (guide) {\r\n this.handleResponse(guide, type, params);\r\n }\r\n })\r\n .catch((e) => {\r\n const error = {\r\n message: 'Something went wrong.',\r\n status: e.status || 400,\r\n };\r\n if (error.status === 404) {\r\n error.message = 'The guide could not be found.';\r\n }\r\n this.handleResponse({}, type, params, error);\r\n });\r\n }\r\n case ServiceClientQueryType.Categories: {\r\n return this.matchingClient\r\n .getCategories({ phrase: trimmedPhrase, expand: expandCategories, tags: tagId })\r\n .then(\r\n (categories) => categories && this.handleResponse(categories, type, params)\r\n );\r\n }\r\n case ServiceClientQueryType.Contacts: {\r\n if (guideId) {\r\n return this.matchingClient\r\n .contactMethods(+guideId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n return this.matchingClient\r\n .contacts(+contactMethodCategoryId, { phrase: trimmedPhrase })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.ContactMethod: {\r\n return this.matchingClient\r\n .getContactMethod(+contactMethodId, { guideId, currentCategory })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Tags: {\r\n return this.matchingClient\r\n .customRequest('tags', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.TagsOnGuides: {\r\n return this.matchingClient\r\n .customRequest('tagsonguides', 'GET', {\r\n configuration: {\r\n take: 999999,\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n tags: tagId,\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n case ServiceClientQueryType.Notifications: {\r\n return this.matchingClient\r\n .customRequest('notices', 'GET', {\r\n configuration: {\r\n phrase: trimmedPhrase,\r\n categories:\r\n categories === '0'\r\n ? []\r\n : Array.isArray(categories)\r\n ? categories\r\n : [+categories],\r\n },\r\n })\r\n .then((result) => result && this.handleResponse(result, type, params));\r\n }\r\n }\r\n }\r\n\r\n handleResponse(\r\n data: any = {},\r\n type: ServiceClientQueryType,\r\n params: QueryParameters,\r\n error?: DataError\r\n ) {\r\n const queries = this.queries.get(type) || [];\r\n const existing = queries.find((q) => shallowCompare(q.params, params));\r\n if (existing) {\r\n const formatted = error ? error : formatLegacyData(type, data);\r\n this.track(formatted, type, error);\r\n existing.resolvers.forEach((r) => {\r\n if (error) {\r\n r.reject({ error: formatted });\r\n } else {\r\n r.resolve(formatted);\r\n }\r\n });\r\n\r\n const index = queries.indexOf(existing);\r\n if (index > -1) {\r\n queries.splice(index, 1);\r\n }\r\n queries.push({ ...existing, error, resolvers: [], data: formatted, resolved: true });\r\n this.setLoadingStatus(type, params, false);\r\n this.queries.set(type, queries);\r\n if (!error) {\r\n this.events.dispatch('data-client:fetched', {\r\n type,\r\n params,\r\n response: formatted,\r\n unresolvedQueries: this.getUnresolvedQueries(),\r\n });\r\n }\r\n }\r\n }\r\n\r\n private fetchAllUnresolvedQueries() {\r\n for (const [queryType, queries] of this.queries) {\r\n queries\r\n .filter((query: Query) => !query.resolved)\r\n .forEach((query) => {\r\n this.runQuery(queryType, query.params);\r\n });\r\n }\r\n }\r\n\r\n private track(data: any = {}, type: ServiceClientQueryType, error?: DataError) {\r\n const widget = this.container.get('$widget');\r\n if (widget && !error) {\r\n widget.events.dispatch('tracking:service-client-response', {\r\n type,\r\n data,\r\n });\r\n } else if (widget) {\r\n widget.events.dispatch('tracking:service-client-error', {\r\n type,\r\n error,\r\n });\r\n }\r\n }\r\n\r\n static create(container: Container): Promise<DataClient> {\r\n return container\r\n .getAsync('matchingClient')\r\n .then((matchingClient) => new DataClient(container, matchingClient));\r\n }\r\n}\r\n","import { Container } from '@webprovisions/platform';\r\n\r\nexport const createContactMethodPlatform = (container: Container) => {\r\n return import('@telia-ace/knowledge-widget-adapters').then(({ ContactMethodPlatform }) => {\r\n return ContactMethodPlatform.create(container);\r\n });\r\n};\r\n\r\nexport const createDataClient = (container: Container) => {\r\n return import('../data').then(({ DataClient }) => {\r\n return DataClient.create(container);\r\n });\r\n};\r\n","import { Widget } from '@telia-ace/widget-types-grid';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { createContactMethodPlatform, createDataClient } from './services';\r\n\r\nexport default class ExtendedWidget extends Widget {\r\n constructor(container: Container) {\r\n super(container);\r\n\r\n this.container.registerAsync('contactMethods', () =>\r\n createContactMethodPlatform(this.container)\r\n );\r\n this.container.registerAsync('dataClient', () => createDataClient(this.container));\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/data/legacy-conversion.ts","../src/data/data-client.ts","../src/widget/services.ts","../src/widget/extended-widget.ts"],"sourcesContent":["import {\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":["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
|
+
}
|
package/dist/widget/index.d.ts
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "1.0.31-next.0",
|
|
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,13 +26,13 @@
|
|
|
25
26
|
},
|
|
26
27
|
"sideEffects": false,
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@telia-ace/knowledge-serviceclient": "^1.0.
|
|
29
|
-
"@telia-ace/knowledge-widget-adapters": "^1.0.
|
|
30
|
-
"@telia-ace/knowledge-widget-core": "^1.0.
|
|
31
|
-
"@telia-ace/widget-forms": "^1.0.
|
|
32
|
-
"@telia-ace/widget-types-grid": "^1.0.
|
|
33
|
-
"@telia-ace/widget-utilities": "^1.0.
|
|
29
|
+
"@telia-ace/knowledge-serviceclient": "^1.0.9-next.1",
|
|
30
|
+
"@telia-ace/knowledge-widget-adapters": "^1.0.30-next.0",
|
|
31
|
+
"@telia-ace/knowledge-widget-core": "^1.0.20-next.0",
|
|
32
|
+
"@telia-ace/widget-forms": "^1.0.23-next.1",
|
|
33
|
+
"@telia-ace/widget-types-grid": "^1.0.25-next.1",
|
|
34
|
+
"@telia-ace/widget-utilities": "^1.0.5-next.1",
|
|
34
35
|
"@webprovisions/platform": "^1.1.2"
|
|
35
36
|
},
|
|
36
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "c5292af54730ccab639703aaffc0acd9a015975e"
|
|
37
38
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.a2cdbc37.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|