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 = (
);
-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}
+
+ );
+};
+
+export default ArticlePreview;