From e040b6cbeb58e7e305df466e75bfbed2c62c4de0 Mon Sep 17 00:00:00 2001 From: SeungWoo Date: Thu, 9 May 2024 15:19:55 +0900 Subject: [PATCH 1/7] ADD :: axios --- package.json | 1 + pnpm-lock.yaml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/package.json b/package.json index f31758a..f40ea8f 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "axios": "^1.6.8", "next": "14.1.4", "react": "^18", "react-dom": "^18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af22b60..979a6c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + axios: + specifier: ^1.6.8 + version: 1.6.8 next: specifier: 14.1.4 version: 14.1.4(react-dom@18.2.0)(react@18.2.0) @@ -927,6 +930,10 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + /autoprefixer@10.4.19(postcss@8.4.38): resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} @@ -955,6 +962,16 @@ packages: engines: {node: '>=4'} dev: true + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -1083,6 +1100,13 @@ packages: color-string: 1.9.1 dev: false + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1187,6 +1211,11 @@ packages: object-keys: 1.1.1 dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1779,6 +1808,16 @@ packages: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -1793,6 +1832,15 @@ packages: signal-exit: 4.1.0 dev: true + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true @@ -2339,6 +2387,18 @@ packages: picomatch: 2.3.1 dev: true + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -2713,6 +2773,10 @@ packages: react-is: 16.13.1 dev: true + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} From 0d5a49e68e4e1f5175c1302155a9af732c8587a0 Mon Sep 17 00:00:00 2001 From: SeungWoo Date: Fri, 10 May 2024 08:39:30 +0900 Subject: [PATCH 2/7] ADD :: auth login api --- src/services/authLogin.ts | 12 ++++++++++++ src/services/index.ts | 2 ++ src/services/interceptor.ts | 13 +++++++++++++ src/types/authKind.type.ts | 1 + src/types/index.ts | 1 + src/utils/index.ts | 3 ++- src/utils/loginRedirect.ts | 8 ++++++++ 7 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/services/authLogin.ts create mode 100644 src/services/index.ts create mode 100644 src/services/interceptor.ts create mode 100644 src/types/authKind.type.ts create mode 100644 src/types/index.ts create mode 100644 src/utils/loginRedirect.ts diff --git a/src/services/authLogin.ts b/src/services/authLogin.ts new file mode 100644 index 0000000..bbff321 --- /dev/null +++ b/src/services/authLogin.ts @@ -0,0 +1,12 @@ +import { AuthKindType } from '@/types' +import { instance } from './interceptor' + +export const authLogin = async (kind: AuthKindType, token: string) => { + return await instance({ + method: 'GET', + url: `/auth/${kind}/login`, + headers: { + 'OA-TOKEN': token, + }, + }) +} diff --git a/src/services/index.ts b/src/services/index.ts new file mode 100644 index 0000000..7cbf69d --- /dev/null +++ b/src/services/index.ts @@ -0,0 +1,2 @@ +export { instance } from './interceptor' +export { authLogin } from './authLogin' diff --git a/src/services/interceptor.ts b/src/services/interceptor.ts new file mode 100644 index 0000000..633b457 --- /dev/null +++ b/src/services/interceptor.ts @@ -0,0 +1,13 @@ +import axios from 'axios' + +export const instance = axios.create({ + baseURL: process.env.NEXT_PUBLIC_BASE_URL, + timeout: 30000, +}) + +instance.interceptors.response.use( + (response) => response, + async (error) => { + return Promise.reject(error) + }, +) diff --git a/src/types/authKind.type.ts b/src/types/authKind.type.ts new file mode 100644 index 0000000..7e08a4a --- /dev/null +++ b/src/types/authKind.type.ts @@ -0,0 +1 @@ +export type AuthKindType = 'google' | 'facebook' | 'kakao' diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..987e004 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1 @@ +export { type AuthKindType } from './authKind.type' diff --git a/src/utils/index.ts b/src/utils/index.ts index 79b21f3..93ef9eb 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1 +1,2 @@ -export * from './dateToString' \ No newline at end of file +export * from './dateToString' +export * from './loginRedirect' diff --git a/src/utils/loginRedirect.ts b/src/utils/loginRedirect.ts new file mode 100644 index 0000000..0c6c65e --- /dev/null +++ b/src/utils/loginRedirect.ts @@ -0,0 +1,8 @@ +'use server' + +import { AuthKindType } from '@/types' +import { redirect } from 'next/navigation' + +export async function loginRedirect(kind: AuthKindType) { + return redirect(`/auth/login?kind=${kind}`) +} From 251c4a9e776e83965a0124fb2fc667969f6e9462 Mon Sep 17 00:00:00 2001 From: SeungWoo Date: Fri, 10 May 2024 17:21:42 +0900 Subject: [PATCH 3/7] ADD :: Not found page --- public/images/Not.webp | Bin 0 -> 62084 bytes src/app/globals.css | 1 + src/app/not-found.tsx | 27 +++++++ src/components/Footer.tsx | 118 ++++++++++++++++------------- src/components/Header.tsx | 152 ++++++++++++++++++++++++-------------- 5 files changed, 189 insertions(+), 109 deletions(-) create mode 100644 public/images/Not.webp create mode 100644 src/app/not-found.tsx diff --git a/public/images/Not.webp b/public/images/Not.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f437bee987cc31a0ec906c418c150a5aa20fff9 GIT binary patch literal 62084 zcma&OWmFtb&^Nkh7GE4fa0zY+PH=b0;_eXK-CcqNcXxMp4GzKG-Cg(cf8Gzz`{CYm zZlCFy-}F>h)l^m2_V$?>B}p+c&uaicRa8hpMS)Wd5dZ*ie$*8>zzYmOQdn4F6YAp> z0JUjpXypJ)0svT9JK8IW3z4X)Ymj`}2EYKY00;n70HMC2gRQKx*w6o{9rRrs3?1z) z|HJ=V?&ksj!)unoOyAnb?WjvdgAb}PfIJ8+_8?#SzjXhv2+_#c!SLhC>qn(9w6%Bq z(23*&leswB{)a_AFqWa2zR?F(`@r<}9}0fp!2jA!{|`?74;%a+T>c-n|EVPWLDT(# zNlgDQZ18_!D@&*Ues+5f zW{_?_v6i+s(`KN^=38r|7%8QY+_$qfkz=3jX60wSf%wQ9&UJk4C9XAdEo2p8C!_Ke zToH>iN#Z{Us(ui$7m@L``L%M=*kEN<-GjKrP0SHVj0UVE*z91nW$d?%! zpB@Gt884uxn`eG6JdCa-;8!~gD3sa?HaCG{V3EO4J#np;z)<}=nNXYn9@LwWCqf+#GI-Y)&Pc z9Zh}Azmwh_@hhSuSy&CU0nA|(faYF0f%q9QbHmcYwI(ZVZ1qHJ4NMkzTpXUsd4`D) ziPx{s=X{VUv0oMSGa6~Rm8GS$qos^8nGsn-ITw>}SKnQ`0woNzyRl-m?1Gwc3L+Jy z_Kep~?`7xe!8t*ryps_R);gXPSF^i5{

~ARqu^!62S>&`1=#;57Tw7>unR{N%~o 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≥2>o(p@WJPD33uS&RBciem}GowUh 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 + not found image +

+ 요청하신 페이지를 찾을 수 없어요 +

+

+ 요청하신 페이지의 URL과 일치하는지 확인해 주세요. +

+ + + + + ) +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c09ddcf..affcd91 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,54 +1,68 @@ -import { Facebook, Github, Phone, PropofolFullLogo } from "@/assets" -import Image from "next/image" -import Link from "next/link" +import { Facebook, Github, Phone, PropofolFullLogo } from '@/assets' +import Image from 'next/image' +import Link from 'next/link' export const Footer = () => { - return ( -
-
-
-
- 서비스 -
- 지원서 공유하기 - 문의하기 -
-
-
- 지원 -
- 많이 묻는 질문 - 문의하기 -
-
-
-
-
-
- - 프로포폴 로고 - -
- 이용약관 -
- 개인정보처리방침 -
-

대표자: 강혁리 | 개인정보보호책임자: 태곤임 | 이메일: gang@gang.com | 문의: 010-0000-0000

-

© 2024 Backup All rights reserved.

-
-
-
- -
-
- -
-
- -
-
-
-
-
- ) -} \ No newline at end of file + return ( +
+
+
+
+ 서비스 +
+ + 지원서 공유하기 + + 문의하기 +
+
+
+ 지원 +
+ + 많이 묻는 질문 + + 문의하기 +
+
+
+
+
+
+ + 프로포폴 로고 + +
+ 이용약관 +
+ 개인정보처리방침 +
+

+ 대표자: 강혁리 | 개인정보보호책임자: 태곤임 | 이메일: + gang@gang.com | 문의: 010-0000-0000 +

+

+ © 2024 Backup All rights reserved. +

+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ ) +} diff --git a/src/components/Header.tsx b/src/components/Header.tsx index baf5b3c..08dc8a6 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,61 +1,99 @@ 'use client' -import { PropofolFullLogo, PropofolLogo } from "@/assets" -import Image from "next/image" -import { Button } from "." -import Link from "next/link" -import { useState } from "react" -import { LoginModal } from "./modal/LoginModal" -import { SigninModal } from "./modal/SigninModal" +import { PropofolFullLogo, PropofolLogo } from '@/assets' +import Image from 'next/image' +import { Button } from '.' +import Link from 'next/link' +import { useState } from 'react' +import { LoginModal } from './modal/LoginModal' +import { SigninModal } from './modal/SigninModal' export const Header = () => { - const [hasToken, setHasToken] = useState(false) - const [isOpen, setIsOpen] = useState(false) - const [modal, setModal] = useState(false) + const [hasToken, setHasToken] = useState(false) + const [isOpen, setIsOpen] = useState(false) + const [modal, setModal] = useState(false) - return ( - <> -
-
-
setIsOpen(prev => !prev)}> -
-
-
-
- setIsOpen(false)}> - 프로포폴 로고 - -
- - - -
- - - - - - - { - hasToken && - - } -
-
-
- { - hasToken ? -
- - 유저 프로필 이미지 -
- : - - } -
- { - modal && - - } - - ) -} \ No newline at end of file + return ( + <> +
+
+
setIsOpen((prev) => !prev)} + > +
+
+
+
+ setIsOpen(false)}> + 프로포폴 로고 + +
+
+ + + + + + + {hasToken && ( + + )} +
+
+
+ {hasToken ? ( +
+ + 유저 프로필 이미지 +
+ ) : ( + + )} +
+ {modal && } + + ) +} From 879bd1234bbcb42f27e22b886019ab450d7cee54 Mon Sep 17 00:00:00 2001 From: SeungWoo Date: Mon, 20 May 2024 14:57:27 +0900 Subject: [PATCH 4/7] ADD :: oauth route --- src/app/auth/facebook/login/route.ts | 7 ++ src/app/auth/google/login/route.ts | 39 +++++++++ src/app/auth/kakao/login/route.ts | 7 ++ src/app/auth/login/route.ts | 23 ++++++ src/app/signup/page.tsx | 9 +++ src/components/Header.tsx | 1 - src/components/Input.tsx | 107 +++++++++++++------------ src/components/index.ts | 4 +- src/components/modal/LoginModal.tsx | 113 ++++++++++++++++----------- src/components/modal/SigninModal.tsx | 55 ------------- src/components/modal/SignupModal.tsx | 64 +++++++++++++++ 11 files changed, 276 insertions(+), 153 deletions(-) create mode 100644 src/app/auth/facebook/login/route.ts create mode 100644 src/app/auth/google/login/route.ts create mode 100644 src/app/auth/kakao/login/route.ts create mode 100644 src/app/auth/login/route.ts create mode 100644 src/app/signup/page.tsx delete mode 100644 src/components/modal/SigninModal.tsx create mode 100644 src/components/modal/SignupModal.tsx diff --git a/src/app/auth/facebook/login/route.ts b/src/app/auth/facebook/login/route.ts new file mode 100644 index 0000000..efa00b7 --- /dev/null +++ b/src/app/auth/facebook/login/route.ts @@ -0,0 +1,7 @@ +import { NextResponse } from 'next/server' + +export async function GET(request: Request) { + const requestUrl = new URL(request.url) + console.log(`requestUrl is : ${requestUrl}`) + return NextResponse.redirect(`${requestUrl.origin}`) +} diff --git a/src/app/auth/google/login/route.ts b/src/app/auth/google/login/route.ts new file mode 100644 index 0000000..ace61a2 --- /dev/null +++ b/src/app/auth/google/login/route.ts @@ -0,0 +1,39 @@ +import { authLogin } from '@/services' +import { cookies } from 'next/headers' +import { NextResponse } from 'next/server' + +export async function GET(request: Request) { + const requestUrl = new URL(request.url) + const code = requestUrl.searchParams.get('code') + + if (code) { + const params = { + code: code || 'code', + client_id: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID || 'client_id', + client_secret: + process.env.NEXT_PUBLIC_GOOGLE_CLIENT_SECRET || 'client_secret', + grant_type: 'authorization_code', + redirect_uri: + process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI || 'redirect_uri', + } + const queryString = new URLSearchParams(params).toString() + + return fetch(`https://oauth2.googleapis.com/token?${queryString}`, { + method: 'POST', + }) + .then((response) => response.json()) + .then(async (data) => { + console.log(data) + return await authLogin('google', data.access_token) + .then((response) => NextResponse.redirect(requestUrl.origin)) + .catch((error) => { + cookies().set('Access_Token', data.access_token) + return NextResponse.redirect( + `${requestUrl.origin}/signup?kind=google`, + ) + }) + }) + } + + return NextResponse.redirect(requestUrl.origin) +} diff --git a/src/app/auth/kakao/login/route.ts b/src/app/auth/kakao/login/route.ts new file mode 100644 index 0000000..efa00b7 --- /dev/null +++ b/src/app/auth/kakao/login/route.ts @@ -0,0 +1,7 @@ +import { NextResponse } from 'next/server' + +export async function GET(request: Request) { + const requestUrl = new URL(request.url) + console.log(`requestUrl is : ${requestUrl}`) + return NextResponse.redirect(`${requestUrl.origin}`) +} diff --git a/src/app/auth/login/route.ts b/src/app/auth/login/route.ts new file mode 100644 index 0000000..e8a2deb --- /dev/null +++ b/src/app/auth/login/route.ts @@ -0,0 +1,23 @@ +import { NextResponse } from 'next/server' + +export async function GET(request: Request) { + const requestUrl = new URL(request.url) + const kind = requestUrl.searchParams.get('kind') + console.log(`login with ${kind}`) + + if (kind === 'google') { + return NextResponse.redirect( + `https://accounts.google.com/o/oauth2/v2/auth?client_id=${process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID}&response_type=code&redirect_uri=${process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI}&scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile`, + ) + } + if (kind === 'facebook') { + return NextResponse.redirect( + `https://accounts.google.com/o/oauth2/v2/auth?client_id=${process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID}&response_type=token&redirect_uri=${process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI}&scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile`, + ) + } + if (kind === 'kakao') { + return NextResponse.redirect( + `https://kauth.kakao.com/oauth/authorize?client_id=${process.env.NEXT_PUBLIC_KAKAO_CLIENT_ID}&response_type=code&redirect_uri=${process.env.NEXT_PUBLIC_KAKAO_REDIRECT_URI}`, + ) + } +} diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx new file mode 100644 index 0000000..4e5f11e --- /dev/null +++ b/src/app/signup/page.tsx @@ -0,0 +1,9 @@ +import { SignupModal } from '@/components' + +export default function SignupPage() { + return ( +
+ +
+ ) +} diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 08dc8a6..a17aaa3 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -5,7 +5,6 @@ import { Button } from '.' import Link from 'next/link' import { useState } from 'react' import { LoginModal } from './modal/LoginModal' -import { SigninModal } from './modal/SigninModal' export const Header = () => { const [hasToken, setHasToken] = useState(false) diff --git a/src/components/Input.tsx b/src/components/Input.tsx index c80a341..146d0c0 100644 --- a/src/components/Input.tsx +++ b/src/components/Input.tsx @@ -1,67 +1,76 @@ -"use client" +'use client' -import React, { useRef, useState } from "react" +import React, { useRef, useState } from 'react' -interface InputType{ - label?: string - placeholder: string - value?: string - name?: string - change?: (e: React.ChangeEvent) => void - err?: boolean +interface InputType { + label?: string + placeholder: string + value?: string + name?: string + change?: (e: React.ChangeEvent) => void + err?: boolean } const inputColor = { - input:{ - enable: 'transition-all bg-gray50 border border-gray200 placeholder: text-gray500', - selected: 'transition-all bg-blue50 border border-blue400 text-black outline-none', - input: 'transition-all bg-gray50 border border-gray200 text-black', - error: 'transition-all bg-criticalBackground border border-critical text-critical' - }, - label:{ - enable: 'transition-all text-black', - selected: 'transition-all text-blue500', - input: 'transition-all text-black', - error: 'transition-all text-critical' - } + input: { + enable: + 'transition-all bg-gray50 border border-gray200 placeholder: text-gray500', + selected: + 'transition-all bg-blue50 border border-blue400 text-black outline-none', + input: 'transition-all bg-gray50 border border-gray200 text-black', + error: + 'transition-all bg-criticalBackground border border-critical text-critical', + }, + label: { + enable: 'transition-all text-black', + selected: 'transition-all text-blue500', + input: 'transition-all text-black', + error: 'transition-all text-critical', + }, } /** * Input컴포넌트 사용법 - * + * * ??: 선택 입력 / **: 필수 입력 - * + * * ``` * {??(e.target.value)}} error={**}/> * ``` - * + * * 상태관리는 알잘딱! ^^ - * + * */ -export const Input = ({label, placeholder, name, value, change, err=false}:InputType) =>{ +export const Input = ({ + label, + placeholder, + name, + value, + change, + err = false, +}: InputType) => { + const [focused, setFocsed] = useState(false) + const inputRef = useRef(null) - const [focused, setFocsed] = useState(false) - const inputRef = useRef(null) - - return( -
inputRef.current?.focus()} - className={`flex flex-col w-full gap-[8px] + return ( +
inputRef.current?.focus()} + className={`flex flex-col w-full gap-[8px] ${focused ? inputColor.label.selected : err ? inputColor.label.error : value ? inputColor.label.input : inputColor.label.enable}`} - > - {label ?? } - + {label ?? } + setFocsed(true)} - onBlur={()=>setFocsed(false)} - /> -
- ); -} \ No newline at end of file + placeholder={placeholder} + ref={inputRef} + type="text" + name={name} + value={value} + onChange={change} + onFocus={() => setFocsed(true)} + onBlur={() => setFocsed(false)} + /> +
+ ) +} diff --git a/src/components/index.ts b/src/components/index.ts index 71282dd..2d0b558 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -5,4 +5,6 @@ export * from './Input' export * from './Select' export * from './SubTitleSection' export * from './ApplicationBox' -export * from './TipBox' \ No newline at end of file +export * from './TipBox' +export * from './modal/LoginModal' +export * from './modal/SignupModal' diff --git a/src/components/modal/LoginModal.tsx b/src/components/modal/LoginModal.tsx index efc5b56..63db4f8 100644 --- a/src/components/modal/LoginModal.tsx +++ b/src/components/modal/LoginModal.tsx @@ -1,51 +1,70 @@ -import { Close, Facebook, Google, Kakaotalk } from "@/assets"; -import { Dispatch, SetStateAction, useRef } from "react"; +'use client' -interface LoginModalType{ - click: Dispatch> -} +import { Close, Facebook, Google, Kakaotalk } from '@/assets' +import { loginRedirect } from '@/utils' +import { Dispatch, SetStateAction, useRef } from 'react' -export const LoginModal = ({click}:LoginModalType) =>{ +interface LoginModalType { + click: Dispatch> +} - const modalRef = useRef(null) - console.log(modalRef) +export const LoginModal = ({ click }: LoginModalType) => { + const modalRef = useRef(null) - return( -
-
e.target === modalRef.current ? click(false) : ''} className="w-full h-full flex justify-center items-center"> -
- {/* 로그인 설명 및 닫기 버튼 */} -
-
- click(false)}/> -
-
-

로그인

-
-
-

소셜 로그인으로 간편하게 서비스를 이용해 보세요.

-
-
- {/* 로그인 버튼 들들 */} -
- - - -
-
-
-
- ); -} \ No newline at end of file + return ( +
+
(e.target === modalRef.current ? click(false) : '')} + className="w-full h-full flex justify-center items-center" + > +
+ {/* 로그인 설명 및 닫기 버튼 */} +
+
+ click(false)} /> +
+
+

로그인

+
+
+

+ 소셜 로그인으로 간편하게 서비스를 이용해 보세요. +

+
+
+ {/* 로그인 버튼 들들 */} +
+ + + +
+
+
+
+ ) +} diff --git a/src/components/modal/SigninModal.tsx b/src/components/modal/SigninModal.tsx deleted file mode 100644 index d2dc2c2..0000000 --- a/src/components/modal/SigninModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Close, Facebook, Google, Kakaotalk } from "@/assets"; -import { Dispatch, SetStateAction, useRef, useState } from "react"; -import { Button } from "../Button"; -import { Input } from "../Input"; -import { Select } from "../Select"; - -interface LoginModalType{ - click: Dispatch> -} - -const option = [ - {value: '1', name: "Backend"}, - {value: '2', name: "Frontend"}, - {value: '3', name: "iOS"}, - {value: '4', name: "Android"}, - {value: '5', name: "DevOps"}, - {value: '6', name: "Design"}, - {value: '7', name: "AI"}, - {value: '8', name: "CrossPlatform"}, - {value: '9', name: "Blockchain"}, -] - -export const SigninModal = ({click}:LoginModalType) =>{ - - const modalRef = useRef(null) - const [major, setMajor] = useState(""); - - return( -
-
e.target === modalRef.current ? click(false) : ''} className="w-full h-full flex justify-center items-center"> -
- {/* 회원가입 설명 및 닫기 버튼 */} -
-
- click(false)}/> -
-
-

회원가입

-
-
-

회원 정보를 입력해주세요.

-
-
- {/* 회원가입 인풋 들들 */} -
- - - + + * ``` */ -export const Select = ({label, placeholder, change, value, options, err=false}:DropdownType) =>{ - - const [isShowOption, setShowOptions] = useState(false); - const [focused, setFocused] = useState(false); +export const Select = ({ + label, + placeholder, + change, + value, + options, + err = false, +}: DropdownType) => { + const [isShowOption, setShowOptions] = useState(false) + const [focused, setFocused] = useState(false) - return( -
- { - label && -
- ); -} \ No newline at end of file + {option.name} + + ) + })} + +
+ ) +} diff --git a/src/components/modal/SignupModal.tsx b/src/components/modal/SignupModal.tsx index a871635..9696bce 100644 --- a/src/components/modal/SignupModal.tsx +++ b/src/components/modal/SignupModal.tsx @@ -6,6 +6,9 @@ import { Button } from '../Button' import { Input } from '../Input' import { Select } from '../Select' import Link from 'next/link' +import { AuthSignupType } from '@/types' +import { authSignup } from '@/services' +import { getCookie } from '@/utils' const option = [ { value: '1', name: 'Backend' }, @@ -19,8 +22,23 @@ const option = [ { value: '9', name: 'Blockchain' }, ] -export const SignupModal = () => { +export const SignupModal = ({ kind }: { kind: string }) => { const [major, setMajor] = useState('') + const [name, setName] = useState('') + const [generation, setGeneration] = useState('') + + const registerUser = async () => { + const signupJson: AuthSignupType = { + generation: +generation, + name: name, + major: major, + } + const access_token = getCookie('Access_Token') + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-expect-error + const token = await authSignup(kind, access_token, signupJson) + console.log(token) + } return (
@@ -44,8 +62,18 @@ export const SignupModal = () => {
{/* 회원가입 인풋 들들 */}
- - + setName(e.target.value)} + /> + setGeneration(e.target.value.slice(0, 1))} + />