Projekt

Obecné

Profil

Stáhnout (1.51 KB) Statistiky
| Větev: | Tag: | Revize:
1 91fd3fa6 Vaclav Honzik
// Business logic for tracking tool
2
3
import { CatalogItemDto, PathDto } from '../../swagger/data-contracts'
4
5
// For more comprehensive code alias CatalogItemDto[] as path variant
6 de12c6be Vaclav Honzik
export type PathVariant = MapPoint[]
7 91fd3fa6 Vaclav Honzik
8 a7ae217f Vaclav Honzik
export interface MapPoint {
9
    idx: number,
10
    active: boolean,
11
    catalogItem: CatalogItemDto,
12 de12c6be Vaclav Honzik
}
13
14 a7ae217f Vaclav Honzik
export const isMapPointDisplayable = (mapPoint: MapPoint): boolean =>
15
    !!mapPoint.catalogItem.latitude && !!mapPoint.catalogItem.longitude
16
17 de12c6be Vaclav Honzik
/**
18
 * Cartesian product of two arrays
19
 * @param sets
20
 * @returns
21
 */
22 91fd3fa6 Vaclav Honzik
const cartesianProduct = (sets: CatalogItemDto[][]): CatalogItemDto[][] =>
23
    sets.reduce<CatalogItemDto[][]>(
24
        (results, ids) =>
25
            results
26
                .map((result) => ids.map((id) => [...result, id]))
27
                .reduce((nested, result) => [...nested, ...result]),
28
        [[]]
29
    )
30
31 de12c6be Vaclav Honzik
/**
32
 * Builds a list of all possible path variants from pathDto
33
 * @param pathDto
34
 * @returns
35
 */
36 8c57f958 Vaclav Honzik
export const buildPathVariants = (pathDto: PathDto): PathVariant[] => {
37 91fd3fa6 Vaclav Honzik
    if (!pathDto.foundCatalogItems) {
38
        return []
39
    }
40
41 de12c6be Vaclav Honzik
    return (
42
        pathDto.foundCatalogItems.length === 1
43
            ? pathDto.foundCatalogItems
44
            : cartesianProduct(pathDto.foundCatalogItems)
45
    ).map((variant, _) =>
46
        variant.map(
47 a7ae217f Vaclav Honzik
            (catalogItem, idx) => (
48
                {
49 de12c6be Vaclav Honzik
                    idx,
50 a7ae217f Vaclav Honzik
                    active: !!catalogItem.latitude && !!catalogItem.longitude,
51 de12c6be Vaclav Honzik
                    catalogItem
52 a7ae217f Vaclav Honzik
                })
53 de12c6be Vaclav Honzik
        )
54
    )
55 91fd3fa6 Vaclav Honzik
}
56
57
export default buildPathVariants