From 2c4cf6a0f5592692025a34b7ee2a6dd2912a3fca Mon Sep 17 00:00:00 2001 From: alorig <220087330+alorig@users.noreply.github.com> Date: Mon, 24 Nov 2025 12:12:20 +0500 Subject: [PATCH] 1 --- .../components/sites/SiteProgressWidget.tsx | 56 ++++++++++++++----- frontend/src/services/api.ts | 6 +- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/sites/SiteProgressWidget.tsx b/frontend/src/components/sites/SiteProgressWidget.tsx index 3d962423..3d35291d 100644 --- a/frontend/src/components/sites/SiteProgressWidget.tsx +++ b/frontend/src/components/sites/SiteProgressWidget.tsx @@ -87,6 +87,28 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress ); } + const clusterCoverage: NonNullable = + progress.cluster_coverage ?? { + total_clusters: 0, + covered_clusters: 0, + details: [] as NonNullable['details'], + }; + + const taxonomyCoverage: NonNullable = + progress.taxonomy_coverage ?? { + total_taxonomies: 0, + defined_taxonomies: 0, + details: [] as NonNullable['details'], + }; + + const validationFlags: NonNullable = + progress.validation_flags ?? { + clusters_attached: false, + taxonomies_defined: false, + sitemap_generated: false, + all_pages_generated: false, + }; + const getStatusColor = (status: string) => { switch (status) { case 'complete': @@ -126,19 +148,19 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress
- {progress.cluster_coverage.covered_clusters}/{progress.cluster_coverage.total_clusters} + {clusterCoverage.covered_clusters}/{clusterCoverage.total_clusters}
Clusters Covered
- {progress.taxonomy_coverage.defined_taxonomies}/{progress.taxonomy_coverage.total_taxonomies} + {taxonomyCoverage.defined_taxonomies}/{taxonomyCoverage.total_taxonomies}
Taxonomies Defined
- {progress.validation_flags.all_pages_generated ? '✓' : '✗'} + {validationFlags.all_pages_generated ? '✓' : '✗'}
All Pages Generated
@@ -149,10 +171,14 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress

Cluster Coverage

- {progress.cluster_coverage.details && progress.cluster_coverage.details.length > 0 ? ( - progress.cluster_coverage.details.map((cluster) => { - const totalPages = cluster.hub_pages + cluster.supporting_pages + cluster.attribute_pages; - const completionPercent = totalPages > 0 ? Math.min(100, (cluster.content_count / totalPages) * 100) : 0; + {clusterCoverage.details && clusterCoverage.details.length > 0 ? ( + clusterCoverage.details.map((cluster) => { + const hubPages = cluster.hub_pages ?? 0; + const supportingPages = cluster.supporting_pages ?? 0; + const attributePages = cluster.attribute_pages ?? 0; + const contentCount = cluster.content_count ?? 0; + const totalPages = hubPages + supportingPages + attributePages; + const completionPercent = totalPages > 0 ? Math.min(100, (contentCount / totalPages) * 100) : 0; return (
- {cluster.content_count} content / {totalPages} pages + {contentCount} content / {totalPages} pages
@@ -259,7 +285,7 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress
- {progress.validation_flags.clusters_attached ? ( + {validationFlags.clusters_attached ? ( ) : ( @@ -267,7 +293,7 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress Clusters Attached
- {progress.validation_flags.taxonomies_defined ? ( + {validationFlags.taxonomies_defined ? ( ) : ( @@ -275,7 +301,7 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress Taxonomies Defined
- {progress.validation_flags.sitemap_generated ? ( + {validationFlags.sitemap_generated ? ( ) : ( @@ -283,7 +309,7 @@ export default function SiteProgressWidget({ blueprintId, siteId }: SiteProgress Sitemap Generated
- {progress.validation_flags.all_pages_generated ? ( + {validationFlags.all_pages_generated ? ( ) : ( diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 34370ee1..6ac0ab3b 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -2188,7 +2188,7 @@ export interface SiteProgress { blueprint_id: number; blueprint_name: string; overall_status: 'in_progress' | 'complete' | 'blocked'; - cluster_coverage: { + cluster_coverage?: { total_clusters: number; covered_clusters: number; details: Array<{ @@ -2205,12 +2205,12 @@ export interface SiteProgress { is_complete: boolean; }>; }; - taxonomy_coverage: { + taxonomy_coverage?: { total_taxonomies: number; defined_taxonomies: number; details: any[]; }; - validation_flags: { + validation_flags?: { clusters_attached: boolean; taxonomies_defined: boolean; sitemap_generated: boolean;