diff --git a/apps/web/public/svgs/index.ts b/apps/web/public/svgs/index.ts index 68ac0f50..6dad0563 100644 --- a/apps/web/public/svgs/index.ts +++ b/apps/web/public/svgs/index.ts @@ -15,6 +15,8 @@ import IconPostLikeOutline from "./post-like-outline.svg"; import IconScoreBanner from "./score-banner.svg"; import IconSearchBanner from "./search-banner.svg"; import IconSearchFilled from "./search-filled.svg"; +import IconShare from "./shareIcon.svg"; +import IconShareFilled from "./shareIconFilled.svg"; import IconSignupRegionAmerica from "./signup-region-america.svg"; import IconSignupRegionAsia from "./signup-region-asia.svg"; import IconSignupRegionEurope from "./signup-region-europe.svg"; @@ -42,6 +44,8 @@ export { IconScoreBanner, IconSearchBanner, IconSearchFilled, + IconShare, + IconShareFilled, IconSignupRegionAmerica, IconSignupRegionAsia, IconSignupRegionEurope, diff --git a/apps/web/public/svgs/shareIcon.svg b/apps/web/public/svgs/shareIcon.svg new file mode 100644 index 00000000..95219b16 --- /dev/null +++ b/apps/web/public/svgs/shareIcon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/svgs/shareIconFilled.svg b/apps/web/public/svgs/shareIconFilled.svg new file mode 100644 index 00000000..6f01d5b0 --- /dev/null +++ b/apps/web/public/svgs/shareIconFilled.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/web/src/apis/news/getNewsList.ts b/apps/web/src/apis/news/getNewsList.ts index fcbc7832..df349759 100644 --- a/apps/web/src/apis/news/getNewsList.ts +++ b/apps/web/src/apis/news/getNewsList.ts @@ -7,7 +7,7 @@ import { type ArticleListResponse, NewsQueryKeys, newsApi } from "./api"; /** * @description 아티클 목록 조회 훅 */ -const useGetArticleList = (userId: number) => { +const useGetArticleList = (userId: number, options?: { enabled?: boolean }) => { return useQuery({ queryKey: [NewsQueryKeys.articleList, userId], queryFn: () => { @@ -17,7 +17,7 @@ const useGetArticleList = (userId: number) => { return newsApi.getArticleList(userId); }, staleTime: 1000 * 60 * 10, // 10분 - enabled: userId !== null && userId !== 0, + enabled: userId !== null && userId !== 0 && (options?.enabled ?? true), select: (data) => data.newsResponseList, }); }; diff --git a/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/_ui/UniversityBtns.tsx b/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/_ui/UniversityBtns.tsx index 2c2bcdaa..ce7c9ff1 100644 --- a/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/_ui/UniversityBtns.tsx +++ b/apps/web/src/app/university/[homeUniversity]/[id]/_ui/UniversityDetail/_ui/UniversityBtns.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { useDeleteWish, useGetWishList, usePostAddWish } from "@/apis/universities"; import useAuthStore from "@/lib/zustand/useAuthStore"; +import { IconShare, IconShareFilled } from "@/public/svgs"; const likeIcon = ( @@ -24,18 +25,6 @@ const likeIconFilled = ( ); -const copyIcon = ( - - - -); - interface UniversityBtnsProps { universityId: number; } @@ -43,6 +32,7 @@ const UniversityBtns = ({ universityId }: UniversityBtnsProps) => { const isAuthenticated = useAuthStore((state) => state.isAuthenticated); const [isLiked, setIsLiked] = useState(false); + const [isShareActive, setIsShareActive] = useState(false); const { data: favoriteUniv } = useGetWishList(isAuthenticated); const { mutate: postUniversityFavorite } = usePostAddWish(); const { mutate: deleteUniversityFavorite } = useDeleteWish(); @@ -64,6 +54,8 @@ const UniversityBtns = ({ universityId }: UniversityBtnsProps) => { const handleCopy = () => { navigator.clipboard.writeText(window.location.href).then(() => {}); toast.success("URL이 복사되었습니다."); + setIsShareActive(true); + setTimeout(() => setIsShareActive(false), 600); }; return ( <> @@ -86,10 +78,20 @@ const UniversityBtns = ({ universityId }: UniversityBtnsProps) => { {isLiked ? likeIconFilled : likeIcon} ); diff --git a/apps/web/src/components/mentor/MentorCard/_ui/ArticlePreview.tsx b/apps/web/src/components/mentor/MentorCard/_ui/ArticlePreview.tsx new file mode 100644 index 00000000..df0e18bd --- /dev/null +++ b/apps/web/src/components/mentor/MentorCard/_ui/ArticlePreview.tsx @@ -0,0 +1,26 @@ +import Image from "@/components/ui/FallbackImage"; +import type { Article } from "@/types/news"; +import { normalizeImageUrlToUploadCdn } from "@/utils/cdnUrl"; + +interface ArticlePreviewProps { + article: Article; +} + +const ArticlePreview = ({ article }: ArticlePreviewProps) => { + const thumbnailUrl = normalizeImageUrlToUploadCdn(article.thumbnailUrl); + return ( + +
+ {article.title} +
+

{article.title}

+
+ ); +}; + +export default ArticlePreview;