'use client'; import './style.scss'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import Image, { ImageProps } from 'next/image'; import { useState, useMemo } from 'react'; import Post from '@/types/forum/post'; import { BoardListMeta } from '@/types/forum/boardMeta'; import { formatDate, isHotPost, isNewPost } from '@/lib/utils/client'; import { faThumbsUp, faEye, faClock } from '@fortawesome/free-regular-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faFileCirclePlus } from '@fortawesome/free-solid-svg-icons'; import NoticeListLayout from './NoticeListLayout'; interface Props { boardListMeta: BoardListMeta; speaker?: Post[]; notice?: Post[]; list: Post[]; startIndex?: number; onChange?: (_: number|undefined) => void; } function ImageWithFallback({ src, fallbackSrc = '/resources/no-image.png', alt, ...option }: ImageProps & { fallbackSrc?: string }) { const [imgSrc, setImgSrc] = useState(src); return ( {alt} setImgSrc(fallbackSrc)} /> ); } export default function AlbumListLayout({boardListMeta, speaker = [], notice = [], list, onChange}: Props) { const searchParams = useSearchParams(); const query = useMemo(() => Object.fromEntries(searchParams.entries()), [searchParams]); return ( <> {!boardListMeta.exceptSpeaker && !boardListMeta.exceptNotice ? (
{/* 전체 공지 */} {/* 일반 공지 */}
) : ( )}
0 ? 'album-list-layout' : 'grid p-10 text-center border-b mb-3'} aria-label='사진/영산 게시판'> {list.length > 0 ? ( list.map(row => { const isNew = isNewPost(boardListMeta.isNewIcon, row); const isHot = isHotPost(boardListMeta.isHotIcon, row); const createdAt = formatDate(row.createdAt); const postViewUrl = {pathname: '/post/' + row.id, query}; return (
{row.thumbnail ? ( ) : ( {row.subject} )}
{row.boardPrefix && row.boardPrefixID && onChange && ( )} {row.subject} {row.comments > 0 && ([{row.comments}])} {row.files > 0 && } {isNew && NEW} {isHot && HOT}
{row.name}
  • {row.likes}
  • {row.views}
  • {createdAt}
); }) ) : (

등록된 게시글이 없습니다.

)}
); }