diff --git a/src/annotation/index.ts b/src/annotation/index.ts index 7740b783d..0093af83b 100644 --- a/src/annotation/index.ts +++ b/src/annotation/index.ts @@ -1312,6 +1312,20 @@ export class LocalAnnotationSource extends AnnotationSource { ); } + getUniquePropertyId() { + const { properties } = this; + const ids = new Set(); + for (const p of properties.value) { + ids.add(p.identifier); + } + while (true) { + const uuid = crypto.randomUUID(); + if (!ids.has(uuid)) { + return uuid; + } + } + } + addProperty(property: AnnotationPropertySpec) { this.properties.value.push(property); for (const annotation of this) { diff --git a/src/layer/annotation/index.ts b/src/layer/annotation/index.ts index 846cad5c8..1ada323a6 100644 --- a/src/layer/annotation/index.ts +++ b/src/layer/annotation/index.ts @@ -535,7 +535,7 @@ class TagsTab extends Tab { enumLabels: ["", value], default: 0, description: value, - identifier: self.crypto.randomUUID(), // TODO + identifier: localAnnotations.getUniquePropertyId(), }); } }