From ecc275cc61f9be5a3a74fcce3c04dccc90ade52b Mon Sep 17 00:00:00 2001 From: "IGNY8 VPS (Salman)" Date: Tue, 11 Nov 2025 18:34:58 +0000 Subject: [PATCH] added imae adn prompt icons on contetn page --- .../igny8_core/modules/writer/serializers.py | 21 ++++++ frontend/src/config/pages/content.config.tsx | 68 ++++++++++++++++++- frontend/src/services/api.ts | 2 + 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/backend/igny8_core/modules/writer/serializers.py b/backend/igny8_core/modules/writer/serializers.py index ba47e63f..17aed9ac 100644 --- a/backend/igny8_core/modules/writer/serializers.py +++ b/backend/igny8_core/modules/writer/serializers.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from django.db import models from .models import Tasks, Images, Content from igny8_core.modules.planner.models import Clusters, ContentIdeas @@ -180,6 +181,8 @@ class ContentSerializer(serializers.ModelSerializer): """Serializer for Content model""" task_title = serializers.SerializerMethodField() sector_name = serializers.SerializerMethodField() + has_image_prompts = serializers.SerializerMethodField() + has_generated_images = serializers.SerializerMethodField() class Meta: model = Content @@ -202,6 +205,8 @@ class ContentSerializer(serializers.ModelSerializer): 'generated_at', 'updated_at', 'account_id', + 'has_image_prompts', + 'has_generated_images', ] read_only_fields = ['id', 'generated_at', 'updated_at', 'account_id'] @@ -225,4 +230,20 @@ class ContentSerializer(serializers.ModelSerializer): except Sector.DoesNotExist: return None return None + + def get_has_image_prompts(self, obj): + """Check if content has any image prompts generated""" + # Check if any images exist with prompts for this content + return Images.objects.filter( + models.Q(content=obj) | models.Q(task=obj.task) + ).exclude(prompt__isnull=True).exclude(prompt='').exists() + + def get_has_generated_images(self, obj): + """Check if content has any generated images (status='generated' and has URL)""" + # Check if any images are generated (have status='generated' and image_url) + return Images.objects.filter( + models.Q(content=obj) | models.Q(task=obj.task), + status='generated', + image_url__isnull=False + ).exclude(image_url='').exists() diff --git a/frontend/src/config/pages/content.config.tsx b/frontend/src/config/pages/content.config.tsx index fb95bcd6..00801b05 100644 --- a/frontend/src/config/pages/content.config.tsx +++ b/frontend/src/config/pages/content.config.tsx @@ -14,6 +14,7 @@ import { import Badge from '../../components/ui/badge/Badge'; import { formatRelativeDate } from '../../utils/date'; import { Content } from '../../services/api'; +import { FileIcon, MoreDotIcon } from '../../icons'; export interface ColumnConfig { key: string; @@ -194,7 +195,72 @@ export const createContentPageConfig = ( sortable: true, sortField: 'generated_at', label: 'Generated', - render: (value: string) => formatRelativeDate(value), + align: 'right', + render: (value: string, row: Content) => { + const hasPrompts = row.has_image_prompts || false; + const hasImages = row.has_generated_images || false; + + return ( +
+ + {formatRelativeDate(value)} + +
+ {/* Prompt Icon */} +
+ + + + + + + +
+ + {/* Image Icon */} +
+ + + + + +
+
+
+ ); + }, }, ], filters: [ diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 5551e0d3..bf6eeef7 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -1517,6 +1517,8 @@ export interface Content { metadata: Record; generated_at: string; updated_at: string; + has_image_prompts?: boolean; + has_generated_images?: boolean; } export interface ContentResponse {