@fluid-topics/ft-wc-utils 1.1.54 → 1.1.55
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/ClusteringHelper.d.ts +6 -2
- package/build/ClusteringHelper.js +33 -10
- package/package.json +2 -2
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { FtMetadata, FtMetadataDescriptor, FtSearchResultClusterEntry } from "@fluid-topics/public-api";
|
|
2
|
+
import { Optional } from "./generic-types";
|
|
2
3
|
export interface FlatMetadata {
|
|
3
4
|
key: string;
|
|
4
|
-
|
|
5
|
+
label: string;
|
|
6
|
+
value: Optional<string>;
|
|
5
7
|
displayValue: string;
|
|
6
8
|
}
|
|
7
9
|
export interface ClusterItem {
|
|
@@ -15,9 +17,11 @@ export declare class ClusteringHelper {
|
|
|
15
17
|
private metadataDescriptors;
|
|
16
18
|
constructor(allResults: Array<FtSearchResultClusterEntry>, selectedResult: FtSearchResultClusterEntry, clusteringMetadata: Set<string>, metadataDescriptors: Array<FtMetadataDescriptor>);
|
|
17
19
|
static extractResultMetadata(result: FtSearchResultClusterEntry): FlatMetadata[];
|
|
20
|
+
static extractResultMetadata(result: FtSearchResultClusterEntry, key: string): Optional<FlatMetadata>;
|
|
18
21
|
static flattenMetadata(metadata: FtMetadata): FlatMetadata;
|
|
19
|
-
computeClustersItemsForMetadata(key: string, locale: string): ClusterItem[];
|
|
22
|
+
computeClustersItemsForMetadata(key: string, locale: string, undefinedDisplayValue?: string): ClusterItem[];
|
|
20
23
|
private compareMetadata;
|
|
24
|
+
getMetadataDescriptor(key: string): FtMetadataDescriptor | undefined;
|
|
21
25
|
private findBestResultForMetadataValue;
|
|
22
26
|
private countMatchingMetadata;
|
|
23
27
|
}
|
|
@@ -5,9 +5,10 @@ export class ClusteringHelper {
|
|
|
5
5
|
this.clusteringMetadata = clusteringMetadata;
|
|
6
6
|
this.metadataDescriptors = metadataDescriptors;
|
|
7
7
|
}
|
|
8
|
-
static extractResultMetadata(result) {
|
|
8
|
+
static extractResultMetadata(result, key) {
|
|
9
9
|
var _a, _b;
|
|
10
|
-
|
|
10
|
+
let flatMetadata = ((_b = (_a = result === null || result === void 0 ? void 0 : result.map) !== null && _a !== void 0 ? _a : result === null || result === void 0 ? void 0 : result.document) !== null && _b !== void 0 ? _b : result === null || result === void 0 ? void 0 : result.topic).metadata.map(m => ClusteringHelper.flattenMetadata(m));
|
|
11
|
+
return key == null ? flatMetadata : flatMetadata.find(m => m.key === key);
|
|
11
12
|
}
|
|
12
13
|
static flattenMetadata(metadata) {
|
|
13
14
|
if (metadata.hierarchicalValues) {
|
|
@@ -22,18 +23,31 @@ export class ClusteringHelper {
|
|
|
22
23
|
displayValues.push(tree.join(" > "));
|
|
23
24
|
}
|
|
24
25
|
});
|
|
25
|
-
return {
|
|
26
|
+
return {
|
|
27
|
+
key: metadata.key,
|
|
28
|
+
label: metadata.label,
|
|
29
|
+
value: values.join(", "),
|
|
30
|
+
displayValue: displayValues.join(", ")
|
|
31
|
+
};
|
|
26
32
|
}
|
|
27
33
|
else {
|
|
28
34
|
const value = metadata.values.join(", ");
|
|
29
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
key: metadata.key,
|
|
37
|
+
label: metadata.label,
|
|
38
|
+
value: value,
|
|
39
|
+
displayValue: value
|
|
40
|
+
};
|
|
30
41
|
}
|
|
31
42
|
}
|
|
32
|
-
computeClustersItemsForMetadata(key, locale) {
|
|
33
|
-
|
|
43
|
+
computeClustersItemsForMetadata(key, locale, undefinedDisplayValue = "No value") {
|
|
44
|
+
var _a, _b;
|
|
45
|
+
let currentResultMetadataTargeted = ClusteringHelper.extractResultMetadata(this.selectedResult, key);
|
|
46
|
+
let metadataLabel = (_a = currentResultMetadataTargeted === null || currentResultMetadataTargeted === void 0 ? void 0 : currentResultMetadataTargeted.label) !== null && _a !== void 0 ? _a : (_b = this.getMetadataDescriptor(key)) === null || _b === void 0 ? void 0 : _b.label;
|
|
34
47
|
const otherValues = this.allResults
|
|
35
|
-
.
|
|
36
|
-
.
|
|
48
|
+
.map(result => ClusteringHelper.extractResultMetadata(result, key))
|
|
49
|
+
.map(m => m !== null && m !== void 0 ? m : { key: key, label: metadataLabel, value: undefined, displayValue: undefinedDisplayValue })
|
|
50
|
+
.filter(m => m.value != (currentResultMetadataTargeted === null || currentResultMetadataTargeted === void 0 ? void 0 : currentResultMetadataTargeted.value))
|
|
37
51
|
.filter((flatMeta, index, array) => array.findIndex(i => i.value === flatMeta.value) === index); // for unicity
|
|
38
52
|
return otherValues.map(meta => ({
|
|
39
53
|
result: this.findBestResultForMetadataValue(key, meta.value),
|
|
@@ -41,7 +55,13 @@ export class ClusteringHelper {
|
|
|
41
55
|
})).sort((a, b) => this.compareMetadata(a.metadata.value, b.metadata.value, key, locale));
|
|
42
56
|
}
|
|
43
57
|
compareMetadata(a, b, key, locale) {
|
|
44
|
-
|
|
58
|
+
if (a == null) {
|
|
59
|
+
return -1;
|
|
60
|
+
}
|
|
61
|
+
if (b == null) {
|
|
62
|
+
return 1;
|
|
63
|
+
}
|
|
64
|
+
let descriptor = this.getMetadataDescriptor(key);
|
|
45
65
|
let sortRule = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.sortRule) || "NONE";
|
|
46
66
|
let reverseOrder = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.reverseSort) || false;
|
|
47
67
|
if (sortRule == "ALPHABET" || sortRule == "VERSION") {
|
|
@@ -50,9 +70,12 @@ export class ClusteringHelper {
|
|
|
50
70
|
}
|
|
51
71
|
return 0;
|
|
52
72
|
}
|
|
73
|
+
getMetadataDescriptor(key) {
|
|
74
|
+
return this.metadataDescriptors.find((descriptor) => key == descriptor.key);
|
|
75
|
+
}
|
|
53
76
|
findBestResultForMetadataValue(key, value) {
|
|
54
77
|
const resultsMatchingRequiredValue = this.allResults
|
|
55
|
-
.filter(result => ClusteringHelper.extractResultMetadata(result)
|
|
78
|
+
.filter(result => { var _a; return ((_a = ClusteringHelper.extractResultMetadata(result, key)) === null || _a === void 0 ? void 0 : _a.value) == value; });
|
|
56
79
|
let currentResultMetadata = ClusteringHelper.extractResultMetadata(this.selectedResult)
|
|
57
80
|
.filter(m => this.clusteringMetadata.has(m.key));
|
|
58
81
|
let wishedMetadata = [...currentResultMetadata.filter(m => m.key !== key)];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluid-topics/ft-wc-utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.55",
|
|
4
4
|
"description": "Internal web components tools",
|
|
5
5
|
"author": "Fluid Topics <devtopics@antidot.net>",
|
|
6
6
|
"license": "ISC",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"lit": "3.1.0",
|
|
25
25
|
"mark.js": "8.11.1"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "f548a38dc05ea47ac4e94d97fe62625fc9297fcc"
|
|
28
28
|
}
|