diff --git a/frontend/src/config/pages/content.config.tsx b/frontend/src/config/pages/content.config.tsx index fdca559d..31210fd3 100644 --- a/frontend/src/config/pages/content.config.tsx +++ b/frontend/src/config/pages/content.config.tsx @@ -449,7 +449,7 @@ export const createContentPageConfig = ( value: 0, accentColor: 'blue' as const, calculate: (data) => 0, - tooltip: 'Generated images / Total images. Tracks visual asset coverage.',, + tooltip: 'Generated images / Total images. Tracks visual asset coverage.', }, ], }; diff --git a/frontend/src/config/pages/images.config.tsx b/frontend/src/config/pages/images.config.tsx index f5fd8528..adee71b6 100644 --- a/frontend/src/config/pages/images.config.tsx +++ b/frontend/src/config/pages/images.config.tsx @@ -104,7 +104,6 @@ export const createImagesPageConfig = ( key: 'featured_image', label: 'Featured', sortable: false, - width: '100px', render: (_value: any, row: ContentImagesGroup) => ( { const image = row.in_article_images.find(img => img.position === i); // 0-indexed position return ( diff --git a/frontend/src/config/pages/tasks.config.tsx b/frontend/src/config/pages/tasks.config.tsx index 19df92e2..6c87d80f 100644 --- a/frontend/src/config/pages/tasks.config.tsx +++ b/frontend/src/config/pages/tasks.config.tsx @@ -474,7 +474,7 @@ export const createTasksPageConfig = ( value: 0, accentColor: 'blue' as const, calculate: (data) => 0, - tooltip: 'Generated images / Total images. Tracks visual asset coverage.',, + tooltip: 'Generated images / Total images. Tracks visual asset coverage.', }, ], }; diff --git a/frontend/src/pages/Planner/Clusters.tsx b/frontend/src/pages/Planner/Clusters.tsx index 2f19fab3..fa108536 100644 --- a/frontend/src/pages/Planner/Clusters.tsx +++ b/frontend/src/pages/Planner/Clusters.tsx @@ -155,7 +155,7 @@ export default function Clusters() { const loadTotalMetrics = useCallback(async () => { try { // Batch all API calls in parallel for better performance - const [allRes, mappedRes, newRes, imagesRes] = await Promise.all([ + const [allRes, mappedRes, newRes, imagesRes, summaryRes] = await Promise.all([ // Fetch all clusters (site-wide) fetchClusters({ page_size: 1, @@ -175,12 +175,16 @@ export default function Clusters() { }), // Fetch images count fetchImages({ page_size: 1 }), + // Fetch clusters summary for keywords count and volume + fetchClustersSummary(), ]); setActualTotalClusters(allRes.count || 0); // Store actual total (unfiltered) for header metrics setTotalWithIdeas(mappedRes.count || 0); setTotalReady(newRes.count || 0); setTotalImagesCount(imagesRes.count || 0); + setTotalKeywords(summaryRes.total_keywords || 0); + setTotalVolume(summaryRes.total_volume || 0); } catch (error) { console.error('Error loading total metrics:', error); } diff --git a/frontend/src/pages/Writer/Images.tsx b/frontend/src/pages/Writer/Images.tsx index fe476b10..3dac498c 100644 --- a/frontend/src/pages/Writer/Images.tsx +++ b/frontend/src/pages/Writer/Images.tsx @@ -554,7 +554,7 @@ export default function Images() { case 'Published': value = totalPublished; break; - case 'Total Images': + case 'Images': value = totalImagesCount; return { label: metric.label, diff --git a/frontend/src/pages/Writer/Review.tsx b/frontend/src/pages/Writer/Review.tsx index 39407662..bc0e2cf4 100644 --- a/frontend/src/pages/Writer/Review.tsx +++ b/frontend/src/pages/Writer/Review.tsx @@ -57,6 +57,7 @@ export default function Review() { const [selectedIds, setSelectedIds] = useState([]); // Pagination state + const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); const [totalCount, setTotalCount] = useState(0); diff --git a/frontend/src/templates/TablePageTemplate.tsx b/frontend/src/templates/TablePageTemplate.tsx index 5a8e4b25..aeb253b2 100644 --- a/frontend/src/templates/TablePageTemplate.tsx +++ b/frontend/src/templates/TablePageTemplate.tsx @@ -974,20 +974,24 @@ export default function TablePageTemplate({ } } + // Determine if we need wrapper divs (for toggle or alignment) + const needsWrapper = column.toggleable && hasToggleContent; + const alignClass = column.align === 'center' ? 'justify-center' : column.align === 'end' ? 'justify-end' : ''; + return ( -
-
- {column.render ? ( - column.render(row[column.key], row) - ) : ( - {row[column.key]?.toString() || '-'} - )} -
- {column.toggleable && hasToggleContent && ( + {needsWrapper ? ( +
+
+ {column.render ? ( + column.render(row[column.key], row) + ) : ( + {row[column.key]?.toString() || '-'} + )} +
e.stopPropagation()}>
- )} -
+
+ ) : ( + column.render ? ( + column.render(row[column.key], row) + ) : ( + {row[column.key]?.toString() || '-'} + ) + )} {/* Actions button - absolutely positioned in column with hasActions flag */} {hasActionsInColumn && (() => {