1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
import {empty} from '#sugar';
export default {
contentDependencies: ['generateAdditionalNamesBox'],
extraDependencies: ['html'],
query: (track) => {
const {
additionalNames: own,
sharedAdditionalNames: shared,
inferredAdditionalNames: inferred,
} = track;
if (empty(own) && empty(shared) && empty(inferred)) {
return {combinedList: []};
}
const firstFilter =
(empty(own)
? new Set()
: new Set(own.map(({name}) => name)));
const sharedFiltered =
shared.filter(({name}) => !firstFilter.has(name))
const secondFilter =
new Set([
...firstFilter,
...sharedFiltered.map(({name}) => name),
]);
const inferredFiltered =
inferred.filter(({name}) => !secondFilter.has(name));
return {
combinedList: [
...own,
...sharedFiltered,
...inferredFiltered,
],
};
},
relations: (relation, query) => ({
box:
(empty(query.combinedList)
? null
: relation('generateAdditionalNamesBox', query.combinedList)),
}),
generate: (relations, {html}) =>
relations.box ?? html.blank(),
};
|