2023-04-23 08:26:39 -05:00
// Copyright (C) 2022-present Daniel31x13 <daniel31x13@gmail.com>
// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
2023-02-24 11:32:28 -06:00
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
2023-05-25 09:17:20 -05:00
import { faChevronRight , faUser } from "@fortawesome/free-solid-svg-icons" ;
2023-03-05 15:03:20 -06:00
import Link from "next/link" ;
2023-05-14 10:41:08 -05:00
import { ExtendedCollection } from "@/types/global" ;
import useLinkStore from "@/store/links" ;
2023-05-25 09:17:20 -05:00
import ImageWithFallback from "./ImageWithFallback" ;
2023-02-24 11:32:28 -06:00
2023-05-14 10:41:08 -05:00
export default function ( { collection } : { collection : ExtendedCollection } ) {
const { links } = useLinkStore ( ) ;
2023-02-24 11:32:28 -06:00
const formattedDate = new Date ( collection . createdAt ) . toLocaleString ( "en-US" , {
year : "numeric" ,
month : "short" ,
day : "numeric" ,
} ) ;
return (
2023-05-25 09:22:27 -05:00
< div className = "p-5 bg-gradient-to-tr from-sky-100 from-10% via-gray-100 via-20% self-stretch min-h-[12rem] rounded-md cursor-pointer shadow duration-100 hover:shadow-none group" >
2023-05-25 09:17:20 -05:00
< Link href = { ` /collections/ ${ collection . id } ` } >
< div className = "flex flex-col gap-2 justify-between h-full" >
< div >
< div className = "flex justify-between text-sky-600 items-center mb-2" >
< p className = "text-2xl w-max font-bold capitalize" >
{ collection . name }
< / p >
< FontAwesomeIcon
icon = { faChevronRight }
className = "w-3 h-3 group-hover:w-5 group-hover:h-5 duration-100 text-gray-500"
/ >
< / div >
< p className = "text-gray-500" > { collection . description } < / p >
2023-04-25 07:39:46 -05:00
< / div >
2023-05-25 09:17:20 -05:00
< div className = "flex justify-between items-center" >
< div className = "text-sky-400 flex items-center w-full" >
{ collection . members
. map ( ( e , i ) = > {
return (
< ImageWithFallback
key = { i }
src = { ` /api/avatar/ ${ e . userId } ` }
className = "h-10 w-10 shadow rounded-full border-[3px] border-sky-100 -mr-3"
>
< div className = "text-white bg-sky-500 h-10 w-10 shadow rounded-full border-[3px] border-sky-100 -mr-3 flex items-center justify-center" >
< FontAwesomeIcon icon = { faUser } className = "w-5 h-5" / >
< / div >
< / ImageWithFallback >
) ;
} )
. reverse ( )
. slice ( 0 , 3 ) }
{ collection . members . length - 3 > 0 ? (
< div className = "h-10 w-10 text-white flex items-center justify-center rounded-full border-[3px] bg-sky-500 border-sky-100 -mr-3" >
+ { collection . members . length - 3 }
< / div >
) : null }
< / div >
< div className = "text-right w-full" >
< p className = "text-sky-500 font-bold text-sm" >
{ links . filter ( ( e ) = > e . collectionId === collection . id ) . length } { " " }
Links
< / p >
< p className = "text-gray-500 font-bold text-xs" > { formattedDate } < / p >
< / div >
2023-05-24 20:47:18 -05:00
< / div >
2023-03-05 15:03:20 -06:00
< / div >
2023-05-25 09:17:20 -05:00
< / Link >
< / div >
2023-02-24 11:32:28 -06:00
) ;
}