From 9f1ed85b3ef465345d9510643e5f7a455948a8fc Mon Sep 17 00:00:00 2001 From: Alexey Morozov Date: Sat, 15 Nov 2025 20:56:35 +0300 Subject: [PATCH] Omit properties without values in `StandardEntity`, `StandardRelation` and `ClassicEntity` --- CHANGELOG.md | 1 + src/templates/classicTemplate.tsx | 11 ++++++++++- src/templates/standardElement.tsx | 12 +++++++++--- src/templates/standardLink.tsx | 11 ++++++++++- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87ff7cea..524a0503 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ## [Unreleased] #### 🐛 Fixed - Fix incorrect canvas viewport position when `zoomToFit()` or similar operation is called immediately after element position changes; +- Omit properties without values in `StandardEntity`, `StandardRelation` and `ClassicEntity`. ## [0.31.0] - 2025-11-15 #### 🚀 New Features diff --git a/src/templates/classicTemplate.tsx b/src/templates/classicTemplate.tsx index 21389ba6..9efe137b 100644 --- a/src/templates/classicTemplate.tsx +++ b/src/templates/classicTemplate.tsx @@ -146,7 +146,16 @@ function PropertyList(props: { const {data} = props; const {model, translation: t} = useWorkspace(); - const propertyIris: PropertyTypeIri[] = Object.keys(data.properties); + const propertyIris: PropertyTypeIri[] = []; + for (const iri in data.properties) { + if ( + Object.prototype.hasOwnProperty.call(data.properties, iri) && + data.properties[iri].length > 0 + ) { + propertyIris.push(iri); + } + } + useKeyedSyncStore(subscribePropertyTypes, propertyIris, model); const properties = propertyIris.map(iri => { diff --git a/src/templates/standardElement.tsx b/src/templates/standardElement.tsx index 9b92f037..aa02c839 100644 --- a/src/templates/standardElement.tsx +++ b/src/templates/standardElement.tsx @@ -462,9 +462,15 @@ function PropertyList(props: { const {data, shouldInclude} = props; const {model, translation: t} = useWorkspace(); - let propertyIris: PropertyTypeIri[] = Object.keys(data.properties); - if (shouldInclude) { - propertyIris = propertyIris.filter(shouldInclude); + const propertyIris: PropertyTypeIri[] = []; + for (const iri in data.properties) { + if ( + Object.prototype.hasOwnProperty.call(data.properties, iri) && + data.properties[iri].length > 0 && + (!shouldInclude || shouldInclude(iri)) + ) { + propertyIris.push(iri); + } } useKeyedSyncStore(subscribePropertyTypes, propertyIris, model); diff --git a/src/templates/standardLink.tsx b/src/templates/standardLink.tsx index 8fb12ce5..6a7735a7 100644 --- a/src/templates/standardLink.tsx +++ b/src/templates/standardLink.tsx @@ -235,7 +235,16 @@ function LinkProperties(props: StandardRelationProps) { const {model, translation: t} = useWorkspace(); const {data} = link as RelationLink; - const propertyIris: PropertyTypeIri[] = Object.keys(data.properties); + const propertyIris: PropertyTypeIri[] = []; + for (const iri in data.properties) { + if ( + Object.prototype.hasOwnProperty.call(data.properties, iri) && + data.properties[iri].length > 0 + ) { + propertyIris.push(iri); + } + } + useKeyedSyncStore(subscribePropertyTypes, propertyIris, model); const properties = propertyIris.map(iri => {