From 23789d4ecdd82df0c1e9a6df9d3531717ae38fdf Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Sat, 5 Jul 2025 05:38:20 +0000 Subject: [PATCH] Fix JavaScript runtime errors for undefined name property access - Add null checks to prevent "Cannot read properties of undefined (reading 'name')" errors - Fix ProjectCard, MembersList, ProjectsView, DiscoverView, ProjectViewView components - Add null validation in DIDView.claimDescription() and ClaimReportCertificateView.drawCanvas() - Add missing databaseUtil import in MembersList component - Use meaningful fallback text for undefined names ("Unnamed Project", "Unnamed Member") - Resolves template rendering crashes when entities lack name properties --- src/components/InfiniteScroll.vue | 26 ++++---- src/components/MembersList.vue | 77 +++++++++++++++--------- src/components/ProjectCard.vue | 2 +- src/views/ClaimReportCertificateView.vue | 4 ++ src/views/DIDView.vue | 15 ++++- src/views/DiscoverView.vue | 4 +- src/views/ProjectViewView.vue | 4 +- src/views/ProjectsView.vue | 4 +- 8 files changed, 90 insertions(+), 46 deletions(-) diff --git a/src/components/InfiniteScroll.vue b/src/components/InfiniteScroll.vue index 15bd964c..4efb7fc9 100644 --- a/src/components/InfiniteScroll.vue +++ b/src/components/InfiniteScroll.vue @@ -60,17 +60,21 @@ export default class InfiniteScroll extends Vue { * Used internally by Vue's lifecycle system */ updated() { - if (!this.observer) { - const options = { - root: null, - rootMargin: `0px 0px ${this.distance}px 0px`, - threshold: 1.0, - }; - this.observer = new IntersectionObserver( - this.handleIntersection, - options, - ); - this.observer.observe(this.$refs.sentinel as HTMLElement); + if (!this.observer && this.$refs.sentinel) { + const sentinelElement = this.$refs.sentinel as HTMLElement; + // Ensure we have a valid HTMLElement before observing + if (sentinelElement instanceof HTMLElement) { + const options = { + root: null, + rootMargin: `0px 0px ${this.distance}px 0px`, + threshold: 1.0, + }; + this.observer = new IntersectionObserver( + this.handleIntersection, + options, + ); + this.observer.observe(sentinelElement); + } } } diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index cb5449b3..589216d8 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -66,7 +66,7 @@ changes the password -->
@@ -207,7 +207,7 @@ class="text-blue-500" @click="onClickLoadProject(fulfilledByThis.handleId)" > - {{ fulfilledByThis.name }} + {{ fulfilledByThis.name || "Unnamed Project" }}
diff --git a/src/views/ProjectsView.vue b/src/views/ProjectsView.vue index ccdfab67..f5762307 100644 --- a/src/views/ProjectsView.vue +++ b/src/views/ProjectsView.vue @@ -252,7 +252,9 @@
-

{{ project.name }}

+

+ {{ project.name || "Unnamed Project" }} +

{{ project.description }}