From 646c9300d1695d156f6197bb29bf36ee77abbd0f Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 31 Mar 2026 05:53:39 +0200 Subject: [PATCH] Add entity labels functionality --- src/entities/entity-labels.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/entities/entity-labels.ts diff --git a/src/entities/entity-labels.ts b/src/entities/entity-labels.ts new file mode 100644 index 00000000..db4e4fba --- /dev/null +++ b/src/entities/entity-labels.ts @@ -0,0 +1,32 @@ +import { compareEntityInstances, getEntityKindLabel, getEntityInstances, type EntityInstance } from "./entity-instances"; + +function getSortedEntitiesByKind(entities: Record, kind: EntityInstance["kind"]): EntityInstance[] { + return Object.values(entities) + .filter((entity) => entity.kind === kind) + .sort(compareEntityInstances); +} + +export function getEntityDisplayLabel(entity: EntityInstance, entities: Record): string { + const typedEntities = getSortedEntitiesByKind(entities, entity.kind); + const entityIndex = typedEntities.findIndex((candidate) => candidate.id === entity.id); + const baseLabel = getEntityKindLabel(entity.kind); + + return entityIndex <= 0 ? baseLabel : `${baseLabel} ${entityIndex + 1}`; +} + +export function getEntityDisplayLabelById(entityId: string, entities: Record): string { + const entity = entities[entityId]; + + if (entity === undefined) { + return "Entity"; + } + + return getEntityDisplayLabel(entity, entities); +} + +export function getSortedEntityDisplayLabels(entities: Record): Array<{ entity: EntityInstance; label: string }> { + return getEntityInstances(entities).map((entity) => ({ + entity, + label: getEntityDisplayLabel(entity, entities) + })); +}