Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

juni

푸터 본문

인턴

푸터

juni_shin 2024. 11. 15. 10:21

 

Footer 코드 예시

export default function Footer() {
  const router = useRouter();

  const snsLogos = {
    youtube: "/icons/sns/youtube.png",
    facebook: "/icons/sns/facebook.png",
    instagram: "/icons/sns/instagram.png",
    twitter: "/icons/sns/twitter.png",
    telegram: "/icons/sns/telegram.png",
    discord: "/icons/sns/discord.png",
    kakao: "/icons/sns/kakao.png",
    linkedin: "/icons/sns/linkedin.png",
    x: "/icons/sns/x_dark.png",
    etc: "/icons/sns/url.png",
  };

  const getSnsLogo = (url: string) => {
    if (!url) return;
    if (url.includes("youtube.com")) return snsLogos.youtube;
    if (url.includes("facebook.com")) return snsLogos.facebook;
    if (url.includes("instagram.com")) return snsLogos.instagram;
    if (url.includes("twitter.com")) return snsLogos.twitter;
    if (url.includes("x.com")) return snsLogos.x;
    if (url.includes("t.me")) return snsLogos.telegram;
    if (url.includes("discord.gg")) return snsLogos.discord;
    if (url.includes("linkedin.com")) return snsLogos.linkedin;
    if (url.includes("open.kakao.com")) return snsLogos.kakao;
    return snsLogos.etc;
  };

  return (
    <div className="py-8 md:py-[52px] md:mt-10 bg-background-footer">
      <div className="max-w-[1600px] mx-auto flex flex-col px-5 md:px-[155px] gap-8">
        <div className="w-[200px] h-10 shrink-0 relative">
          <Image
            src={Info.images.club_logo[0].path}
            alt="logo"
            className="object-contain object-left"
            fill={true}
          />
        </div>

        <div>
          <div className="flex flex-col gap-1.5 mb-3 md:mb-5 text-label_l">
            <div>{Info.name}</div>
            <div>
              {Info.representative_description}:{" "}
              {Info.representative_name} |{" "}
              {Info.owner?.description}: {Info.owner?.name}
            </div>
            <div className="md:flex">
              <div>{Info.description1}</div>
              <div className="hidden md:inline mx-1">|</div>
              <div>{Info.description2}</div>
            </div>
            <div>{Info.address}</div>
            <div>서비스 문의: {Info.phone_number}</div>
            <div>이메일: {Info.email}</div>
          </div>

          <div className="flex flex-wrap">
            {Info.official_channels?.map((url, index) => (
              <div
                className="flex items-center gap-2 rounded-md px-1 py-1"
                key={index}
                onClick={() => window.open(url, "_blank")}
              >
                {getSnsLogo(url) ? (
                  <Image
                    src={getSnsLogo(url)!}
                    alt={`sns logo image`}
                    className="object-scale-down bg-transparent aspect-square cursor-pointer"
                    width={32}
                    height={32}
                  />
                ) : (
                  <LinkIcon className="w-6 h-6 shrink-0 cursor-pointer" />
                )}
              </div>
            ))}
          </div>
        </div>

        <div className="flex gap-x-8 gap-y-5 text-title_l flex-wrap">
          <DialogPrivacyPolicy
            renderTrigger={(onClick) => (
              <div className="cursor-pointer" onClick={onClick}>
                서비스 이용약관
              </div>
            )}
          />

          <DialogPrivacyPolicy
            renderTrigger={(onClick) => (
              <div className="cursor-pointer" onClick={onClick}>
                개인정보처리방침
              </div>
            )}
          />

          <div>사용자 가이드</div>
        </div>

        <div className="flex flex-col md:flex-row md:justify-between gap-5 md:gap-0">
          <div className="opacity-50 text-body_m">
            © 2024. All rights reserved.
          </div>
          <LanguageToggle
            size="xs"
            icon="/icons/icon/Arrow-Glyph-Down.svg"
            className="w-[74px] text-primary border border-border-input bg-background-footer"
          />
        </div>
      </div>
    </div>
  );
}

'인턴' 카테고리의 다른 글

SVG 관련 퍼블리싱 ( 뱃지 )  (0) 2024.11.15
Next.js 404페이지 ( not-found )  (0) 2024.11.15
커뮤니티 게시글 관련 QA 및 리팩토링  (1) 2024.11.14
커뮤니티 (게시글 고정) API 연동  (2) 2024.11.13
게시글 고정  (1) 2024.11.13