This commit is a style fix. * spacing DescItem component. * typo fix. * show file hash
		
			
				
	
	
		
			82 lines
		
	
	
		
			No EOL
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			No EOL
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
 | 
						|
import { useGalleryDoc } from "../hook/useGalleryDoc.ts";
 | 
						|
import TagBadge from "@/components/gallery/TagBadge";
 | 
						|
import StyledLink from "@/components/gallery/StyledLink";
 | 
						|
import { Link } from "wouter";
 | 
						|
import { classifyTags } from "../lib/classifyTags.tsx";
 | 
						|
import { DescTagItem, DescItem } from "../components/gallery/DescItem.tsx";
 | 
						|
 | 
						|
export interface ContentInfoPageProps {
 | 
						|
    params: {
 | 
						|
        id: string;
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
export function ContentInfoPage({ params }: ContentInfoPageProps) {
 | 
						|
    const { data, error, isLoading } = useGalleryDoc(params.id);
 | 
						|
 | 
						|
    if (isLoading) {
 | 
						|
        return <div className="p-4">Loading...</div>
 | 
						|
    }
 | 
						|
 | 
						|
    if (error) {
 | 
						|
        return <div className="p-4">Error: {String(error)}</div>
 | 
						|
    }
 | 
						|
 | 
						|
    if (!data) {
 | 
						|
        return <div className="p-4">Not found</div>
 | 
						|
    }
 | 
						|
 | 
						|
    const tags = data?.tags ?? [];
 | 
						|
    const classifiedTags = classifyTags(tags);
 | 
						|
 | 
						|
    const contentLocation = `/doc/${params.id}/reader`;
 | 
						|
 | 
						|
    return (
 | 
						|
        <div className="p-4 h-dvh overflow-auto">
 | 
						|
            <Link to={contentLocation}>
 | 
						|
                <div className="m-auto h-[400px] mb-4 flex justify-center items-center flex-none bg-[#272733]
 | 
						|
            rounded-xl shadow-lg overflow-hidden">
 | 
						|
                    <img
 | 
						|
                        className="max-w-full max-h-full object-cover object-center"
 | 
						|
                        src={`/api/doc/${data.id}/comic/thumbnail`}
 | 
						|
                        alt={data.title} />
 | 
						|
                </div>
 | 
						|
            </Link>
 | 
						|
            <Card className="flex-1">
 | 
						|
                <CardHeader>
 | 
						|
                    <CardTitle>
 | 
						|
                        <StyledLink to={contentLocation}>
 | 
						|
                            {data.title}
 | 
						|
                        </StyledLink>
 | 
						|
                    </CardTitle>
 | 
						|
                    <CardDescription>
 | 
						|
                        <StyledLink to={`/search?allow_tag=type:${classifiedTags.type[0] ?? ""}`} className="text-sm">
 | 
						|
                            {classifiedTags.type[0] ?? "N/A"}
 | 
						|
                        </StyledLink>
 | 
						|
                    </CardDescription>
 | 
						|
                </CardHeader>
 | 
						|
                <CardContent>
 | 
						|
                    <div className="grid gap-4 grid-cols-[repeat(auto_fill_300px)]">
 | 
						|
                        <DescTagItem name="Artist" items={classifiedTags.artist} />
 | 
						|
                        <DescTagItem name="Group" items={classifiedTags.group} />
 | 
						|
                        <DescTagItem name="Series" items={classifiedTags.series} />
 | 
						|
                        <DescTagItem name="Character" items={classifiedTags.character} />
 | 
						|
                        <DescItem name="Created At / Modified At">{new Date(data.created_at).toLocaleString()} / {new Date(data.modified_at).toLocaleString()}</DescItem>
 | 
						|
                        <DescItem name="Filehash">{data.content_hash}</DescItem>
 | 
						|
                        <DescItem name="Path">{`${data.basepath}/${data.filename}`}</DescItem>
 | 
						|
                        <DescItem name="Page Count">{data.pagenum}</DescItem>
 | 
						|
                    </div>
 | 
						|
                    <div className="grid mt-4">
 | 
						|
                        <span className="text-muted-foreground text-sm">Tags</span>
 | 
						|
                        <ul className="mt-2 flex flex-wrap gap-1">
 | 
						|
                            {classifiedTags.rest.map((tag) => <TagBadge key={tag} tagname={tag} />)}
 | 
						|
                        </ul>
 | 
						|
                    </div>
 | 
						|
                </CardContent>
 | 
						|
            </Card>
 | 
						|
        </div>
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
export default ContentInfoPage; |