From a7eddd44b23370ef4c7212ed32fb8f39ae30cb81 Mon Sep 17 00:00:00 2001 From: "IGNY8 VPS (Salman)" Date: Mon, 1 Dec 2025 10:39:42 +0000 Subject: [PATCH] minor ui improvements --- .../igny8_core/modules/writer/serializers.py | 1 + backend/igny8_core/modules/writer/views.py | 1 + frontend/src/components/ui/badge/Badge.tsx | 8 ++-- frontend/src/config/pages/images.config.tsx | 40 +++++++++++++------ frontend/src/pages/Writer/Content.tsx | 8 ++-- frontend/src/pages/Writer/Images.tsx | 4 +- frontend/src/pages/Writer/Published.tsx | 4 +- frontend/src/pages/Writer/Review.tsx | 4 +- frontend/src/pages/Writer/Tasks.tsx | 7 ++-- frontend/src/services/api.ts | 1 + 10 files changed, 49 insertions(+), 29 deletions(-) diff --git a/backend/igny8_core/modules/writer/serializers.py b/backend/igny8_core/modules/writer/serializers.py index 0bfd38ea..46c66048 100644 --- a/backend/igny8_core/modules/writer/serializers.py +++ b/backend/igny8_core/modules/writer/serializers.py @@ -144,6 +144,7 @@ class ContentImagesGroupSerializer(serializers.Serializer): """Serializer for grouped content images - one row per content""" content_id = serializers.IntegerField() content_title = serializers.CharField() + content_status = serializers.CharField() # draft, review, publish featured_image = ContentImageSerializer(allow_null=True) in_article_images = ContentImageSerializer(many=True) overall_status = serializers.CharField() # 'pending', 'partial', 'complete', 'failed' diff --git a/backend/igny8_core/modules/writer/views.py b/backend/igny8_core/modules/writer/views.py index 03f8539b..3224be32 100644 --- a/backend/igny8_core/modules/writer/views.py +++ b/backend/igny8_core/modules/writer/views.py @@ -581,6 +581,7 @@ class ImagesViewSet(SiteSectorModelViewSet): grouped_data.append({ 'content_id': content.id, 'content_title': content.title or content.meta_title or f"Content #{content.id}", + 'content_status': content.status, # Add content status 'featured_image': featured_serializer.data if featured_serializer else None, 'in_article_images': [s.data for s in in_article_serializers], 'overall_status': overall_status, diff --git a/frontend/src/components/ui/badge/Badge.tsx b/frontend/src/components/ui/badge/Badge.tsx index de282038..e59d4086 100644 --- a/frontend/src/components/ui/badge/Badge.tsx +++ b/frontend/src/components/ui/badge/Badge.tsx @@ -105,9 +105,9 @@ const toneStyles: Record< }; const sizeClasses: Record = { - xs: "h-5 px-2 text-[11px] leading-tight", - sm: "h-6 px-2.5 text-xs leading-tight", - md: "h-7 px-3 text-sm leading-tight", + xs: "min-h-[20px] px-2.5 py-1 text-[11px] leading-[1.4]", + sm: "min-h-[24px] px-3 py-1 text-xs leading-[1.4]", + md: "min-h-[28px] px-3.5 py-1.5 text-sm leading-[1.4]", }; const Badge: React.FC = ({ @@ -152,7 +152,7 @@ const Badge: React.FC = ({ return ( ( -
- - {row.content_title} - -
- ID: {row.content_id} + render: (_value: string, row: ContentImagesGroup) => { + const statusColors: Record = { + draft: 'warning', + review: 'info', + publish: 'success', + }; + const statusLabels: Record = { + draft: 'Draft', + review: 'Review', + publish: 'Publish', + }; + + return ( +
+ + {row.content_title} + +
+ + {statusLabels[row.content_status] || row.content_status} + + ID: {row.content_id} +
-
- ), + ); + }, }, { key: 'featured_image', diff --git a/frontend/src/pages/Writer/Content.tsx b/frontend/src/pages/Writer/Content.tsx index a52f716b..5f2078af 100644 --- a/frontend/src/pages/Writer/Content.tsx +++ b/frontend/src/pages/Writer/Content.tsx @@ -37,7 +37,7 @@ export default function Content() { // Filter state const [searchTerm, setSearchTerm] = useState(''); - const [statusFilter, setStatusFilter] = useState(''); + const [statusFilter, setStatusFilter] = useState('draft'); const [sourceFilter, setSourceFilter] = useState(''); const [selectedIds, setSelectedIds] = useState([]); @@ -225,8 +225,8 @@ export default function Content() { // Writer navigation tabs const writerTabs = [ - { label: 'Tasks', path: '/writer/tasks', icon: }, - { label: 'Content', path: '/writer/content', icon: }, + { label: 'Queue', path: '/writer/tasks', icon: }, + { label: 'Drafts', path: '/writer/content', icon: }, { label: 'Images', path: '/writer/images', icon: }, { label: 'Review', path: '/writer/review', icon: }, { label: 'Published', path: '/writer/published', icon: }, @@ -235,7 +235,7 @@ export default function Content() { return ( <> , color: 'purple' }} navigation={} /> diff --git a/frontend/src/pages/Writer/Images.tsx b/frontend/src/pages/Writer/Images.tsx index b6978eb2..2f41aa94 100644 --- a/frontend/src/pages/Writer/Images.tsx +++ b/frontend/src/pages/Writer/Images.tsx @@ -497,8 +497,8 @@ export default function Images() { // Writer navigation tabs const writerTabs = [ - { label: 'Tasks', path: '/writer/tasks', icon: }, - { label: 'Content', path: '/writer/content', icon: }, + { label: 'Queue', path: '/writer/tasks', icon: }, + { label: 'Drafts', path: '/writer/content', icon: }, { label: 'Images', path: '/writer/images', icon: }, { label: 'Review', path: '/writer/review', icon: }, { label: 'Published', path: '/writer/published', icon: }, diff --git a/frontend/src/pages/Writer/Published.tsx b/frontend/src/pages/Writer/Published.tsx index 303ac742..c325595a 100644 --- a/frontend/src/pages/Writer/Published.tsx +++ b/frontend/src/pages/Writer/Published.tsx @@ -307,8 +307,8 @@ export default function Published() { // Writer navigation tabs const writerTabs = [ - { label: 'Tasks', path: '/writer/tasks', icon: }, - { label: 'Content', path: '/writer/content', icon: }, + { label: 'Queue', path: '/writer/tasks', icon: }, + { label: 'Drafts', path: '/writer/content', icon: }, { label: 'Images', path: '/writer/images', icon: }, { label: 'Review', path: '/writer/review', icon: }, { label: 'Published', path: '/writer/published', icon: }, diff --git a/frontend/src/pages/Writer/Review.tsx b/frontend/src/pages/Writer/Review.tsx index 8498b812..b8a6758b 100644 --- a/frontend/src/pages/Writer/Review.tsx +++ b/frontend/src/pages/Writer/Review.tsx @@ -345,8 +345,8 @@ export default function Review() { // Writer navigation tabs const writerTabs = [ - { label: 'Tasks', path: '/writer/tasks', icon: }, - { label: 'Content', path: '/writer/content', icon: }, + { label: 'Queue', path: '/writer/tasks', icon: }, + { label: 'Drafts', path: '/writer/content', icon: }, { label: 'Images', path: '/writer/images', icon: }, { label: 'Review', path: '/writer/review', icon: }, { label: 'Published', path: '/writer/published', icon: }, diff --git a/frontend/src/pages/Writer/Tasks.tsx b/frontend/src/pages/Writer/Tasks.tsx index 39a12904..32613a1e 100644 --- a/frontend/src/pages/Writer/Tasks.tsx +++ b/frontend/src/pages/Writer/Tasks.tsx @@ -560,16 +560,17 @@ export default function Tasks() { // Writer navigation tabs const writerTabs = [ - { label: 'Tasks', path: '/writer/tasks', icon: }, - { label: 'Content', path: '/writer/content', icon: }, + { label: 'Queue', path: '/writer/tasks', icon: }, + { label: 'Drafts', path: '/writer/content', icon: }, { label: 'Images', path: '/writer/images', icon: }, + { label: 'Review', path: '/writer/review', icon: }, { label: 'Published', path: '/writer/published', icon: }, ]; return ( <> , color: 'indigo' }} navigation={} /> diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index fa3cee9c..864c0123 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -1184,6 +1184,7 @@ export interface ContentImage { export interface ContentImagesGroup { content_id: number; content_title: string; + content_status: 'draft' | 'review' | 'publish'; featured_image: ContentImage | null; in_article_images: ContentImage[]; overall_status: 'pending' | 'partial' | 'complete' | 'failed';