Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified client/public/retreat/main/fourth/calendar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/public/retreat/main/third/table2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/public/retreat/main/third/table3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified client/public/retreat/main/third/table4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/retreat/og.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 18 additions & 4 deletions client/src/app/common/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,26 @@ function Login() {
const code = searchParams.get("code")
if (code) {
//카카오에서 리다이렉트된 경우
getKakaoTokenFromAuthCode(code).then((kakaoToken) => {
login(kakaoToken).then(() => {
getKakaoTokenFromAuthCode(code)
.then((kakaoToken) => {
login(kakaoToken)
.then(() => {
const returnUrl = searchParams.get("state")
push(returnUrl || "/")
})
.catch((e) => {
const returnUrl = searchParams.get("state")
if (returnUrl === "/retreat/register") {
push(`/retreat/search`)
}
})
})
.catch((e) => {
const returnUrl = searchParams.get("state")
push(returnUrl || "/")
if (returnUrl === "/retreat/register") {
push(`/retreat/search`)
}
})
})
} else if (isLogin) {
const returnUrl = searchParams.get("returnUrl")
push(returnUrl || "/")
Expand Down
9 changes: 4 additions & 5 deletions client/src/app/globals.css
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
@font-face {
font-family: "PretendardVariable";
font-family: "Pretendard";
src: url("../font/PretendardVariable.woff2");
}

/*
@font-face {
font-family: "HandFont";
src: url("../font/hand-font.woff2");
font-family: "MapoDacapo";
src: url("../font/MapoDacapo.otf");
font-weight: normal;
}
*/

@font-face {
font-family: "NEXON_Warhaven_OTF";
Expand Down
10 changes: 2 additions & 8 deletions client/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import Notification from "@/components/notification/notification"
import "./globals.css"
import { Provider } from "jotai"
import Head from "next/head"
import Script from "next/script"

export default function RootLayout({
children,
Expand Down Expand Up @@ -43,12 +41,8 @@ export default function RootLayout({

<meta name="title" property="og:title" content={title} />
<meta name="description" property="og:description" content="" />
<meta
name="image"
property="og:image"
content="/retreat/retreat_bg.jpeg"
/>
<meta name="url" property="og:url" content="/retreat/retreat_bg.jpeg" />
<meta name="image" property="og:image" content="/retreat/og.png" />
<meta name="url" property="og:url" content="/retreat/og.png" />
<meta name="format-detection" content="telephone=no" />
<Provider>
<body>
Expand Down
3 changes: 0 additions & 3 deletions client/src/app/leader/attendance/useAttendance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,12 @@ export default function useAttendance() {
if (!groupInfo) return

const dateStr = getLastSundayDateString()
console.log("지난주 일요일 날짜:", dateStr)

// 지난주 일요일 일정 찾기
const lastSundaySchedule = worshipScheduleList.find(
(schedule) => schedule.date === dateStr,
)

console.log("지난주 일요일 일정:", lastSundaySchedule?.id)
if (!lastSundaySchedule) {
error("지난주 일요일 예배 일정이 없습니다.")
return
Expand All @@ -132,7 +130,6 @@ export default function useAttendance() {
return attendData
})

console.log("updatedAttendData", updatedAttendData)
setSoonAttendData(updatedAttendData)
success("지난주 일요일 출석 데이터를 불러왔습니다.")
}
Expand Down
118 changes: 95 additions & 23 deletions client/src/app/retreat/complete/page.tsx
Original file line number Diff line number Diff line change
@@ -1,41 +1,80 @@
"use client"

import { Box, Button, IconButton, Stack } from "@mui/material"
import ArrowBackIosNewRoundedIcon from "@mui/icons-material/ArrowBackIosNewRounded"
import { Box, Button, IconButton, Stack } from "@mui/material"
import { keyframes } from "@mui/material/styles"
import { useRouter, useSearchParams } from "next/navigation"
import { Suspense } from "react"
import usePageColor from "@/hooks/usePageColor"
import { useNotification } from "@/hooks/useNotification"
import useRetreat from "../hooks/useRetreat"

const revealPage = keyframes`
from {
opacity: 0;
transform: translateY(16px);
}
to {
opacity: 1;
transform: translateY(0);
}
`

export default function RetreatRegister() {
const { push } = useRouter()

usePageColor("#FFFFFF")

function handleGoToBack() {
push("/retreat")
}

return (
<Stack paddingX="20px" gap="30px">
<Stack direction="row" alignItems="center">
<Stack
component="main"
width="100%"
minHeight="100dvh"
display="flex"
flexDirection="column"
bgcolor="white"
color="#171717"
fontFamily="Pretendard"
px="24px"
pt="calc(18px + env(safe-area-inset-top))"
pb="calc(32px + env(safe-area-inset-bottom))"
boxSizing="border-box"
>
<Stack direction="row" alignItems="center" ml="-10px">
<IconButton
onClick={handleGoToBack}
aria-label="뒤로가기"
sx={{
zIndex: 1,
color: "#363232",
}}
sx={{ color: "#171717" }}
>
<ArrowBackIosNewRoundedIcon fontSize="small" />
</IconButton>
<Box>수련회 신청</Box>
<Box component="h1" m={0} fontSize="24px" fontWeight={700}>
수련회 신청
</Box>
</Stack>
<Stack marginLeft="6px" gap="10px">
<Box fontWeight="bold" fontSize="20px">

<Stack
mt="48px"
flex={1}
sx={{
animation: `${revealPage} 480ms cubic-bezier(0.22, 1, 0.36, 1)`,
"@media (prefers-reduced-motion: reduce)": {
animation: "none",
},
}}
>
<Box component="h2" m={0} fontSize="26px" fontWeight={700}>
수련회 신청이 완료되었습니다!
</Box>

<Suspense fallback={<Box>Loading...</Box>}>
<Content />
</Suspense>
</Stack>
<Suspense fallback={<Box>Loading...</Box>}>
<Content />
</Suspense>
</Stack>
)
}
Expand All @@ -44,31 +83,64 @@ function Content() {
const { success } = useNotification()
const searchParams = useSearchParams()
const isWorker = searchParams.get("isWorker") === "true"
const { isHalf } = useRetreat()

function copyToClipboard() {
const accountInfo = `3333342703455 카카오뱅크\n
${isWorker ? "150,000원" : "120,000원"}`
${getPrice()}`
navigator.clipboard.writeText(accountInfo)
success("계좌 정보가 복사되었습니다.")
}

function getText() {
if (isHalf) {
return "부분 참여"
}
if (!isWorker) {
return "학생"
}
return "직장인 "
}

function getPrice() {
if (isHalf) {
return "100,000원"
}
if (!isWorker) {
return "120,000원"
}
return "150,000원"
}

return (
<Stack fontSize="15px" width="100%" gap="12px" justifyContent="center">
<Stack
fontSize="15px"
width="100%"
gap="12px"
justifyContent="center"
mt="28px"
>
<Stack
onClick={copyToClipboard}
onTouchStart={copyToClipboard}
gap="4px"
padding="24px"
bgcolor="#FFBFBF"
borderRadius="8px"
bgcolor="#FFF1F1"
borderRadius="11px"
border="1px solid #F0E4E4"
>
<Stack>입금 계좌</Stack>
<Box color="#E87C7C">3333342703455 카카오뱅크 (성은비)</Box>
<Stack mt="24px">수련회비</Stack>
<Stack fontSize="13px" color="#E98585">
입금 계좌
</Stack>
<Box color="#C87575" fontWeight={600}>
3333342703455 카카오뱅크 (성은비)
</Box>
<Stack mt="24px" fontSize="13px" color="#E98585">
수련회비
</Stack>
<Stack>
<Box color="#E87C7C">
{isWorker ? "직장인" : "학생"}:{" "}
{isWorker ? "150,000원" : "120,000원"}
<Box color="#C87575" fontWeight={600}>
{getText()}: {getPrice()}
</Box>
</Stack>
</Stack>
Expand Down
4 changes: 2 additions & 2 deletions client/src/app/retreat/intro/page.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
letter-spacing: 0.02em;
opacity: 0;
transition:
opacity 700ms ease,
transform 700ms ease;
opacity 1400ms ease,
transform 1400ms ease;
will-change: opacity, transform;
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.2);
}
Expand Down
9 changes: 7 additions & 2 deletions client/src/app/retreat/intro/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,14 @@ export default function RetreatIntroPage() {

return (
<Stack className={styles.page} width="100vw">
<Stack className={styles.image_wrapper}>
<Stack className={styles.image_wrapper} pb={10}>
<img src="/retreat/intro/bg_img.png" className={styles.main_bg} />
<Stack className={styles.text_overlay}>
<Stack
className={styles.text_overlay}
fontFamily="MapoDacapo"
fontSize="20px"
lineHeight="1.5"
>
{texts.map((item, index) => (
<p
key={item.text}
Expand Down
11 changes: 6 additions & 5 deletions client/src/app/retreat/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function RetreatLogin() {
try {
await executeKakaoLogin("/retreat/register")
} catch {
push("/retreat/register?newUser=true")
push("/retreat/search")
}
}

Expand All @@ -27,10 +27,11 @@ export default function RetreatLogin() {

return (
<Stack
width="100vw"
minHeight="100vh"
width="100%"
minHeight="100dvh"
bgcolor="white"
fontFamily="NEXON_Warhaven_OTF"
fontFamily="Pretendard"
position="relative"
overflow="hidden"
>
<IconButton
Expand All @@ -47,7 +48,7 @@ export default function RetreatLogin() {
<ArrowBackIosNewRoundedIcon fontSize="small" />
</IconButton>
<Stack
width="100vw"
width="100%"
justifyContent="center"
minHeight="100dvh"
alignItems="center"
Expand Down
2 changes: 1 addition & 1 deletion client/src/app/retreat/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ function RetreatContent() {
width="100%"
minHeight="100dvh"
bgcolor="#363232"
fontFamily="NEXON_Warhaven_OTF"
fontFamily="Pretendard"
sx={{
overflowX: "hidden",
boxSizing: "border-box",
Expand Down
Loading
Loading