diff --git a/src/pages/Program/tutorial.tsx b/src/pages/Program/tutorial.tsx index e3259b3..3be6c8c 100644 --- a/src/pages/Program/tutorial.tsx +++ b/src/pages/Program/tutorial.tsx @@ -1,17 +1,57 @@ import Page from "components/common/Page" import React from "react" import styled from "styled-components" + import useTranslation from "utils/hooks/useTranslation" +const KAKAO_MAP_URL = "https://place.map.kakao.com/700052629" +const NAVER_MAP_URL = "https://naver.me/FfMdLRIM" +const GOOGLE_MAP_URL = "https://maps.app.goo.gl/H8QiqNRrHHwa6giv7" +const GOOGLE_MAP_IFRAME_SRC = + "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d4548.557545780045!2d126.92092772543593!3d37.55771056652137!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x357c98d855555555%3A0x843e97bd5279ea6b!2z7ZWc67mb66-465SU7Ja0KOyjvCk!5e0!3m2!1sko!2skr!4v1730765243757!5m2!1sko!2skr" + +type MapInfoStateType = { + mapType: "kakao" | "google" +} + const Tutorial = () => { + const kakaoMapRef = React.useRef(null) + const [state, setState] = React.useState({ mapType: "kakao" }) const t = useTranslation() + const selectMap = (mapType: MapInfoStateType["mapType"]) => + setState((prevState) => ({ ...prevState, mapType })) + + React.useEffect(() => { + if (!(window.kakao && window.kakao.maps && kakaoMapRef.current)) return + + const content = `
${t("한빛미디어")}
` + const position = new window.kakao.maps.LatLng(37.55917491634307, 126.9278766893293) + const map = new window.kakao.maps.Map(kakaoMapRef.current, { center: position, level: 3 }) + new kakao.maps.InfoWindow({ content }).open(map, new kakao.maps.Marker({ map, position })) + }) + + const flexBoxStyle: React.CSSProperties = { + display: "flex", + justifyContent: "center", + alignItems: "center", + } + const columnFlexBoxStyle: React.CSSProperties = { ...flexBoxStyle, flexDirection: "column" } + const mapStyle: React.CSSProperties = { border: 0, width: "100%", height: "450px" } + return ( -

{t("튜토리얼")}

+

+
+ {t("튜토리얼")}   + + 지금 등록하러 가기! + +
+

-

튜토리얼이란?

+

튜토리얼이란?

튜토리얼은 초보자들을 위해, 또는 새로운 것을 접하는 사람들을 위해 진행하는 교육 프로그램입니다.
직접 컴퓨터를 가져와서 진행하며 현장에서 질문하고 해결하는 만큼 해당 기술에 대해 좀 더 깊게 알게됩니다.

@@ -19,14 +59,14 @@ const Tutorial = () => {

-

튜토리얼 프로그램 소개

+

튜토리얼 프로그램 소개

* 튜토리얼 프로그램은 오전 / 오후 두 타임으로 구성되어 있습니다. 신청 시 시간대가 겹치지 않도록 주의해주시기 바랍니다!


-

오전 세션 [10:00 - 13:00]

+

오전 세션 [10:00 - 13:00]

FastAPI로 CRUD API 서버 만들기
@@ -105,7 +145,7 @@ const Tutorial = () => {


-

오후 세션 [14:00 - 18:00]

+

오후 세션 [14:00 - 18:00]

Django ORM 톺아보기
@@ -253,11 +293,29 @@ const Tutorial = () => {

-

시간 & 장소

+

시간 & 장소

  • 시간 : 10:00 ~ 18:00
  • -
  • 장소 : 서울 서대문구 연희로 2길 62
  • +
  • + 장소 : 서울 서대문구 연희로 2길 62 +
+
+
+ selectMap("kakao")}>{t("카카오맵")} + selectMap("google")}>{t("구글 지도")} +
+ +
+
+ + +
+
+ + +
+


@@ -276,6 +334,19 @@ const Tutorial = () => { export default Tutorial +const GoToRegistrationButtonContainer = styled.a` + display: flex; + justify-content: center; + align-items: center; +` + +const GoToRegistrationButton = styled.button` + font-size: 1rem; + padding: 0.5rem 1rem; + margin: 0; + cursor: pointer; +` + const TutorialProgramDetails = styled.details` margin: 0.5rem 0; padding: 0.5rem; @@ -339,3 +410,58 @@ const TutorialProgramDetails = styled.details` } } ` + +const MapSelectTabBtn = styled.button` + flex-grow: 1; + padding: 0.25rem; + + border: none; + background-color: rgba(255, 255, 255, 0.05); + font-weight: lighter; + + border-radius: 0; + + &:hover { + background-color: rgba(255, 255, 255, 0.1); + } + + &.active { + background-color: rgba(255, 255, 255, 0.3); + font-weight: bold; + } +` + +const FullWidthAnchorBtn = styled.a` + width: 100%; + height: 1.5rem; + display: flex; + justify-content: flex-start; + align-items: center; + + button { + width: 100%; + height: 100%; + margin: 0; + padding: 0 0.5rem; + + font-size: 0.75rem; + font-weight: bold; + border: none; + border-radius: unset; + + &.kakao { + background-color: #fee500; + color: #191919; + } + + &.naver { + background-color: #04c75b; + color: #fff; + } + + &.google { + background-color: #4285f4; + color: #fff; + } + } +`