Projekt

Obecné

Profil

Stáhnout (1.41 KB) Statistiky
| Větev: | Tag: | Revize:
1 812b9f90 Vaclav Honzik
import { CatalogItemDto, PathDto } from '../../../swagger/data-contracts'
2
import generateUuid from '../../../utils/id/uuidGenerator'
3 c0b66eaf Vaclav Honzik
import { MapPoint, MapPointType, PathVariant } from '../trackingToolUtils'
4 91fd3fa6 Vaclav Honzik
5 a7ae217f Vaclav Honzik
6 de12c6be Vaclav Honzik
/**
7
 * Cartesian product of two arrays
8
 * @param sets
9
 * @returns
10
 */
11 91fd3fa6 Vaclav Honzik
const cartesianProduct = (sets: CatalogItemDto[][]): CatalogItemDto[][] =>
12
    sets.reduce<CatalogItemDto[][]>(
13
        (results, ids) =>
14
            results
15
                .map((result) => ids.map((id) => [...result, id]))
16
                .reduce((nested, result) => [...nested, ...result]),
17
        [[]]
18
    )
19
20 de12c6be Vaclav Honzik
/**
21
 * Builds a list of all possible path variants from pathDto
22
 * @param pathDto
23
 * @returns
24
 */
25 812b9f90 Vaclav Honzik
export const buildPathVariants = (pathDto: PathDto, mapPointType: MapPointType = MapPointType.LocalCatalog): PathVariant[] => {
26 91fd3fa6 Vaclav Honzik
    if (!pathDto.foundCatalogItems) {
27
        return []
28
    }
29
30 de12c6be Vaclav Honzik
    return (
31
        pathDto.foundCatalogItems.length === 1
32
            ? pathDto.foundCatalogItems
33
            : cartesianProduct(pathDto.foundCatalogItems)
34
    ).map((variant, _) =>
35
        variant.map(
36 a7ae217f Vaclav Honzik
            (catalogItem, idx) => (
37
                {
38 812b9f90 Vaclav Honzik
                    id: generateUuid(),
39 de12c6be Vaclav Honzik
                    idx,
40 f41a4cd3 Vaclav Honzik
                    addToPath: !!catalogItem.latitude && !!catalogItem.longitude,
41 812b9f90 Vaclav Honzik
                    catalogItem,
42
                    type: mapPointType,
43 f41a4cd3 Vaclav Honzik
                } as MapPoint)
44 de12c6be Vaclav Honzik
        )
45
    )
46 91fd3fa6 Vaclav Honzik
}
47
48
export default buildPathVariants