@redocly/theme
Version:
Shared UI components lib
53 lines (42 loc) • 1.57 kB
text/typescript
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 };
}