diff --git a/src/assets/NavigationLogo.svg b/src/assets/NavigationLogo.svg deleted file mode 100644 index 1eae8a47..00000000 --- a/src/assets/NavigationLogo.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/NavigationLogo768.svg b/src/assets/NavigationLogo768.svg deleted file mode 100644 index 9a9b4838..00000000 --- a/src/assets/NavigationLogo768.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/assets/defaultLogo/GDGoC.png b/src/assets/defaultLogo/GDGoC.png new file mode 100644 index 00000000..fcdd1f0c Binary files /dev/null and b/src/assets/defaultLogo/GDGoC.png differ diff --git a/src/assets/logo_contest/gdgoc_knu_doyeonkim.png b/src/assets/logo_contest/gdgoc_knu_doyeonkim.png new file mode 100644 index 00000000..8047db4c Binary files /dev/null and b/src/assets/logo_contest/gdgoc_knu_doyeonkim.png differ diff --git a/src/assets/logo_contest/gdgoc_knu_hayeon.png b/src/assets/logo_contest/gdgoc_knu_hayeon.png new file mode 100644 index 00000000..269db34a Binary files /dev/null and b/src/assets/logo_contest/gdgoc_knu_hayeon.png differ diff --git a/src/assets/logo_contest/gdgoc_knu_seojisu.png b/src/assets/logo_contest/gdgoc_knu_seojisu.png new file mode 100644 index 00000000..41b38890 Binary files /dev/null and b/src/assets/logo_contest/gdgoc_knu_seojisu.png differ diff --git a/src/assets/logo_contest/gdgocknu_hyunminkim.png b/src/assets/logo_contest/gdgocknu_hyunminkim.png new file mode 100644 index 00000000..b19d8216 Binary files /dev/null and b/src/assets/logo_contest/gdgocknu_hyunminkim.png differ diff --git a/src/assets/logo_contest/gdgocknu_kimjoohoon.png b/src/assets/logo_contest/gdgocknu_kimjoohoon.png new file mode 100644 index 00000000..bae48edc Binary files /dev/null and b/src/assets/logo_contest/gdgocknu_kimjoohoon.png differ diff --git a/src/assets/logo_contest/gdgocknu_sonheeju.png b/src/assets/logo_contest/gdgocknu_sonheeju.png new file mode 100644 index 00000000..e4b23740 Binary files /dev/null and b/src/assets/logo_contest/gdgocknu_sonheeju.png differ diff --git a/src/assets/logo_contest/gdgocknu_yoonkyuwon.png b/src/assets/logo_contest/gdgocknu_yoonkyuwon.png new file mode 100644 index 00000000..90840063 Binary files /dev/null and b/src/assets/logo_contest/gdgocknu_yoonkyuwon.png differ diff --git a/src/components/common/View/LazyLoad.tsx b/src/components/common/View/LazyLoad.tsx index e0934b53..201860c2 100644 --- a/src/components/common/View/LazyLoad.tsx +++ b/src/components/common/View/LazyLoad.tsx @@ -1,18 +1,16 @@ -import { Suspense, ComponentType, useEffect, useRef, useState } from 'react'; +import { Suspense, useEffect, useRef, useState } from 'react'; import { LoadingView } from './LoadingView'; type LazyLoadProps = { - component: React.LazyExoticComponent>; - props?: Record; + children: React.ReactNode; }; -const LazyLoad = ({ component: LazyComponent, props }: LazyLoadProps) => { +const LazyLoad = ({ children }: LazyLoadProps) => { const [isVisible, setIsVisible] = useState(false); const observerRef = useRef(null); useEffect(() => { - // Observer가 이미 설정된 경우 추가 로직을 막습니다. if (isVisible) return; const observer = new IntersectionObserver( @@ -20,15 +18,14 @@ const LazyLoad = ({ component: LazyComponent, props }: LazyLoadProps) => { entries.forEach((entry) => { if (entry.isIntersecting) { setIsVisible(true); - // console.log('isVisible'); - observer.disconnect(); // 한 번만 로드하도록 observer 해제 + observer.disconnect(); } }); }, { root: null, rootMargin: '0px', - threshold: 0.3, // 뷰포트 30% 이상 노출 시 로드 + threshold: 0.3, } ); @@ -44,9 +41,7 @@ const LazyLoad = ({ component: LazyComponent, props }: LazyLoadProps) => { return (
{isVisible ? ( - }> - - + }>{children} ) : ( )} diff --git a/src/components/common/title/PageTitle.tsx b/src/components/common/title/PageTitle.tsx index 5057dde1..30a57aa5 100644 --- a/src/components/common/title/PageTitle.tsx +++ b/src/components/common/title/PageTitle.tsx @@ -9,13 +9,11 @@ import Title from '../typography/Title'; const MainTitlelayout = styled.div` width: 100%; max-width: 1024px; + margin-top: 50px; display: flex; flex-direction: column; align-items: flex-start; - - margin-top: 50px; - margin-left: 60px; `; const MobileMainTitlelayout = styled.div` diff --git a/src/components/feature/footer/FooterLink.ts b/src/components/feature/footer/FooterLink.ts new file mode 100644 index 00000000..8eea47e5 --- /dev/null +++ b/src/components/feature/footer/FooterLink.ts @@ -0,0 +1,37 @@ +import CompanyLogo from '@gdg/assets/CompanyLogo.svg'; +import GithubLogo from '@gdg/assets/GithubLogo.svg'; +import InstagramLogo from '@gdg/assets/InstagramLogo.svg'; +import Phone from '@gdg/assets/Phone.svg'; + +type FooterLink = { + icon: string; + title: string; + content: string; + href?: string; +}; + +export const footerLinks: FooterLink[] = [ + { + icon: Phone, + title: '대표 연락처', + content: '010-4922-7687', + }, + { + icon: GithubLogo, + title: 'GDG KNU 팀 깃허브', + content: 'Github 바로가기', + href: 'https://github.com/GDG-on-Campus-KNU', + }, + { + icon: InstagramLogo, + title: '인스타그램', + content: '@gdgoc.knu 바로가기', + href: 'https://www.instagram.com/gdgoc.knu/', + }, + { + icon: CompanyLogo, + title: '협력사', + content: '데이터융복합연구원 바로가기', + href: 'https://datainstitute.knu.ac.kr/contents/main.do', + }, +]; diff --git a/src/components/feature/footer/MainFooter.tsx b/src/components/feature/footer/MainFooter.tsx index 51134a55..bfc60461 100644 --- a/src/components/feature/footer/MainFooter.tsx +++ b/src/components/feature/footer/MainFooter.tsx @@ -1,7 +1,3 @@ -import CompanyLogo from '@gdg/assets/CompanyLogo.svg'; -import GithubLogo from '@gdg/assets/GithubLogo.svg'; -import InstagramLogo from '@gdg/assets/InstagramLogo.svg'; -import Phone from '@gdg/assets/Phone.svg'; import Text from '@gdg/components/common/typography/Text'; import { Footer, @@ -12,6 +8,22 @@ import { TableData, } from '@gdg/styles/FooterLayoutStyle'; +import { footerLinks } from './FooterLink'; + +const FooterRow = ({ + items, + renderItem, +}: { + items: typeof footerLinks; + renderItem: (item: (typeof footerLinks)[0]) => React.ReactNode; +}) => ( + + {items.map((item, i) => ( + {renderItem(item)} + ))} + +); + const MainFooter = () => { return (