UNPKG

@redocly/theme

Version:

Shared UI components lib

53 lines (42 loc) 1.57 kB
import type { CatalogEntityConfig, EntitiesCatalogConfig } from '@redocly/config'; import type { BffCatalogEntity } from '@redocly/theme/core/types'; import { withPathPrefix } from '../../utils/urls'; type Props = { catalogConfig: CatalogEntityConfig; entitiesCatalogConfig?: EntitiesCatalogConfig; revision?: string | null; version?: string | null; }; type BaseEntity = Pick<BffCatalogEntity, 'key' | 'type'>; export function useCatalogEntityDetails({ catalogConfig, entitiesCatalogConfig, revision, version, }: Props) { const getCatalogSpecificConfigByEntityTypeIncluded = (entity: BaseEntity) => { if (!entitiesCatalogConfig) { return; } return Object.values(entitiesCatalogConfig.catalogs ?? {}).find((catalog) => { return catalog?.includes?.some((include) => include.type === entity.type); }); }; const getEntityDetailsLink = (entity: BaseEntity) => { const catalogSpecificConfig = getCatalogSpecificConfigByEntityTypeIncluded(entity); const basePath = !catalogSpecificConfig || !entitiesCatalogConfig ? withPathPrefix(`/catalogs/${catalogConfig.slug}/entities/${entity.key}`) : withPathPrefix(`/catalogs/${catalogSpecificConfig.slug}/entities/${entity.key}`); const params = new URLSearchParams(); if (revision) { params.set('revision', revision); } if (version !== undefined) { params.set('version', version ?? ''); } params.set('search', ''); return `${basePath}?${params.toString()}`; }; return { getEntityDetailsLink }; }