diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 55f6e53..128176e 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -21,23 +21,10 @@ module.exports = { plugins: ['react', '@typescript-eslint'], rules: { 'react/react-in-jsx-scope': 'off', - 'react/jsx-filename-extension': [ - 1, - { extensions: ['.js', '.jsx', '.ts', '.tsx'] }, - ], //should add ".ts" if typescript project + 'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }], //should add ".ts" if typescript project + 'prettier/prettier': ['error', { endOfLine: 'auto' }], quotes: ['error', 'single', { avoidEscape: true }], - indent: ['error', 2], - 'no-trailing-spaces': 0, - 'keyword-spacing': 0, - 'no-unused-vars': 1, - 'no-multiple-empty-lines': 0, - 'space-before-function-paren': 0, - 'eol-last': 0, - 'prettier/prettier': [ - 'error', - { - endOfLine: 'auto', - }, - ], + indent: 'off', + settings: 'off', }, } diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 0000000..cfa25b2 --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,6 @@ +## 목적 + +## 세부 내용 + +- [ ] 세부내용 1 +- [ ] 세부내용 2 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..e2737aa --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,9 @@ +## 🔊 팀원들에게 알릴 사항 + +- 알릴 사항 또는 확인 요청 작성 + +## 💸 작업 내용 + +- 작업 개요(이슈 번호) +- 작업내용 1 +- 작업내용 2 diff --git a/.prettierrc.json b/.prettierrc.json index b3792d8..23b8710 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,6 +1,7 @@ { - "trailingComma":"es5", - "tabWidth":2, - "semi":false, - "singleQuote":true -} \ No newline at end of file + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 120 +} diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..c4554a1 --- /dev/null +++ b/Readme.md @@ -0,0 +1,103 @@ +# Field-Passer + +커뮤니티형 체육시설 양도 시스템의 불편함을 해소하기 위한
+구장 양도 서비스 **_Field-Passer_** + +## 프로젝트 설명 + +- +- + +## 배포 링크 + +> [배포 링크](https://fieldpasser.netlify.app/) + +## 👥 팀원 + + + + + + + + + + +
+ 강현주
+ + + +
+ 배현수
+ + + +
+ 조민정 + + + + + 한수산 + + + +
+
+ +## 로컬 실행 방법 + +1. 로컬 환경에 프로젝트 복사본 생성 + +```bash +git clone +``` + +2. 프로젝트 폴더로 이동 + +```bash +cd newFieldPasser-FE +``` + +3. 프로젝트 종속성 설치 + +```bash +npm install +``` + +4. 프로젝트 실행 + +```bash +npm run dev +``` + +## 기술 스택 + +![React](https://img.shields.io/badge/ReactJS-61DAFB?style=for-the-badge&logo=React&logoColor=white) +![Typescript](https://img.shields.io/badge/Typescript-3178C6?style=for-the-badge&logo=Typescript&logoColor=white) +![Axios](https://img.shields.io/badge/Axios-5A29E4?style=for-the-badge&logo=Axios&logoColor=white) +![Redux](https://img.shields.io/badge/Redux-593D88?style=for-the-badge&logo=redux&logoColor=white) +![styledComponents](https://img.shields.io/badge/styledComponents-DB7093?style=for-the-badge&logo=styledComponents&logoColor=white) +![ESLint](https://img.shields.io/badge/eslint-3A33D1?style=for-the-badge&logo=eslint&logoColor=white) +![Netlify](https://img.shields.io/badge/Netlify-00C7B7?style=for-the-badge&logo=netlify&logoColor=white) + +## 프로젝트 구조 + +```bash +. +└── src/ + ├── api/ + ├── components/ + ├── constants/ + ├── hooks/ + ├── pages/ + ├── routes/ + ├── storage/ + ├── store/ + ├── utils/ + ├── App.tsx + ├── globalStyles.tsx + ├── main.tsx + └── vite-env.d.ts +``` diff --git a/index.html b/index.html index e0d1c84..c25f8d8 100644 --- a/index.html +++ b/index.html @@ -2,10 +2,11 @@ - + - Vite + React + TS + Field Passer +
diff --git a/package-lock.json b/package-lock.json index 3425fc8..4ba7445 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,26 @@ "version": "0.0.0", "dependencies": { "@reduxjs/toolkit": "^1.9.5", + "@types/react-responsive": "^8.0.5", "axios": "^1.4.0", + "date-fns": "^2.30.0", + "dotenv": "^16.3.1", "react": "^18.2.0", + "react-cookie": "^4.1.1", + "react-datepicker": "^4.15.0", "react-dom": "^18.2.0", + "react-intersection-observer": "^9.5.2", + "react-paginate": "^8.2.0", "react-redux": "^8.0.7", + "react-responsive": "^9.0.2", "react-router": "^6.11.2", "react-router-dom": "^6.11.2", + "redux-persist": "^6.0.0", "styled-components": "^6.0.0-rc.3" }, "devDependencies": { "@types/react": "^18.0.37", + "@types/react-datepicker": "^4.11.2", "@types/react-dom": "^18.0.11", "@types/styled-components": "^5.1.26", "@typescript-eslint/eslint-plugin": "^5.59.9", @@ -32,7 +42,8 @@ "eslint-plugin-react-refresh": "^0.3.4", "prettier": "2.8.8", "typescript": "^5.0.2", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-tsconfig-paths": "^4.2.0" } }, "node_modules/@ampproject/remapping": { @@ -132,9 +143,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -194,9 +205,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -224,9 +235,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -248,9 +259,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -288,9 +299,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1806,9 +1817,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -2477,6 +2488,15 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", @@ -2508,6 +2528,11 @@ "node": ">=14" } }, + "node_modules/@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", @@ -2538,6 +2563,18 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-datepicker": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-4.11.2.tgz", + "integrity": "sha512-ELYyX3lb3K1WltqdlF1hbnaDGgzlF6PIR5T4W38cSEcfrQDIrPE+Ioq5pwRe/KEJ+ihHMjvTVZQkwJx0pWMNHQ==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.9.2", + "@types/react": "*", + "date-fns": "^2.0.1", + "react-popper": "^2.2.5" + } + }, "node_modules/@types/react-dom": { "version": "18.2.4", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", @@ -2547,6 +2584,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-responsive": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@types/react-responsive/-/react-responsive-8.0.5.tgz", + "integrity": "sha512-k3gQJgI87oP5IrVZe//3LKJFnAeFaqqWmmtl5eoYL2H3HqFcIhUaE30kRK1CsW3DHdojZxcVj4ZNc2ClsEu2PA==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", @@ -2969,9 +3014,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -3166,6 +3211,11 @@ "node": ">= 6" } }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3208,6 +3258,14 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-js-compat": { "version": "3.30.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz", @@ -3242,6 +3300,11 @@ "node": ">=4" } }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, "node_modules/css-to-react-native": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", @@ -3257,6 +3320,21 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3327,6 +3405,17 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.421", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.421.tgz", @@ -3634,9 +3723,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4194,6 +4283,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -4305,6 +4400,11 @@ "react-is": "^16.7.0" } }, + "node_modules/hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4764,13 +4864,21 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, + "node_modules/matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "dependencies": { + "css-mediaquery": "^0.1.2" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4875,7 +4983,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5181,7 +5288,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -5233,6 +5339,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-cookie": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.1.1.tgz", + "integrity": "sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.0.1", + "hoist-non-react-statics": "^3.0.0", + "universal-cookie": "^4.0.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/react-datepicker": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.15.0.tgz", + "integrity": "sha512-kysEqVv6wRQkmAyn0wJi4Xx+JjBPBtXWfQSfh6sR3wdzZX1/LjYTPmaurnVI6ao177ecompg8ze7NCgtEGW78A==", + "dependencies": { + "@popperjs/core": "^2.9.2", + "classnames": "^2.2.6", + "date-fns": "^2.24.0", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.12.2", + "react-popper": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18", + "react-dom": "^16.9.0 || ^17 || ^18" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -5245,11 +5381,62 @@ "react": "^18.2.0" } }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-intersection-observer": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.2.tgz", + "integrity": "sha512-EmoV66/yvksJcGa1rdW0nDNc4I1RifDWkT50gXSFnPLYQ4xUptuDD4V7k+Rj1OgVAlww628KLGcxPXFlOkkU/Q==", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-onclickoutside": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz", + "integrity": "sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A==", + "funding": { + "type": "individual", + "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md" + }, + "peerDependencies": { + "react": "^15.5.x || ^16.x || ^17.x || ^18.x", + "react-dom": "^15.5.x || ^16.x || ^17.x || ^18.x" + } + }, + "node_modules/react-paginate": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-8.2.0.tgz", + "integrity": "sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==", + "dependencies": { + "prop-types": "^15" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18" + } + }, + "node_modules/react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-redux": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.7.tgz", @@ -5306,6 +5493,23 @@ "node": ">=0.10.0" } }, + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "dependencies": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-router": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", @@ -5356,6 +5560,14 @@ "@babel/runtime": "^7.9.2" } }, + "node_modules/redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "peerDependencies": { + "redux": ">4.0.0" + } + }, "node_modules/redux-thunk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", @@ -5563,9 +5775,9 @@ } }, "node_modules/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5595,6 +5807,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -5838,6 +6055,26 @@ "node": ">=8.0" } }, + "node_modules/tsconfck": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.1.tgz", + "integrity": "sha512-ZPCkJBKASZBmBUNqGHmRhdhM8pJYDdOXp4nRgj/O0JwUwsMq50lCDRQP/M5GBNAA0elPrq4gAeu4dkaVCuKWww==", + "dev": true, + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^14.13.1 || ^16 || >=18" + }, + "peerDependencies": { + "typescript": "^4.3.5 || ^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -5961,6 +6198,15 @@ "node": ">=4" } }, + "node_modules/universal-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz", + "integrity": "sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==", + "dependencies": { + "@types/cookie": "^0.3.3", + "cookie": "^0.4.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -6055,6 +6301,33 @@ } } }, + "node_modules/vite-tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^2.1.0" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6107,9 +6380,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" diff --git a/package.json b/package.json index 0534cba..8cf5ec3 100644 --- a/package.json +++ b/package.json @@ -11,16 +11,26 @@ }, "dependencies": { "@reduxjs/toolkit": "^1.9.5", + "@types/react-responsive": "^8.0.5", "axios": "^1.4.0", + "date-fns": "^2.30.0", + "dotenv": "^16.3.1", "react": "^18.2.0", + "react-cookie": "^4.1.1", + "react-datepicker": "^4.15.0", "react-dom": "^18.2.0", + "react-intersection-observer": "^9.5.2", + "react-paginate": "^8.2.0", "react-redux": "^8.0.7", + "react-responsive": "^9.0.2", "react-router": "^6.11.2", "react-router-dom": "^6.11.2", + "redux-persist": "^6.0.0", "styled-components": "^6.0.0-rc.3" }, "devDependencies": { "@types/react": "^18.0.37", + "@types/react-datepicker": "^4.11.2", "@types/react-dom": "^18.0.11", "@types/styled-components": "^5.1.26", "@typescript-eslint/eslint-plugin": "^5.59.9", @@ -34,6 +44,7 @@ "eslint-plugin-react-refresh": "^0.3.4", "prettier": "2.8.8", "typescript": "^5.0.2", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-tsconfig-paths": "^4.2.0" } } diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..f824337 --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/public/badminton0.png b/public/badminton0.png new file mode 100644 index 0000000..10cd1d3 Binary files /dev/null and b/public/badminton0.png differ diff --git a/public/badminton1.png b/public/badminton1.png new file mode 100644 index 0000000..956a042 Binary files /dev/null and b/public/badminton1.png differ diff --git a/public/badminton2.png b/public/badminton2.png new file mode 100644 index 0000000..1af9b59 Binary files /dev/null and b/public/badminton2.png differ diff --git a/public/banner0.png b/public/banner0.png new file mode 100644 index 0000000..ea3888b Binary files /dev/null and b/public/banner0.png differ diff --git a/public/banner1.png b/public/banner1.png new file mode 100644 index 0000000..062b23d Binary files /dev/null and b/public/banner1.png differ diff --git a/public/banner2.png b/public/banner2.png new file mode 100644 index 0000000..f1244f3 Binary files /dev/null and b/public/banner2.png differ diff --git a/public/banner3.png b/public/banner3.png new file mode 100644 index 0000000..fa8070e Binary files /dev/null and b/public/banner3.png differ diff --git a/public/banner4.png b/public/banner4.png new file mode 100644 index 0000000..fd90ff6 Binary files /dev/null and b/public/banner4.png differ diff --git a/public/basketball0.png b/public/basketball0.png new file mode 100644 index 0000000..55880e4 Binary files /dev/null and b/public/basketball0.png differ diff --git a/public/basketball1.png b/public/basketball1.png new file mode 100644 index 0000000..53e8d68 Binary files /dev/null and b/public/basketball1.png differ diff --git a/public/basketball2.png b/public/basketball2.png new file mode 100644 index 0000000..c3032fb Binary files /dev/null and b/public/basketball2.png differ diff --git a/public/calendar-dark.png b/public/calendar-dark.png new file mode 100644 index 0000000..0e19526 Binary files /dev/null and b/public/calendar-dark.png differ diff --git a/public/calendar-light.png b/public/calendar-light.png new file mode 100644 index 0000000..9fce9ee Binary files /dev/null and b/public/calendar-light.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..f9072d5 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/futsal0.png b/public/futsal0.png new file mode 100644 index 0000000..24d8158 Binary files /dev/null and b/public/futsal0.png differ diff --git a/public/futsal1.png b/public/futsal1.png new file mode 100644 index 0000000..dc034d0 Binary files /dev/null and b/public/futsal1.png differ diff --git a/public/futsal2.png b/public/futsal2.png new file mode 100644 index 0000000..2fff932 Binary files /dev/null and b/public/futsal2.png differ diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..830b47b Binary files /dev/null and b/public/logo.png differ diff --git a/public/my_page_banner/mobile_0.jpg b/public/my_page_banner/mobile_0.jpg new file mode 100644 index 0000000..e446b13 Binary files /dev/null and b/public/my_page_banner/mobile_0.jpg differ diff --git a/public/my_page_banner/mobile_1.jpg b/public/my_page_banner/mobile_1.jpg new file mode 100644 index 0000000..64d784c Binary files /dev/null and b/public/my_page_banner/mobile_1.jpg differ diff --git a/public/my_page_banner/mobile_2.jpg b/public/my_page_banner/mobile_2.jpg new file mode 100644 index 0000000..1358cb1 Binary files /dev/null and b/public/my_page_banner/mobile_2.jpg differ diff --git a/public/my_page_banner/mobile_3.jpg b/public/my_page_banner/mobile_3.jpg new file mode 100644 index 0000000..e9e0d3b Binary files /dev/null and b/public/my_page_banner/mobile_3.jpg differ diff --git a/public/my_page_banner/pc_0.jpg b/public/my_page_banner/pc_0.jpg new file mode 100644 index 0000000..c6a9cac Binary files /dev/null and b/public/my_page_banner/pc_0.jpg differ diff --git a/public/my_page_banner/pc_1.jpg b/public/my_page_banner/pc_1.jpg new file mode 100644 index 0000000..72d957c Binary files /dev/null and b/public/my_page_banner/pc_1.jpg differ diff --git a/public/my_page_banner/pc_2.jpg b/public/my_page_banner/pc_2.jpg new file mode 100644 index 0000000..70ce901 Binary files /dev/null and b/public/my_page_banner/pc_2.jpg differ diff --git a/public/my_page_banner/pc_3.jpg b/public/my_page_banner/pc_3.jpg new file mode 100644 index 0000000..a392f3e Binary files /dev/null and b/public/my_page_banner/pc_3.jpg differ diff --git a/public/select-arrow.png b/public/select-arrow.png new file mode 100644 index 0000000..b0c32c0 Binary files /dev/null and b/public/select-arrow.png differ diff --git a/public/soccer0.png b/public/soccer0.png new file mode 100644 index 0000000..3a917b2 Binary files /dev/null and b/public/soccer0.png differ diff --git a/public/soccer1.png b/public/soccer1.png new file mode 100644 index 0000000..b37acb7 Binary files /dev/null and b/public/soccer1.png differ diff --git a/public/soccer2.png b/public/soccer2.png new file mode 100644 index 0000000..23fbd5b Binary files /dev/null and b/public/soccer2.png differ diff --git a/public/tennis0.png b/public/tennis0.png new file mode 100644 index 0000000..484f9c9 Binary files /dev/null and b/public/tennis0.png differ diff --git a/public/tennis1.png b/public/tennis1.png new file mode 100644 index 0000000..4bd9734 Binary files /dev/null and b/public/tennis1.png differ diff --git a/public/tennis2.png b/public/tennis2.png new file mode 100644 index 0000000..8ab840e Binary files /dev/null and b/public/tennis2.png differ diff --git a/public/vite.svg b/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 1af9c19..23c076b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,14 +1,35 @@ -import { Outlet } from 'react-router' +import { Outlet, useLocation } from 'react-router' import Header from './components/Header' import Footer from './components/Footer' +import { ThemeProvider } from 'styled-components' +import theme from './constants/theme' +import Sidebar from './components/Sidebar' +import { useEffect } from 'react' +import { cheakOpenBox } from './store/slices/searchChkSlice' +import { useDispatch } from 'react-redux' +import ModalWithHook from './components/ModalWithHook' +import Overlay from './components/Overlay' +// import useAxiosInterceptor from './hooks/useAxiosInterceptor' const App = () => { + const dispatch = useDispatch() + const location = useLocation() + useEffect(() => { + if (window.document.body.classList.contains('stop-scrolling')) { + window.document.body.classList.remove('stop-scrolling') + dispatch(cheakOpenBox({ openBox: false })) + } + }, [location]) + return ( - <> + + + +