@fluid-topics/ft-search-context 1.3.4 → 1.3.6
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/build/ft-search-context.d.ts +1 -1
- package/build/ft-search-context.js +2 -2
- package/build/ft-search-context.light.js +6 -6
- package/build/ft-search-context.min.js +16 -16
- package/build/store/FtAnalyticsSearchEventManager.d.ts +4 -1
- package/build/store/FtAnalyticsSearchEventManager.js +66 -32
- package/build/store/utils/FtSearchService.d.ts +0 -2
- package/build/store/utils/FtSearchService.js +0 -11
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FtSearchPageState } from "./model";
|
|
2
2
|
import { FtReduxStore, ReduxWatcher } from "@fluid-topics/ft-wc-utils";
|
|
3
3
|
import { FtSearchPageStateReducers } from "./redux";
|
|
4
|
-
import { FtAnalyticsEventDocument, FtSearchResultCluster, FtSearchResultClusterEntry } from "@fluid-topics/public-api";
|
|
4
|
+
import { FtAnalyticsEventDocument, FtMap, FtSearchResultCluster, FtSearchResultClusterEntry } from "@fluid-topics/public-api";
|
|
5
5
|
import { FtAnalyticsEventsService } from "@fluid-topics/ft-app-context";
|
|
6
6
|
export declare class FtAnalyticsSearchEventManager {
|
|
7
7
|
readonly store: FtReduxStore<FtSearchPageState, FtSearchPageStateReducers>;
|
|
@@ -19,6 +19,9 @@ export declare class FtAnalyticsSearchEventManager {
|
|
|
19
19
|
setAppName(appName: string): void;
|
|
20
20
|
setAppVersion(appVersion: string): void;
|
|
21
21
|
setDocumentSearch(document: FtAnalyticsEventDocument): void;
|
|
22
|
+
setDocumentSearchFromMap(map: FtMap): void;
|
|
23
|
+
initAppInfo(): void;
|
|
24
|
+
private convertToAnalyticsMap;
|
|
22
25
|
private canSendEvent;
|
|
23
26
|
private sendEvent;
|
|
24
27
|
private sendKhubSearchEvent;
|
|
@@ -38,6 +38,34 @@ export class FtAnalyticsSearchEventManager {
|
|
|
38
38
|
setDocumentSearch(document) {
|
|
39
39
|
this.document = document;
|
|
40
40
|
}
|
|
41
|
+
setDocumentSearchFromMap(map) {
|
|
42
|
+
this.setDocumentSearch(this.convertToAnalyticsMap(map));
|
|
43
|
+
}
|
|
44
|
+
initAppInfo() {
|
|
45
|
+
const { apiIntegrationIdentifier, apiIntegrationAppVersion } = ftAppInfoStore.getState();
|
|
46
|
+
this.setAppName(apiIntegrationIdentifier !== null && apiIntegrationIdentifier !== void 0 ? apiIntegrationIdentifier : "unknown");
|
|
47
|
+
this.setAppVersion(apiIntegrationAppVersion !== null && apiIntegrationAppVersion !== void 0 ? apiIntegrationAppVersion : "unknown");
|
|
48
|
+
}
|
|
49
|
+
convertToAnalyticsMap(map) {
|
|
50
|
+
let documentType;
|
|
51
|
+
switch (map.editorialType) {
|
|
52
|
+
case "BOOK":
|
|
53
|
+
documentType = "STRUCTURED_DOCUMENT";
|
|
54
|
+
break;
|
|
55
|
+
case "SHARED_BOOK":
|
|
56
|
+
documentType = "SHARED_PERSONAL_BOOK";
|
|
57
|
+
break;
|
|
58
|
+
case "ARTICLE":
|
|
59
|
+
documentType = "RESOURCE";
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
id: map.id,
|
|
64
|
+
title: map.title,
|
|
65
|
+
type: documentType,
|
|
66
|
+
metadata: map.metadata,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
41
69
|
canSendEvent() {
|
|
42
70
|
if (this.appName == undefined || this.appVersion == undefined) {
|
|
43
71
|
console.debug("ft-search-context.eventManager is not initialized. No events will be sent!");
|
|
@@ -54,36 +82,42 @@ export class FtAnalyticsSearchEventManager {
|
|
|
54
82
|
name: FtAnalyticsEventName.KHUB__SEARCH,
|
|
55
83
|
searchResponse: {
|
|
56
84
|
autocorrect: this.store.getState().spellcheck != undefined,
|
|
57
|
-
nbResults: results.length
|
|
85
|
+
nbResults: results.length,
|
|
58
86
|
},
|
|
59
87
|
searchQuery: {
|
|
60
88
|
terms: request.query,
|
|
61
89
|
searchType: request.virtualField,
|
|
62
90
|
lastUpdate: getAnalyticsLastUpdate(request.metadataFilters),
|
|
63
|
-
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet))
|
|
64
|
-
}
|
|
91
|
+
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet)),
|
|
92
|
+
},
|
|
65
93
|
};
|
|
66
94
|
this.eventsService.sendKhubSearchEvent(event);
|
|
67
95
|
}
|
|
68
96
|
sendDocumentSearchEvent(request, results) {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
const isRequestForThisDocument = request.metadataFilters.find((f) => {
|
|
98
|
+
var _a;
|
|
99
|
+
return f.key === "ft:publicationId" && ((_a = f.valueFilter) === null || _a === void 0 ? void 0 : _a.values[0]) === this.document.id;
|
|
100
|
+
}) !== undefined;
|
|
101
|
+
if (isRequestForThisDocument) {
|
|
102
|
+
const event = {
|
|
103
|
+
offline: false,
|
|
104
|
+
appVersion: this.appVersion,
|
|
105
|
+
appName: this.appName,
|
|
106
|
+
name: FtAnalyticsEventName.DOCUMENT__SEARCH,
|
|
107
|
+
searchResponse: {
|
|
108
|
+
autocorrect: this.store.getState().spellcheck != undefined,
|
|
109
|
+
nbResults: results.length,
|
|
110
|
+
},
|
|
111
|
+
searchQuery: {
|
|
112
|
+
terms: request.query,
|
|
113
|
+
searchType: request.virtualField,
|
|
114
|
+
lastUpdate: getAnalyticsLastUpdate(request.metadataFilters),
|
|
115
|
+
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet)),
|
|
116
|
+
},
|
|
117
|
+
document: this.document,
|
|
118
|
+
};
|
|
119
|
+
this.eventsService.sendDocumentSearchEvent(event);
|
|
120
|
+
}
|
|
87
121
|
}
|
|
88
122
|
sendResultClickedEvent(result, rank) {
|
|
89
123
|
if (!this.canSendEvent()) {
|
|
@@ -94,7 +128,7 @@ export class FtAnalyticsSearchEventManager {
|
|
|
94
128
|
if (result.type == FtSearchResultType.TOPIC) {
|
|
95
129
|
topic = {
|
|
96
130
|
tocId: result.topic.tocId,
|
|
97
|
-
title: result.topic.title
|
|
131
|
+
title: result.topic.title,
|
|
98
132
|
};
|
|
99
133
|
}
|
|
100
134
|
const event = {
|
|
@@ -106,15 +140,15 @@ export class FtAnalyticsSearchEventManager {
|
|
|
106
140
|
terms: request.query,
|
|
107
141
|
searchType: request.virtualField,
|
|
108
142
|
lastUpdate: getAnalyticsLastUpdate(request.metadataFilters),
|
|
109
|
-
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet))
|
|
143
|
+
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet)),
|
|
110
144
|
},
|
|
111
145
|
searchResult: {
|
|
112
146
|
rank: rank,
|
|
113
147
|
type: result.type,
|
|
114
148
|
document: this.convertDocument(result),
|
|
115
|
-
topic: topic
|
|
149
|
+
topic: topic,
|
|
116
150
|
},
|
|
117
|
-
externalLink: this.convertExternalLink(result)
|
|
151
|
+
externalLink: this.convertExternalLink(result),
|
|
118
152
|
};
|
|
119
153
|
this.eventsService.sendSearchPageSelectEvent(event);
|
|
120
154
|
}
|
|
@@ -127,7 +161,7 @@ export class FtAnalyticsSearchEventManager {
|
|
|
127
161
|
if (result.type == FtSearchResultType.TOPIC) {
|
|
128
162
|
topic = {
|
|
129
163
|
tocId: result.topic.tocId,
|
|
130
|
-
title: result.topic.title
|
|
164
|
+
title: result.topic.title,
|
|
131
165
|
};
|
|
132
166
|
}
|
|
133
167
|
const event = {
|
|
@@ -139,15 +173,15 @@ export class FtAnalyticsSearchEventManager {
|
|
|
139
173
|
terms: request.query,
|
|
140
174
|
searchType: request.virtualField,
|
|
141
175
|
lastUpdate: getAnalyticsLastUpdate(request.metadataFilters),
|
|
142
|
-
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet))
|
|
176
|
+
facets: request.metadataFilters.map(facet => convertMetadataFilterToAnalyticsFacet(facet)),
|
|
143
177
|
},
|
|
144
178
|
searchResult: {
|
|
145
179
|
rank: rank,
|
|
146
180
|
type: result.type,
|
|
147
181
|
document: this.convertDocument(result),
|
|
148
|
-
topic: topic
|
|
182
|
+
topic: topic,
|
|
149
183
|
},
|
|
150
|
-
externalLink: this.convertExternalLink(result)
|
|
184
|
+
externalLink: this.convertExternalLink(result),
|
|
151
185
|
};
|
|
152
186
|
this.eventsService.sendSearchResultOpenContextMenuEvent(event);
|
|
153
187
|
}
|
|
@@ -158,14 +192,14 @@ export class FtAnalyticsSearchEventManager {
|
|
|
158
192
|
id: result.map.mapId,
|
|
159
193
|
title: result.map.title,
|
|
160
194
|
type: FtAnalyticsPublicationType.STRUCTURED_DOCUMENT,
|
|
161
|
-
metadata: result.map.metadata
|
|
195
|
+
metadata: result.map.metadata,
|
|
162
196
|
};
|
|
163
197
|
case FtSearchResultType.TOPIC:
|
|
164
198
|
return {
|
|
165
199
|
id: result.topic.mapId,
|
|
166
200
|
title: result.topic.mapTitle,
|
|
167
201
|
type: FtAnalyticsPublicationType.STRUCTURED_DOCUMENT,
|
|
168
|
-
metadata: result.topic.metadata
|
|
202
|
+
metadata: result.topic.metadata,
|
|
169
203
|
};
|
|
170
204
|
case FtSearchResultType.DOCUMENT:
|
|
171
205
|
return {
|
|
@@ -173,7 +207,7 @@ export class FtAnalyticsSearchEventManager {
|
|
|
173
207
|
title: result.document.title,
|
|
174
208
|
type: FtAnalyticsPublicationType.UNSTRUCTURED_DOCUMENT,
|
|
175
209
|
metadata: result.document.metadata,
|
|
176
|
-
mimeType: result.document.mimeType
|
|
210
|
+
mimeType: result.document.mimeType,
|
|
177
211
|
};
|
|
178
212
|
default:
|
|
179
213
|
throw new TypeError("Unknown type " + result.type);
|
|
@@ -6,6 +6,4 @@ export declare class FtSearchService extends FtServiceWithCache {
|
|
|
6
6
|
launchSuggest(request: FtSuggestRequest): Promise<FtSuggestResults>;
|
|
7
7
|
getAvailableSearchLocales(): Promise<FtSearchLocales>;
|
|
8
8
|
private sortFilters;
|
|
9
|
-
private sortObjectFields;
|
|
10
|
-
hash(object: any): string;
|
|
11
9
|
}
|
|
@@ -2,13 +2,6 @@ import { FtServiceWithCache } from "@fluid-topics/ft-app-context";
|
|
|
2
2
|
export class FtSearchService extends FtServiceWithCache {
|
|
3
3
|
constructor(overrideApi) {
|
|
4
4
|
super(true, overrideApi);
|
|
5
|
-
this.sortObjectFields = (_, value) => {
|
|
6
|
-
if (typeof value !== "object" || value == null || Array.isArray(value)) {
|
|
7
|
-
return value;
|
|
8
|
-
}
|
|
9
|
-
return Object.fromEntries(Object.entries(value)
|
|
10
|
-
.sort(([ka], [kb]) => ka.localeCompare(kb)));
|
|
11
|
-
};
|
|
12
5
|
}
|
|
13
6
|
async launchSearch(request) {
|
|
14
7
|
const sortedRequest = {
|
|
@@ -39,8 +32,4 @@ export class FtSearchService extends FtServiceWithCache {
|
|
|
39
32
|
})
|
|
40
33
|
.sort((a, b) => a.key.localeCompare(b.key));
|
|
41
34
|
}
|
|
42
|
-
hash(object) {
|
|
43
|
-
return String(Array.from(JSON.stringify(object, this.sortObjectFields))
|
|
44
|
-
.reduce((hash, char) => 0 | (31 * hash + char.charCodeAt(0)), 0));
|
|
45
|
-
}
|
|
46
35
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluid-topics/ft-search-context",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.6",
|
|
4
4
|
"description": "Context block for integrated search components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Lit"
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"url": "ssh://git@scm.mrs.antidot.net:2222/fluidtopics/ft-web-components.git"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@fluid-topics/ft-app-context": "1.3.
|
|
23
|
-
"@fluid-topics/ft-wc-utils": "1.3.
|
|
22
|
+
"@fluid-topics/ft-app-context": "1.3.6",
|
|
23
|
+
"@fluid-topics/ft-wc-utils": "1.3.6",
|
|
24
24
|
"lit": "3.1.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@fluid-topics/public-api": "1.0.99"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "595e5b638bbf265e174474722661e26767cfbd9d"
|
|
30
30
|
}
|