minor ui improvements
This commit is contained in:
@@ -105,9 +105,9 @@ const toneStyles: Record<
|
||||
};
|
||||
|
||||
const sizeClasses: Record<BadgeSize, string> = {
|
||||
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<BadgeProps> = ({
|
||||
@@ -152,7 +152,7 @@ const Badge: React.FC<BadgeProps> = ({
|
||||
return (
|
||||
<span
|
||||
className={clsx(
|
||||
"inline-flex items-center justify-center gap-1 rounded-full font-normal",
|
||||
"inline-flex items-center justify-center gap-1 rounded font-normal",
|
||||
sizeClasses[size],
|
||||
toneClass,
|
||||
className,
|
||||
|
||||
@@ -65,19 +65,35 @@ export const createImagesPageConfig = (
|
||||
sortable: true,
|
||||
sortField: 'content_title',
|
||||
width: '250px',
|
||||
render: (_value: string, row: ContentImagesGroup) => (
|
||||
<div>
|
||||
<a
|
||||
href={`/writer/content/${row.content_id}`}
|
||||
className="text-base font-light text-brand-500 hover:text-brand-600 dark:text-brand-400"
|
||||
>
|
||||
{row.content_title}
|
||||
</a>
|
||||
<div className="text-xs text-gray-500 dark:text-gray-400 mt-1">
|
||||
ID: {row.content_id}
|
||||
render: (_value: string, row: ContentImagesGroup) => {
|
||||
const statusColors: Record<string, 'warning' | 'info' | 'success'> = {
|
||||
draft: 'warning',
|
||||
review: 'info',
|
||||
publish: 'success',
|
||||
};
|
||||
const statusLabels: Record<string, string> = {
|
||||
draft: 'Draft',
|
||||
review: 'Review',
|
||||
publish: 'Publish',
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<a
|
||||
href={`/writer/content/${row.content_id}`}
|
||||
className="text-base font-light text-brand-500 hover:text-brand-600 dark:text-brand-400"
|
||||
>
|
||||
{row.content_title}
|
||||
</a>
|
||||
<div className="text-xs text-gray-500 dark:text-gray-400 mt-1 flex items-center gap-2">
|
||||
<Badge color={statusColors[row.content_status] || 'warning'} size="xs" variant="soft">
|
||||
{statusLabels[row.content_status] || row.content_status}
|
||||
</Badge>
|
||||
<span>ID: {row.content_id}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'featured_image',
|
||||
|
||||
@@ -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<string[]>([]);
|
||||
|
||||
@@ -225,8 +225,8 @@ export default function Content() {
|
||||
|
||||
// Writer navigation tabs
|
||||
const writerTabs = [
|
||||
{ label: 'Tasks', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Content', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> },
|
||||
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> },
|
||||
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
|
||||
@@ -235,7 +235,7 @@ export default function Content() {
|
||||
return (
|
||||
<>
|
||||
<PageHeader
|
||||
title="Content"
|
||||
title="Content Drafts"
|
||||
badge={{ icon: <FileIcon />, color: 'purple' }}
|
||||
navigation={<ModuleNavigationTabs tabs={writerTabs} />}
|
||||
/>
|
||||
|
||||
@@ -497,8 +497,8 @@ export default function Images() {
|
||||
|
||||
// Writer navigation tabs
|
||||
const writerTabs = [
|
||||
{ label: 'Tasks', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Content', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> },
|
||||
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> },
|
||||
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
|
||||
|
||||
@@ -307,8 +307,8 @@ export default function Published() {
|
||||
|
||||
// Writer navigation tabs
|
||||
const writerTabs = [
|
||||
{ label: 'Tasks', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Content', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> },
|
||||
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> },
|
||||
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
|
||||
|
||||
@@ -345,8 +345,8 @@ export default function Review() {
|
||||
|
||||
// Writer navigation tabs
|
||||
const writerTabs = [
|
||||
{ label: 'Tasks', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Content', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> },
|
||||
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> },
|
||||
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
|
||||
|
||||
@@ -560,16 +560,17 @@ export default function Tasks() {
|
||||
|
||||
// Writer navigation tabs
|
||||
const writerTabs = [
|
||||
{ label: 'Tasks', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Content', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Queue', path: '/writer/tasks', icon: <TaskIcon /> },
|
||||
{ label: 'Drafts', path: '/writer/content', icon: <FileIcon /> },
|
||||
{ label: 'Images', path: '/writer/images', icon: <ImageIcon /> },
|
||||
{ label: 'Review', path: '/writer/review', icon: <CheckCircleIcon /> },
|
||||
{ label: 'Published', path: '/writer/published', icon: <CheckCircleIcon /> },
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<PageHeader
|
||||
title="Tasks"
|
||||
title="Content Queue"
|
||||
badge={{ icon: <TaskIcon />, color: 'indigo' }}
|
||||
navigation={<ModuleNavigationTabs tabs={writerTabs} />}
|
||||
/>
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user