diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4296592ef..65df58654 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -@createhb21 @areumsheep @YoonJeongLulu \ No newline at end of file +* @createhb21 @holim0 @YoonJeongLulu \ No newline at end of file diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml deleted file mode 100644 index 97befa394..000000000 --- a/.github/workflows/deploy-web.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Build & Deploy Ahhachul Web - -on: - push: - branches: - - main - paths: - - 'services/next.ahhachul.com/**' - -env: - DEFAULT_NODE_VERSION: '20.14.0' - -jobs: - deploy: - runs-on: ubuntu-latest - - steps: - - name: Check Out Repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Parse secrets from JSON - id: secrets - run: | - echo '${{ secrets.DEV_META_DATA }}' | jq -r 'to_entries | .[] | "echo \(.key)=\(.value) >> $GITHUB_ENV"' | bash - - - name: Print AWS Region - run: echo "AWS_REGION is $AWS_REGION" - - - name: Set up Node.jss - uses: actions/setup-node@v3 - with: - node-version: ${{ env.DEFAULT_NODE_VERSION }} - - - name: Install dependencies - uses: ./.github/actions/yarn-install - - - name: Create .env file for next.ahhachul.com - run: | - echo '${{ secrets.DEV_NEXTJS_APP_CONFIG }}' > config.json - cat config.json | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> services/next.ahhachul.com/.env - - - name: Build next.ahhachul.com - run: yarn build:web - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ env.AWS_REGION }} - - - name: Log in to Amazon ECR Public - run: | - aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${{ env.ECR_REPOSITORY_URI }} - - - name: Build Docker image - run: docker build -t ${{ env.ECR_REPOSITORY_URI }}:latest . - - - name: Push Docker image to Amazon ECR - run: docker push ${{ env.ECR_REPOSITORY_URI }}:latest - - - name: Get the latest Task Definition ARN - id: task_definition - run: | - TASK_DEF_ARN=$(aws ecs describe-services \ - --cluster ${{ env.ECS_CLUSTER_NAME }} \ - --services ${{ env.ECS_SERVICE_NAME }} \ - --query 'services[0].taskDefinition' --output text) - echo "TASK_DEF_ARN=$TASK_DEF_ARN" >> $GITHUB_ENV - - - name: Generate appspec.yaml - run: | - cat < ./appspec.yaml - version: 0.0 - Resources: - - TargetService: - Type: AWS::ECS::Service - Properties: - TaskDefinition: "$TASK_DEF_ARN" - LoadBalancerInfo: - ContainerName: ${{ env.CONTAINER_NAME }} - ContainerPort: ${{ env.CONTAINER_PORT }} - CapacityProviderStrategy: - - CapacityProvider: "FARGATE_SPOT" - Base: 0 - Weight: 1 - EOF - - - name: Create Codedeploy deployment - run: | - APPSPEC_CONTENT=$(cat appspec.yaml | jq -sR .) - aws deploy create-deployment \ - --application-name ${{ env.CODEDEPLOY_APP_NAME }} \ - --deployment-group-name ${{ env.CODEDEPLOY_DEPLOYMENT_GROUP }} \ - --deployment-config-name CodeDeployDefault.ECSAllAtOnce \ - --revision "{\"revisionType\":\"AppSpecContent\",\"appSpecContent\":{\"content\":$APPSPEC_CONTENT}}" \ No newline at end of file diff --git a/services/next.ahhachul.com/.gitignore b/services/next.ahhachul.com/.gitignore deleted file mode 100644 index 3382e8167..000000000 --- a/services/next.ahhachul.com/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env* - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/services/next.ahhachul.com/.swcrc b/services/next.ahhachul.com/.swcrc deleted file mode 100644 index 649d4a0eb..000000000 --- a/services/next.ahhachul.com/.swcrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "jsc": { - "target": "es2021", - "parser": { - "syntax": "typescript", - "tsx": true, - "dynamicImport": true - }, - "transform": { - "react": { - "runtime": "automatic", - "importSource": "@emotion/react", - "development": false, - "useBuiltins": true - } - } - }, - "module": { - "type": "es6", - "strict": true, - "noInterop": false - }, - "sourceMaps": false, - "minify": true, - "isModule": true -} diff --git a/services/next.ahhachul.com/README.md b/services/next.ahhachul.com/README.md deleted file mode 100644 index a75ac5248..000000000 --- a/services/next.ahhachul.com/README.md +++ /dev/null @@ -1,40 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. - -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/services/next.ahhachul.com/next.config.mjs b/services/next.ahhachul.com/next.config.mjs deleted file mode 100644 index f6285d884..000000000 --- a/services/next.ahhachul.com/next.config.mjs +++ /dev/null @@ -1,23 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, - swcMinify: true, - eslint: { - ignoreDuringBuilds: true, - }, - typescript: { - ignoreBuildErrors: true, - }, - experimental: { - scrollRestoration: true, - }, - images: { - remotePatterns: [ - { - hostname: 'static.ahhachul.com', - }, - ], - }, -}; - -export default nextConfig; diff --git a/services/next.ahhachul.com/package.json b/services/next.ahhachul.com/package.json deleted file mode 100644 index bf724eb45..000000000 --- a/services/next.ahhachul.com/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "next.ahhachul.com", - "version": "0.1.0", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "@ahhachul/react-components-button": "^0.0.3", - "@ahhachul/react-components-input": "^0.0.5", - "@ahhachul/react-components-layout": "^0.0.3", - "@ahhachul/themes": "^0.0.3", - "@emotion/react": "^11.11.3", - "@emotion/styled": "^11.11.0", - "@lexical/clipboard": "^0.14.2", - "@lexical/hashtag": "^0.14.2", - "@lexical/link": "^0.14.2", - "@lexical/markdown": "^0.14.2", - "@lexical/react": "^0.14.2", - "@lexical/rich-text": "^0.14.2", - "@lexical/selection": "^0.14.2", - "@lexical/utils": "^0.14.2", - "@lottiefiles/react-lottie-player": "^3.5.3", - "@radix-ui/react-tabs": "^1.0.4", - "@reduxjs/toolkit": "^2.1.0", - "@tanstack/react-query": "^5.8.4", - "@tanstack/react-query-devtools": "^5.17.0", - "@types/axios": "^0.14.0", - "axios": "^1.2.2", - "framer-motion": "^10.16.16", - "js-cookie": "^3.0.5", - "lexical": "^0.14.2", - "lodash-es": "^4.17.21", - "next": "13.5.4", - "query-string": "^8.1.0", - "react": "^18.2.0", - "react-beautiful-dnd": "^13.1.1", - "react-dom": "^18.2.0", - "react-intersection-observer": "^9.5.3", - "react-lazy-load-image-component": "^1.6.0", - "react-loading-skeleton": "^3.4.0", - "react-redux": "^9.1.0", - "react-spring-bottom-sheet": "^3.4.1", - "react-timer-hook": "^3.0.7", - "rxjs": "^7.8.1", - "sharp": "^0.33.5" - }, - "devDependencies": { - "@types/js-cookie": "^3.0.6", - "@types/lodash-es": "^4.17.12", - "@types/node": "^20", - "@types/react": "^18.2.25", - "@types/react-beautiful-dnd": "^13.1.8", - "@types/react-dom": "^18.2.11", - "@types/react-lazy-load-image-component": "^1.6.3", - "eslint": "^8", - "eslint-config-next": "14.1.4", - "typescript": "^5" - } -} diff --git a/services/next.ahhachul.com/public/favicon.ico b/services/next.ahhachul.com/public/favicon.ico deleted file mode 100644 index be1952e39..000000000 Binary files a/services/next.ahhachul.com/public/favicon.ico and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.ttf b/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.ttf deleted file mode 100644 index c29bf4400..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.ttf and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff b/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff deleted file mode 100644 index 06ba102e4..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff2 b/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff2 deleted file mode 100644 index f80bdb727..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Bold.subset.woff2 and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.ttf b/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.ttf deleted file mode 100644 index 6db75cb48..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.ttf and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff b/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff deleted file mode 100644 index f97a78f52..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff2 b/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff2 deleted file mode 100644 index 941998059..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Medium.subset.woff2 and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.ttf b/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.ttf deleted file mode 100644 index 977a8fb39..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.ttf and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff b/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff deleted file mode 100644 index 174736a28..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff2 b/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff2 deleted file mode 100644 index 6fc8ec42f..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-Regular.subset.woff2 and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.ttf b/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.ttf deleted file mode 100644 index 2fc36fe40..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.ttf and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff b/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff deleted file mode 100644 index ee2fa3d51..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff and /dev/null differ diff --git a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff2 b/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff2 deleted file mode 100644 index 38175ff01..000000000 Binary files a/services/next.ahhachul.com/public/fonts/Pretendard-SemiBold.subset.woff2 and /dev/null differ diff --git a/services/next.ahhachul.com/public/next.svg b/services/next.ahhachul.com/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/services/next.ahhachul.com/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/services/next.ahhachul.com/public/subway-lines.json b/services/next.ahhachul.com/public/subway-lines.json deleted file mode 100644 index 5ee843dfd..000000000 --- a/services/next.ahhachul.com/public/subway-lines.json +++ /dev/null @@ -1,2465 +0,0 @@ -[ - { - "id": 1, - "name": "1호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 10, - "name": "가능" - }, - { - "id": 64, - "name": "가산디지털단지" - }, - { - "id": 56, - "name": "간석" - }, - { - "id": 44, - "name": "개봉" - }, - { - "id": 68, - "name": "관악" - }, - { - "id": 63, - "name": "광명" - }, - { - "id": 20, - "name": "광운대" - }, - { - "id": 42, - "name": "구로" - }, - { - "id": 43, - "name": "구일" - }, - { - "id": 72, - "name": "군포" - }, - { - "id": 71, - "name": "금정" - }, - { - "id": 66, - "name": "금천구청" - }, - { - "id": 35, - "name": "남영" - }, - { - "id": 37, - "name": "노량진" - }, - { - "id": 9, - "name": "녹양" - }, - { - "id": 18, - "name": "녹천" - }, - { - "id": 73, - "name": "당정" - }, - { - "id": 38, - "name": "대방" - }, - { - "id": 7, - "name": "덕계" - }, - { - "id": 6, - "name": "덕정" - }, - { - "id": 15, - "name": "도봉" - }, - { - "id": 14, - "name": "도봉산" - }, - { - "id": 60, - "name": "도원" - }, - { - "id": 58, - "name": "도화" - }, - { - "id": 65, - "name": "독산" - }, - { - "id": 29, - "name": "동대문" - }, - { - "id": 2, - "name": "동두천" - }, - { - "id": 4, - "name": "동두천중앙" - }, - { - "id": 28, - "name": "동묘앞" - }, - { - "id": 55, - "name": "동암" - }, - { - "id": 61, - "name": "동인천" - }, - { - "id": 90, - "name": "두정" - }, - { - "id": 13, - "name": "망월사" - }, - { - "id": 70, - "name": "명학" - }, - { - "id": 16, - "name": "방학" - }, - { - "id": 96, - "name": "배방" - }, - { - "id": 54, - "name": "백운" - }, - { - "id": 79, - "name": "병점" - }, - { - "id": 3, - "name": "보산" - }, - { - "id": 92, - "name": "봉명" - }, - { - "id": 52, - "name": "부개" - }, - { - "id": 49, - "name": "부천" - }, - { - "id": 53, - "name": "부평" - }, - { - "id": 99, - "name": "서동탄" - }, - { - "id": 34, - "name": "서울" - }, - { - "id": 85, - "name": "서정리" - }, - { - "id": 21, - "name": "석계" - }, - { - "id": 67, - "name": "석수" - }, - { - "id": 75, - "name": "성균관대" - }, - { - "id": 88, - "name": "성환" - }, - { - "id": 78, - "name": "세류" - }, - { - "id": 80, - "name": "세마" - }, - { - "id": 48, - "name": "소사" - }, - { - "id": 1, - "name": "소요산" - }, - { - "id": 51, - "name": "송내" - }, - { - "id": 84, - "name": "송탄" - }, - { - "id": 77, - "name": "수원" - }, - { - "id": 33, - "name": "시청" - }, - { - "id": 39, - "name": "신길" - }, - { - "id": 41, - "name": "신도림" - }, - { - "id": 27, - "name": "신설동" - }, - { - "id": 22, - "name": "신이문" - }, - { - "id": 98, - "name": "신창" - }, - { - "id": 93, - "name": "쌍용(나사렛대)" - }, - { - "id": 94, - "name": "아산" - }, - { - "id": 69, - "name": "안양" - }, - { - "id": 8, - "name": "양주" - }, - { - "id": 47, - "name": "역곡" - }, - { - "id": 40, - "name": "영등포" - }, - { - "id": 45, - "name": "오류동" - }, - { - "id": 82, - "name": "오산" - }, - { - "id": 81, - "name": "오산대" - }, - { - "id": 46, - "name": "온수" - }, - { - "id": 97, - "name": "온양온천" - }, - { - "id": 23, - "name": "외대앞" - }, - { - "id": 36, - "name": "용산" - }, - { - "id": 19, - "name": "월계" - }, - { - "id": 74, - "name": "의왕" - }, - { - "id": 11, - "name": "의정부" - }, - { - "id": 62, - "name": "인천" - }, - { - "id": 26, - "name": "제기동" - }, - { - "id": 59, - "name": "제물포" - }, - { - "id": 32, - "name": "종각" - }, - { - "id": 31, - "name": "종로3가" - }, - { - "id": 30, - "name": "종로5가" - }, - { - "id": 57, - "name": "주안" - }, - { - "id": 50, - "name": "중동" - }, - { - "id": 86, - "name": "지제" - }, - { - "id": 5, - "name": "지행" - }, - { - "id": 89, - "name": "직산" - }, - { - "id": 83, - "name": "진위" - }, - { - "id": 17, - "name": "창동" - }, - { - "id": 91, - "name": "천안" - }, - { - "id": 25, - "name": "청량리" - }, - { - "id": 95, - "name": "탕정" - }, - { - "id": 87, - "name": "평택" - }, - { - "id": 76, - "name": "화서" - }, - { - "id": 24, - "name": "회기" - }, - { - "id": 12, - "name": "회룡" - } - ] - }, - { - "id": 2, - "name": "2호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 121, - "name": "강남" - }, - { - "id": 113, - "name": "강변" - }, - { - "id": 111, - "name": "건대입구" - }, - { - "id": 122, - "name": "교대" - }, - { - "id": 131, - "name": "구로디지털단지" - }, - { - "id": 112, - "name": "구의" - }, - { - "id": 150, - "name": "까치산" - }, - { - "id": 126, - "name": "낙성대" - }, - { - "id": 136, - "name": "당산" - }, - { - "id": 132, - "name": "대림" - }, - { - "id": 147, - "name": "도림천" - }, - { - "id": 104, - "name": "동대문역사문화공원" - }, - { - "id": 109, - "name": "뚝섬" - }, - { - "id": 134, - "name": "문래" - }, - { - "id": 124, - "name": "방배" - }, - { - "id": 128, - "name": "봉천" - }, - { - "id": 125, - "name": "사당" - }, - { - "id": 118, - "name": "삼성" - }, - { - "id": 106, - "name": "상왕십리" - }, - { - "id": 127, - "name": "서울대입구" - }, - { - "id": 123, - "name": "서초" - }, - { - "id": 119, - "name": "선릉" - }, - { - "id": 110, - "name": "성수" - }, - { - "id": 100, - "name": "시청" - }, - { - "id": 144, - "name": "신답" - }, - { - "id": 105, - "name": "신당" - }, - { - "id": 130, - "name": "신대방" - }, - { - "id": 133, - "name": "신도림" - }, - { - "id": 129, - "name": "신림" - }, - { - "id": 146, - "name": "신설동" - }, - { - "id": 149, - "name": "신정네거리" - }, - { - "id": 139, - "name": "신촌" - }, - { - "id": 141, - "name": "아현" - }, - { - "id": 148, - "name": "양천구청" - }, - { - "id": 120, - "name": "역삼" - }, - { - "id": 135, - "name": "영등포구청" - }, - { - "id": 107, - "name": "왕십리" - }, - { - "id": 143, - "name": "용답" - }, - { - "id": 145, - "name": "용두" - }, - { - "id": 102, - "name": "을지로3가" - }, - { - "id": 103, - "name": "을지로4가" - }, - { - "id": 101, - "name": "을지로입구" - }, - { - "id": 140, - "name": "이대" - }, - { - "id": 115, - "name": "잠실" - }, - { - "id": 114, - "name": "잠실나루" - }, - { - "id": 116, - "name": "잠실새내" - }, - { - "id": 117, - "name": "종합운동장" - }, - { - "id": 142, - "name": "충정로" - }, - { - "id": 108, - "name": "한양대" - }, - { - "id": 137, - "name": "합정" - }, - { - "id": 138, - "name": "홍대입구" - } - ] - }, - { - "id": 3, - "name": "3호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 192, - "name": "가락시장" - }, - { - "id": 169, - "name": "경복궁" - }, - { - "id": 193, - "name": "경찰병원" - }, - { - "id": 181, - "name": "고속터미널" - }, - { - "id": 182, - "name": "교대" - }, - { - "id": 162, - "name": "구파발" - }, - { - "id": 176, - "name": "금호" - }, - { - "id": 183, - "name": "남부터미널" - }, - { - "id": 165, - "name": "녹번" - }, - { - "id": 156, - "name": "대곡" - }, - { - "id": 189, - "name": "대청" - }, - { - "id": 187, - "name": "대치" - }, - { - "id": 151, - "name": "대화" - }, - { - "id": 186, - "name": "도곡" - }, - { - "id": 168, - "name": "독립문" - }, - { - "id": 174, - "name": "동대입구" - }, - { - "id": 154, - "name": "마두" - }, - { - "id": 185, - "name": "매봉" - }, - { - "id": 167, - "name": "무악재" - }, - { - "id": 155, - "name": "백석" - }, - { - "id": 164, - "name": "불광" - }, - { - "id": 160, - "name": "삼송" - }, - { - "id": 191, - "name": "수서" - }, - { - "id": 179, - "name": "신사" - }, - { - "id": 170, - "name": "안국" - }, - { - "id": 178, - "name": "압구정" - }, - { - "id": 175, - "name": "약수" - }, - { - "id": 184, - "name": "양재" - }, - { - "id": 163, - "name": "연신내" - }, - { - "id": 194, - "name": "오금" - }, - { - "id": 177, - "name": "옥수" - }, - { - "id": 158, - "name": "원당" - }, - { - "id": 159, - "name": "원흥" - }, - { - "id": 172, - "name": "을지로3가" - }, - { - "id": 190, - "name": "일원" - }, - { - "id": 180, - "name": "잠원" - }, - { - "id": 153, - "name": "정발산" - }, - { - "id": 171, - "name": "종로3가" - }, - { - "id": 152, - "name": "주엽" - }, - { - "id": 161, - "name": "지축" - }, - { - "id": 173, - "name": "충무로" - }, - { - "id": 188, - "name": "학여울" - }, - { - "id": 166, - "name": "홍제" - }, - { - "id": 157, - "name": "화정" - } - ] - }, - { - "id": 4, - "name": "4호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 222, - "name": "경마공원" - }, - { - "id": 237, - "name": "고잔" - }, - { - "id": 224, - "name": "과천" - }, - { - "id": 229, - "name": "금정" - }, - { - "id": 203, - "name": "길음" - }, - { - "id": 220, - "name": "남태령" - }, - { - "id": 197, - "name": "노원" - }, - { - "id": 195, - "name": "당고개" - }, - { - "id": 223, - "name": "대공원" - }, - { - "id": 232, - "name": "대야미" - }, - { - "id": 207, - "name": "동대문" - }, - { - "id": 208, - "name": "동대문역사문화공원" - }, - { - "id": 217, - "name": "동작" - }, - { - "id": 210, - "name": "명동" - }, - { - "id": 201, - "name": "미아" - }, - { - "id": 202, - "name": "미아사거리" - }, - { - "id": 233, - "name": "반월" - }, - { - "id": 228, - "name": "범계" - }, - { - "id": 219, - "name": "사당" - }, - { - "id": 230, - "name": "산본" - }, - { - "id": 214, - "name": "삼각지" - }, - { - "id": 196, - "name": "상계" - }, - { - "id": 234, - "name": "상록수" - }, - { - "id": 212, - "name": "서울" - }, - { - "id": 221, - "name": "선바위" - }, - { - "id": 204, - "name": "성신여대입구" - }, - { - "id": 231, - "name": "수리산" - }, - { - "id": 200, - "name": "수유" - }, - { - "id": 213, - "name": "숙대입구" - }, - { - "id": 240, - "name": "신길온천" - }, - { - "id": 215, - "name": "신용산" - }, - { - "id": 199, - "name": "쌍문" - }, - { - "id": 239, - "name": "안산" - }, - { - "id": 242, - "name": "오이도" - }, - { - "id": 216, - "name": "이촌" - }, - { - "id": 226, - "name": "인덕원" - }, - { - "id": 225, - "name": "정부과천청사" - }, - { - "id": 241, - "name": "정왕" - }, - { - "id": 236, - "name": "중앙" - }, - { - "id": 198, - "name": "창동" - }, - { - "id": 238, - "name": "초지" - }, - { - "id": 218, - "name": "총신대입구(이수)" - }, - { - "id": 209, - "name": "충무로" - }, - { - "id": 227, - "name": "평촌" - }, - { - "id": 235, - "name": "한대앞" - }, - { - "id": 205, - "name": "한성대입구" - }, - { - "id": 206, - "name": "혜화" - }, - { - "id": 211, - "name": "회현" - } - ] - }, - { - "id": 5, - "name": "5호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 281, - "name": "강동" - }, - { - "id": 287, - "name": "강일" - }, - { - "id": 296, - "name": "개롱" - }, - { - "id": 244, - "name": "개화산" - }, - { - "id": 297, - "name": "거여" - }, - { - "id": 285, - "name": "고덕" - }, - { - "id": 262, - "name": "공덕" - }, - { - "id": 279, - "name": "광나루(장신대)" - }, - { - "id": 266, - "name": "광화문" - }, - { - "id": 277, - "name": "군자(능동)" - }, - { - "id": 283, - "name": "굽은다리(강동구민회관앞)" - }, - { - "id": 282, - "name": "길동" - }, - { - "id": 245, - "name": "김포공항" - }, - { - "id": 251, - "name": "까치산" - }, - { - "id": 275, - "name": "답십리" - }, - { - "id": 269, - "name": "동대문역사문화공원" - }, - { - "id": 292, - "name": "둔촌동" - }, - { - "id": 247, - "name": "마곡" - }, - { - "id": 274, - "name": "마장" - }, - { - "id": 298, - "name": "마천" - }, - { - "id": 261, - "name": "마포" - }, - { - "id": 284, - "name": "명일" - }, - { - "id": 253, - "name": "목동" - }, - { - "id": 288, - "name": "미사" - }, - { - "id": 248, - "name": "발산" - }, - { - "id": 294, - "name": "방이" - }, - { - "id": 243, - "name": "방화" - }, - { - "id": 286, - "name": "상일동" - }, - { - "id": 265, - "name": "서대문" - }, - { - "id": 246, - "name": "송정" - }, - { - "id": 271, - "name": "신금호" - }, - { - "id": 258, - "name": "신길" - }, - { - "id": 252, - "name": "신정(은행정)" - }, - { - "id": 278, - "name": "아차산(어린이대공원후문)" - }, - { - "id": 263, - "name": "애오개" - }, - { - "id": 255, - "name": "양평" - }, - { - "id": 260, - "name": "여의나루" - }, - { - "id": 259, - "name": "여의도" - }, - { - "id": 256, - "name": "영등포구청" - }, - { - "id": 257, - "name": "영등포시장" - }, - { - "id": 295, - "name": "오금" - }, - { - "id": 254, - "name": "오목교(목동운동장앞)" - }, - { - "id": 293, - "name": "올림픽공원(한국체대)" - }, - { - "id": 273, - "name": "왕십리" - }, - { - "id": 249, - "name": "우장산" - }, - { - "id": 268, - "name": "을지로4가" - }, - { - "id": 276, - "name": "장한평" - }, - { - "id": 267, - "name": "종로3가" - }, - { - "id": 280, - "name": "천호(풍납토성)" - }, - { - "id": 270, - "name": "청구" - }, - { - "id": 264, - "name": "충정로" - }, - { - "id": 291, - "name": "하남검단산" - }, - { - "id": 290, - "name": "하남시청" - }, - { - "id": 289, - "name": "하남풍산" - }, - { - "id": 272, - "name": "행당" - }, - { - "id": 250, - "name": "화곡" - } - ] - }, - { - "id": 6, - "name": "6호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 329, - "name": "고려대" - }, - { - "id": 315, - "name": "공덕" - }, - { - "id": 313, - "name": "광흥창" - }, - { - "id": 304, - "name": "구산" - }, - { - "id": 318, - "name": "녹사평" - }, - { - "id": 314, - "name": "대흥(서강대앞)" - }, - { - "id": 302, - "name": "독바위" - }, - { - "id": 332, - "name": "돌곶이" - }, - { - "id": 325, - "name": "동묘앞" - }, - { - "id": 307, - "name": "디지털미디어시티" - }, - { - "id": 309, - "name": "마포구청" - }, - { - "id": 310, - "name": "망원" - }, - { - "id": 321, - "name": "버티고개" - }, - { - "id": 327, - "name": "보문" - }, - { - "id": 336, - "name": "봉화산" - }, - { - "id": 301, - "name": "불광" - }, - { - "id": 317, - "name": "삼각지" - }, - { - "id": 312, - "name": "상수" - }, - { - "id": 331, - "name": "상월곡(한국과학기술연구원)" - }, - { - "id": 305, - "name": "새절(신사)" - }, - { - "id": 333, - "name": "석계" - }, - { - "id": 337, - "name": "신내" - }, - { - "id": 324, - "name": "신당" - }, - { - "id": 328, - "name": "안암(고대병원앞)" - }, - { - "id": 322, - "name": "약수" - }, - { - "id": 300, - "name": "역촌" - }, - { - "id": 303, - "name": "연신내" - }, - { - "id": 330, - "name": "월곡(동덕여대)" - }, - { - "id": 308, - "name": "월드컵경기장(성산)" - }, - { - "id": 299, - "name": "응암순환(상선)" - }, - { - "id": 319, - "name": "이태원" - }, - { - "id": 306, - "name": "증산(명지대앞)" - }, - { - "id": 326, - "name": "창신" - }, - { - "id": 323, - "name": "청구" - }, - { - "id": 334, - "name": "태릉입구" - }, - { - "id": 320, - "name": "한강진" - }, - { - "id": 311, - "name": "합정" - }, - { - "id": 335, - "name": "화랑대(서울여대입구)" - }, - { - "id": 316, - "name": "효창공원앞" - } - ] - }, - { - "id": 7, - "name": "7호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 375, - "name": "가산디지털단지" - }, - { - "id": 359, - "name": "강남구청" - }, - { - "id": 356, - "name": "건대입구" - }, - { - "id": 363, - "name": "고속터미널" - }, - { - "id": 345, - "name": "공릉(서울산업대입구)" - }, - { - "id": 377, - "name": "광명사거리" - }, - { - "id": 354, - "name": "군자(능동)" - }, - { - "id": 387, - "name": "굴포천" - }, - { - "id": 380, - "name": "까치울" - }, - { - "id": 374, - "name": "남구로" - }, - { - "id": 366, - "name": "남성" - }, - { - "id": 364, - "name": "내방" - }, - { - "id": 342, - "name": "노원" - }, - { - "id": 361, - "name": "논현" - }, - { - "id": 373, - "name": "대림" - }, - { - "id": 339, - "name": "도봉산" - }, - { - "id": 357, - "name": "뚝섬유원지" - }, - { - "id": 341, - "name": "마들" - }, - { - "id": 347, - "name": "먹골" - }, - { - "id": 350, - "name": "면목" - }, - { - "id": 362, - "name": "반포" - }, - { - "id": 371, - "name": "보라매" - }, - { - "id": 384, - "name": "부천시청" - }, - { - "id": 381, - "name": "부천종합운동장" - }, - { - "id": 388, - "name": "부평구청" - }, - { - "id": 351, - "name": "사가정" - }, - { - "id": 389, - "name": "산곡" - }, - { - "id": 386, - "name": "삼산체육관" - }, - { - "id": 368, - "name": "상도(중앙대앞)" - }, - { - "id": 385, - "name": "상동" - }, - { - "id": 349, - "name": "상봉" - }, - { - "id": 390, - "name": "석남" - }, - { - "id": 340, - "name": "수락산" - }, - { - "id": 367, - "name": "숭실대입구(살피재)" - }, - { - "id": 370, - "name": "신대방삼거리" - }, - { - "id": 383, - "name": "신중동" - }, - { - "id": 372, - "name": "신풍" - }, - { - "id": 355, - "name": "어린이대공원(세종대)" - }, - { - "id": 379, - "name": "온수" - }, - { - "id": 352, - "name": "용마산" - }, - { - "id": 369, - "name": "장승배기" - }, - { - "id": 338, - "name": "장암" - }, - { - "id": 343, - "name": "중계" - }, - { - "id": 353, - "name": "중곡" - }, - { - "id": 348, - "name": "중화" - }, - { - "id": 378, - "name": "천왕" - }, - { - "id": 376, - "name": "철산" - }, - { - "id": 358, - "name": "청담" - }, - { - "id": 365, - "name": "총신대입구(이수)" - }, - { - "id": 382, - "name": "춘의" - }, - { - "id": 346, - "name": "태릉입구" - }, - { - "id": 344, - "name": "하계" - }, - { - "id": 360, - "name": "학동" - } - ] - }, - { - "id": 8, - "name": "8호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 398, - "name": "가락시장" - }, - { - "id": 393, - "name": "강동구청" - }, - { - "id": 402, - "name": "남위례" - }, - { - "id": 404, - "name": "남한산성입구(성남법원,검찰청)" - }, - { - "id": 405, - "name": "단대오거리" - }, - { - "id": 408, - "name": "모란" - }, - { - "id": 394, - "name": "몽촌토성(평화의문)" - }, - { - "id": 399, - "name": "문정" - }, - { - "id": 401, - "name": "복정" - }, - { - "id": 403, - "name": "산성" - }, - { - "id": 396, - "name": "석촌" - }, - { - "id": 397, - "name": "송파" - }, - { - "id": 407, - "name": "수진" - }, - { - "id": 406, - "name": "신흥" - }, - { - "id": 391, - "name": "암사" - }, - { - "id": 395, - "name": "잠실" - }, - { - "id": 400, - "name": "장지" - }, - { - "id": 392, - "name": "천호(풍납토성)" - } - ] - }, - { - "id": 9, - "name": "9호선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 415, - "name": "가양" - }, - { - "id": 409, - "name": "개화" - }, - { - "id": 431, - "name": "고속터미널" - }, - { - "id": 411, - "name": "공항시장" - }, - { - "id": 429, - "name": "구반포" - }, - { - "id": 422, - "name": "국회의사당" - }, - { - "id": 410, - "name": "김포공항" - }, - { - "id": 426, - "name": "노들" - }, - { - "id": 425, - "name": "노량진" - }, - { - "id": 421, - "name": "당산" - }, - { - "id": 428, - "name": "동작" - }, - { - "id": 445, - "name": "둔촌오륜" - }, - { - "id": 417, - "name": "등촌" - }, - { - "id": 413, - "name": "마곡나루" - }, - { - "id": 437, - "name": "봉은사" - }, - { - "id": 432, - "name": "사평" - }, - { - "id": 436, - "name": "삼성중앙" - }, - { - "id": 439, - "name": "삼전" - }, - { - "id": 424, - "name": "샛강" - }, - { - "id": 441, - "name": "석촌" - }, - { - "id": 440, - "name": "석촌고분" - }, - { - "id": 420, - "name": "선유도" - }, - { - "id": 435, - "name": "선정릉" - }, - { - "id": 442, - "name": "송파나루" - }, - { - "id": 433, - "name": "신논현" - }, - { - "id": 419, - "name": "신목동" - }, - { - "id": 430, - "name": "신반포" - }, - { - "id": 412, - "name": "신방화" - }, - { - "id": 414, - "name": "양천향교" - }, - { - "id": 434, - "name": "언주" - }, - { - "id": 423, - "name": "여의도" - }, - { - "id": 418, - "name": "염창" - }, - { - "id": 444, - "name": "올림픽공원" - }, - { - "id": 438, - "name": "종합운동장" - }, - { - "id": 446, - "name": "중앙보훈병원" - }, - { - "id": 416, - "name": "증미" - }, - { - "id": 443, - "name": "한성백제" - }, - { - "id": 427, - "name": "흑석" - } - ] - }, - { - "id": 10, - "name": "신분당선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 568, - "name": "강남" - }, - { - "id": 580, - "name": "광교" - }, - { - "id": 579, - "name": "광교중앙" - }, - { - "id": 566, - "name": "논현" - }, - { - "id": 575, - "name": "동천" - }, - { - "id": 574, - "name": "미금" - }, - { - "id": 578, - "name": "상현" - }, - { - "id": 577, - "name": "성복" - }, - { - "id": 576, - "name": "수지구청" - }, - { - "id": 567, - "name": "신논현" - }, - { - "id": 565, - "name": "신사" - }, - { - "id": 569, - "name": "양재" - }, - { - "id": 570, - "name": "양재시민의숲" - }, - { - "id": 573, - "name": "정자" - }, - { - "id": 571, - "name": "청계산입구" - }, - { - "id": 572, - "name": "판교" - } - ] - }, - { - "id": 11, - "name": "수인분당선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 516, - "name": "가천대" - }, - { - "id": 506, - "name": "강남구청" - }, - { - "id": 512, - "name": "개포동" - }, - { - "id": 539, - "name": "고색" - }, - { - "id": 546, - "name": "고잔" - }, - { - "id": 511, - "name": "구룡" - }, - { - "id": 528, - "name": "구성" - }, - { - "id": 530, - "name": "기흥" - }, - { - "id": 557, - "name": "남동인더스파크" - }, - { - "id": 552, - "name": "달월" - }, - { - "id": 513, - "name": "대모산입구" - }, - { - "id": 510, - "name": "도곡" - }, - { - "id": 534, - "name": "망포" - }, - { - "id": 537, - "name": "매교" - }, - { - "id": 535, - "name": "매탄권선" - }, - { - "id": 518, - "name": "모란" - }, - { - "id": 524, - "name": "미금" - }, - { - "id": 527, - "name": "보정" - }, - { - "id": 515, - "name": "복정" - }, - { - "id": 543, - "name": "사리" - }, - { - "id": 531, - "name": "상갈" - }, - { - "id": 504, - "name": "서울숲" - }, - { - "id": 521, - "name": "서현" - }, - { - "id": 508, - "name": "선릉" - }, - { - "id": 507, - "name": "선정릉" - }, - { - "id": 554, - "name": "소래포구" - }, - { - "id": 560, - "name": "송도" - }, - { - "id": 522, - "name": "수내" - }, - { - "id": 514, - "name": "수서" - }, - { - "id": 538, - "name": "수원" - }, - { - "id": 536, - "name": "수원시청" - }, - { - "id": 562, - "name": "숭의" - }, - { - "id": 529, - "name": "신갈" - }, - { - "id": 549, - "name": "신길온천" - }, - { - "id": 563, - "name": "신포" - }, - { - "id": 548, - "name": "안산" - }, - { - "id": 505, - "name": "압구정로데오" - }, - { - "id": 542, - "name": "야목" - }, - { - "id": 519, - "name": "야탑" - }, - { - "id": 541, - "name": "어천" - }, - { - "id": 559, - "name": "연수" - }, - { - "id": 533, - "name": "영통" - }, - { - "id": 525, - "name": "오리" - }, - { - "id": 540, - "name": "오목천" - }, - { - "id": 551, - "name": "오이도" - }, - { - "id": 503, - "name": "왕십리" - }, - { - "id": 558, - "name": "원인재" - }, - { - "id": 553, - "name": "월곶" - }, - { - "id": 520, - "name": "이매" - }, - { - "id": 564, - "name": "인천" - }, - { - "id": 555, - "name": "인천논현" - }, - { - "id": 561, - "name": "인하대" - }, - { - "id": 550, - "name": "정왕" - }, - { - "id": 523, - "name": "정자" - }, - { - "id": 526, - "name": "죽전" - }, - { - "id": 545, - "name": "중앙" - }, - { - "id": 502, - "name": "청량리" - }, - { - "id": 532, - "name": "청명" - }, - { - "id": 547, - "name": "초지" - }, - { - "id": 517, - "name": "태평" - }, - { - "id": 544, - "name": "한대앞" - }, - { - "id": 509, - "name": "한티" - }, - { - "id": 556, - "name": "호구포" - } - ] - }, - { - "id": 12, - "name": "경의중앙선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 479, - "name": "가좌" - }, - { - "id": 483, - "name": "강매" - }, - { - "id": 487, - "name": "곡산" - }, - { - "id": 476, - "name": "공덕" - }, - { - "id": 460, - "name": "구리" - }, - { - "id": 469, - "name": "국수" - }, - { - "id": 494, - "name": "금릉" - }, - { - "id": 495, - "name": "금촌" - }, - { - "id": 485, - "name": "능곡" - }, - { - "id": 486, - "name": "대곡" - }, - { - "id": 463, - "name": "덕소" - }, - { - "id": 461, - "name": "도농" - }, - { - "id": 464, - "name": "도심" - }, - { - "id": 480, - "name": "디지털미디어시티" - }, - { - "id": 458, - "name": "망우" - }, - { - "id": 498, - "name": "문산" - }, - { - "id": 488, - "name": "백마" - }, - { - "id": 457, - "name": "상봉" - }, - { - "id": 477, - "name": "서강대" - }, - { - "id": 449, - "name": "서빙고" - }, - { - "id": 501, - "name": "서울" - }, - { - "id": 481, - "name": "수색" - }, - { - "id": 468, - "name": "신원" - }, - { - "id": 500, - "name": "신촌(경의중앙선)" - }, - { - "id": 470, - "name": "아신" - }, - { - "id": 492, - "name": "야당" - }, - { - "id": 467, - "name": "양수" - }, - { - "id": 459, - "name": "양원" - }, - { - "id": 462, - "name": "양정" - }, - { - "id": 472, - "name": "양평" - }, - { - "id": 471, - "name": "오빈" - }, - { - "id": 451, - "name": "옥수" - }, - { - "id": 453, - "name": "왕십리" - }, - { - "id": 474, - "name": "용문" - }, - { - "id": 447, - "name": "용산" - }, - { - "id": 466, - "name": "운길산" - }, - { - "id": 493, - "name": "운정" - }, - { - "id": 473, - "name": "원덕" - }, - { - "id": 496, - "name": "월롱" - }, - { - "id": 452, - "name": "응봉" - }, - { - "id": 448, - "name": "이촌" - }, - { - "id": 490, - "name": "일산" - }, - { - "id": 456, - "name": "중랑" - }, - { - "id": 475, - "name": "지평" - }, - { - "id": 454, - "name": "청량리" - }, - { - "id": 491, - "name": "탄현" - }, - { - "id": 497, - "name": "파주" - }, - { - "id": 465, - "name": "팔당" - }, - { - "id": 489, - "name": "풍산" - }, - { - "id": 450, - "name": "한남" - }, - { - "id": 484, - "name": "행신" - }, - { - "id": 478, - "name": "홍대입구" - }, - { - "id": 482, - "name": "화전" - }, - { - "id": 455, - "name": "회기" - }, - { - "id": 499, - "name": "효창공원앞" - } - ] - }, - { - "id": 13, - "name": "우이신설선", - "phoneNumber": "02-000-0000", - "stations": [ - { - "id": 583, - "name": "4.19 민주묘지" - }, - { - "id": 584, - "name": "가오리" - }, - { - "id": 592, - "name": "보문" - }, - { - "id": 589, - "name": "북한산보국문" - }, - { - "id": 581, - "name": "북한산우이" - }, - { - "id": 586, - "name": "삼양" - }, - { - "id": 587, - "name": "삼양사거리" - }, - { - "id": 591, - "name": "성신여대입구" - }, - { - "id": 582, - "name": "솔밭공원" - }, - { - "id": 588, - "name": "솔샘" - }, - { - "id": 593, - "name": "신설동" - }, - { - "id": 590, - "name": "정릉" - }, - { - "id": 585, - "name": "화계" - } - ] - } -] diff --git a/services/next.ahhachul.com/public/vercel.svg b/services/next.ahhachul.com/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/services/next.ahhachul.com/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/services/next.ahhachul.com/src/api/auth/index.ts b/services/next.ahhachul.com/src/api/auth/index.ts deleted file mode 100644 index f0958d2a4..000000000 --- a/services/next.ahhachul.com/src/api/auth/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import queryString from 'query-string'; -import { - IRefreshTokenParams, - IResponse, - ISocialSignInParams, - ISocialSignInResponse, - IToken, -} from '@/src/types'; -import { API_BASE_URL } from '@/src/data/api'; -import { base } from '..'; - -export const getAuthURL = `${API_BASE_URL}/auth`; - -const getRedirectUrls = async (type: 'KAKAO' | 'GOOGLE') => { - const queryParams = queryString.stringify({ providerType: type }); - const url = `${getAuthURL}/redirect-url?${queryParams}`; - - return await base.get>(url); -}; - -const login = async (body: ISocialSignInParams) => { - const url = `${getAuthURL}/login`; - - return await base.post>(url, body); -}; - -const refreshToken = async (body: IRefreshTokenParams) => - await base.post>(`${getAuthURL}/tokens`, body); - -export { getRedirectUrls, login, refreshToken }; diff --git a/services/next.ahhachul.com/src/api/blindDate/index.ts b/services/next.ahhachul.com/src/api/blindDate/index.ts deleted file mode 100644 index 072034ccc..000000000 --- a/services/next.ahhachul.com/src/api/blindDate/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { base } from '..'; -import { IResponse, type ICommunityList as GetCommunityListResponse } from '@/src/types'; -import { API_BASE_URL } from '@/src/data/api'; - -export const getBlindDateURL = `${API_BASE_URL}/blindDate`; - -/** 커뮤니티 포스트 리스트 조회 */ -export const getBlindList = async () => { - const url = `${getBlindDateURL}`; - - return await base.get>(url); -}; diff --git a/services/next.ahhachul.com/src/api/community/index.ts b/services/next.ahhachul.com/src/api/community/index.ts deleted file mode 100644 index ea0711980..000000000 --- a/services/next.ahhachul.com/src/api/community/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import queryString from 'query-string'; - -import { base } from '..'; -import { - IResponse, - type ICommunityParams as GetCommunityListRequestParams, - type ICommunityList as GetCommunityListResponse, - type ICommunityDetail as GetCommunityDetailResponse, - ICommunityArticleForm, -} from '@/src/types'; -import { API_BASE_URL } from '@/src/data/api'; -import { removeEmptyProperties } from '@/src/utils/object'; - -export const getCommunityURL = `${API_BASE_URL}/community-posts`; - -/** 커뮤니티 포스트 리스트 조회 */ -export const getCommunityList = async (params: GetCommunityListRequestParams) => { - const queryParams = queryString.stringify(removeEmptyProperties(params)); - - const url = `${getCommunityURL}?${queryParams}`; - - return await base.get>(url); -}; - -/** 커뮤니티 포스트 상세 조회 */ -export const getCommunityDetail = async (postId: string) => { - const url = `${getCommunityURL}/${postId}`; - - return await base.get>(url); -}; - -/** 커뮤니티 포스트 생성 */ -export const post = async (body: ICommunityArticleForm) => { - const formData = new FormData(); - for (const [key, value] of Object.entries(body)) { - if (key !== 'imageFiles') { - formData.append(key, value); - } - } - if (body?.imageFiles) { - formData.append('imageFiles', body.imageFiles); - } - - return await base.post>>(getCommunityURL, formData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); -}; diff --git a/services/next.ahhachul.com/src/api/complaints/index.ts b/services/next.ahhachul.com/src/api/complaints/index.ts deleted file mode 100644 index 91d508c67..000000000 --- a/services/next.ahhachul.com/src/api/complaints/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import queryString from 'query-string'; - -import { base } from '..'; -import { API_BASE_URL } from '@/src/data/api'; -import { IResponse } from '@/src/types'; -import { IComplaintForm } from '@/src/types/complaints'; -import type { - IComplaintDetail as GetComplaintDetailResponse, - IComplaintList as GetComplaintListResponse, - IComplaintParams as GetComplaintListParams, -} from '@/src/types'; -import { removeEmptyProperties } from '@/src/utils/object'; - -export const getComplaintURL = `${API_BASE_URL}/complaints/messages`; - -/** 커뮤니티 포스트 리스트 조회 */ -export const getComplaintList = async (params: GetComplaintListParams) => { - const queryParams = queryString.stringify(removeEmptyProperties(params)); - - const url = `${getComplaintURL}?${queryParams}`; - - return await base.get>(url); -}; - -/** 민원 상세 조회 */ -export const getComplaintDetail = async (postId: string) => { - const url = `${getComplaintURL}/${postId}`; - - return await base.get>(url); -}; - -/** 민원 생성 */ -export const post = async (body: IComplaintForm) => { - const formData = new FormData(); - for (const [key, value] of Object.entries(body)) { - if (key !== 'imageFiles') { - formData.append(key, value); - } - } - if (body?.imageFiles) { - formData.append('imageFiles', body.imageFiles); - } - - return await base.post>(getComplaintURL, formData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); -}; diff --git a/services/next.ahhachul.com/src/api/index.ts b/services/next.ahhachul.com/src/api/index.ts deleted file mode 100644 index e36f5dd5c..000000000 --- a/services/next.ahhachul.com/src/api/index.ts +++ /dev/null @@ -1,94 +0,0 @@ -import axios, { AxiosError, AxiosInstance, isAxiosError } from 'axios'; -import { API_BASE_URL } from '@/src/data/api'; - -import { auth } from '@/src/providers/AuthProvider'; -import { Tokens } from '../utils/authentication/tokens'; -import { APIErrorResponse } from '../types/error'; -import { ERROR_MESSAGE } from '../data/error'; - -export const tokenService = new Tokens(auth); - -const setInterceptor = (instance: AxiosInstance) => { - instance.interceptors.request.use( - (config) => { - const requestConfig = config; - - let accessToken = auth.accessToken; - if (accessToken) { - requestConfig.headers.Authorization = `Bearer ${accessToken}`; - } - - if (Tokens.isServer() && tokenService.context?.req?.cookies) { - accessToken = ''; - if (tokenService.context.req.cookies[tokenService.cookieKey]) { - accessToken = JSON.parse( - tokenService.context.req.cookies[tokenService.cookieKey]!, - ).accessToken; - - requestConfig.headers.Cookie = `${tokenService.cookieKey}={${encodeURIComponent( - tokenService.context.req.cookies[tokenService.cookieKey]!.slice( - 1, - -1, - ), - )}}`; - } - - requestConfig.headers.Authorization = `Bearer ${accessToken}`; - } - return config; - }, - (err: AxiosError): Promise => Promise.reject(err), - ); - - instance.interceptors.response.use( - (response) => response, - async (error) => { - if (isAxiosError(error)) { - if (error.response && error.response.data) { - const { code, status } = error.response.data as APIErrorResponse; - console.log(code, error.response.data); - - const toastMessage = ERROR_MESSAGE[status]?.[code]; - console.warn(status, code, toastMessage); - - if ( - code === '201' || - code === '203' || - code === '204' || - code === '205' - ) { - // 다시 로그인 - tokenService.expireSession(); - return Promise.reject(error); - } - - if (code === '202') { - // 액세스 토큰 만료 - return tokenService.resetTokenAndReAttemptRequest(error); - } - return Promise.reject(error); - } - } - - console.error(error); - return Promise.reject(error); - }, - ); - - return instance; -}; - -const base = setInterceptor( - axios.create({ - baseURL: API_BASE_URL, - }), -); - -export { base }; - -export * as AuthApi from './auth'; -export * as LostApi from './lost'; -export * as MemberApi from './member'; -export * as SubwayApi from './subway-line'; -export * as CommunityApi from './community'; -export * as ComplaintsApi from './complaints'; diff --git a/services/next.ahhachul.com/src/api/lost/index.ts b/services/next.ahhachul.com/src/api/lost/index.ts deleted file mode 100644 index 2301aba0e..000000000 --- a/services/next.ahhachul.com/src/api/lost/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import queryString from 'query-string'; - -import { base } from '..'; -import { - IResponse, - type ILostParams as GetLostListRequestParams, - type ILostList as GetLostListResponse, - type ILostDetail as GetLostDetailResponse, - ILostArticleForm, -} from '@/src/types'; -import { API_BASE_URL } from '@/src/data/api'; -import { removeEmptyProperties } from '@/src/utils/object'; - -export const getLostURL = `${API_BASE_URL}/lost-posts`; - -/** 분실물, 유실물 리스트 조회 => !!실제 백엔드 연동 중!! */ -export const getLostList = async (params: GetLostListRequestParams) => { - const queryParams = queryString.stringify(removeEmptyProperties(params)); - - const url = `${getLostURL}?${queryParams}`; - - return await base.get>(url); -}; - -/** 커뮤니티 포스트 상세 조회 */ -export const getLostDetail = async (postId: string) => { - const url = `${getLostURL}/${postId}`; - - return await base.get>(url); -}; - -/** 유실물 포스트 생성 */ -export const post = async (body: ILostArticleForm) => { - const formData = new FormData(); - for (const [key, value] of Object.entries(removeEmptyProperties(body))) { - if (key !== 'imageFiles') { - formData.append(key, value); - } - } - if (body?.imageFiles) { - formData.append('imageFiles', body.imageFiles); - } - - return await base.post>>(getLostURL, formData, { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }); -}; diff --git a/services/next.ahhachul.com/src/api/member/index.ts b/services/next.ahhachul.com/src/api/member/index.ts deleted file mode 100644 index 14a70a5f3..000000000 --- a/services/next.ahhachul.com/src/api/member/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { base } from '..'; -import { IResponse } from '@/src/types'; -import { IMember, MemberUpdateType } from '@/src/types/member'; - -const PATH = '/members'; - -const checkNickname = (nickname: string) => - base.post>(`${PATH}/check-nickname`, { nickname }); - -const getPersonalInfo = () => base.get>(`${PATH}`); - -const putPersonalInfo = (data: MemberUpdateType) => base.patch(`${PATH}`, data); - -// TODO: api 수정되면 고도화하기 -const postMyStations = (data: { stationNames: string[] }) => base.post(`${PATH}/bookmarks/stations`, data); - -export { checkNickname, getPersonalInfo, putPersonalInfo, postMyStations }; diff --git a/services/next.ahhachul.com/src/api/subway-line/index.ts b/services/next.ahhachul.com/src/api/subway-line/index.ts deleted file mode 100644 index 02a256822..000000000 --- a/services/next.ahhachul.com/src/api/subway-line/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { base } from '..'; -import { API_BASE_URL } from '@/src/data/api'; - -export const getSubwayURL = `${API_BASE_URL}/subway-lines`; - -/** 노선 조회 */ -export const getSubwayInfo = async () => { - return await base.get(getSubwayURL); -}; diff --git a/services/next.ahhachul.com/src/api/train/index.ts b/services/next.ahhachul.com/src/api/train/index.ts deleted file mode 100644 index d5e4ed3c0..000000000 --- a/services/next.ahhachul.com/src/api/train/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import queryString from 'query-string'; - -import { base } from '..'; -import { - IResponse, - type ITrainParams as GetTrainsRealTimeInfoRequestParams, - type ITrainCongestionParams as GetTrainCongestionInfoRequestParams, - ITrainRealTimeInfo, - ITrainCongestionInfo, -} from '@/src/types'; -import { API_BASE_URL } from '@/src/data/api'; - -export const getTrainURL = `${API_BASE_URL}/trains/real-times`; - -/** 특정 정류장 열차 실시간 데이터 조회 */ -export const getTrainsRealTimeInfo = async (params: GetTrainsRealTimeInfoRequestParams) => { - const queryParams = queryString.stringify(params); - - const url = `${getTrainURL}?${queryParams}`; - - return await base.get>(url); -}; - -/** 열차 혼잡도 */ -export const getTrainCongestionInfo = async (params: GetTrainCongestionInfoRequestParams) => { - const queryParams = queryString.stringify(params); - - const url = `${getTrainURL}/congestion?${queryParams}`; - - return await base.get>(url); -}; diff --git a/services/next.ahhachul.com/src/components/alarm/activityNotifications/ActivityNotification.tsx b/services/next.ahhachul.com/src/components/alarm/activityNotifications/ActivityNotification.tsx deleted file mode 100644 index 44a7cae1b..000000000 --- a/services/next.ahhachul.com/src/components/alarm/activityNotifications/ActivityNotification.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; - -import IconAlarmTalk from '@/src/static/icons/system/IconAlarmTalk'; -import IconAlarmComplaint from '@/src/static/icons/system/IconAlarmComplaint'; -import { useState } from 'react'; -import { useRouter } from 'next/router'; -import { PATH } from '@/src/data'; - -const getRandomContent = (type: 'talk' | 'complaints') => { - const list = [ - '2호선 게시판: 일주일에 충치치료, 사랑니(매복)2개나 뺄려하다니 내가 미쳤지 근데 원래 이렇게 멍한 느낌이 드나? 아파서 말을 못하겠다', - '7호선 게시판: 뷰뷰이 오늘 아침 8시에 퇴근하고 갤에 솔 공략 올리고 킬게용 아마 21:00~23:00 이시간쯤에 뱅종 할듯 상태 별로면 근말 할수도 있음..', - '9호선 게시판: [광고] 약탈폭풍 wow+배틀로얄 신규출시', - '1호선 게시판: 몬스터 꺼버렸자나 한잔해', - '1호선 게시판: 토요일에 볼래요?', - '2호선 게시판: 정규 1등 찍은 효신좌 근황', - '2호선 게시판: 반갑습니다', - '7호선 게시판: 치과에서 이빨을 조지고 온 나', - '1호선 게시판: 광운대행 진짜 화난다', - '1호선 게시판: 늦은 밤엔 공룡의 광증이 깊어집니다.', - '6호선 게시판: zzzㅋㅋㅋㅋㅋㅋㅋㅋ오 오랜만이누 ㅎㅇㅎㅇㅋㅋㅋㅋㅋㅋ', - '1호선 게시판: 정말 오랜만이야', - '3호선 게시판: 나락쇼', - '3호선 게시판: 롤체 시즌11 에메 간다', - '1호선 게시판: 나랑 영화볼래요?', - '9호선 게시판: 출근하다가 빵사가는데...', - ]; - const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; - return type === 'complaints' ? list[randomIdx]?.replace('게시판', '민원') : list[randomIdx]; -}; - -const getRandomBoolean = (): boolean => { - const number = Math.floor(Math.random() * 10) + 1; - return Boolean(number % 2); -}; - -function ActivityNotification(props: { type: 'talk' | 'complaints' }) { - const { type } = props; - const [notiCount, minus] = useState(getRandomBoolean() ? 1 : 0); - const isActive = notiCount >= 1; - - const { push } = useRouter(); - const pushTo = () => { - type === 'talk' ? push(`${PATH.community}/1`) : push(`${PATH.complaints}/1`); - setTimeout(() => { - minus(0); - }, 750); - }; - - return ( -
  • - - - {type === 'talk' ? : } - {type === 'talk' ? '커뮤니티' : '민원신청'} - - {isActive && {notiCount}} - - - - 작성하신 {type === 'talk' ? '게시물' : '민원'}에 댓글이 달렸어요 -

    {getRandomContent(type)}

    -
    -
    -
    -
  • - ); -} - -const wrap = (isActive: boolean): CSSObject => ({ - padding: '24px 20px', - backgroundColor: isActive ? 'hsla(0, 0%, 100%, .06)' : 'inherit', - '&:not(:last-of-type)': { - borderBottom: isActive ? '1px solid hsla(0, 0%, 100%, .09)' : '1px solid hsla(0, 0%, 100%, .06)', - }, -}); - -const category = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#dfe2ea', - marginLeft: '8px', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const tooltip = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - fontWeight: fontWeight[500], - color: '#ffffff', - borderBottom: '1px solid hsla(0, 0%, 100%, .09)', - display: 'flex', - alignItems: 'center', - marginBottom: '8px', - paddingBottom: '12px', -}); - -const content = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', -}); - -const cnt = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - fontWeight: fontWeight[500], - color: '#ffffff', - height: '24px', - width: '24px', - border: '1px solid hsla(0, 0%, 100%, .09)', - borderRadius: '50%', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'absolute', - top: 0, - right: 0, -}); - -export default ActivityNotification; diff --git a/services/next.ahhachul.com/src/components/alarm/activityNotifications/index.ts b/services/next.ahhachul.com/src/components/alarm/activityNotifications/index.ts deleted file mode 100644 index 4c0c33947..000000000 --- a/services/next.ahhachul.com/src/components/alarm/activityNotifications/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as ActivityNotification } from './ActivityNotification'; diff --git a/services/next.ahhachul.com/src/components/alarm/directMessage/DMList.tsx b/services/next.ahhachul.com/src/components/alarm/directMessage/DMList.tsx deleted file mode 100644 index 160c705f2..000000000 --- a/services/next.ahhachul.com/src/components/alarm/directMessage/DMList.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { useState } from 'react'; -import { f } from '@/src/styles'; -import OneOnOne from './OneOnOne'; -import Group from './Group'; - -function DMList() { - const [DMTab, setDMTab] = useState('oneOnOne'); - - return ( -
    -
    - - -
    - {DMTab === 'oneOnOne' && ( -
      - - - - - - - - - - -
    - )} - {DMTab === 'group' && ( -
      - - -
    - )} -
    - ); -} - -const buttonGroup: [CSSObject[], CSSObject] = [ - f.flexAlignCenter, - { - margin: '0 20px 20px', - }, -]; - -const toggleBtn = - (isActive: boolean) => - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.37)', - height: '32px', - borderRadius: '124px', - padding: '0 14px', - fontSize: fontSize[14], - width: 'max-content', - marginRight: '8px', - background: isActive ? 'rgb(196, 212, 252)' : 'inherit', - color: isActive ? '#141517' : '#9da5b6', - fontWeight: isActive ? fontWeight[600] : fontWeight[400], - }); - -export default DMList; diff --git a/services/next.ahhachul.com/src/components/alarm/directMessage/Group.tsx b/services/next.ahhachul.com/src/components/alarm/directMessage/Group.tsx deleted file mode 100644 index c93a59524..000000000 --- a/services/next.ahhachul.com/src/components/alarm/directMessage/Group.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { PATH } from '@/src/data'; -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -const getRandomBoolean = (): boolean => { - const number = Math.floor(Math.random() * 10) + 1; - return Boolean(number % 2); -}; - -const getRandomNickname = () => { - const list = ['선바와 아이들', '룩삼사거리', '수련잉!', '동숙누나와함께춤을', '큐이얍얍']; - const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; - return list[randomIdx]; -}; - -function GroupChatCard() { - const { push } = useRouter(); - const pushTo = () => { - push(`${PATH.chat}/1`); - setTimeout(() => { - minus(0); - }, 750); - }; - - const [notiCount, minus] = useState(getRandomBoolean() ? 1 : 0); - const isActive = notiCount >= 1; - - return ( -
  • - - - {getRandomNickname()} - 새 메시지 23개 - - -

    안녕하세요~

    - {isActive && 1} -
    -
    -
  • - ); -} - -const wrap = (isActive: boolean): CSSObject => ({ - padding: '24px 20px', - backgroundColor: isActive ? 'hsla(0, 0%, 100%, .06)' : 'inherit', - '&:not(:last-of-type)': { - borderBottom: isActive ? '1px solid hsla(0, 0%, 100%, .09)' : '1px solid hsla(0, 0%, 100%, .06)', - }, -}); - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#dfe2ea', -}); - -const unread = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#ffffff', - marginLeft: '6px', -}); - -const content = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', -}); - -const cnt = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - fontWeight: fontWeight[500], - color: '#ffffff', - height: '24px', - width: '24px', - border: '1px solid hsla(0, 0%, 100%, .09)', - borderRadius: '50%', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'absolute', - top: 0, - right: 0, -}); - -export default GroupChatCard; diff --git a/services/next.ahhachul.com/src/components/alarm/directMessage/OneOnOne.tsx b/services/next.ahhachul.com/src/components/alarm/directMessage/OneOnOne.tsx deleted file mode 100644 index 72fc421fa..000000000 --- a/services/next.ahhachul.com/src/components/alarm/directMessage/OneOnOne.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { PATH } from '@/src/data'; -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; -import { useRouter } from 'next/router'; -import { useState } from 'react'; - -const getRandomBoolean = (): boolean => { - const number = Math.floor(Math.random() * 10) + 1; - return Boolean(number % 2); -}; - -const getRandomNickname = () => { - const list = [ - '갯나리', - '특삼', - '미호밍', - '플락', - '도롱뇽', - '큐이', - '선바', - '김츠유', - '수련수련', - '한동숙', - '짬바', - '리끼', - '따효니', - '아리사', - '녹두로', - '룩삼', - ]; - const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; - return list[randomIdx]; -}; - -function OneOnOneCard() { - const { push } = useRouter(); - const pushTo = () => { - push(`${PATH.chat}/1`); - setTimeout(() => { - minus(0); - }, 750); - }; - - const [notiCount, minus] = useState(getRandomBoolean() ? 1 : 0); - const isActive = notiCount >= 1; - - return ( -
  • - - - {getRandomNickname()} - - - -

    안녕하세요. 올려주신 지갑 제가 4호선에서 분실한 것 같은데 혹시 어디 거주하시나요?

    - {isActive && 1} -
    -
    -
  • - ); -} - -const wrap = (isActive: boolean): CSSObject => ({ - padding: '24px 20px', - backgroundColor: isActive ? 'hsla(0, 0%, 100%, .06)' : 'inherit', - '&:not(:last-of-type)': { - borderBottom: isActive ? '1px solid hsla(0, 0%, 100%, .09)' : '1px solid hsla(0, 0%, 100%, .06)', - }, -}); - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#dfe2ea', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const content = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', -}); - -const cnt = ({ color: { background }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - fontWeight: fontWeight[500], - color: background[50], - height: '24px', - width: '24px', - border: '1px solid hsla(0, 0%, 100%, .09)', - borderRadius: '50%', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'absolute', - top: 0, - right: 0, -}); - -export default OneOnOneCard; diff --git a/services/next.ahhachul.com/src/components/alarm/directMessage/index.ts b/services/next.ahhachul.com/src/components/alarm/directMessage/index.ts deleted file mode 100644 index d8490a6af..000000000 --- a/services/next.ahhachul.com/src/components/alarm/directMessage/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as DMList } from './DMList'; diff --git a/services/next.ahhachul.com/src/components/alarm/index.ts b/services/next.ahhachul.com/src/components/alarm/index.ts deleted file mode 100644 index e2dd3a781..000000000 --- a/services/next.ahhachul.com/src/components/alarm/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './activityNotifications'; -export * from './directMessage'; diff --git a/services/next.ahhachul.com/src/components/community/Community.tsx b/services/next.ahhachul.com/src/components/community/Community.tsx deleted file mode 100644 index 7461a81ea..000000000 --- a/services/next.ahhachul.com/src/components/community/Community.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { Suspense } from 'react'; - -import { ErrorComponent, UiComponent } from '@/src/components'; -import TabSection from './tabSection'; -import ListSection from './listSection'; -import { wrap, err } from './style'; -import ErrorDefault from '@/src/components/error-management/ErrorDefault'; -import FilterSection from './filterSection'; - -const Community = () => { - return ( -
    - - - } fallbackCss={err}> - }> - - - -
    - ); -}; - -export default Community; diff --git a/services/next.ahhachul.com/src/components/community/filterSection/FilterSection.tsx b/services/next.ahhachul.com/src/components/community/filterSection/FilterSection.tsx deleted file mode 100644 index 094009eb0..000000000 --- a/services/next.ahhachul.com/src/components/community/filterSection/FilterSection.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import IconChevron from '@/src/static/icons/system/IconChevron'; -import { f } from '@/src/styles'; -import { useParams } from 'next/navigation'; -import { useRouter } from 'next/router'; -import IconCircleClose from '@/src/static/icons/system/IconCircleClose'; -import { useReducer } from 'react'; -import { UiComponent } from '../..'; -import { PATH } from '@/src/data'; -import { exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import { Nullable } from '@/src/types'; - -const FilterSection = () => { - const params = useParams(); - const router = useRouter(); - const keyword = router?.query?.keyword; - const hashTag = router?.query?.tag; - const subwayLineId = params?.subwayLineId?.[0]; - const categoryType = router?.query?.categoryType; - - const handleDeleteKeyword = () => { - router.push(`${router.asPath?.split('?')?.[0]}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { - shallow: true, - }); - }; - - const [show, toggle] = useReducer((c) => !c, false); - const handleSubwayLine = (subwayLine: Nullable) => { - if (!subwayLine) - router.push(`${PATH.community}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { - shallow: true, - }); - else - router.push(`${PATH.community}/${subwayLine}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { - shallow: true, - }); - }; - - return ( - <> -
    -
      - {(keyword || hashTag) && ( -
    • - -
    • - )} -
    • - -
    • -
    -
    - - - ); -}; - -const wrap = [ - f.fullWidth, - f.sideGutter, - { - marginBottom: '16px', - }, -]; - -const ul: [CSSObject[], CSSObject, CSSObject, CSSObject] = [ - f.flexAlignCenter, - f.overflowScroll, - f.posRel, - { - overflowY: 'hidden', - overflowX: 'scroll', - justifyContent: 'flex-end', - gap: '8px', - }, -]; - -const keywordBtn = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - position: 'absolute', - top: '50%', - left: 0, - transform: 'translateY(-50%)', - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - zIndex: 10, - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - width: '18px', - height: '18px', - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, -}); - -const filterBtn = - (hasCondition: boolean) => - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: hasCondition ? fontWeight[700] : fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - alignItems: 'center', - justifyContent: 'center', - width: '16px', - height: '16px', - transform: 'rotate(90deg)', - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, - }); - -export default FilterSection; diff --git a/services/next.ahhachul.com/src/components/community/filterSection/index.ts b/services/next.ahhachul.com/src/components/community/filterSection/index.ts deleted file mode 100644 index d33cc988f..000000000 --- a/services/next.ahhachul.com/src/components/community/filterSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './FilterSection'; diff --git a/services/next.ahhachul.com/src/components/community/index.ts b/services/next.ahhachul.com/src/components/community/index.ts deleted file mode 100644 index effeba06e..000000000 --- a/services/next.ahhachul.com/src/components/community/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as CommunityMain } from './Community'; diff --git a/services/next.ahhachul.com/src/components/community/listSection/Item.tsx b/services/next.ahhachul.com/src/components/community/listSection/Item.tsx deleted file mode 100644 index 76ae2797d..000000000 --- a/services/next.ahhachul.com/src/components/community/listSection/Item.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; -import { CSSProperties } from 'react'; -import { LazyLoadImage } from 'react-lazy-load-image-component'; - -import IconComment from '@/src/static/icons/system/IconComment'; -import IconHeart from '@/src/static/icons/system/IconHeart'; -import { f } from '@/src/styles'; -import { ICommunity } from '@/src/types'; -import { exportHexColorWidthLineName, exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import Link from 'next/link'; -import { PATH } from '@/src/data'; - -function Item({ article }: { article: ICommunity }) { - return ( - - - -
    - {article.writer} - -
    -
    - {exportLineNameWithSubwayLineId(article.subwayLineId)} -
    -
    - -

    {article.title}

    -
    - -
    -
    - -
    - {article.likeCnt} -
    -
    - {article.commentCnt} -
    -
    -
    - - ); -} - -const wrap = { - padding: '12px 0', -}; - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#c9cedc', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const trainLabelsWrap = - (pointColor: CSSProperties['color']) => - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - display: 'flex', - alignItems: 'center', - - '& > span': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '4px', - padding: '0 8px', - height: '20px', - color: gray[1000], - fontSize: fontSize[12], - fontWeight: fontWeight[500], - background: pointColor, - }, - }); - -const content = [ - f.truncate2, - ({ typography: { fontSize } }: Theme) => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - }), -]; - -const img: CSSObject = { - width: '50px', - minWidth: '50px', - height: '50px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'relative', - marginLeft: '16px', - - '& > img': { - position: 'absolute', - top: 0, - right: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '6px', - }, -}; - -const label = ({ typography: { fontSize } }: Theme): CSSObject => ({ - display: 'flex', - alignItems: 'center', - marginRight: '8px', - - '& > span': { - fontSize: fontSize[12], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - marginLeft: '4px', - }, -}); - -export default Item; diff --git a/services/next.ahhachul.com/src/components/community/listSection/ListSection.tsx b/services/next.ahhachul.com/src/components/community/listSection/ListSection.tsx deleted file mode 100644 index 359a7ca51..000000000 --- a/services/next.ahhachul.com/src/components/community/listSection/ListSection.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import { Box, Flex } from '@ahhachul/react-components-layout'; - -import { UiComponent } from '@/src/components'; -import { useGetCommunityList } from '@/src/queries/community/useGetCommunityList'; -import { flattenInfinityListData } from '@/src/utils/response'; -import TalkLoungeCard from './Item'; -import { ul } from './style'; -import { useRouter } from 'next/router'; -import { CommunityCategoryType } from '@/src/types'; -import { useParams } from 'next/navigation'; - -function ListSection() { - const params = useParams(); - const { query } = useRouter(); - const { data, hasNextPage, fetchNextPage, isFetchingNextPage } = useGetCommunityList({ - page: 0, - size: 20, - sort: 'createdAt,desc', - hashTag: query?.tag as string, - content: query?.keyword as string, - categoryType: (query?.categoryType as CommunityCategoryType) || 'HOT', - ...(params?.subwayLineId?.[0] && { subwayLineId: params?.subwayLineId?.[0] as string }), - }); - - const flatData = flattenInfinityListData(data); - - return ( - <> - - - {flatData.map((article) => ( -
  • - -
  • - ))} -
    -
    - {hasNextPage && ( - { - !isFetchingNextPage && fetchNextPage(); - }} - /> - )} - - ); -} - -export default ListSection; diff --git a/services/next.ahhachul.com/src/components/community/listSection/index.ts b/services/next.ahhachul.com/src/components/community/listSection/index.ts deleted file mode 100644 index 6a86309e9..000000000 --- a/services/next.ahhachul.com/src/components/community/listSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ListSection'; diff --git a/services/next.ahhachul.com/src/components/community/listSection/style.ts b/services/next.ahhachul.com/src/components/community/listSection/style.ts deleted file mode 100644 index 9f447d7f9..000000000 --- a/services/next.ahhachul.com/src/components/community/listSection/style.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { f } from '@/src/styles'; - -const ul = [ - f.sideGutter, - { - '& > li:first-of-type': { - '& > a > article': { paddingTop: 0 }, - }, - - '& > li:not(:last-of-type)': { - borderBottom: '1px solid hsla(0, 0%, 100%, .06)', - }, - }, -]; - -export { ul }; diff --git a/services/next.ahhachul.com/src/components/community/style.ts b/services/next.ahhachul.com/src/components/community/style.ts deleted file mode 100644 index d0f992430..000000000 --- a/services/next.ahhachul.com/src/components/community/style.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { f } from '@/src/styles'; -import { CSSObject, Theme } from '@emotion/react'; - -const tabHeight = '68.4px'; -const filterSectionHeight = '46px'; -const paddingTopHeight = '14px'; - -const wrap = [f.fullWidth, f.flexColumn, { padding: `${paddingTopHeight} 0 48px` }]; - -const err = [ - f.posAbs, - ({ - dimensions: { - size: { - height: { header, navbar }, - }, - }, - }: Theme): CSSObject => ({ - bottom: navbar, - left: '50%', - transform: 'translateX(-50%)', - height: `calc(100% - ${header} - ${navbar} - ${tabHeight} - ${filterSectionHeight} - ${paddingTopHeight})`, - boxSizing: 'border-box', - }), -]; - -export { wrap, err }; diff --git a/services/next.ahhachul.com/src/components/community/tabSection/TabSection.tsx b/services/next.ahhachul.com/src/components/community/tabSection/TabSection.tsx deleted file mode 100644 index d3d0a6490..000000000 --- a/services/next.ahhachul.com/src/components/community/tabSection/TabSection.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { Box, Flex, Text } from '@ahhachul/react-components-layout'; -import IconCategoryFree from '@/src/static/icons/community/IconCategoryFree'; -import IconCategoryInsight from '@/src/static/icons/community/IconCategoryInsight'; -import { TabBtn } from './style'; -import { CommunityCategoryType } from '@/src/types'; -import IconCategoryRank from '@/src/static/icons/community/IconCategoryRank'; -import IconCategoryQuestion from '@/src/static/icons/community/IconCategoryQuestion'; -import { useRouter } from 'next/router'; - -const COMMUNITY_TABS = { - HOT: { - icon: , - label: '인기', - value: 'HOT', - }, - FREE: { - icon: , - label: '자유', - value: 'FREE', - }, - INSIGHT: { - icon: , - label: '정보', - value: 'INSIGHT', - }, - QUESTION: { - icon: , - label: '질문', - value: 'QUESTION', - }, -} as const; - -function TabSection() { - const router = useRouter(); - const asPath = router.asPath.split('?'); - const activeTab = router.query?.categoryType || Object.keys(COMMUNITY_TABS)[0]; - - const handleTab = (categoryType: CommunityCategoryType) => () => { - router.push(`${asPath[0]}?categoryType=${categoryType}`, undefined, { - shallow: true, - }); - }; - - return ( - - - {Object.entries(COMMUNITY_TABS).map(([key, { label, icon, value }]) => ( -
  • - - - {icon} - - - {label} - - -
  • - ))} -
    -
    - ); -} - -export default TabSection; diff --git a/services/next.ahhachul.com/src/components/community/tabSection/index.ts b/services/next.ahhachul.com/src/components/community/tabSection/index.ts deleted file mode 100644 index 53bfd979b..000000000 --- a/services/next.ahhachul.com/src/components/community/tabSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './TabSection'; diff --git a/services/next.ahhachul.com/src/components/community/tabSection/style.ts b/services/next.ahhachul.com/src/components/community/tabSection/style.ts deleted file mode 100644 index 4d434e4c0..000000000 --- a/services/next.ahhachul.com/src/components/community/tabSection/style.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import styled from '@emotion/styled'; - -const TabBtn = styled(Flex)` - cursor: pointer; - - & > span { - width: max-content; - border-radius: 50%; - aspect-ratio: 1 / 1; - padding: 6px; - transition: background-color 0.2s ease; - - & > svg { - fill: white; - - & > path { - fill: white; - stroke: white; - } - } - } - - & > p { - transition: color 0.2s ease; - } - - &[aria-selected='true'] { - & > span { - background-color: #2acf6c; - - & > svg { - fill: white; - - & > path { - fill: white; - stroke: white; - } - } - } - - & > p { - font-weight: 700; - } - } -`; - -export { TabBtn }; diff --git a/services/next.ahhachul.com/src/components/complaints/ComplaintList.tsx b/services/next.ahhachul.com/src/components/complaints/ComplaintList.tsx deleted file mode 100644 index 1da3d3631..000000000 --- a/services/next.ahhachul.com/src/components/complaints/ComplaintList.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React, { Suspense } from 'react'; - -import { ErrorComponent, UiComponent } from '@/src/components'; -import ListSection from './listSection'; -import { wrap, pageTitle, err } from './style'; -import ErrorDefault from '@/src/components/error-management/ErrorDefault'; -import FilterSection from './filterSection'; - -const ComplaintList = () => { - return ( -
    -

    실시간 민원

    - - } fallbackCss={err}> - }> - - - -
    - ); -}; - -export default ComplaintList; diff --git a/services/next.ahhachul.com/src/components/complaints/Complaints.tsx b/services/next.ahhachul.com/src/components/complaints/Complaints.tsx deleted file mode 100644 index 9cd14f1ff..000000000 --- a/services/next.ahhachul.com/src/components/complaints/Complaints.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import { Box } from '@ahhachul/react-components-layout'; - -import { ComplaintsComponent } from '@/src/components'; -import { COMPLAINTS_CONTENTS } from '@/src/data/complaints'; -import { grid1, grid2, wrap, pageTitle } from './style'; -import Link from 'next/link'; -import { PATH } from '@/src/data'; - -const Complaints = () => { - return ( -
    - -

    지하철 환경

    -
      - {Object.entries(COMPLAINTS_CONTENTS) - .slice(0, 4) - .map(([key, value]) => ( -
    • - - - -
    • - ))} -
    -
    - -

    긴급민원 요청

    -
      - {Object.entries(COMPLAINTS_CONTENTS) - .slice(4, 7) - .map(([key, value]) => ( -
    • - - - -
    • - ))} -
    -
    -
    - ); -}; - -export default Complaints; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/AskTrainNumber.tsx b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/AskTrainNumber.tsx deleted file mode 100644 index 4996120c3..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/AskTrainNumber.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import React, { useReducer, useRef } from 'react'; -import { Box, Flex, Text } from '@ahhachul/react-components-layout'; - -import { COMPLAINTS_CONTENTS_TYPES } from '@/src/data/complaints'; -import { WhereIsTrainNumberBottomSheet } from './bottomSheet'; -import { submitWrap, submitBtn } from './style'; -import { useRouter } from 'next/router'; -import { f } from '@/src/styles'; -import { CSSObject, Theme } from '@emotion/react'; -import IconChevron from '@/src/static/icons/system/IconChevron'; -import { useDispatch } from 'react-redux'; -import { addSnackBar } from '@/src/stores/ui'; -import { exportSubwayInfoFromTrainNumber } from '@/src/utils/export'; -import { PATH } from '@/src/data'; - -type AskTrainNumberProps = { - slug: COMPLAINTS_CONTENTS_TYPES; -}; - -const AskTrainNumber: React.FC = (params) => { - const { push } = useRouter(); - const [show, toggle] = useReducer((c) => !c, false); - - const dispatch = useDispatch(); - const inputRef = useRef(null); - - const next = () => { - const trainInfo = exportSubwayInfoFromTrainNumber(inputRef.current!.value); - if (!inputRef.current!.value) { - dispatch(addSnackBar({ message: '차량번호를 입력해주세요', posBottom: 115 })); - } else if (trainInfo.error) { - dispatch(addSnackBar({ message: '올바른 차량번호를 입력해주세요', posBottom: 115 })); - } else { - push(`${PATH.complaintsSubmission}?slug=${params?.slug}&trainNumber=${inputRef.current!.value}`); - } - }; - - const clickNoTrainNumber = () => { - dispatch(addSnackBar({ message: '준비중이에요', posBottom: 115 })); - }; - - return ( - <> - - - - 정확한 민원접수를 위해 - - - 차량번호를 입력해주세요 - - - -
    - 차량번호 - - -
    -
    - -
    - - - ); -}; - -const section: [CSSObject, CSSObject[], ({ typography }: Theme) => CSSObject] = [ - f.sideGutter, - f.flexColumn, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - position: 'relative', - marginBottom: '32px', - - '& > span': { - color: '#ffffff', - fontSize: fontSize[14], - fontWeight: fontWeight[600], - marginBottom: '14px', - }, - - '& > input': { - border: '1px solid rgb(196, 212, 252, 0.37)', - height: '44px', - borderRadius: '6px', - padding: '0 12px', - color: '#ffffff', - fontSize: fontSize[14], - caretColor: 'rgba(0, 255, 163, 0.5)', - - '&::placeholder': { - fontSize: fontSize[14], - color: '#9da5b6', - }, - }, - - '& > button': { - width: '100%', - display: 'inline-flex', - alignItems: 'center', - justifyContent: 'flex-end', - color: 'rgb(196, 212, 252, 0.7)', - fontSize: fontSize[14], - fontWeight: fontWeight[400], - marginTop: '16px', - - '& > div > svg > path': { - '&:first-of-type': { - stroke: 'rgb(196, 212, 252, 0.7)', - }, - }, - }, - }), -]; - -export default AskTrainNumber; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/CallCenterBottomSheet.tsx b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/CallCenterBottomSheet.tsx deleted file mode 100644 index fc82a71cc..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/CallCenterBottomSheet.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import React from 'react'; -import { css } from '@emotion/react'; -import { Flex, Text, Heading } from '@ahhachul/react-components-layout'; -import { Button } from '@ahhachul/react-components-button'; -import { BottomSheet } from '@/src/components/ui'; -import { theme } from '@/src/styles'; -// import { IconBack } from '@stackflow/plugin-basic-ui'; - -const CALL_CENTER_FILTER = { - '수도권 1-8호선': '수도권 1-8호선', - '9호선': '9호선', - 신분당선: '신분당선', - '공항철도 · 경의중앙선 · 분당선': '공항철도 · 경의중앙선 · 분당선', -}; - -interface CallCenterBottomSheetProps { - isShowing: boolean; - onClose: VoidFunction; -} - -function CallCenterBottomSheet({ isShowing, onClose }: CallCenterBottomSheetProps) { - return ( - - - - 콜센터 연결 - - - 어떤 호선에 타고 계신가요? - - - {Object.entries(CALL_CENTER_FILTER).map(([value, label]) => ( -
  • {}} - > - - {label} - - - - 바로 연결 - - {/* */} - -
  • - ))} -
    - - - -
    -
    - ); -} - -export default CallCenterBottomSheet; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/WhereIsTrainNumberBottomSheet.tsx b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/WhereIsTrainNumberBottomSheet.tsx deleted file mode 100644 index 6bfa2fb8d..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/WhereIsTrainNumberBottomSheet.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { Button } from '@ahhachul/react-components-button'; -import { Flex, Box, Text } from '@ahhachul/react-components-layout'; - -import { BottomSheet } from '@/src/components/ui'; -import { theme } from '@/src/styles'; - -interface WhereIsTrainNumberBottomSheetProps { - isShowing: boolean; - onClose: VoidFunction; -} - -function WhereIsTrainNumberBottomSheet({ isShowing, onClose }: WhereIsTrainNumberBottomSheetProps) { - return ( - - - - - - 출입문 상단 또는 통로상단에! - - - {'열차 내 출입문 상단 또는 통로 상단\n4~6자리 열차 번호가 있습니다.'} - - - - - - ); -} - -export default WhereIsTrainNumberBottomSheet; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/index.ts b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/index.ts deleted file mode 100644 index 41df0f50e..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/bottomSheet/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as CallCenterBottomSheet } from './CallCenterBottomSheet'; -export { default as WhereIsTrainNumberBottomSheet } from './WhereIsTrainNumberBottomSheet'; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/index.ts b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/index.ts deleted file mode 100644 index f9df36047..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as AskTrainNumber } from './AskTrainNumber'; -export * from './bottomSheet'; diff --git a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/style.ts b/services/next.ahhachul.com/src/components/complaints/askTrainNumber/style.ts deleted file mode 100644 index 91c60b168..000000000 --- a/services/next.ahhachul.com/src/components/complaints/askTrainNumber/style.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const submitWrap: CSSObject[] = [ - f.fullWidth, - { - position: 'fixed', - bottom: 0, - left: '50%', - transform: 'translateX(-50%)', - background: '#141517', - padding: '16px 20px 24px', - }, -]; - -const submitBtn = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - padding: '0 14px', - fontSize: fontSize[14], - width: '100%', - height: '48px', - background: 'rgb(196, 212, 252)', - color: '#141517', - fontWeight: fontWeight[600], - borderRadius: '8px', -}); - -export { submitWrap, submitBtn }; diff --git a/services/next.ahhachul.com/src/components/complaints/filterSection/FilterSection.tsx b/services/next.ahhachul.com/src/components/complaints/filterSection/FilterSection.tsx deleted file mode 100644 index e1cf281aa..000000000 --- a/services/next.ahhachul.com/src/components/complaints/filterSection/FilterSection.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import IconChevron from '@/src/static/icons/system/IconChevron'; -import { f } from '@/src/styles'; -import { useParams } from 'next/navigation'; -import { useRouter } from 'next/router'; -import IconCircleClose from '@/src/static/icons/system/IconCircleClose'; -import { useReducer } from 'react'; -import { UiComponent } from '../..'; -import { PATH } from '@/src/data'; -import { exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import { Nullable } from '@/src/types'; - -const FilterSection = () => { - const params = useParams(); - const router = useRouter(); - const keyword = router?.query?.keyword; - const subwayLineId = params?.subwayLineId?.[0]; - - const handleDeleteKeyword = () => { - router.push(`${router.asPath?.split('?')?.[0]}`, undefined, { - shallow: true, - }); - }; - - const [show, toggle] = useReducer((c) => !c, false); - const handleSubwayLine = (subwayLine: Nullable) => { - if (!subwayLine) - router.push(PATH.complaints, undefined, { - shallow: true, - }); - else - router.push(`${PATH.complaints}/${subwayLine}`, undefined, { - shallow: true, - }); - }; - - return ( - <> -
    -
      - {keyword && ( -
    • - -
    • - )} -
    • - -
    • -
    -
    - - - ); -}; - -const wrap = [ - f.fullWidth, - f.sideGutter, - { - marginBottom: '16px', - }, -]; - -const ul: [CSSObject[], CSSObject, CSSObject, CSSObject] = [ - f.flexAlignCenter, - f.overflowScroll, - f.posRel, - { - overflowY: 'hidden', - overflowX: 'scroll', - justifyContent: 'flex-end', - gap: '8px', - }, -]; - -const keywordBtn = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - position: 'absolute', - top: '50%', - left: 0, - transform: 'translateY(-50%)', - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - width: '18px', - height: '18px', - zIndex: 10, - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, -}); - -const filterBtn = - (hasCondition: boolean) => - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: hasCondition ? fontWeight[700] : fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - alignItems: 'center', - justifyContent: 'center', - width: '16px', - height: '16px', - transform: 'rotate(90deg)', - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, - }); - -export default FilterSection; diff --git a/services/next.ahhachul.com/src/components/complaints/filterSection/index.ts b/services/next.ahhachul.com/src/components/complaints/filterSection/index.ts deleted file mode 100644 index d33cc988f..000000000 --- a/services/next.ahhachul.com/src/components/complaints/filterSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './FilterSection'; diff --git a/services/next.ahhachul.com/src/components/complaints/index.ts b/services/next.ahhachul.com/src/components/complaints/index.ts deleted file mode 100644 index 9ad96e965..000000000 --- a/services/next.ahhachul.com/src/components/complaints/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as ComplaintsMain } from './Complaints'; -export { default as ComplaintList } from './ComplaintList'; -export { default as ComplaintCard } from './overviewCard'; -export * from './askTrainNumber'; -export * from './submission'; diff --git a/services/next.ahhachul.com/src/components/complaints/listSection/Item.tsx b/services/next.ahhachul.com/src/components/complaints/listSection/Item.tsx deleted file mode 100644 index f49c114d9..000000000 --- a/services/next.ahhachul.com/src/components/complaints/listSection/Item.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; -import { CSSProperties } from 'react'; -import { LazyLoadImage } from 'react-lazy-load-image-component'; - -import IconComment from '@/src/static/icons/system/IconComment'; -import { f } from '@/src/styles'; -import { IComplaint } from '@/src/types'; -import { exportHexColorWidthLineName, exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import { PATH } from '@/src/data'; -import Link from 'next/link'; - -function Item({ article }: { article: IComplaint }) { - return ( - - - -
    - {article.writer} - -
    -
    - - {exportLineNameWithSubwayLineId(article.subwayLineId)}{' '} - {article.roomNumber && `${article?.roomNumber}번째 칸`} - -

    - 차량번호 {article.trainNo} -

    -
    -
    - -

    {article.title}

    -
    - -
    -
    - -
    - 2 -
    -
    -
    - - ); -} - -const wrap = { - padding: '12px 0', -}; - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#c9cedc', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const trainLabelsWrap = - (pointColor: CSSProperties['color']) => - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - display: 'flex', - alignItems: 'center', - - '& > span': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '4px', - padding: '0 8px', - height: '20px', - color: gray[1000], - fontSize: fontSize[12], - fontWeight: fontWeight[500], - background: pointColor, - }, - - '& > p': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '4px', - padding: '0 8px', - height: '20px', - color: gray[1000], - fontSize: fontSize[12], - background: 'inherit', - - '& > b': { - marginLeft: '4px', - }, - }, - }); - -const content = [ - f.truncate2, - ({ typography: { fontSize } }: Theme) => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - }), -]; - -const img: CSSObject = { - width: '50px', - minWidth: '50px', - height: '50px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'relative', - marginLeft: '16px', - - '& > img': { - position: 'absolute', - top: 0, - right: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '6px', - }, -}; - -const label = ({ typography: { fontSize } }: Theme): CSSObject => ({ - display: 'flex', - alignItems: 'center', - marginRight: '8px', - - '& > span': { - fontSize: fontSize[12], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - marginLeft: '4px', - }, -}); - -export default Item; diff --git a/services/next.ahhachul.com/src/components/complaints/listSection/ListSection.tsx b/services/next.ahhachul.com/src/components/complaints/listSection/ListSection.tsx deleted file mode 100644 index d8ebc9a50..000000000 --- a/services/next.ahhachul.com/src/components/complaints/listSection/ListSection.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useParams } from 'next/navigation'; -import { Box, Flex } from '@ahhachul/react-components-layout'; - -import { useGetComplaintList } from '@/src/queries/complaints/useGetComplaintList'; -import { flattenInfinityListData } from '@/src/utils/response'; -import { UiComponent } from '@/src/components'; -import ComplaintCard from './Item'; -import { ul } from './style'; - -function ListSection() { - const params = useParams(); - const { data, hasNextPage, fetchNextPage, isFetchingNextPage } = useGetComplaintList({ page: 0, size: 20, - ...(params?.subwayLineId?.[0] && { subwayLineId: params?.subwayLineId?.[0] as string }), - }); - - const flatData = flattenInfinityListData(data); - - return ( - <> - - - {flatData.map((article) => ( -
  • - -
  • - ))} -
    -
    - {hasNextPage && ( - { - !isFetchingNextPage && fetchNextPage(); - }} - /> - )} - - ); -} - -export default ListSection; diff --git a/services/next.ahhachul.com/src/components/complaints/listSection/index.ts b/services/next.ahhachul.com/src/components/complaints/listSection/index.ts deleted file mode 100644 index 6a86309e9..000000000 --- a/services/next.ahhachul.com/src/components/complaints/listSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ListSection'; diff --git a/services/next.ahhachul.com/src/components/complaints/listSection/style.ts b/services/next.ahhachul.com/src/components/complaints/listSection/style.ts deleted file mode 100644 index 9f447d7f9..000000000 --- a/services/next.ahhachul.com/src/components/complaints/listSection/style.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { f } from '@/src/styles'; - -const ul = [ - f.sideGutter, - { - '& > li:first-of-type': { - '& > a > article': { paddingTop: 0 }, - }, - - '& > li:not(:last-of-type)': { - borderBottom: '1px solid hsla(0, 0%, 100%, .06)', - }, - }, -]; - -export { ul }; diff --git a/services/next.ahhachul.com/src/components/complaints/overviewCard/OverviewCard.tsx b/services/next.ahhachul.com/src/components/complaints/overviewCard/OverviewCard.tsx deleted file mode 100644 index ed5f14c92..000000000 --- a/services/next.ahhachul.com/src/components/complaints/overviewCard/OverviewCard.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import { wrap } from './style'; - -interface ComplaintOverviewCardProps { - title: string; - description: string; - icon?: React.ReactNode; -} - -function ComplaintOverviewCard(props: ComplaintOverviewCardProps) { - const { title, description } = props; - - return ( -
    - {title} -

    {description}

    - {props.icon} - {title === '온도조절' && ( -
    - 현재 온도 -

    3월 20일 오후 6:30

    -
    -3.9°
    -
    - )} -
    - ); -} - -export default ComplaintOverviewCard; diff --git a/services/next.ahhachul.com/src/components/complaints/overviewCard/index.ts b/services/next.ahhachul.com/src/components/complaints/overviewCard/index.ts deleted file mode 100644 index f32efbeab..000000000 --- a/services/next.ahhachul.com/src/components/complaints/overviewCard/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './OverviewCard'; diff --git a/services/next.ahhachul.com/src/components/complaints/overviewCard/style.ts b/services/next.ahhachul.com/src/components/complaints/overviewCard/style.ts deleted file mode 100644 index 0a6d85826..000000000 --- a/services/next.ahhachul.com/src/components/complaints/overviewCard/style.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap: [CSSObject[], CSSObject, CSSObject, ({ color }: Theme) => CSSObject] = [ - f.flexColumn, - f.fullWidth, - f.fullHeight, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - position: 'relative', - padding: '16px', - borderRadius: '8px', - backgroundColor: '#1F1F1F', - - '& > span': { - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[600], - marginBottom: '8px', - }, - - '& > p': { - color: '#BEC1CB', - fontSize: fontSize[12], - }, - - '& > div': { - position: 'absolute', - right: '16px', - bottom: '10px', - }, - - '& > article': { - position: 'absolute', - right: '16px', - bottom: '10px', - textAlign: 'right', - - '& > span': { - color: '#BEC1CB', - fontSize: fontSize[12], - }, - - '& > p': { - color: '#F5F7FF', - fontSize: fontSize[12], - marginTop: '4px', - marginBottom: '6px', - }, - - '& > div': { - color: '#28B2FF', - fontSize: fontSize[48], - fontWeight: fontWeight[600], - }, - }, - }), -]; - -const grid = { - gap: '8px', -}; - -export { wrap, grid }; diff --git a/services/next.ahhachul.com/src/components/complaints/style.ts b/services/next.ahhachul.com/src/components/complaints/style.ts deleted file mode 100644 index f2115ca3c..000000000 --- a/services/next.ahhachul.com/src/components/complaints/style.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const titleSectionHeight = '18.4px'; -const filterSectionHeight = '46px'; -const paddingTopHeight = '14px'; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { background } }: Theme) => ({ - gap: '36px', - padding: `${paddingTopHeight} 0 48px`, - backgroundColor: background[50], - }), -]; - -const pageTitle = ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - marginBottom: '16px', - fontSize: fontSize[16], - fontWeight: fontWeight[600], - color: gray[1000], - paddingLeft: '20px', -}); - -const grid1 = [ - f.sideGutter, - { - display: 'grid', - gridTemplateColumns: 'repeat(2, 1fr)', - gap: '10px', - - '& > li:nth-of-type(1)': { - gridColumn: '1 / 2', - gridRow: '1 / 2', - height: '100px', - }, - '& > li:nth-of-type(2)': { - gridColumn: '2 / 3', - gridRow: '1 / 3', - }, - '& > li:nth-of-type(3)': { - gridColumn: '1 / 2', - gridRow: '2 / 3', - height: '100px', - }, - '& > li:nth-of-type(4)': { - gridColumn: '1 / 3', - gridRow: '3 / 4', - height: '84px', - }, - }, -]; - -const grid2 = [ - f.sideGutter, - { - display: 'grid', - gridTemplateColumns: 'repeat(2, 1fr)', - gap: '10px', - - '& > li:nth-of-type(1)': { - gridColumn: '1 / 2', - gridRow: '1 / 2', - height: '100px', - }, - '& > li:nth-of-type(2)': { - gridColumn: '2 / 3', - gridRow: '1 / 2', - height: '100px', - }, - '& > li:nth-of-type(3)': { - gridColumn: '1 / 3', - gridRow: '2 / 3', - height: '84px', - }, - }, -]; - -const err = [ - f.posAbs, - ({ - dimensions: { - size: { - height: { header, navbar }, - }, - }, - }: Theme): CSSObject => ({ - bottom: navbar, - left: '50%', - transform: 'translateX(-50%)', - minHeight: `calc(100vh - ${header} - ${navbar} - ${titleSectionHeight} - ${filterSectionHeight} - ${paddingTopHeight})`, - boxSizing: 'border-box', - }), -]; - -export { wrap, pageTitle, grid1, grid2, err }; diff --git a/services/next.ahhachul.com/src/components/complaints/submission/Submission.tsx b/services/next.ahhachul.com/src/components/complaints/submission/Submission.tsx deleted file mode 100644 index 1c8a135d9..000000000 --- a/services/next.ahhachul.com/src/components/complaints/submission/Submission.tsx +++ /dev/null @@ -1,352 +0,0 @@ -import React, { CSSProperties, FormEvent, memo, useCallback, useRef, useState } from 'react'; -import { COMPLAINTS_CONTENTS_TYPES, COMPLAINTS_ROOM_SERVICE_INFO } from '@/src/data/complaints'; -import { - exportHexColorWidthLineName, - exportSubwayInfoFromTrainNumber, - exportSubwayLineIdWithLineName, - formatComplaintShortContentToEn, - formatComplaintTypeToEn, -} from '@/src/utils/export'; -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; -import { useComplaintsArticle } from '@/src/queries/complaints'; -import { UiComponent } from '@/src/components'; -import { EditorState } from 'lexical'; -import { IComplaintForm } from '@/src/types/complaints'; -import { useAppSelector } from '@/src/stores'; -import { addSnackBar } from '@/src/stores/ui'; -import { useDispatch } from 'react-redux'; -import IconCamera from '@/src/static/icons/system/IconCamera'; -import IconCircleClose from '@/src/static/icons/system/IconCircleClose'; -import { Nullable } from '@/src/types'; -import { isEmpty } from 'lodash-es'; - -type ComplaintsSubmissionProps = { - slug: COMPLAINTS_CONTENTS_TYPES; - trainNumber: string; -}; - -const INIT_STATE: IComplaintForm = { - trainNo: '', - location: '', - subwayLineId: '', - content: '', - complaintType: '', - shortContentType: '', - imageFiles: null, -}; - -const ComplaintsSubmission: React.FC = (params) => { - const trainNo = params.trainNumber; - const trainInfo = exportSubwayInfoFromTrainNumber(trainNo); - - const dispatch = useDispatch(); - - const formRef = useRef(INIT_STATE); - const { mutate, status } = useComplaintsArticle(); - const { loading } = useAppSelector((state) => state.ui); - - const handleChangeImage = useCallback((image: File | null) => { - formRef.current.imageFiles = image; - }, []); - - const handleChangeContent = useCallback((targetValue: EditorState) => { - formRef.current.content = JSON.stringify(targetValue.toJSON()); - }, []); - - const handleChangeSelect = useCallback( - (type: string) => () => { - formRef.current.shortContentType = formatComplaintShortContentToEn(type) as string; - }, - [], - ); - - const handleSubmit = (e: FormEvent) => { - e.preventDefault(); - - if (!formRef.current.shortContentType) { - dispatch(addSnackBar({ message: `민원 유형을 선택해주세요.` })); - return; - } - - mutate({ - ...formRef.current, - trainNo, - subwayLineId: exportSubwayLineIdWithLineName(trainInfo?.lineName), - complaintType: formatComplaintTypeToEn(params?.slug) as string, - location: trainInfo?.roomNumber as string, - phoneNumber: '02-234-5678', - }); - }; - - return ( -
    -
    -
    - 지하철 정보 -
    - - {trainInfo?.lineName} {trainInfo?.roomNumber && `${trainInfo.roomNumber}번째 칸`} - -
    -
    -
    - 첨부 이미지 - -
    -
    -

    - {COMPLAINTS_ROOM_SERVICE_INFO[params?.slug]?.title} - * -

    - -
    -
    - 자세한 설명 - -
    -
    - -
    -
    -
    - ); -}; - -const ImageUpload = memo(({ handleChangeImage }: { handleChangeImage: (image: File | null) => void }) => { - const [image, setImage] = useState(null); - - const handleImageChange = (e: React.ChangeEvent) => { - setImage(e.target.files?.[0] as Nullable); - handleChangeImage(e.target.files?.[0] as Nullable); - }; - - const handleDeleteImage = () => { - setImage(null); - handleChangeImage(null); - }; - - return ( -
    - - - {image && ( -
    - - -
    - )} -
    - ); -}); - -const SelectComponent = memo( - ({ - selectList, - handleChangeSelect, - }: { - selectList: Record; - handleChangeSelect: (type: string) => () => void; - }) => { - const [current, setCurrent] = useState(''); - - const handleToggle = (type: string) => () => { - setCurrent(type); - handleChangeSelect(type)(); - - const element = document.getElementById(type); - if (element) { - element.scrollIntoView({ - behavior: 'smooth', - block: 'center', - }); - } - }; - - return ( -
    - {!isEmpty(selectList) && - Object.entries(selectList).map(([key, val]) => ( - - ))} -
    - ); - }, -); - -const wrap = [f.fullWidth, f.flexColumn, { padding: '14px 0 120px 0' }]; - -const section: [CSSObject[], ({ typography }: Theme) => CSSObject] = [ - f.flexColumn, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - position: 'relative', - marginBottom: '32px', - - '& > span, & > p': { - color: '#ffffff', - fontSize: fontSize[14], - fontWeight: fontWeight[600], - marginBottom: '14px', - paddingLeft: '20px', - }, - - '& > div.editor-container': { - width: 'calc(100% - 40px)', - margin: '0 auto', - }, - }), -]; - -const buttonGroup: [CSSObject[], CSSObject, CSSObject] = [ - f.flexAlignCenter, - f.overflowScroll, - { - paddingLeft: '20px', - paddingRight: '20px', - overflowY: 'hidden', - overflowX: 'scroll', - }, -]; - -const toggleBtn = - (isActive: boolean) => - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.37)', - height: '32px', - borderRadius: '124px', - padding: '0 14px', - fontSize: fontSize[14], - width: 'max-content', - marginRight: '8px', - background: isActive ? 'rgb(196, 212, 252)' : 'inherit', - color: isActive ? '#141517' : '#9da5b6', - fontWeight: isActive ? fontWeight[600] : fontWeight[400], - }); - -const trainLabelsWrap = - (pointColor: CSSProperties['color']) => - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - display: 'flex', - alignItems: 'center', - width: '100%', - paddingLeft: '20px', - - '& > span': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '6px', - padding: '0 12px', - height: '30px', - color: gray[1000], - fontSize: fontSize[12], - fontWeight: fontWeight[500], - background: pointColor, - }, - }); - -const submitWrap: CSSObject[] = [ - f.fullWidth, - { - position: 'fixed', - bottom: 0, - left: '50%', - transform: 'translateX(-50%)', - background: '#141517', - padding: '16px 20px 24px', - }, -]; - -const submitBtn = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - padding: '0 14px', - fontSize: fontSize[14], - width: '100%', - height: '48px', - background: 'rgb(196, 212, 252)', - color: '#141517', - fontWeight: fontWeight[600], - borderRadius: '8px', -}); - -const imageBox = (disabled: boolean) => [ - f.flexAlignCenter, - f.fullWidth, - { - paddingLeft: '20px', - - '& > label': { - width: '40px', - height: '40px', - border: '1px solid rgb(196, 212, 252, 0.37)', - borderRadius: '8px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - opacity: disabled ? 0.4 : 1, - - '& > div': { - width: '18px', - height: '18px', - - '&>svg>path': { - stroke: '#9da5b6', - }, - }, - }, - }, -]; - -const realImage: CSSObject = { - position: 'relative', - width: '39px', - height: '39px', - borderRadius: '8px', - marginLeft: '8px', - - '& > img': { - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '8px', - }, - - '& > div': { - position: 'absolute', - top: '2px', - right: '2px', - - width: '18px', - height: '18px', - }, -}; - -export default ComplaintsSubmission; diff --git a/services/next.ahhachul.com/src/components/complaints/submission/index.ts b/services/next.ahhachul.com/src/components/complaints/submission/index.ts deleted file mode 100644 index 539911f70..000000000 --- a/services/next.ahhachul.com/src/components/complaints/submission/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as ComplaintsSubmission } from './Submission'; diff --git a/services/next.ahhachul.com/src/components/error-management/AssertionError.ts b/services/next.ahhachul.com/src/components/error-management/AssertionError.ts deleted file mode 100644 index d962209ae..000000000 --- a/services/next.ahhachul.com/src/components/error-management/AssertionError.ts +++ /dev/null @@ -1,13 +0,0 @@ -export class AssertionError extends Error { - static assert(condition: boolean, message: string): asserts condition { - if (!condition) { - throw new AssertionError(message); - } - } -} - -export const useErrorBoundary_this_hook_should_be_called_in_ErrorBoundary_props_children = - 'useErrorBoundary: this hook should be called in ErrorBoundary.props.children'; - -export const useErrorBoundaryGroup_this_hook_should_be_called_in_ErrorBoundary_props_children = - 'useErrorBoundaryGroup: this hook should be called in ErrorBoundary.props.children'; diff --git a/services/next.ahhachul.com/src/components/error-management/ErrorBoundary.tsx b/services/next.ahhachul.com/src/components/error-management/ErrorBoundary.tsx deleted file mode 100644 index 4f3512950..000000000 --- a/services/next.ahhachul.com/src/components/error-management/ErrorBoundary.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import { Interpolation, Theme } from '@emotion/react'; -import React, { - Component, - type ErrorInfo, - type FunctionComponent, - type PropsWithChildren, - type ReactNode, - createContext, - forwardRef, - useContext, - useImperativeHandle, - useMemo, - useRef, - useState, -} from 'react'; - -import type { ConstructorType, Nullable } from '@/src/types'; -import { - AssertionError, - useErrorBoundary_this_hook_should_be_called_in_ErrorBoundary_props_children, -} from './AssertionError'; -import { ErrorBoundaryGroupContext } from './ErrorBoundaryGroup'; -import ErrorDefault from './ErrorDefault'; -import { hasResetKeysChanged } from './utils'; - -export interface ErrorBoundaryFallbackProps { - /** - * when ErrorBoundary catch error, you can use this error - */ - error: TError; - /** - * when you want to reset caught error, you can use this reset - */ - reset: () => void; - - fallbackCss?: Interpolation; -} - -type ShouldCatchCallback = (error: Error) => boolean; -type ShouldCatch = ConstructorType | ShouldCatchCallback | boolean; -const checkErrorBoundary = (shouldCatch: ShouldCatch, error: Error) => { - if (typeof shouldCatch === 'boolean') { - return shouldCatch; - } - if (shouldCatch.prototype instanceof Error) { - return error instanceof shouldCatch; - } - return (shouldCatch as ShouldCatchCallback)(error); -}; - -export type ErrorBoundaryProps = PropsWithChildren<{ - /** - * an array of elements for the ErrorBoundary to check each render. If any of those elements change between renders, then the ErrorBoundary will reset the state which will re-render the children - */ - resetKeys?: unknown[]; - /** - * when ErrorBoundary is reset by resetKeys or fallback's props.reset, onReset will be triggered - */ - onReset?(): void; - /** - * when ErrorBoundary catch error, onError will be triggered - */ - onError?(error: Error, info: ErrorInfo): void; - /** - * when ErrorBoundary catch error, fallback will be render instead of children - */ - fallback?: ReactNode | FunctionComponent; - /** - * @experimental This is experimental feature. - * @default true - */ - /** - * when ErrorBoundary catch error, fallback will be render instead of children - */ - fallbackCss?: Interpolation; - shouldCatch?: ShouldCatch | [ShouldCatch, ...ShouldCatch[]]; -}>; - -type ErrorBoundaryState = - | { isError: true; error: TError } - | { isError: false; error: null }; - -const initialErrorBoundaryState: ErrorBoundaryState = { - isError: false, - error: null, -}; -class BaseErrorBoundary extends Component { - static getDerivedStateFromError(error: Error): ErrorBoundaryState { - return { isError: true, error }; - } - - state = initialErrorBoundaryState; - - componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState) { - const { isError } = this.state; - const { resetKeys } = this.props; - if (isError && prevState.isError && hasResetKeysChanged(prevProps.resetKeys, resetKeys)) { - this.reset(); - } - } - - componentDidCatch(error: Error, info: ErrorInfo) { - if (error instanceof AssertionError) { - throw error; - } - const { shouldCatch = true } = this.props; - const isCatch = Array.isArray(shouldCatch) - ? shouldCatch.some((shouldCatch) => checkErrorBoundary(shouldCatch, error)) - : checkErrorBoundary(shouldCatch, error); - if (!isCatch) { - throw error; - } - this.props.onError?.(error, info); - } - - reset = () => { - this.props.onReset?.(); - this.setState(initialErrorBoundaryState); - }; - - render() { - const { children, fallback, fallbackCss } = this.props; - const { isError, error } = this.state; - - let childrenOrFallback = children; - - if (isError) { - if (typeof fallback === 'undefined') { - if (process.env.NODE_ENV === 'development') { - console.error('ErrorBoundary requires a defined fallback'); - } - } - - if (typeof fallback === 'function') { - const FallbackComponent = fallback; - childrenOrFallback = ; - } else { - childrenOrFallback = ; - } - } - - return ( - - {childrenOrFallback} - - ); - } -} - -export const ErrorBoundary = Object.assign( - (() => { - const ErrorBoundary = forwardRef<{ reset(): void }, ErrorBoundaryProps>( - ({ fallback, fallbackCss, children, onError, onReset, resetKeys, ...props }, ref) => { - const group = useContext(ErrorBoundaryGroupContext) ?? { resetKey: 0 }; - const baseErrorBoundaryRef = useRef(null); - useImperativeHandle(ref, () => ({ - reset: () => baseErrorBoundaryRef.current?.reset(), - })); - - return ( - - {children} - - ); - }, - ); - - if (process.env.NODE_ENV === 'development') { - ErrorBoundary.displayName = 'ErrorBoundary'; - } - - return ErrorBoundary; - })(), - { - Consumer: ({ children }: { children: (errorBoundary: ReturnType) => ReactNode }) => - children(useErrorBoundary()), - }, -); - -const ErrorBoundaryContext = createContext void } & ErrorBoundaryState>>(null); -if (process.env.NODE_ENV === 'development') { - ErrorBoundaryContext.displayName = 'ErrorBoundaryContext'; -} - -export const useErrorBoundary = () => { - const [state, setState] = useState>({ - isError: false, - error: null, - }); - if (state.isError) { - throw state.error; - } - - const errorBoundary = useContext(ErrorBoundaryContext); - AssertionError.assert( - errorBoundary != null && !errorBoundary.isError, - useErrorBoundary_this_hook_should_be_called_in_ErrorBoundary_props_children, - ); - - return useMemo( - () => ({ - setError: (error: TError) => setState({ isError: true, error }), - }), - [], - ); -}; diff --git a/services/next.ahhachul.com/src/components/error-management/ErrorBoundaryGroup.tsx b/services/next.ahhachul.com/src/components/error-management/ErrorBoundaryGroup.tsx deleted file mode 100644 index 1fb8a6c1f..000000000 --- a/services/next.ahhachul.com/src/components/error-management/ErrorBoundaryGroup.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { - type PropsWithChildren, - type ReactNode, - createContext, - useContext, - useEffect, - useMemo, - useReducer, -} from 'react'; - -import { useIsChanged } from '@/src/hooks'; -import { - AssertionError, - useErrorBoundaryGroup_this_hook_should_be_called_in_ErrorBoundary_props_children, -} from './AssertionError'; -import { increase } from './utils'; - -export const ErrorBoundaryGroupContext = createContext<{ reset: () => void; resetKey: number } | undefined>(undefined); -if (process.env.NODE_ENV === 'development') { - ErrorBoundaryGroupContext.displayName = 'ErrorBoundaryGroupContext'; -} - -export interface ErrorBoundaryGroupProps extends PropsWithChildren { - /** - * If you use blockOutside as true, ErrorBoundaryGroup will protect multiple ErrorBoundaries as its children from external ErrorBoundaryGroup's resetKey - * @default false - */ - blockOutside?: boolean; -} - -export const ErrorBoundaryGroup = Object.assign( - (() => { - const ErrorBoundaryGroup = ({ blockOutside = false, children }: ErrorBoundaryGroupProps) => { - const [resetKey, reset] = useReducer(increase, 0); - const parentGroup = useContext(ErrorBoundaryGroupContext); - const isParentGroupResetKeyChanged = useIsChanged(parentGroup?.resetKey); - - useEffect(() => { - if (!blockOutside && isParentGroupResetKeyChanged) { - reset(); - } - }, [isParentGroupResetKeyChanged, blockOutside]); - - const value = useMemo(() => ({ reset, resetKey }), [resetKey]); - - return {children}; - }; - if (process.env.NODE_ENV === 'development') { - ErrorBoundaryGroup.displayName = 'ErrorBoundaryGroup'; - } - - return ErrorBoundaryGroup; - })(), - { - Consumer: ({ - children, - }: { - children: (errorBoundaryGroup: ReturnType) => ReactNode; - }) => children(useErrorBoundaryGroup()), - }, -); - -export const useErrorBoundaryGroup = () => { - const group = useContext(ErrorBoundaryGroupContext); - AssertionError.assert( - group != null, - useErrorBoundaryGroup_this_hook_should_be_called_in_ErrorBoundary_props_children, - ); - return useMemo( - () => ({ - /** - * When you want to reset multiple ErrorBoundaries as children of ErrorBoundaryGroup, You can use this reset - */ - reset: group.reset, - }), - [group.reset], - ); -}; diff --git a/services/next.ahhachul.com/src/components/error-management/ErrorDefault.tsx b/services/next.ahhachul.com/src/components/error-management/ErrorDefault.tsx deleted file mode 100644 index 4cde47b84..000000000 --- a/services/next.ahhachul.com/src/components/error-management/ErrorDefault.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { ErrorBoundaryFallbackProps } from './ErrorBoundary'; -import { errWrap } from './style'; - -function ErrorDefault({ error, fallbackCss, reset }: ErrorBoundaryFallbackProps) { - console.log('error:', error); - - return ( -
    -

    - 네트워크 오류가 발생했습니다. -
    - 다시 시도해 주세요. -

    - -
    - ); -} - -export default ErrorDefault; diff --git a/services/next.ahhachul.com/src/components/error-management/QueryErrorBoundary.tsx b/services/next.ahhachul.com/src/components/error-management/QueryErrorBoundary.tsx deleted file mode 100644 index 24cdc8fb5..000000000 --- a/services/next.ahhachul.com/src/components/error-management/QueryErrorBoundary.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { useQueryErrorResetBoundary } from '@tanstack/react-query'; -import { type ComponentPropsWithoutRef, type ComponentRef, forwardRef } from 'react'; -import { ErrorBoundary } from './ErrorBoundary'; - -export const QueryErrorBoundary = forwardRef< - ComponentRef, - ComponentPropsWithoutRef ->(({ onReset, ...props }, resetRef) => { - const { reset } = useQueryErrorResetBoundary(); - - return ( - { - onReset?.(); - reset(); - }} - ref={resetRef} - /> - ); -}); -if (process.env.NODE_ENV === 'development') { - QueryErrorBoundary.displayName = 'QueryErrorBoundary'; -} diff --git a/services/next.ahhachul.com/src/components/error-management/index.ts b/services/next.ahhachul.com/src/components/error-management/index.ts deleted file mode 100644 index 948c50618..000000000 --- a/services/next.ahhachul.com/src/components/error-management/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './AssertionError'; -export * from './ErrorBoundary'; -export * from './ErrorBoundaryGroup'; -export * from './QueryErrorBoundary'; diff --git a/services/next.ahhachul.com/src/components/error-management/style.ts b/services/next.ahhachul.com/src/components/error-management/style.ts deleted file mode 100644 index e2dd95ca9..000000000 --- a/services/next.ahhachul.com/src/components/error-management/style.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -const errWrap = ({ color: { gray }, typography: { fontSize, fontWeight, lineHeight } }: Theme): CSSObject => ({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - width: '100%', - - '& > p': { - color: '#c9cedc', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: lineHeight[150], - marginBottom: '16px', - textAlign: 'center', - }, - - '& > button': { - padding: '10px 18px', - color: gray[1000], - background: '#27CDC8', - fontSize: '14px', - fontWeight: fontWeight[700], - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '44px', - }, -}); - -export { errWrap }; diff --git a/services/next.ahhachul.com/src/components/error-management/utils/hasResetKeysChanged.ts b/services/next.ahhachul.com/src/components/error-management/utils/hasResetKeysChanged.ts deleted file mode 100644 index 787b0d41f..000000000 --- a/services/next.ahhachul.com/src/components/error-management/utils/hasResetKeysChanged.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const hasResetKeysChanged = (a: unknown[] = [], b: unknown[] = []) => - a.length !== b.length || a.some((item, index) => !Object.is(item, b[index])); diff --git a/services/next.ahhachul.com/src/components/error-management/utils/increase.ts b/services/next.ahhachul.com/src/components/error-management/utils/increase.ts deleted file mode 100644 index 66f7b8c62..000000000 --- a/services/next.ahhachul.com/src/components/error-management/utils/increase.ts +++ /dev/null @@ -1 +0,0 @@ -export const increase = (prev: number) => prev + 1; diff --git a/services/next.ahhachul.com/src/components/error-management/utils/index.ts b/services/next.ahhachul.com/src/components/error-management/utils/index.ts deleted file mode 100644 index d9414db20..000000000 --- a/services/next.ahhachul.com/src/components/error-management/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './increase'; -export * from './hasResetKeysChanged'; diff --git a/services/next.ahhachul.com/src/components/home/Dashboard/Dashboard.tsx b/services/next.ahhachul.com/src/components/home/Dashboard/Dashboard.tsx deleted file mode 100644 index 9f266e4d8..000000000 --- a/services/next.ahhachul.com/src/components/home/Dashboard/Dashboard.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import { title } from './style'; - -const Dashboard = () => { - return ( -
    -

    this is Dashboard page (after user loggedin)

    -
    - ); -}; - -export default Dashboard; diff --git a/services/next.ahhachul.com/src/components/home/Dashboard/index.ts b/services/next.ahhachul.com/src/components/home/Dashboard/index.ts deleted file mode 100644 index 449ae5672..000000000 --- a/services/next.ahhachul.com/src/components/home/Dashboard/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Dashboard'; diff --git a/services/next.ahhachul.com/src/components/home/Dashboard/style.ts b/services/next.ahhachul.com/src/components/home/Dashboard/style.ts deleted file mode 100644 index d0ed18514..000000000 --- a/services/next.ahhachul.com/src/components/home/Dashboard/style.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -const title = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[16], - fontWeight: fontWeight[600], -}); - -export { title }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/Landing.tsx b/services/next.ahhachul.com/src/components/home/Landing/Landing.tsx deleted file mode 100644 index 8d56c5a58..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/Landing.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -import HeaderSection from './headerSection/HeaderSection'; -// import StationTalksSummary from './stationTalksSummary/StationTalksSummary'; -// import MyShortestPathList from './myShortestPathList/MyShortestPathList'; -import Subway from './subway/Subway'; -// import SubwayLineTalksSummary from './subwayLineTalksSummary/SubwayLineTalksSummary'; - -const Landing = () => { - return ( -
    - - - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} - {/* */} -
    - ); -}; - -export default Landing; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/BeginningBottomSheet.tsx b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/BeginningBottomSheet.tsx deleted file mode 100644 index b059dcaf3..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/BeginningBottomSheet.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { BottomSheet } from '@/src/components/ui'; - -import IconClose from '@/src/static/icons/system/IconClose'; -import { top, content } from './style'; - -interface Props { - isShowing: boolean; - onClose: VoidFunction; -} - -function BeginningBottomSheet(props: Props) { - return ( - -
    - 쿠폰이 도착했어요! 🎉 - -
    -
    -
    - ); -} - -export default BeginningBottomSheet; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/index.ts b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/index.ts deleted file mode 100644 index b0fafdda8..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './BeginningBottomSheet'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/style.ts b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/style.ts deleted file mode 100644 index 1ce4daa4a..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/beginning/style.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const top = [ - f.fullWidth, - f.flexAlignCenter, - f.posRel, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - height: '55px', - backgroundColor: gray[1000], - justifyContent: 'space-between', - padding: '0 24px', - - '& > span': { - color: gray[50], - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '22.54px', - letterSpacing: '-1%', - }, - - '& > div > svg > g > path': { - fill: gray[50], - }, - }), -]; - -const content = [ - f.fullWidth, - f.flexColumn, - { - height: '375px', - backgroundColor: '#3477fe', - padding: '0 34px', - }, -]; - -export { top, content }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/index.ts b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/index.ts deleted file mode 100644 index 3e7f421d2..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as BeginningBottomSheet } from './beginning'; -export { default as MobileTicketBottomSheet } from './mobileTicket'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/MobileTicketBottomSheet.tsx b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/MobileTicketBottomSheet.tsx deleted file mode 100644 index cd65f7857..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/MobileTicketBottomSheet.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import { BottomSheet } from '@/src/components/ui'; - -import { top, card } from './style'; -import IconClose from '@/src/static/icons/system/IconClose'; - -interface Props { - isShowing: boolean; - onClose: VoidFunction; -} - -function MobileTicketBottomSheet(props: Props) { - return ( - -
    -
    - 수도권 노선도 - -
    -
    -
    -
    -
    - - ); -} - -export default MobileTicketBottomSheet; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/index.ts b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/index.ts deleted file mode 100644 index 2a075d74b..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './MobileTicketBottomSheet'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/style.ts b/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/style.ts deleted file mode 100644 index d215e3cb3..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/bottomSheet/mobileTicket/style.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const top = [ - f.fullWidth, - f.flexAlignCenter, - f.posRel, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - height: '55px', - backgroundColor: '#3477FE', - justifyContent: 'space-between', - padding: '0 24px', - - '& > span': { - color: gray[1000], - fontSize: fontSize['18'], - fontWeight: fontWeight[700], - lineHeight: '22.54px', - letterSpacing: '-1%', - }, - - '& > div:last-of-type': { - position: 'absolute', - backgroundColor: '#3477FE', - height: '120px', - top: '55px', - left: 0, - width: '100%', - }, - }), -]; - -const card = [ - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - width: 'calc(100% - 48px)', - height: '338px', - position: 'absolute', - top: 'calc(55px + 4px)', - left: '50%', - transform: 'translateX(-50%)', - padding: '30px 26px', - backgroundColor: gray[1000], - borderRadius: '10px', - boxShadow: '0px 5px 13px 0px #292A2D0F', - }), -]; - -export { top, card }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/filter/Filter.tsx b/services/next.ahhachul.com/src/components/home/Landing/filter/Filter.tsx deleted file mode 100644 index 132ca7e4a..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/filter/Filter.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -// import { useFlow } from 'stackflow'; -import IconChevron from '@/src/static/icons/system/IconChevron'; - -import { wrap } from './style'; - -const Filter = () => { - // const { push } = useFlow(); - - return ( -
    -
      -
    • 2
    • -
    • 1
    • -
    • 9
    • -
    - -
    - ); -}; - -export default Filter; diff --git a/services/next.ahhachul.com/src/components/home/Landing/filter/style.ts b/services/next.ahhachul.com/src/components/home/Landing/filter/style.ts deleted file mode 100644 index a5bf1eac4..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/filter/style.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [ - f.sideGutter, - f.fullWidth, - ({ - color: { black, gray }, - typography: { fontSize, fontWeight }, - layout: { - radii: { full }, - }, - }: Theme) => ({ - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - backgroundColor: black[100], - marginBottom: '28px', - - '& > ul ': { - display: 'flex', - alignItems: 'center', - }, - - '& > ul > li': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - width: '32px', - height: '32px', - borderRadius: full, - marginRight: '12px', - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[600], - letterSpacing: '-0.2px', - - '&:first-of-type': { - background: 'linear-gradient(263deg, #2EE477 0%, #50BEFD 100%)', - }, - - '&:nth-of-type(2)': { - backgroundColor: '#025FAC', - }, - - '&:last-of-type': { - backgroundColor: '#B3A58A', - }, - }, - - '& > button': { - display: 'flex', - alignItems: 'center', - color: '#E6E6E6', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - }, - }), -]; - -export { wrap }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/headerSection/HeaderSection.tsx b/services/next.ahhachul.com/src/components/home/Landing/headerSection/HeaderSection.tsx deleted file mode 100644 index 02259ceae..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/headerSection/HeaderSection.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from 'react'; -import { useDispatch } from 'react-redux'; -import { useRouter } from 'next/router'; -import IconCar from '@/src/static/icons/system/IconCar'; -import IconDndBar from '@/src/static/icons/system/IconDndBar'; -import IconHeart from '@/src/static/icons/system/IconHeart'; -import IconSecondhand from '@/src/static/icons/system/IconSecondhand'; -import { addSnackBar } from '@/src/stores/ui'; - -import { btn_wrap, wrap } from './style'; -import { PATH } from '@/src/data'; - -const HeaderSection = () => { - const { push } = useRouter(); - const routeToBlindDate = () => dispatch(addSnackBar({ message: '준비중이에요' })); - const routeToAllServices = () => push(PATH.allServices); - - const dispatch = useDispatch(); - const clickSecondhand = () => dispatch(addSnackBar({ message: '준비중이에요' })); - - return ( -
    -
      - - - - -
    -
    - ); -}; - -export default HeaderSection; diff --git a/services/next.ahhachul.com/src/components/home/Landing/headerSection/index.ts b/services/next.ahhachul.com/src/components/home/Landing/headerSection/index.ts deleted file mode 100644 index 2fc4355b6..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/headerSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as HeaderSection } from './HeaderSection'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/headerSection/style.ts b/services/next.ahhachul.com/src/components/home/Landing/headerSection/style.ts deleted file mode 100644 index 57eb2b4ac..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/headerSection/style.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Theme, CSSObject } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { background } }: Theme) => ({ - paddingTop: '14px', - backgroundColor: background[50], - }), -]; - -const btn_wrap: [CSSObject, CSSObject, CSSObject[], ({ color }: Theme) => CSSObject] = [ - f.fullWidth, - f.overflowScroll, - f.flexAlignCenter, - ({ color: { whiteAlpha }, typography: { fontWeight, lineHeight } }: Theme) => ({ - paddingLeft: '20px', - paddingRight: '20px', - overflowX: 'scroll', - overflowY: 'hidden', - - '& > button': { - flexShrink: 0, - height: '36px', - backgroundColor: whiteAlpha[50], - borderRadius: '8px', - display: 'flex', - alignItems: 'center', - marginRight: '8px', - padding: '0 12px', - - '& > span': { - color: '#ffffff', - fontSize: '13px', - fontWeight: fontWeight[500], - lineHeight: lineHeight[133], - letterSpacing: '-0.4px', - marginLeft: '6px', - }, - - '& > div': { - width: '14px', - height: '14px', - - '& > svg > path': { - fill: '#ffffff', - stroke: '#ffffff', - }, - }, - }, - }), -]; - -export { wrap, btn_wrap }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/index.ts b/services/next.ahhachul.com/src/components/home/Landing/index.ts deleted file mode 100644 index 72f74aed8..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Landing'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/myShortestPathList/MyShortestPathList.tsx b/services/next.ahhachul.com/src/components/home/Landing/myShortestPathList/MyShortestPathList.tsx deleted file mode 100644 index 0140f7abd..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/myShortestPathList/MyShortestPathList.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Theme } from '@emotion/react'; -import React, { useEffect, useState } from 'react'; -import { DragDropContext, Draggable, Droppable, DropResult } from 'react-beautiful-dnd'; -import IconDndBar from '@/src/static/icons/system/IconDndBar'; -import { f } from '@/src/styles'; - -const MyShortestPathList = () => { - const [items, setItems] = useState([ - { id: 'abcbasd', content: '사당 > 판교' }, - { id: '13ekdsad', content: '녹양 > 교대' }, - { id: 'xczzxcz3', content: '동묘 > 과천정부청사' }, - { id: 'asd2ccs4', content: '성복 > 강남' }, - ]); - - const onDragEnd = ({ source, destination }: DropResult) => { - if (!destination) return; - - const _items = JSON.parse(JSON.stringify(items)); - const [targetItem] = _items.splice(source.index, 1); - _items.splice(destination.index, 0, targetItem); - setItems(_items); - }; - - const [enabled, setEnabled] = useState(false); - - useEffect(() => { - const animation = requestAnimationFrame(() => setEnabled(true)); - - return () => { - cancelAnimationFrame(animation); - setEnabled(false); - }; - }, []); - - if (!enabled) return null; - - return ( - // 오늘의 최단 경로 zip - - - {(provided) => ( -
    - {items.map((item, index) => ( - - {(provided) => ( -
    -
    - {item.content} - -
    -
    - )} -
    - ))} - {provided.placeholder} -
    - )} -
    -
    - ); -}; - -const listWrap = [f.fullWidth, f.sideGutter, f.flexColumn, { margin: '24px 0' }]; - -const itemWrap = [ - f.fullWidth, - f.flexAlignCenter, - f.flexJustifySpaceBetween, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - height: '32px', - - '& > span': { - color: '#c9cedc', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - }, - }), -]; - -export default MyShortestPathList; diff --git a/services/next.ahhachul.com/src/components/home/Landing/myTicket/MyTicket.tsx b/services/next.ahhachul.com/src/components/home/Landing/myTicket/MyTicket.tsx deleted file mode 100644 index 5f12aa5bb..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/myTicket/MyTicket.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react'; -// import { useFlow } from 'stackflow'; - -import IconMyTicket from '@/src/static/icons/system/IconMyTicket'; -import IconBack from '@/src/static/icons/system/IconBack'; -import { - wrap, - head_section, - title, - tickets_wrap, - info_wrap, - card_wrap, - card_top, - times, - lesson_name, - package_info, - ticket_name, - card_bottom, - labels, - bannerIcon, -} from './style'; - -import IconGoto from '@/src/static/icons/mocks/IconGoto'; - -const MyTicket = () => { - // const { push } = useFlow(); - - // const onClickToRegister = () => push('MyTicket', {}); - - return ( -
    -
    -

    - - - 보유한 티켓 1 - -

    - -
    -
    -
    - - 아하철 피트니스 -

    이용중

    -
    -
    -
    -
    -
    - 그룹수업 - · - 아하철 GX -
    -
    -

    VIP를 위한 여름 다이어트

    -
    - 2024.02.26 - - - 2024.08.26 -
    - 아하철과 고투가 함께하는 다이어트 필승 공략 티켓 -
    -
    -
    - 213일 남음 - 주간 2회 남음 -
    - -
    -
    -
    -
    - ); -}; - -export default MyTicket; diff --git a/services/next.ahhachul.com/src/components/home/Landing/myTicket/index.ts b/services/next.ahhachul.com/src/components/home/Landing/myTicket/index.ts deleted file mode 100644 index d028974e0..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/myTicket/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as MyTicket } from './MyTicket'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/myTicket/style.ts b/services/next.ahhachul.com/src/components/home/Landing/myTicket/style.ts deleted file mode 100644 index 755a74c94..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/myTicket/style.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - paddingTop: '32px', - paddingBottom: '24px', - backgroundColor: gray[200], - }), -]; - -const head_section = [ - f.sideGutter, - f.flex1, - f.fullWidth, - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - justifyContent: 'space-between', - marginBottom: '16px', - gap: '12px', - - '& button': { - height: '28px', - padding: '0 10px', - display: 'flex', - alignItems: 'center', - justfyContent: 'center', - color: '#949DB2', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: '20px', - letterSpacing: '-0.2px', - }, - }), -]; - -const title = [ - f.flexAlignCenter, - ({ color: { gray, purple }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - span: { - color: gray[200], - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - marginLeft: '6px', - - b: { - color: purple[100], - marginLeft: '4px', - }, - }, - }), -]; - -const tickets_wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - padding: '24px', - backgroundColor: gray[200], - }), -]; - -const info_wrap = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginBottom: '20px', - - '& div': { - marginRight: '8px', - }, - - '& span': { - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[600], - lineHeight: '24px', - letterSpacing: '-0.4px', - marginRight: '8px', - }, - - '& p': { - color: '#63ffab ', - fontSize: fontSize[12], - fontWeight: fontWeight[600], - height: '24px', - padding: '0 10px', - border: '1px solid rgba(255, 255, 255, 0.30)', - borderRadius: '18px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - lineHeight: '14px', - letterSpacing: '-0.2px', - }, - }), -]; - -const card_wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - backgroundColor: gray[1000], - borderRadius: '8px', - overflow: 'hidden', - }), -]; - -const card_top = [ - f.fullWidth, - f.flexColumn, - { - padding: '20px', - }, -]; - -const package_info = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - marginBottom: '9.5px', - - '& > div > span': { - color: '#727B8E', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: '18px', - letterSpacing: '-0.2px', - marginRight: '2px', - }, - }), -]; - -const lesson_name = [ - f.flexColumn, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - marginBottom: '8px', - - color: gray[50], - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '24px', - letterSpacing: '-0.4px', - }), -]; - -const times = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginBottom: '8px', - - '& span': { - color: '#004FEC', - fontSize: fontSize[14], - fontWeight: fontWeight[700], - lineHeight: '20px', - letterSpacing: '-0.2px', - marginRight: '6px', - }, - }), -]; - -const ticket_name = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - marginRight: '50px', - height: '26px', - width: 'max-content', - color: '#b0b0b0', - fontSize: fontSize[11], - fontWeight: fontWeight[600], - lineHeight: '14px', - letterSpacing: '-0.2px', - padding: '0 9px', - borderRadius: '3px', - border: '1px solid rgba(176, 176, 176, 0.40)', - overflow: 'hidden', - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - }), -]; - -const card_bottom = [ - f.flexAlignCenter, - { - justifyContent: 'space-between', - height: '54px', - padding: '0 20px', - backgroundColor: '#f5f8fd', - }, -]; - -const labels = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - gap: '8px', - - '& > span': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '50px', - border: `1px solid #e1e9f5`, - height: '30px', - padding: '0 10px', - backgroundColor: gray[1000], - color: '#004FEC', - fontSize: fontSize[12], - fontWeight: fontWeight[600], - lineHeight: '14px', - letterSpacing: '-0.2px', - }, - }), -]; - -const bannerIcon = { - '& svg': { width: '20px', height: '20px', transform: 'rotate(180deg)', '& path': { stroke: '#83a7e1' } }, -}; - -export { - wrap, - head_section, - title, - tickets_wrap, - info_wrap, - card_wrap, - card_top, - times, - lesson_name, - package_info, - ticket_name, - card_bottom, - labels, - bannerIcon, -}; diff --git a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/RecommendTicket.tsx b/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/RecommendTicket.tsx deleted file mode 100644 index 608d83cc2..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/RecommendTicket.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -// import { useFlow } from 'stackflow'; - -import { wrap, title, card_wrap, info_wrap, package_badge, package_name, package_price } from './style'; -// import mockProfile from '@/src/static/img/mocks/mock2.png'; -import IconRecommendTicket from '@/src/static/icons/system/IconRecommendTicket'; -import IconPackage from '@/src/static/icons/system/IconPackage'; - -const RecommendTicket = () => { - // const { push } = useFlow(); - - // const onClickToRegister = () => push('MyTicket', {}); - - return ( -
    -

    - 추천 아하철 티켓 -

    -
    - {/* */} -
    -
    - -

    패키지

    -
    - 아하철 + 코레일 패키지 -
    - 60,000원 - 100,000원 -
    -
    -
    -
    - ); -}; - -export default RecommendTicket; diff --git a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/index.ts b/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/index.ts deleted file mode 100644 index 549d52767..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as RecommendTicket } from './RecommendTicket'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/style.ts b/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/style.ts deleted file mode 100644 index 273d931bc..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/recommendTicket/style.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [ - f.sideGutter, - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme) => ({ - paddingTop: '16px', - paddingBottom: '24px', - backgroundColor: gray[200], - }), -]; - -const title = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginBottom: '12px', - - b: { - color: gray[1000], - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - marginLeft: '6px', - }, - }), -]; - -const card_wrap = [ - f.fullWidth, - f.flexAlignCenter, - ({ layout: { shadows } }: Theme): CSSObject => ({ - padding: '16px', - border: `2px solid #949DB2`, - borderRadius: '8px', - boxShadow: shadows.md, - - '& img': { - width: '36%', - aspectRatio: '1 / 1', - borderRadius: '8px', - marginRight: '12px', - }, - }), -]; - -const info_wrap = [ - f.flex1, - f.flexColumn, - { - padding: '6px 0', - }, -]; - -const package_badge = [ - f.flexAlignCenter, - ({ typography: { fontSize } }: Theme): CSSObject => ({ - marginBottom: '6px', - - '& svg': { - marginRight: '4px', - }, - - '& p': { - color: '#4C5874', - fontSize: fontSize[11], - lineHeight: '14px', - letterSpacing: '-0.2px', - }, - }), -]; - -const package_name = ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginBottom: '24px', - - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[500], - lineHeight: '20px', - letterSpacing: '-0.4px', -}); - -const package_price = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - '& span:first-of-type': { - marginRight: '4px', - - color: '#004FEC', - fontSize: fontSize[16], - fontWeight: fontWeight[700], - lineHeight: '24px', - letterSpacing: '-0.4px', - }, - - '& span:last-of-type': { - color: '#949DB2', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: '21px', - letterSpacing: '-0.2px', - textDecorationLine: 'line-through', - }, - }), -]; - -export { wrap, title, card_wrap, info_wrap, package_badge, package_name, package_price }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/RequestPayment.tsx b/services/next.ahhachul.com/src/components/home/Landing/requestPayment/RequestPayment.tsx deleted file mode 100644 index 7fc7b1b57..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/RequestPayment.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -// import { useFlow } from 'stackflow'; - -import { theme } from '@/src/styles'; -import IconRequestPayment from '@/src/static/icons/system/IconRequestPayment'; -import { Divider } from '@/src/components/ui'; -import { wrap, title, card_wrap, info_wrap, payment_info, resson_info, bpay, paymentIcon } from './style'; -import IconPayment from '@/src/static/icons/system/IconPayment'; -// import mockProfile from '@/src/static/img/mocks/photo.png'; - -const RequestPayment = () => { - // const { replace } = useFlow(); - - // const onClickToRegister = () => replace('Lost', {}, { animate: false }); - - return ( -
    -

    - 보상이 도착했어요! -

    -
    -
    -
    - {/* */} -
    - 수락요청 - 정미리 회원님 -
    -

    D-7

    -
    - -
    - 유실물 - · - 아이폰 15 프로 512GB 실버 -
    -
    - - -
    -
    - ); -}; - -export default RequestPayment; diff --git a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/index.ts b/services/next.ahhachul.com/src/components/home/Landing/requestPayment/index.ts deleted file mode 100644 index 7ac1472c0..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as RequestPayment } from './RequestPayment'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/style.ts b/services/next.ahhachul.com/src/components/home/Landing/requestPayment/style.ts deleted file mode 100644 index 30cf116f2..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/requestPayment/style.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [ - f.sideGutter, - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme) => ({ - paddingTop: '16px', - paddingBottom: '24px', - backgroundColor: gray[200], - }), -]; - -const title = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginBottom: '12px', - - b: { - color: gray[1000], - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - marginLeft: '6px', - }, - }), -]; - -const card_wrap = [ - f.fullWidth, - f.flexColumn, - ({ layout: { shadows } }: Theme): CSSObject => ({ - padding: '24px', - border: `2px solid #949DB2`, - borderRadius: '8px', - boxShadow: shadows.md, - }), -]; - -const info_wrap = [ - f.fullWidth, - f.flexColumn, - f.flexAlignCenter, - { - marginBottom: '20px', - }, -]; - -const payment_info = [ - f.fullWidth, - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - position: 'relative', - height: '48px', - marginBottom: '12px', - - '& img': { - width: '48px', - height: '48px', - borderRadius: '50%', - marginRight: '10px', - overflow: 'hidden', - }, - - '& div': { - display: 'flex', - flexDirection: 'column', - - '& span:first-of-type': { - color: '#738dc2', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: '18px', - letterSpacing: '-0.2px', - }, - - '& span:last-of-type': { - color: '#3a3c53', - fontSize: fontSize[18], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - }, - }, - - '& p': { - position: 'absolute', - top: '50%', - right: 0, - transform: 'translateY(-50%)', - - fontSize: fontSize[14], - fontWeight: fontWeight[700], - lineHeight: '18px', - letterSpacing: '-0.2px', - - height: '26px', - color: '#ff546c', - backgroundColor: 'rgba(255, 84, 108, 0.10)', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - padding: '0 10px', - borderRadius: '6px', - }, - }), -]; - -const resson_info = [ - f.fullWidth, - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - marginTop: '12px', - color: '#4C5874', - fontSize: fontSize[16], - fontWeight: fontWeight[500], - lineHeight: '24px', - letterSpacing: '-0.4px', - }), -]; - -const bpay = [ - f.fullWidth, - f.flexAlignCenter, - f.flexJustifyCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - height: '48px', - borderRadius: '8px', - color: gray[1000], - backgroundColor: '#004FEC', - - fontSize: fontSize[16], - fontWeight: fontWeight[700], - lineHeight: '24px', - letterSpacing: '-0.4px', - - span: { - marginLeft: '10px', - }, - }), -]; - -const paymentIcon = { - '& > svg': { - width: '24px', - height: '24px', - }, -}; - -export { wrap, title, card_wrap, info_wrap, payment_info, resson_info, bpay, paymentIcon }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/StationTalksSummary.tsx b/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/StationTalksSummary.tsx deleted file mode 100644 index a12c0246b..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/StationTalksSummary.tsx +++ /dev/null @@ -1,143 +0,0 @@ -// import 'swiper/css/bundle'; -// import 'swiper/css/free-mode'; -// import 'swiper/css/navigation'; - -import React from 'react'; -// import { -// Swiper, -// SwiperSlide, -// // type SwiperClass, -// } from 'swiper/react'; - -// import { useFlow } from 'stackflow'; -// import { Flex } from '@ahhachul/react-components-layout'; - -import { wrap, title, headSection } from './style'; - -// import mockImg1 from '@/src/static/img/mocks/mock2.png'; -// import mockImg2 from '@/src/static/img/mocks/mock4.png'; -// import mockImg3 from '@/src/static/img/mocks/mock5.jpg'; -// import { LazyLoadImage } from 'react-lazy-load-image-component'; -// import IconHeart from '@/src/static/icons/system/IconHeart'; -// import IconComment from '@/src/static/icons/system/IconComment'; -// import { CSSObject } from '@emotion/react'; - -const StationTalksSummary = () => { - // const { push } = useFlow(); - - // const routeToStationTalks = () => push('StationTalks', {}); - // const navigateToDetail = () => - // push('CommunityDetail', { articleId: (Math.floor(Math.random() * 1000) + 1).toString() }); - - // const [swiperInstance, setSwiper] = useState(undefined); - // const [isBeginning, setIsBeginning] = useState(true); - // const [isEnd, setIsEnd] = useState(false); - - return ( -
    -
    -

    - 건대입구 이모저모 -

    - -
    - {/* - {new Array(7).fill('').map((_, i) => ( - - - - ))} - */} -
    - ); -}; - -// const SlideItem = ({ navigateToDetail, index }) => { -// const getRandomNickname = () => { -// const list = [ -// '갯나리', -// '특삼', -// '미호밍', -// '플락', -// '도롱뇽', -// '큐이', -// '선바', -// '김츠유', -// '수련수련', -// '한동숙', -// '짬바', -// '리끼', -// '따효니', -// '아리사', -// '녹두로', -// '룩삼', -// ]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// const getRandomContent = () => { -// const list = [ -// '일주일에 충치치료, 사랑니(매복)2개나 뺄려하다니 내가 미쳤지 근데 원래 이렇게 멍한 느낌이 드나? 아파서 말을 못하겠다', -// '뷰뷰이 오늘 아침 8시에 퇴근하고 갤에 솔 공략 올리고 킬게용 아마 21:00~23:00 이시간쯤에 뱅종 할듯 상태 별로면 근말 할수도 있음..', -// '[광고] 약탈폭풍 wow+배틀로얄 신규출시', -// '몬스터 꺼버렸자나 한잔해', -// '토요일에 볼래요?', -// '정규 1등 찍은 효신좌 근황', -// '반갑습니다', -// '치과에서 이빨을 조지고 온 나', -// '광운대행 진짜 화난다', -// '늦은 밤엔 공룡의 광증이 깊어집니다.', -// 'zzzㅋㅋㅋㅋㅋㅋㅋㅋ오 오랜만이누 ㅎㅇㅎㅇㅋㅋㅋㅋㅋㅋ', -// '정말 오랜만이야', -// '나락쇼', -// '롤체 시즌11 에메 간다', -// '나랑 영화볼래요?', -// '출근하다가 빵사가는데...', -// ]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// const getRandomImg = () => { -// const list = [mockImg1, mockImg2, mockImg3]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// return ( -//
  • -//
    -// -// {getRandomNickname()} -// -// -// -//

    {getRandomContent()}

    -//
    -// -//
    -//
    -// -//
    -// 3 -//
    -//
    -// 10 -//
    -//
    -//
    -//
  • -// ); -// }; - -export default StationTalksSummary; diff --git a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/index.ts b/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/index.ts deleted file mode 100644 index 7efc60683..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as StationTalksSummary } from './StationTalksSummary'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/style.ts b/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/style.ts deleted file mode 100644 index 894f33dc3..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/stationTalksSummary/style.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -import { f } from '@/src/styles'; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme) => ({ - paddingTop: '32px', - paddingBottom: '32px', - backgroundColor: gray[200], - }), -]; - -const headSection = [ - f.sideGutter, - f.flex1, - f.fullWidth, - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - marginBottom: '16px', - - '& button': { - height: '28px', - padding: '0 10px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - color: '#949DB2', - fontSize: fontSize[12], - fontWeight: fontWeight[500], - lineHeight: '20px', - letterSpacing: '-0.2px', - }, - }), -]; - -const title = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - span: { - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - marginLeft: '6px', - }, - }), -]; - -const ul = [ - f.fullWidth, - f.flexAlignCenter, - { - padding: '32px 20px', - backgroundColor: '#1A191A', - }, -]; - -const card_wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - padding: '20px 16px', - backgroundColor: gray[50], - borderRadius: '12px', - border: '1px solid #242524', - }), -]; - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#c9cedc', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const content = [ - f.truncate2, - ({ typography: { fontSize } }: Theme) => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - }), -]; - -const img: CSSObject = { - width: '80px', - minWidth: '80px', - height: '80px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'relative', - marginLeft: '16px', - - '& > img': { - position: 'absolute', - top: 0, - right: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '6px', - }, -}; - -const label = ({ typography: { fontSize } }: Theme): CSSObject => ({ - display: 'flex', - alignItems: 'center', - marginRight: '8px', - - '& > span': { - fontSize: fontSize[12], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - marginLeft: '4px', - }, -}); - -const btn = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - justifyContent: 'center', - - height: '34px', - flexShrink: 0, - color: '#949DB2', - fontSize: fontSize[14], - fontWeight: fontWeight[600], - lineHeight: '18px', - letterSpacing: '-0.2px', - padding: '0 12px', - borderRadius: '6px', - border: `1px solid #eaeaea`, - }), -]; - -export { wrap, headSection, title, ul, card_wrap, nickname, time, content, img, label, btn }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/style.ts b/services/next.ahhachul.com/src/components/home/Landing/style.ts deleted file mode 100644 index d0ed18514..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/style.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -const title = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[16], - fontWeight: fontWeight[600], -}); - -export { title }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/Subway.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/Subway.tsx deleted file mode 100644 index 4aaf21e28..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/Subway.tsx +++ /dev/null @@ -1,482 +0,0 @@ -import React, { Suspense, useEffect, useState } from 'react'; -import { css, CSSObject, keyframes } from '@emotion/react'; -import styled from '@emotion/styled'; -import Skeleton from 'react-loading-skeleton'; -import { useRouter } from 'next/router'; -import 'react-loading-skeleton/dist/skeleton.css'; - -import { filterWrap, sectionWrap, title, wrap } from './style'; -import Train from './train/Train'; -import IconFetch from '@/src/static/icons/system/IconFetch'; -import IconInfo from '@/src/static/icons/system/IconInfo'; -import IconChevron from '@/src/static/icons/system/IconChevron'; -import { ErrorComponent } from '@/src/components'; -import { useGetTrainsRealTimeInfo } from '@/src/queries/train/useGetTrainsRealTimeInfo'; -import { exportHexColorWidthLineName, formatCurrentTrainArrivalTypeToKo } from '@/src/utils/export'; -import { AnimatePresence, motion } from 'framer-motion'; -import TrainError from './train/TrainError'; -import { defaultFadeInVariants } from '@/src/data/motion'; -import { PATH } from '@/src/data'; -import Timer from './Timer'; - -const Subway = () => { - const { push } = useRouter(); - const routeToSubwayMap = () => push(PATH.subwayMap); - const routeToSubwayTimeTable = () => push(PATH.subwayTimeTable); - - const [subwayLineIds, setSubwayLineIds] = useState(['2', '7']); - const initialSelectedData = { - // 건대입구 stationId - stationId: '121', - subwayLineId: subwayLineIds[0], - }; - - const [selectedIdx, setSelectedIdx] = useState(0); - const swapArrayElements = () => { - let copy = [...subwayLineIds]; - let temp = copy[0]; - copy[0] = copy[1]; - copy[1] = temp; - setSubwayLineIds(copy); - }; - - const handleSelectedTrainIndex = (idx: number) => () => { - setSelectedIdx(idx); - }; - - const [refetchBtnClicked, setRefetchBtnClicked] = useState(false); - - const { data, isSuccess, isLoading, refetch } = useGetTrainsRealTimeInfo(initialSelectedData); - - useEffect(() => { - if (isSuccess || subwayLineIds) { - setSelectedIdx(0); - } - }, [isSuccess, subwayLineIds]); - - return ( -
    -

    - 이효범님, - 현재 열차정보와 혼잡도를 알려드려요! -

    -
    -
      -
    • - -
    • -
    • - -
    • -
    - -
    -
    - - - - 건대입구 - - - {!isLoading && ( - - {data?.trainRealTimes?.[selectedIdx]?.nextStationDirection} - - )} - - - -
    - - - <> - {!isLoading ? ( - <> - - {formatCurrentTrainArrivalTypeToKo( - data?.trainRealTimes?.[selectedIdx]?.currentTrainArrivalCode, - )} - - {data?.trainRealTimes?.[selectedIdx]?.destinationStationDirection} - - - ) : ( - - )} - - - -
    - - - - {!isLoading ? ( - - {data?.trainRealTimes?.[selectedIdx]?.trainNum && - `전동차 ${data?.trainRealTimes?.[selectedIdx]?.trainNum}`} - - ) : ( - - - - )} - -
    - 여유 -
      -
    • -
    • -
    • -
    • -
    - 혼잡 - -
    -
    -
    - }> - - } - > - {data?.trainRealTimes?.[selectedIdx]?.trainNum ? ( - - ) : ( - - )} - - -
    -
    -
    - - - {!isLoading ? ( - <> - {data?.trainRealTimes?.map((item, idx) => ( -
  • - - {item.destinationStationDirection} - - - - -
  • - ))} - - ) : ( - <> - {new Array(4).fill('').map((_, idx) => ( -
  • - -
  • - ))} - - )} -
    -
    - -
    -
    -
    -
    -
    - ); -}; - -const SubwayInfo = styled.div` - position: relative; - width: 100%; - min-height: 180px; - border-radius: 20px; - background-color: #2e2e2e; - min-height: 390.586px; -`; - -const ThickBorderArea = styled.div` - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 25px; - border-top-left-radius: 20px; - border-top-right-radius: 20px; -`; - -const StationLabel = styled.span` - font-size: 16px; - font-weight: 600; - position: absolute; - top: 50%; - left: 27px; - display: flex; - align-items: center; - justify-content: center; - height: 36px; - border: 3px solid #20b154; - border-radius: 21px; - padding: 8px 32px; - background-color: #ffffff; - transform: translateY(-50%); -`; - -const DirectionLabel = styled(motion.span)` - font-size: 14px; - font-weight: 600; - position: absolute; - top: 50%; - left: 157px; - transform: translateY(-50%); - color: #ffffff; -`; - -const ContentArea = styled.div` - position: relative; - display: flex; - flex-direction: column; - justify-content: flex-end; - padding: 54px 20px 24px 20px; -`; - -const TrainInfoContainer = styled.div` - display: flex; - flex-direction: column; - row-gap: 4px; -`; - -const TrainInfoTop = styled.div` - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - margin-bottom: 12px; - - & > span { - font-size: 12px; - color: #b4b4b4; - } - - & > div { - display: flex; - align-items: center; - - & > ul { - display: grid; - min-width: 40px; - grid-template-columns: repeat(auto-fit, minmax(10px, 1fr)); - gap: 2px; - margin: 0 4px; - - & > li { - width: 10px; - height: 10px; - border-radius: 50%; - - &:first-of-type { - background-color: #a2d471; - } - - &:nth-of-type(2) { - background-color: #ffc44d; - } - - &:nth-of-type(3) { - background-color: #ff884d; - } - - &:last-of-type { - background-color: #ee4d4d; - } - } - } - - & > span { - font-size: 12px; - color: #ffffff; - } - - & > button { - display: flex; - align-items: center; - justify-content: center; - font-size: 12px; - color: #ffffff; - width: 10px; - height: 10px; - padding: 2px; - border-radius: 50%; - position: relative; - top: 1px; - - color: #ffffff; - background-color: #000000; - } - } -`; - -const TopInfo = styled(motion.div)` - display: flex; - align-items: center; - position: relative; - - & > b { - font-size: 16px; - font-weight: bold; - margin-right: 6px; - color: #28b2ff; - } - - & > span { - font-size: 14px; - color: #ffffff; - } -`; - -const BottomInfo = styled(motion.ul)` - width: 100%; - display: grid; - grid-template-columns: repeat(2, 1fr); - justify-items: center; - column-gap: 24px; - row-gap: 12px; - padding-top: 24px; - border-top: 1px solid rgba(210, 210, 210, 0.09); - - & > li { - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - width: 100%; - transition: opacity 0.2s ease; - - &:active { - opacity: 0.7; - } - - & > li > b:first-of-type { - font-weight: bold; - } - - & > b { - color: #ffffff; - font-size: 14px; - } - - & > span { - color: #28b2ff; - font-size: 14px; - } - } -`; - -const allTrainsBtnCss = css` - font-size: 16px; - font-weight: 600; - display: flex; - justify-content: center; - align-items: center; - color: #ffffff; - width: 100%; - height: 44px; - border-radius: 10px; - background: #434343; - margin-top: 28px; -`; - -const rotateAni = keyframes` - 0% { transform: translateY(-50%) rotate(0deg); } - 100% { transform: translateY(-50%) rotate(360deg); } -`; - -const refetchBtnCss = (isClicked: boolean): CSSObject => ({ - position: 'absolute', - top: '50%', - right: 0, - transform: 'translateY(-50%)', - animation: isClicked ? `${rotateAni} 0.8s forwards` : 'none', - - '& > div > svg': { - width: '18px', - height: '18px', - }, -}); - -export default Subway; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/Timer.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/Timer.tsx deleted file mode 100644 index be35f0c5b..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/Timer.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React, { memo } from 'react'; -import { useTimer } from 'react-timer-hook'; - -import { randomSecond } from '@/src/data/random'; - -const Timer = ({ expiryTime }: { expiryTime: number }) => { - const minuteToSecond = expiryTime * randomSecond; - const expiryTimestamp = new Date(); - expiryTimestamp.setSeconds(expiryTimestamp.getSeconds() + minuteToSecond); - - const { seconds, minutes } = useTimer({ - expiryTimestamp, - autoStart: true, - onExpire: () => console.warn('onExpire called'), - }); - - if (minutes === 0 && seconds < 30) return <>진입; - - return ( - <> - {minutes === 0 ? '' : `${minutes}분`} - {seconds === 0 ? '' : `${seconds}초`} - - ); -}; - -export default memo(Timer); diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/style.ts b/services/next.ahhachul.com/src/components/home/Landing/subway/style.ts deleted file mode 100644 index e81891a5e..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/style.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const sectionWrap = [ - f.sideGutter, - f.fullWidth, - f.flexColumn, - ({ color: { background } }: Theme) => ({ - paddingTop: '24px', - backgroundColor: background[50], - }), -]; - -const title = ({ color: { text }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - color: text[50], - fontSize: fontSize[18], - fontWeight: fontWeight[500], - lineHeight: '32px', - letterSpacing: '-0.4px', - marginBottom: '40px', - - b: { - fontWeight: fontWeight[700], - }, - - 'b:first-of-type': { - display: 'block', - }, -}); - -const filterWrap = [ - f.fullWidth, - ({ - color: { background, text }, - typography: { fontSize, fontWeight }, - layout: { - radii: { full }, - }, - }: Theme) => ({ - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - backgroundColor: background[50], - marginBottom: '28px', - - '& > ul ': { - display: 'flex', - alignItems: 'center', - }, - - '& > ul > li': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - width: '32px', - height: '32px', - borderRadius: full, - marginRight: '12px', - - '& > button': { - color: text[50], - fontSize: fontSize[16], - fontWeight: fontWeight[600], - letterSpacing: '-0.2px', - }, - - '&:first-of-type': { - background: 'linear-gradient(263deg, #2EE477 0%, #50BEFD 100%)', - }, - }, - - '& > button': { - display: 'flex', - alignItems: 'center', - color: '#E6E6E6', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - }, - }), -]; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { background } }: Theme) => ({ - paddingBottom: '24px', - backgroundColor: background[50], - }), -]; - -const loading: CSSObject = { - position: 'absolute', - left: '50%', - top: '50%', - transform: 'translate(-50%, -50%)', - paddingTop: '36px', - opacity: 0.07, -}; - -export { sectionWrap, title, filterWrap, wrap, loading }; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/train/Box.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/train/Box.tsx deleted file mode 100644 index f8e5ce186..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/train/Box.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { css } from '@emotion/react'; -import styled from '@emotion/styled'; -import type { SVGProps } from 'react'; - -interface TrainEachSvgProps extends SVGProps { - /** - * @description fill 색상 값입니다. `isUsingFill`로 사용하지 않을 수 있습니다. - * @default `currentColor` - */ - color?: string; - roomNumber?: number; -} - -const TrainEachSvg = ({ color, roomNumber }: TrainEachSvgProps) => { - return {roomNumber}; -}; - -const EachBox = styled.div` - ${({ color }) => css` - font-size: 14px; - font-weight: 500; - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 115%; - border-radius: 6px; - background-color: ${color}; - color: #ffffff; - box-shadow: 0px 3px 1px 0px #585858; - `} -`; -export default TrainEachSvg; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/train/SVG.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/train/SVG.tsx deleted file mode 100644 index 45b8803dc..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/train/SVG.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useMemo } from 'react'; - -interface TrainSvgProps { - width?: number; -} - -function TrainSvg({ width = 295 }: TrainSvgProps) { - const d = useMemo( - () => - `M5.27831 7.78309C6.31333 3.23054 10.3608 0 15.0295 0H293C294.105 0 ${width} 0.895431 ${width} 2V29C295 30.1046 294.105 31 293 31H3.7586C1.83335 31 0.406436 29.2123 0.833246 27.3349L5.27831 7.78309Z`, - [width], - ); - - return ( - - - - - ); -} - -export default TrainSvg; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/train/Train.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/train/Train.tsx deleted file mode 100644 index deb11daf8..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/train/Train.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import styled, { CSSObject } from '@emotion/styled'; -import { AnimatePresence, useIsomorphicLayoutEffect, motion } from 'framer-motion'; -import { useRef, useState } from 'react'; -import throttle from 'lodash-es/throttle'; -import TrainEachBox from './Box'; -import TrainSvg from './SVG'; -import { useGetTrainCongestionInfo } from '@/src/queries/train/useGetTrainCongestionInfo'; -import { formatCongestionColorToHexColor } from '@/src/utils/export'; -import { defaultFadeInVariants } from '@/src/data/motion'; - -interface TrainProps { - trainNo: string; - subwayLineId: string; - calculatedCrowdRatings?: string[]; -} - -function Train({ trainNo, subwayLineId }: TrainProps) { - const containerRef = useRef(null); - const [containerWidth, setContainerWidth] = useState(0); - - const { data } = useGetTrainCongestionInfo({ trainNo, subwayLineId }); - - useIsomorphicLayoutEffect(() => { - const detectionViewport = () => { - const fullWidth = (containerRef.current as HTMLElement)?.getBoundingClientRect().width; - setContainerWidth(fullWidth); - }; - - detectionViewport(); - - const handleDetectViewport = throttle(detectionViewport, 1000); - window.addEventListener('resize', handleDetectViewport); - - return () => { - window.removeEventListener('resize', handleDetectViewport); - }; - }, []); - - return ( - - - {containerWidth && ( -
      - {data?.congestions?.map((item, i) => ( -
    • - - - {item?.congestionColor === 'SMOOTH' && ( - - - - - - 추천 - - )} - -
    • - ))} -
    - )} -
    - ); -} - -const Container = styled.div` - display: flex; - align-items: center; - justify-content: center; - position: relative; - width: 100%; - - & > ul { - display: grid; - grid-template-columns: repeat(10, 1fr); - column-gap: 4px; - width: calc(100% - 32px); - position: absolute; - top: 4px; - - & > li { - width: 100%; - height: 26px; - position: relative; - left: 8px; - } - } -`; - -const tooltip: CSSObject = { - marginTop: '10px', - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - gap: '4px', - color: '#ffffff', - fontSize: '12px', - letterSpacing: '-0.2px', -}; - -export default Train; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subway/train/TrainError.tsx b/services/next.ahhachul.com/src/components/home/Landing/subway/train/TrainError.tsx deleted file mode 100644 index 038d4cd46..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subway/train/TrainError.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { ErrorBoundaryFallbackProps } from '@/src/components/error-management'; - -const TrainError = ({ error, reset }: ErrorBoundaryFallbackProps) => { - console.log('error:', error); - - return ( -
    -

    네트워크 오류가 발생했습니다.

    - -
    - ); -}; - -const errWrap = ({ color: { gray }, typography: { fontSize, fontWeight, lineHeight } }: Theme): CSSObject => ({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - position: 'absolute', - width: '100%', - top: '20px', - left: '50%', - transform: 'translateX(-50%)', - - '& > p': { - color: '#c9cedc', - fontSize: fontSize[14], - fontWeight: fontWeight[500], - lineHeight: lineHeight[150], - marginBottom: '8px', - textAlign: 'center', - }, - - '& > button': { - color: gray[1000], - fontSize: '14px', - fontWeight: fontWeight[700], - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - }, -}); - -export default TrainError; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/SubwayLineTalksSummary.tsx b/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/SubwayLineTalksSummary.tsx deleted file mode 100644 index 5b7f9bf9a..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/SubwayLineTalksSummary.tsx +++ /dev/null @@ -1,143 +0,0 @@ -// import 'swiper/css/bundle'; -// import 'swiper/css/free-mode'; -// import 'swiper/css/navigation'; - -import React from 'react'; -// import { -// Swiper, -// SwiperSlide, -// // type SwiperClass, -// } from 'swiper/react'; - -// import { useFlow } from 'stackflow'; -// import { Flex } from '@ahhachul/react-components-layout'; - -import { wrap, title, headSection } from './style'; - -// import mockImg1 from '@/src/static/img/mocks/mock2.png'; -// import mockImg2 from '@/src/static/img/mocks/mock4.png'; -// import mockImg3 from '@/src/static/img/mocks/mock5.jpg'; -// import { LazyLoadImage } from 'react-lazy-load-image-component'; -// import IconHeart from '@/src/static/icons/system/IconHeart'; -// import IconComment from '@/src/static/icons/system/IconComment'; -// import { CSSObject } from '@emotion/react'; - -const SubwayLineTalksSummary = () => { - // const { push } = useFlow(); - - // const routeToStationTalks = () => push('SubwayLineTalks', {}); - // const navigateToDetail = () => - // push('CommunityDetail', { articleId: (Math.floor(Math.random() * 1000) + 1).toString() }); - - // const [swiperInstance, setSwiper] = useState(undefined); - // const [isBeginning, setIsBeginning] = useState(true); - // const [isEnd, setIsEnd] = useState(false); - - return ( -
    -
    -

    - 2호선 게시판 -

    - -
    - {/* - {new Array(7).fill('').map((_, i) => ( - - - - ))} - */} -
    - ); -}; - -// const SlideItem = ({ navigateToDetail, index }) => { -// const getRandomNickname = () => { -// const list = [ -// '갯나리', -// '특삼', -// '미호밍', -// '플락', -// '도롱뇽', -// '큐이', -// '선바', -// '김츠유', -// '수련수련', -// '한동숙', -// '짬바', -// '리끼', -// '따효니', -// '아리사', -// '녹두로', -// '룩삼', -// ]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// const getRandomContent = () => { -// const list = [ -// '일주일에 충치치료, 사랑니(매복)2개나 뺄려하다니 내가 미쳤지 근데 원래 이렇게 멍한 느낌이 드나? 아파서 말을 못하겠다', -// '뷰뷰이 오늘 아침 8시에 퇴근하고 갤에 솔 공략 올리고 킬게용 아마 21:00~23:00 이시간쯤에 뱅종 할듯 상태 별로면 근말 할수도 있음..', -// '[광고] 약탈폭풍 wow+배틀로얄 신규출시', -// '몬스터 꺼버렸자나 한잔해', -// '토요일에 볼래요?', -// '정규 1등 찍은 효신좌 근황', -// '반갑습니다', -// '치과에서 이빨을 조지고 온 나', -// '광운대행 진짜 화난다', -// '늦은 밤엔 공룡의 광증이 깊어집니다.', -// 'zzzㅋㅋㅋㅋㅋㅋㅋㅋ오 오랜만이누 ㅎㅇㅎㅇㅋㅋㅋㅋㅋㅋ', -// '정말 오랜만이야', -// '나락쇼', -// '롤체 시즌11 에메 간다', -// '나랑 영화볼래요?', -// '출근하다가 빵사가는데...', -// ]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// const getRandomImg = () => { -// const list = [mockImg1, mockImg2, mockImg3]; -// const randomIdx = Math.floor(Math.random() * list.length - 1) + 1; -// return list[randomIdx]; -// }; - -// return ( -//
  • -//
    -// -// {getRandomNickname()} -// -// -// -//

    {getRandomContent()}

    -//
    -// -//
    -//
    -// -//
    -// 3 -//
    -//
    -// 10 -//
    -//
    -//
    -//
  • -// ); -// }; - -export default SubwayLineTalksSummary; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/index.ts b/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/index.ts deleted file mode 100644 index 725aaaf5c..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as SubwayLineTalksSummary } from './SubwayLineTalksSummary'; diff --git a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/style.ts b/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/style.ts deleted file mode 100644 index 894f33dc3..000000000 --- a/services/next.ahhachul.com/src/components/home/Landing/subwayLineTalksSummary/style.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -import { f } from '@/src/styles'; - -const wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme) => ({ - paddingTop: '32px', - paddingBottom: '32px', - backgroundColor: gray[200], - }), -]; - -const headSection = [ - f.sideGutter, - f.flex1, - f.fullWidth, - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - marginBottom: '16px', - - '& button': { - height: '28px', - padding: '0 10px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - color: '#949DB2', - fontSize: fontSize[12], - fontWeight: fontWeight[500], - lineHeight: '20px', - letterSpacing: '-0.2px', - }, - }), -]; - -const title = [ - f.flexAlignCenter, - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - span: { - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[700], - lineHeight: '28px', - letterSpacing: '-0.4px', - marginLeft: '6px', - }, - }), -]; - -const ul = [ - f.fullWidth, - f.flexAlignCenter, - { - padding: '32px 20px', - backgroundColor: '#1A191A', - }, -]; - -const card_wrap = [ - f.fullWidth, - f.flexColumn, - ({ color: { gray } }: Theme): CSSObject => ({ - justifyContent: 'space-between', - padding: '20px 16px', - backgroundColor: gray[50], - borderRadius: '12px', - border: '1px solid #242524', - }), -]; - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#c9cedc', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const content = [ - f.truncate2, - ({ typography: { fontSize } }: Theme) => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - }), -]; - -const img: CSSObject = { - width: '80px', - minWidth: '80px', - height: '80px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'relative', - marginLeft: '16px', - - '& > img': { - position: 'absolute', - top: 0, - right: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '6px', - }, -}; - -const label = ({ typography: { fontSize } }: Theme): CSSObject => ({ - display: 'flex', - alignItems: 'center', - marginRight: '8px', - - '& > span': { - fontSize: fontSize[12], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - marginLeft: '4px', - }, -}); - -const btn = [ - f.flexAlignCenter, - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - justifyContent: 'center', - - height: '34px', - flexShrink: 0, - color: '#949DB2', - fontSize: fontSize[14], - fontWeight: fontWeight[600], - lineHeight: '18px', - letterSpacing: '-0.2px', - padding: '0 12px', - borderRadius: '6px', - border: `1px solid #eaeaea`, - }), -]; - -export { wrap, headSection, title, ul, card_wrap, nickname, time, content, img, label, btn }; diff --git a/services/next.ahhachul.com/src/components/home/RegisterCenter/RegisterCenter.tsx b/services/next.ahhachul.com/src/components/home/RegisterCenter/RegisterCenter.tsx deleted file mode 100644 index bad5856bd..000000000 --- a/services/next.ahhachul.com/src/components/home/RegisterCenter/RegisterCenter.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { Layout } from '@/src/components/layout'; -import { title } from './style'; - -const RegisterCenter = () => { - return ( - -
    -

    this is 나만의 역 등록 page

    -
    -
    - ); -}; - -export default RegisterCenter; diff --git a/services/next.ahhachul.com/src/components/home/RegisterCenter/index.ts b/services/next.ahhachul.com/src/components/home/RegisterCenter/index.ts deleted file mode 100644 index 196b013a6..000000000 --- a/services/next.ahhachul.com/src/components/home/RegisterCenter/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './RegisterCenter'; diff --git a/services/next.ahhachul.com/src/components/home/RegisterCenter/style.ts b/services/next.ahhachul.com/src/components/home/RegisterCenter/style.ts deleted file mode 100644 index 0d61307a8..000000000 --- a/services/next.ahhachul.com/src/components/home/RegisterCenter/style.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -const title = ({ - color: { - scale: { gray }, - }, - typography: { fontSize, fontWeight }, -}: Theme): CSSObject => ({ - color: gray[1000], - fontSize: fontSize[16], - fontWeight: fontWeight[600], -}); - -export { title }; diff --git a/services/next.ahhachul.com/src/components/home/SubwayMap/MapSvg.tsx b/services/next.ahhachul.com/src/components/home/SubwayMap/MapSvg.tsx deleted file mode 100644 index 43e6a66fb..000000000 --- a/services/next.ahhachul.com/src/components/home/SubwayMap/MapSvg.tsx +++ /dev/null @@ -1,3189 +0,0 @@ -import React from 'react'; -import { f } from '@/src/styles'; - -const SVG = ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1 - -2 - -7 - - -1 - -1 - -수인 -분당 - -공항 -철도 - -인천 - 1 -인천 -동인천 -도원 -도화 -간석 -동암 -백운 -부평 -부개 -송내 -중동 -부천 -역곡 -온수 -오류동 -개봉 -구일 -구로 -독산 -금천구청 -석수 -관악 -안양 -명학 -금정 -군포 -당정 -의왕 -성균관대 -화서 -세류 -수원 -광명 -가산 -디지털단지 -신도림 -신길 -대림 -문래 -당산 -합정 -망원 -홍대입구 -대화 -주엽 -신촌 -이대 -아현 -충정로 -도림천 -신정네거리 -까치산 -양천구청 -영등포 -영등포구청 -대방 -마포 -공덕 -애오개 -노량진 -용산 -남영 -효창공원앞 -서울역 -시청 -을지로 - 입구 -을지로3가 -을지로4가 -종각 -종로3가 -종로5가 -동대문 -동대문 -역사문화공원 -동묘앞 -신설동 -신당 -상왕십리 -용두 -신답 -한양대 -용답 -뚝섬 -서울숲 -압구정 -로데오 -구의 -강변 -잠실나루 -잠실새내 -삼성 -선릉 -역삼 -양재 -강남 -서초 -방배 -사당 -낙성대 -봉천 -신림 -신대방 -구로 -디지털단지 -서울대 -입구 -교대 -종합운동장 -잠실 -석촌 -송파 -오금 -성수 -건대입구 -왕십리 -제기동 -청량리 -회기 -외대앞 -석계 -태릉입구 -화랑대 -봉화산 -신내 -광운대 -월계 -녹천 -창동 -당고개 -방학 -도봉 -도봉산 -망월사 -회룡 -의정부 -가능 -녹양 -양주 -덕계 -덕정 -지행 -동두천중앙 -보산 -동두천 -소요산 -신이문 -소사 -주안 -제물포 - - - - - - - -청라국제도시 -검단오류 -검단사거리 -왕길 - - - - -완정 - -독정 - -검바위 - -아시아드경기장 - -서구청 - -가정 - -가정중앙시장 - -석남 -서부여성회관 - -인천가좌 - -가재울 - -주안국가산단 - -시민공원 - -석바위시장 - -석천사거리 - -모래내시장 - -만수 - -남동구청 - -인천대공원 - -운연 - -영종 - -운서 - -공항화물청사 -인천공항1터미널 - -인천공항2터미널 - - - - - -소새울 - -시흥대야 - -신천 - -신현 - -시흥시청 - -시흥능곡 - -선부 -원곡 - -달미 - - -원시 - - - - - - - - - - - - - - - - - -병점 -서동탄 -세마 - - -오산대 - -오산 - -진위 - -송탄 - -서정리 - -지제 - -평택 - -성환 - -직산 - -두정 - -천안 - -봉명 - -쌍용 - -아산 - -배방 - -온양 - 온천 - -신창 - - - - - -방화 - -개화산 -김포공항 -계양 -검암 - -개화 - -신방화 -마곡나루 - -양천향교 - -가양 - -증미 - -등촌 - -염창 - -신목동 - -선유도 - -국회 -의사당 -여의도 - -샛강 -노들 - -흑석 - -구반포 - -신반포 - -사평 - -신논현 -언주 -선정릉 - -삼성중앙 -강남구청 - -봉은사 - -한성백제 - -둔촌오륜 - -중앙보훈병원 - -삼전 - -송파나루 - -석촌고분 - -공항시장 - -송정 - -발산 - -우장산 - -화곡 - -신정 - -굴포천 -부평구청 - -귤현 - -박촌 - -계산 - -임학 - -작전 - -갈산 - -부평시장 - -동수 - -간석오거리 -인천시청 - -부평삼거리 - -예술회관 - -문학경기장 -인천터미널 - - -선학 - -동막 - -캠퍼스타운 - -테크노파크 -인천대입구 -지식정보단지 - - -센트럴파크 - -국제업무지구 - - -신연수 - -삼산체육관 - -상동 - -부천시청 - -신중동 - -춘의 - -부천종합운동장 -까치울 - -천왕 - -철산 -남구로 - -신풍 - -보라매 - -장승배기 - -상도 - -숭실대입구 -남성 - - -내방 -반포 - - -논현 -학동 - -청담 -어린이 - 대공원 - - -중곡 - -용마산 - -사가정 - -면목 -상봉 - -중화 -중랑 -망우 -양원 - -먹골 - -공릉 - -하계 - -중계 - -마들 - -수락산 - -장암 - -뚝섬유원지 - -신대방 -삼거리 -서울지방병무청 - - -목동 - -오목교 - -여의 -나루 - - -서대문 -광화문 - - - -양평 - -마장 -행당 -신금호 -청구 - - - -답십리 - -장한평 -군자 - -아차산 - -광나루 -천호 -강동 - - - -길동 - -둔촌동 - -거여 - -개롱 - -마천 - -방이 -올림픽 -공원 - -굽은다리 -명일 -암사 -강동 -구청 - - -문정 - -장지 -복정 - -산성 - -신흥 -모란 - -수진 -판교 -이매 - -삼동 - -경기광주 - -초월 - -곤지암 - -신둔도예촌 - -이천 - -부발 - -세종대왕릉 - -여주 - -남한산성입구 - -단대오거리 - -몽촌토성 - -고덕 - -상일동 - -미사 - -하남풍산 - - -영등포시장 - -마곡 - - - - - - - - -구룡 -개포동 -가천대 -태평 -대모산 -입구 - -한티 - - - - - -야탑 -서현 -수내 -오리 -정자 -미금 - - - - -죽전 - -보정 - -구성 - -신갈 -기흥 - -강남대 - -지석 - -어정 - -동백 - -초당 - -삼가 - -시청·용인대 - -명지대 - -김량장 - -운동장·송담대 - -고진 - -보평 - -둔전 - -전대·에버랜드 - -상갈 - - -청명 - -영통 - -망포 - -매탄권선 - -수원시청 -매교 - -사리 - -야목 - -달월 -월곶 -소래포구 -인천논현 -호구포 -남동인더스파크 -원인재 - - - - - -인하대 -송도 - - -숭의 - -신포 - -연수 - - -어천 - -고색 - -오목천 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -상계 -노원 - -쌍문 - -수유 - -미아 -길음 -정릉 -성신여대 - 입구 - -미아사거리 - -혜화 - -남태령 - -경마공원 -양재시민의숲 -청계산입구 - -대공원 - -인덕원 - -정부 -과천청사 - -과천 - -평촌 - -범계 - -산본 - -수리산 - -대야미 - -상록수 -한대앞 -중앙 -고잔 -초지 -안산 -신길온천 -정왕 -오이도 - -반월 - -선바위 - -명동 -삼각지 -신용산 -회현 -이촌 -동작 -이수(총신대입구) - - - -숙대 -입구 - - - -북한산보국문 - -솔샘 - -삼양 -사거리 - - -화계 -삼양 - -가오리 - -4.19민주묘지 -솔밭공원 - - -북한산우이 - -한성대입구 - - - - - - -발곡 - -범골 - -흥선 - -의정부 -중앙 -동오 - - -새말 - -경기도청북부청사 - -효자 - -곤제 -어룡 -송산 -탑석 - - - - -의정부시청 - -경전철의정부 - - - - - - - - - - - - -1 - -금릉 - -운정 - -야당 - -일산 -풍산 -백마 -곡산 -능곡 -행신 - -강매 - -화전 - -수색 -가좌 - -신촌(경의선) - -서강대 - -금촌 - -월롱 - -파주 - -문산 -임진강 - - -정발산 - -마두 - -백석 -대곡 - -화정 - -원당 -원흥 -삼송 -지축 -구파발 -연신내 -불광 - - - -녹번 - -응암 -역촌 - -새절 - -증산 -디지털미디어시티 - -월드컵경기장 - -마포구청 - - -상수 - -광흥창 - -대흥 - -창신 - -이태원 - -녹사평 - -안암 -보문 -고려대 -월곡 -상월곡 - - - - - - -돌곶이 - -한강진 -버티고개 - - - -독바위 -구산 - - -홍제 - -무악재 - -독립문 - -경복궁 - -안국 -충무로 - -압구정 -신사 -잠원 -고속터미널 - -매봉 -도곡 - - - -동천 -성복 -수지구청 - - - -상현 - -광교중앙 - -광교 - -대치 - -학여울 - -경찰병원 - -대청 - - -동대입구 -약수 - -금호 -옥수 - -일원 -수서 -가락 -시장 - -남부터미널 - - - - -4 - -4 - -5 - -9 - -6 - -3 - -5 - -5 - -3 - -7 - -8 - -8 - -경강 - -9 - -경강 - -용인 - -경의 -중앙 - -서빙고 - -한남 - -응봉 - - -갈매 -별내 - - -퇴계원 - -사릉 - -금곡 - -평내호평 - -천마산 - -마석 - -대성리 - -청평 - -상천 - -가평 - -굴봉산 - -백양리 - -강촌 - -김유정 - -남춘천 - -춘천 - -구리 - -도농 - -양정 - -덕소 - -도심 - -팔당 - -운길산 - -양수 - -신원 - -국수 - -아신 - -오빈 - -양평 - -원덕 - -용문 - -지평 - - -경의 -중앙 - -경춘 - -경춘 - -신림 - -신림 - -수인 -분당 - -우이 -신설 - -공항 -철도 - -경의 -중앙 -서해 - -서해 - - -분당 - - -분당 - -김포 - -김포 -양촌 -구래 -마산 - - - -운양 -장기 - - -걸포북변 - -사우 - -풍무 - -고촌 - - -2 - -2 - -우이 -신설 - -의정부 - -의정부 - -인천 - 1 - -인천 - 2 - -인천 - 2 - -6 -101 -100 -102 -103 -104 -105 -106 -107 -108 -109 -110 -112 -709 -711 -712 -714 -715 -716 -718 -719 -721 -722 -723 -724 -726 -728 -729 -731 -733 -735 -737 -738 -739 -740 -741 -S403 - -보라매공원 -S405 - -보라매병원 -S406 - -당곡 -S407 - -서원 -S409 - -관악산 -S411 - -서울대벤처타운 -S410 -743 -745 -747 -광명사거리 - -749 -751 -753 -754 -755 -756 -757 -758 -산곡 - -760 -748 -115 -114 -117 -118 -121 -122 -125 -129 -131 -202 -207 -209 -210 -213 -214 -215 -217 -219 -221 -224 -225 -227 -228 -229 -231 -232 -235 -240 -241 -242 -134 -139 -142 -143 -144 -146 -S17 -원종 - -S14 -S18 -S19 -S20 -S22 -S23 -S24 -S25 -S27 -S28 -148 -149 -150 -151 -153 -154 -155 -157 -158 -159 -160 -마전 - -A08 -A09 - -A10 -A11 - -1 -309 -탄현 - -310 -311 -312 -313 -315 -316 -317 -318 -319 -320 -323 -324 -325 -326 -327 -328 -332 -334 -336 -338 -341 -343 -345 -346 -347 -348 -351 -409 -별내별가람 - -408 -오남 - -406 -진접 - -405 -410 -413 -414 -415 -416 -417 -419 -420 -424 -425 -427 -429 -434 -435 -D09 -D10 -436 -437 -438 -439 -440 -441 -442 -444 -445 -446 -447 -448 -513 -901 -903 -904 -906 -907 -908 -909 -910 -911 -912 -913 -918 -919 -921 -922 -924 -926 -928 -929 -931 -932 -934 -935 -937 -938 -514 -515 -516 -517 -519 -520 -521 -522 -524 -528 -530 -532 -610 -615 -613 -611 -616 -617 -619 -620 -621 -623 -624 -625 -629 -630 -631 -632 -637 -639 -640 -641 -642 -643 -646 -647 -533 -538 -539 -541 -542 -543 -545 -546 -549 -550 -810 -812 -813 -816 -818 -819 -822 -남위례 - -821 -823 -824 -825 -826 -K412 -K413 -K414 -K415 -K416 -K417 -K418 -K419 -K420 -551 -552 -553 -강일 - -554 -555 -556 -하남시청 - -557 -하남검단산 - -558 -527 -511 -510 - - -D14 -D15 -D16 -D17 -D18 -D19 -동춘 - -경인교대입구 - -K337 -K334 -운천 - -K336 -K333 -K331 -K330 -K329 -K328 -K327 -K320 -K319 -K318 -K317 -K313 -K112 -K113 -K115 -K122 -K123 -K124 -K125 -K126 -K127 -K128 -K129 -K130 -K131 -K132 -K133 -K134 -K135 -K136 -K137 -K138 -P314 -P123 -P124 -P125 -P126 -P127 -P128 -P129 -P130 -P131 -P132 -P133 -P134 -P135 -P136 -P137 -P138 -P139 -P140 -A071 -I201 -I202 -I203 -I204 -I205 -I206 -I208 -I209 -I210 -I211 -I212 -I214 -I215 -I216 -I217 -A072 -K211 -K212 -K216 -K218 -K219 -K220 -K223 -K224 -K226 -K228 -K229 -K232 -K233 -K234 -K235 -K236 -K238 -K239 -K240 -K241 -K242 -K243 -K244 -K246 -K247 -K248 -K249 -K250 -K259 -K260 -K261 -K262 -K263 -K264 -K266 -K267 -K269 -K270 -K271 -G100 -G101 -G102 -G103 -G104 -G105 -G106 -G107 -G108 -Y111 -Y112 -Y113 -Y114 -Y115 -Y116 -Y117 -Y118 -Y119 -Y120 -Y121 -Y122 -Y123 -Y124 -S110 -S111 -S112 -S113 -S114 -S115 -S116 -S117 -S118 -S119 -U110 -U112 -U113 -U114 -U115 -U117 -U118 -U119 -U120 -U121 -U122 -U123 -U124 -U125 -I111 -I112 -I113 -I114 -I115 -I116 -I117 -I119 -I121 -P143 -234-1 -234-2 -234-3 -P145 -P146 -P147 -P148 -P150 -P151 -P152 -P153 -P154 -P156 -P158 -P159 -P160 -P161 -P162 -P163 -P164 -P165 -P166 -P167 -P168 -P169 -P170 -P171 -P172 -탕정 - -P173 -P174 -P176 -P177 -P158 -P157-1 -P144-1 -I122 -I123 -I125 -I126 -I127 -I128 -I129 -I131 -I132 -I133 -I134 -I135 -I136 -I137 -I138 -송도달빛축제공원 - -I139 -I219 -I220 -I222 -I223 -I224 -I225 -I226 -I227 -211-1 -P549 -P551 -P553 -P554 -P555 -211-2 -211-3 - - -서해 - -`; - -const MapSvg: React.FC<{ onClick?: VoidFunction; className?: string }> = ({ onClick, className }) => ( -
    -); - -export default MapSvg; diff --git a/services/next.ahhachul.com/src/components/home/SubwayMap/SubwayMap.tsx b/services/next.ahhachul.com/src/components/home/SubwayMap/SubwayMap.tsx deleted file mode 100644 index 860fc0e78..000000000 --- a/services/next.ahhachul.com/src/components/home/SubwayMap/SubwayMap.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { Layout } from '@/src/components/layout'; -import { title, wrap } from './style'; - -const SubwayMap = () => { - return ( - -
    -

    this is 노선도 보기 page

    -
    -
    - ); -}; - -export default SubwayMap; diff --git a/services/next.ahhachul.com/src/components/home/SubwayMap/index.ts b/services/next.ahhachul.com/src/components/home/SubwayMap/index.ts deleted file mode 100644 index 9d39b8fae..000000000 --- a/services/next.ahhachul.com/src/components/home/SubwayMap/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './SubwayMap'; diff --git a/services/next.ahhachul.com/src/components/home/SubwayMap/map.svg b/services/next.ahhachul.com/src/components/home/SubwayMap/map.svg deleted file mode 100644 index 31a5cbd60..000000000 --- a/services/next.ahhachul.com/src/components/home/SubwayMap/map.svg +++ /dev/null @@ -1,3178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1 - -2 - -7 - - -1 - -1 - -수인 -분당 - -공항 -철도 - -인천 - 1 -인천 -동인천 -도원 -도화 -간석 -동암 -백운 -부평 -부개 -송내 -중동 -부천 -역곡 -온수 -오류동 -개봉 -구일 -구로 -독산 -금천구청 -석수 -관악 -안양 -명학 -금정 -군포 -당정 -의왕 -성균관대 -화서 -세류 -수원 -광명 -가산 -디지털단지 -신도림 -신길 -대림 -문래 -당산 -합정 -망원 -홍대입구 -대화 -주엽 -신촌 -이대 -아현 -충정로 -도림천 -신정네거리 -까치산 -양천구청 -영등포 -영등포구청 -대방 -마포 -공덕 -애오개 -노량진 -용산 -남영 -효창공원앞 -서울역 -시청 -을지로 - 입구 -을지로3가 -을지로4가 -종각 -종로3가 -종로5가 -동대문 -동대문 -역사문화공원 -동묘앞 -신설동 -신당 -상왕십리 -용두 -신답 -한양대 -용답 -뚝섬 -서울숲 -압구정 -로데오 -구의 -강변 -잠실나루 -잠실새내 -삼성 -선릉 -역삼 -양재 -강남 -서초 -방배 -사당 -낙성대 -봉천 -신림 -신대방 -구로 -디지털단지 -서울대 -입구 -교대 -종합운동장 -잠실 -석촌 -송파 -오금 -성수 -건대입구 -왕십리 -제기동 -청량리 -회기 -외대앞 -석계 -태릉입구 -화랑대 -봉화산 -신내 -광운대 -월계 -녹천 -창동 -당고개 -방학 -도봉 -도봉산 -망월사 -회룡 -의정부 -가능 -녹양 -양주 -덕계 -덕정 -지행 -동두천중앙 -보산 -동두천 -소요산 -신이문 -소사 -주안 -제물포 - - - - - - - -청라국제도시 -검단오류 -검단사거리 -왕길 - - - - -완정 - -독정 - -검바위 - -아시아드경기장 - -서구청 - -가정 - -가정중앙시장 - -석남 -서부여성회관 - -인천가좌 - -가재울 - -주안국가산단 - -시민공원 - -석바위시장 - -석천사거리 - -모래내시장 - -만수 - -남동구청 - -인천대공원 - -운연 - -영종 - -운서 - -공항화물청사 -인천공항1터미널 - -인천공항2터미널 - - - - - -소새울 - -시흥대야 - -신천 - -신현 - -시흥시청 - -시흥능곡 - -선부 -원곡 - -달미 - - -원시 - - - - - - - - - - - - - - - - - -병점 -서동탄 -세마 - - -오산대 - -오산 - -진위 - -송탄 - -서정리 - -지제 - -평택 - -성환 - -직산 - -두정 - -천안 - -봉명 - -쌍용 - -아산 - -배방 - -온양 - 온천 - -신창 - - - - - -방화 - -개화산 -김포공항 -계양 -검암 - -개화 - -신방화 -마곡나루 - -양천향교 - -가양 - -증미 - -등촌 - -염창 - -신목동 - -선유도 - -국회 -의사당 -여의도 - -샛강 -노들 - -흑석 - -구반포 - -신반포 - -사평 - -신논현 -언주 -선정릉 - -삼성중앙 -강남구청 - -봉은사 - -한성백제 - -둔촌오륜 - -중앙보훈병원 - -삼전 - -송파나루 - -석촌고분 - -공항시장 - -송정 - -발산 - -우장산 - -화곡 - -신정 - -굴포천 -부평구청 - -귤현 - -박촌 - -계산 - -임학 - -작전 - -갈산 - -부평시장 - -동수 - -간석오거리 -인천시청 - -부평삼거리 - -예술회관 - -문학경기장 -인천터미널 - - -선학 - -동막 - -캠퍼스타운 - -테크노파크 -인천대입구 -지식정보단지 - - -센트럴파크 - -국제업무지구 - - -신연수 - -삼산체육관 - -상동 - -부천시청 - -신중동 - -춘의 - -부천종합운동장 -까치울 - -천왕 - -철산 -남구로 - -신풍 - -보라매 - -장승배기 - -상도 - -숭실대입구 -남성 - - -내방 -반포 - - -논현 -학동 - -청담 -어린이 - 대공원 - - -중곡 - -용마산 - -사가정 - -면목 -상봉 - -중화 -중랑 -망우 -양원 - -먹골 - -공릉 - -하계 - -중계 - -마들 - -수락산 - -장암 - -뚝섬유원지 - -신대방 -삼거리 -서울지방병무청 - - -목동 - -오목교 - -여의 -나루 - - -서대문 -광화문 - - - -양평 - -마장 -행당 -신금호 -청구 - - - -답십리 - -장한평 -군자 - -아차산 - -광나루 -천호 -강동 - - - -길동 - -둔촌동 - -거여 - -개롱 - -마천 - -방이 -올림픽 -공원 - -굽은다리 -명일 -암사 -강동 -구청 - - -문정 - -장지 -복정 - -산성 - -신흥 -모란 - -수진 -판교 -이매 - -삼동 - -경기광주 - -초월 - -곤지암 - -신둔도예촌 - -이천 - -부발 - -세종대왕릉 - -여주 - -남한산성입구 - -단대오거리 - -몽촌토성 - -고덕 - -상일동 - -미사 - -하남풍산 - - -영등포시장 - -마곡 - - - - - - - - -구룡 -개포동 -가천대 -태평 -대모산 -입구 - -한티 - - - - - -야탑 -서현 -수내 -오리 -정자 -미금 - - - - -죽전 - -보정 - -구성 - -신갈 -기흥 - -강남대 - -지석 - -어정 - -동백 - -초당 - -삼가 - -시청·용인대 - -명지대 - -김량장 - -운동장·송담대 - -고진 - -보평 - -둔전 - -전대·에버랜드 - -상갈 - - -청명 - -영통 - -망포 - -매탄권선 - -수원시청 -매교 - -사리 - -야목 - -달월 -월곶 -소래포구 -인천논현 -호구포 -남동인더스파크 -원인재 - - - - - -인하대 -송도 - - -숭의 - -신포 - -연수 - - -어천 - -고색 - -오목천 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -상계 -노원 - -쌍문 - -수유 - -미아 -길음 -정릉 -성신여대 - 입구 - -미아사거리 - -혜화 - -남태령 - -경마공원 -양재시민의숲 -청계산입구 - -대공원 - -인덕원 - -정부 -과천청사 - -과천 - -평촌 - -범계 - -산본 - -수리산 - -대야미 - -상록수 -한대앞 -중앙 -고잔 -초지 -안산 -신길온천 -정왕 -오이도 - -반월 - -선바위 - -명동 -삼각지 -신용산 -회현 -이촌 -동작 -이수(총신대입구) - - - -숙대 -입구 - - - -북한산보국문 - -솔샘 - -삼양 -사거리 - - -화계 -삼양 - -가오리 - -4.19민주묘지 -솔밭공원 - - -북한산우이 - -한성대입구 - - - - - - -발곡 - -범골 - -흥선 - -의정부 -중앙 -동오 - - -새말 - -경기도청북부청사 - -효자 - -곤제 -어룡 -송산 -탑석 - - - - -의정부시청 - -경전철의정부 - - - - - - - - - - - - -1 - -금릉 - -운정 - -야당 - -일산 -풍산 -백마 -곡산 -능곡 -행신 - -강매 - -화전 - -수색 -가좌 - -신촌(경의선) - -서강대 - -금촌 - -월롱 - -파주 - -문산 -임진강 - - -정발산 - -마두 - -백석 -대곡 - -화정 - -원당 -원흥 -삼송 -지축 -구파발 -연신내 -불광 - - - -녹번 - -응암 -역촌 - -새절 - -증산 -디지털미디어시티 - -월드컵경기장 - -마포구청 - - -상수 - -광흥창 - -대흥 - -창신 - -이태원 - -녹사평 - -안암 -보문 -고려대 -월곡 -상월곡 - - - - - - -돌곶이 - -한강진 -버티고개 - - - -독바위 -구산 - - -홍제 - -무악재 - -독립문 - -경복궁 - -안국 -충무로 - -압구정 -신사 -잠원 -고속터미널 - -매봉 -도곡 - - - -동천 -성복 -수지구청 - - - -상현 - -광교중앙 - -광교 - -대치 - -학여울 - -경찰병원 - -대청 - - -동대입구 -약수 - -금호 -옥수 - -일원 -수서 -가락 -시장 - -남부터미널 - - - - -4 - -4 - -5 - -9 - -6 - -3 - -5 - -5 - -3 - -7 - -8 - -8 - -경강 - -9 - -경강 - -용인 - -경의 -중앙 - -서빙고 - -한남 - -응봉 - - -갈매 -별내 - - -퇴계원 - -사릉 - -금곡 - -평내호평 - -천마산 - -마석 - -대성리 - -청평 - -상천 - -가평 - -굴봉산 - -백양리 - -강촌 - -김유정 - -남춘천 - -춘천 - -구리 - -도농 - -양정 - -덕소 - -도심 - -팔당 - -운길산 - -양수 - -신원 - -국수 - -아신 - -오빈 - -양평 - -원덕 - -용문 - -지평 - - -경의 -중앙 - -경춘 - -경춘 - -신림 - -신림 - -수인 -분당 - -우이 -신설 - -공항 -철도 - -경의 -중앙 -서해 - -서해 - - -분당 - - -분당 - -김포 - -김포 -양촌 -구래 -마산 - - - -운양 -장기 - - -걸포북변 - -사우 - -풍무 - -고촌 - - -2 - -2 - -우이 -신설 - -의정부 - -의정부 - -인천 - 1 - -인천 - 2 - -인천 - 2 - -6 -101 -100 -102 -103 -104 -105 -106 -107 -108 -109 -110 -112 -709 -711 -712 -714 -715 -716 -718 -719 -721 -722 -723 -724 -726 -728 -729 -731 -733 -735 -737 -738 -739 -740 -741 -S403 - -보라매공원 -S405 - -보라매병원 -S406 - -당곡 -S407 - -서원 -S409 - -관악산 -S411 - -서울대벤처타운 -S410 -743 -745 -747 -광명사거리 - -749 -751 -753 -754 -755 -756 -757 -758 -산곡 - -760 -748 -115 -114 -117 -118 -121 -122 -125 -129 -131 -202 -207 -209 -210 -213 -214 -215 -217 -219 -221 -224 -225 -227 -228 -229 -231 -232 -235 -240 -241 -242 -134 -139 -142 -143 -144 -146 -S17 -원종 - -S14 -S18 -S19 -S20 -S22 -S23 -S24 -S25 -S27 -S28 -148 -149 -150 -151 -153 -154 -155 -157 -158 -159 -160 -마전 - -A08 -A09 - -A10 -A11 - -1 -309 -탄현 - -310 -311 -312 -313 -315 -316 -317 -318 -319 -320 -323 -324 -325 -326 -327 -328 -332 -334 -336 -338 -341 -343 -345 -346 -347 -348 -351 -409 -별내별가람 - -408 -오남 - -406 -진접 - -405 -410 -413 -414 -415 -416 -417 -419 -420 -424 -425 -427 -429 -434 -435 -D09 -D10 -436 -437 -438 -439 -440 -441 -442 -444 -445 -446 -447 -448 -513 -901 -903 -904 -906 -907 -908 -909 -910 -911 -912 -913 -918 -919 -921 -922 -924 -926 -928 -929 -931 -932 -934 -935 -937 -938 -514 -515 -516 -517 -519 -520 -521 -522 -524 -528 -530 -532 -610 -615 -613 -611 -616 -617 -619 -620 -621 -623 -624 -625 -629 -630 -631 -632 -637 -639 -640 -641 -642 -643 -646 -647 -533 -538 -539 -541 -542 -543 -545 -546 -549 -550 -810 -812 -813 -816 -818 -819 -822 -남위례 - -821 -823 -824 -825 -826 -K412 -K413 -K414 -K415 -K416 -K417 -K418 -K419 -K420 -551 -552 -553 -강일 - -554 -555 -556 -하남시청 - -557 -하남검단산 - -558 -527 -511 -510 - - -D14 -D15 -D16 -D17 -D18 -D19 -동춘 - -경인교대입구 - -K337 -K334 -운천 - -K336 -K333 -K331 -K330 -K329 -K328 -K327 -K320 -K319 -K318 -K317 -K313 -K112 -K113 -K115 -K122 -K123 -K124 -K125 -K126 -K127 -K128 -K129 -K130 -K131 -K132 -K133 -K134 -K135 -K136 -K137 -K138 -P314 -P123 -P124 -P125 -P126 -P127 -P128 -P129 -P130 -P131 -P132 -P133 -P134 -P135 -P136 -P137 -P138 -P139 -P140 -A071 -I201 -I202 -I203 -I204 -I205 -I206 -I208 -I209 -I210 -I211 -I212 -I214 -I215 -I216 -I217 -A072 -K211 -K212 -K216 -K218 -K219 -K220 -K223 -K224 -K226 -K228 -K229 -K232 -K233 -K234 -K235 -K236 -K238 -K239 -K240 -K241 -K242 -K243 -K244 -K246 -K247 -K248 -K249 -K250 -K259 -K260 -K261 -K262 -K263 -K264 -K266 -K267 -K269 -K270 -K271 -G100 -G101 -G102 -G103 -G104 -G105 -G106 -G107 -G108 -Y111 -Y112 -Y113 -Y114 -Y115 -Y116 -Y117 -Y118 -Y119 -Y120 -Y121 -Y122 -Y123 -Y124 -S110 -S111 -S112 -S113 -S114 -S115 -S116 -S117 -S118 -S119 -U110 -U112 -U113 -U114 -U115 -U117 -U118 -U119 -U120 -U121 -U122 -U123 -U124 -U125 -I111 -I112 -I113 -I114 -I115 -I116 -I117 -I119 -I121 -P143 -234-1 -234-2 -234-3 -P145 -P146 -P147 -P148 -P150 -P151 -P152 -P153 -P154 -P156 -P158 -P159 -P160 -P161 -P162 -P163 -P164 -P165 -P166 -P167 -P168 -P169 -P170 -P171 -P172 -탕정 - -P173 -P174 -P176 -P177 -P158 -P157-1 -P144-1 -I122 -I123 -I125 -I126 -I127 -I128 -I129 -I131 -I132 -I133 -I134 -I135 -I136 -I137 -I138 -송도달빛축제공원 - -I139 -I219 -I220 -I222 -I223 -I224 -I225 -I226 -I227 -211-1 -P549 -P551 -P553 -P554 -P555 -211-2 -211-3 - - -서해 - \ No newline at end of file diff --git a/services/next.ahhachul.com/src/components/home/SubwayMap/style.ts b/services/next.ahhachul.com/src/components/home/SubwayMap/style.ts deleted file mode 100644 index eca711fbe..000000000 --- a/services/next.ahhachul.com/src/components/home/SubwayMap/style.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrap = [f.fullWidth, f.flexColumn, { padding: '14px 20px 48px 20px' }]; - -const title = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - color: '#e6e6e6', - fontSize: fontSize[16], - fontWeight: fontWeight[600], -}); - -export { wrap, title }; diff --git a/services/next.ahhachul.com/src/components/home/index.ts b/services/next.ahhachul.com/src/components/home/index.ts deleted file mode 100644 index 6b2b21f52..000000000 --- a/services/next.ahhachul.com/src/components/home/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Landing } from './Landing'; -export { default as Dashboard } from './Dashboard'; -export { default as SubwayMap } from './SubwayMap'; -export { default as RegisterCenter } from './RegisterCenter'; diff --git a/services/next.ahhachul.com/src/components/index.ts b/services/next.ahhachul.com/src/components/index.ts deleted file mode 100644 index 4a4816a88..000000000 --- a/services/next.ahhachul.com/src/components/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * as UiComponent from './ui'; -export * as HomeComponent from './home'; -export * as LostComponent from './lost'; -export * as SharedComponent from './shared'; -export * as LayoutComponent from './layout'; -export * as ComplaintsComponent from './complaints'; -export * as CommunityComponent from './community'; -export * as AlarmComponent from './alarm'; -export * as ErrorComponent from './error-management'; diff --git a/services/next.ahhachul.com/src/components/layout/Layout.tsx b/services/next.ahhachul.com/src/components/layout/Layout.tsx deleted file mode 100644 index a942bbcf5..000000000 --- a/services/next.ahhachul.com/src/components/layout/Layout.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useCallback, type PropsWithChildren } from 'react'; - -import { UiComponent } from '@/src/components'; -import { useAppSelector } from '@/src/stores'; -import { scrollable } from './style'; - -interface LayoutProps { - headerType?: 'default' | 'search' | 'back'; - title?: string; - nav?: boolean; -} - -const Layout: React.FC> = ({ - headerType = 'default', - title = '', - nav = true, - children, -}) => { - const { loading, snackBars } = useAppSelector((state) => state.ui); - - const scrollToTop = useCallback( - () => window?.scrollTo?.({ top: 0, behavior: 'smooth' }), - [], - ); - - return ( - <> - - - {loading.active && } -
    {children}
    - {nav && ( - <> - - - - )} - - ); -}; - -export default Layout; diff --git a/services/next.ahhachul.com/src/components/layout/index.ts b/services/next.ahhachul.com/src/components/layout/index.ts deleted file mode 100644 index 6c48faec7..000000000 --- a/services/next.ahhachul.com/src/components/layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Layout } from './Layout'; diff --git a/services/next.ahhachul.com/src/components/layout/style.ts b/services/next.ahhachul.com/src/components/layout/style.ts deleted file mode 100644 index 7a9088469..000000000 --- a/services/next.ahhachul.com/src/components/layout/style.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import { f } from '@/src/styles'; - -const wrapper = [f.posAbsFull, f.flexColumn, f.rootLineHeight]; - -const left = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[16], - fontWeight: fontWeight[600], - paddingLeft: '16px', -}); - -const right = (hasSearch: boolean): CSSObject => ({ - display: 'grid', - gridTemplateColumns: hasSearch ? '24px 24px 24px' : '24px 24px', - alignItems: 'center', - gap: '16px', - paddingRight: '16px', - - '& img': { - width: '24px', - height: '24px', - borderRadius: '50%', - }, -}); - -const scrollable = (hasNavbar: boolean) => [ - f.flex1, - f.overflowScroll, - ({ - dimensions: { - size: { - height: { navbar }, - }, - }, - }: Theme): CSSObject => ({ - paddingBottom: hasNavbar ? navbar : 0, - }), -]; - -export { wrapper, left, right, scrollable }; diff --git a/services/next.ahhachul.com/src/components/lost/Lost.tsx b/services/next.ahhachul.com/src/components/lost/Lost.tsx deleted file mode 100644 index c564c022f..000000000 --- a/services/next.ahhachul.com/src/components/lost/Lost.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { Suspense } from 'react'; - -import { ErrorComponent, UiComponent } from '@/src/components'; -import ErrorDefault from '@/src/components/error-management/ErrorDefault'; -import { TabSection } from './tabSection'; -import ListSection from './listSection/ListSection'; -import { wrap, err } from './style'; -import FilterSection from './filterSection'; - -const Lost = () => { - return ( -
    - - - } fallbackCss={err}> - }> - - - -
    - ); -}; - -export default Lost; diff --git a/services/next.ahhachul.com/src/components/lost/filterSection/FilterSection.tsx b/services/next.ahhachul.com/src/components/lost/filterSection/FilterSection.tsx deleted file mode 100644 index 6e5671bad..000000000 --- a/services/next.ahhachul.com/src/components/lost/filterSection/FilterSection.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; -import IconChevron from '@/src/static/icons/system/IconChevron'; -import { f } from '@/src/styles'; -import { useParams } from 'next/navigation'; -import { useRouter } from 'next/router'; -import IconCircleClose from '@/src/static/icons/system/IconCircleClose'; -import { useReducer } from 'react'; -import { UiComponent } from '../..'; -import { PATH } from '@/src/data'; -import { exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import { Nullable } from '@/src/types'; - -const FilterSection = () => { - const params = useParams(); - const router = useRouter(); - const keyword = router?.query?.keyword; - const hashTag = router?.query?.tag; - const subwayLineId = params?.subwayLineId?.[0]; - const categoryType = router?.query?.categoryType; - - const handleDeleteKeyword = () => { - router.push(`${router.asPath?.split('?')?.[0]}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { - shallow: true, - }); - }; - - const [show, toggle] = useReducer((c) => !c, false); - const handleSubwayLine = (subwayLine: Nullable) => { - if (!subwayLine) - router.push(`${PATH.lost}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { shallow: true }); - else - router.push(`${PATH.lost}/${subwayLine}${categoryType ? `?categoryType=${categoryType}` : ''}`, undefined, { - shallow: true, - }); - }; - - return ( - <> -
    -
      - {(keyword || hashTag) && ( -
    • - -
    • - )} -
    • - -
    • -
    -
    - - - ); -}; - -const wrap = [ - f.fullWidth, - f.sideGutter, - { - marginBottom: '16px', - }, -]; - -const ul: [CSSObject[], CSSObject, CSSObject, CSSObject] = [ - f.flexAlignCenter, - f.overflowScroll, - f.posRel, - { - overflowY: 'hidden', - overflowX: 'scroll', - justifyContent: 'flex-end', - gap: '8px', - }, -]; - -const keywordBtn = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - position: 'absolute', - top: '50%', - left: 0, - transform: 'translateY(-50%)', - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - width: '18px', - height: '18px', - zIndex: 10, - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, -}); - -const filterBtn = - (hasCondition: boolean) => - ({ typography: { fontSize, fontWeight } }: Theme) => ({ - flexShrink: 0, - border: '1px solid rgb(196, 212, 252, 0.47)', - height: '30px', - borderRadius: '124px', - padding: '0 10px 0 14px', - width: 'max-content', - color: 'rgb(196, 212, 252)', - fontSize: fontSize[12], - fontWeight: hasCondition ? fontWeight[700] : fontWeight[600], - transition: 'opacity 0.3s ease-in-out', - willChange: 'opacity', - display: 'flex', - alignItems: 'center', - gap: '4px', - - '&:active': { - opacity: '0.4', - }, - - '& > div': { - alignItems: 'center', - justifyContent: 'center', - width: '16px', - height: '16px', - transform: 'rotate(90deg)', - - '& > svg > path': { - stroke: 'rgb(196, 212, 252)', - }, - }, - }); - -export default FilterSection; diff --git a/services/next.ahhachul.com/src/components/lost/filterSection/index.ts b/services/next.ahhachul.com/src/components/lost/filterSection/index.ts deleted file mode 100644 index d33cc988f..000000000 --- a/services/next.ahhachul.com/src/components/lost/filterSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './FilterSection'; diff --git a/services/next.ahhachul.com/src/components/lost/index.ts b/services/next.ahhachul.com/src/components/lost/index.ts deleted file mode 100644 index b584f8e21..000000000 --- a/services/next.ahhachul.com/src/components/lost/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as LostMain } from './Lost'; diff --git a/services/next.ahhachul.com/src/components/lost/listSection/Item.tsx b/services/next.ahhachul.com/src/components/lost/listSection/Item.tsx deleted file mode 100644 index 5543a2dbd..000000000 --- a/services/next.ahhachul.com/src/components/lost/listSection/Item.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import { CSSObject, Theme } from '@emotion/react'; -import { CSSProperties } from 'react'; -import { LazyLoadImage } from 'react-lazy-load-image-component'; - -import IconComment from '@/src/static/icons/system/IconComment'; -import { f } from '@/src/styles'; -import { ILost } from '@/src/types'; -import { exportHexColorWidthLineName, exportLineNameWithSubwayLineId } from '@/src/utils/export'; -import { formatDate } from '@/src/utils/time'; -import IconDM from '@/src/static/icons/system/IconDM'; -import Link from 'next/link'; -import { PATH } from '@/src/data'; - -function Item({ article }: { article: ILost }) { - const noImg = article.imageUrl.includes('no_img'); - - return ( - - - -
    - {article.createdBy === 'SYSTEM' ? 'LOST112' : article.writer} - -
    -
    - {exportLineNameWithSubwayLineId(article.subwayLine)} -
    -
    - -

    {article.title}

    -
    - {!noImg && ( - - )} -
    -
    - -
    - 0 -
    -
    - {article.chats} -
    -
    -
    - - ); -} - -const wrap = { - padding: '12px 0', -}; - -const nickname = ({ typography: { fontSize, fontWeight } }: Theme) => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[600], - color: '#c9cedc', -}); - -const time = ({ typography: { fontSize } }: Theme): CSSObject => ({ - fontSize: fontSize[12], - color: '#9da5b6', - marginLeft: '6px', -}); - -const trainLabelsWrap = - (pointColor: CSSProperties['color']) => - ({ color: { gray }, typography: { fontSize, fontWeight } }: Theme) => ({ - display: 'flex', - alignItems: 'center', - - '& > span': { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '4px', - padding: '0 8px', - height: '20px', - color: gray[1000], - fontSize: fontSize[12], - fontWeight: fontWeight[500], - background: pointColor, - }, - }); - -const content = [ - f.truncate2, - ({ typography: { fontSize } }: Theme) => ({ - fontSize: fontSize[14], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - }), -]; - -const img: CSSObject = { - width: '50px', - minWidth: '50px', - height: '50px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - position: 'relative', - marginLeft: '16px', - - '& > img': { - position: 'absolute', - top: 0, - right: 0, - width: '100%', - height: '100%', - objectFit: 'cover', - borderRadius: '6px', - }, -}; - -const label = ({ typography: { fontSize } }: Theme): CSSObject => ({ - display: 'flex', - alignItems: 'center', - marginRight: '8px', - - '& > span': { - fontSize: fontSize[12], - color: '#c9cedc', - letterSpacing: '-0.3px', - lineHeight: '19px', - marginLeft: '4px', - }, -}); - -export default Item; diff --git a/services/next.ahhachul.com/src/components/lost/listSection/ListSection.tsx b/services/next.ahhachul.com/src/components/lost/listSection/ListSection.tsx deleted file mode 100644 index fad904055..000000000 --- a/services/next.ahhachul.com/src/components/lost/listSection/ListSection.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import { useParams } from 'next/navigation'; -import { Box, Flex } from '@ahhachul/react-components-layout'; - -import { UiComponent } from '@/src/components'; -import { flattenInfinityListData } from '@/src/utils/response'; -import { useGetLostList } from '@/src/queries/lost/useGetLostList'; - -import LostCard from './Item'; -import { ul } from './style'; -import { useRouter } from 'next/router'; -import { LostType } from '@/src/types'; - -function ListSection() { - const params = useParams(); - const { query } = useRouter(); - const { data, hasNextPage, fetchNextPage, isFetchingNextPage } = useGetLostList({ - page: 0, - size: 20, - hashTag: query?.tag as string, - keyword: query?.keyword as string, - lostType: (query?.categoryType as LostType) || 'ACQUIRE', - ...(params?.subwayLineId?.[0] && { subwayLineId: params?.subwayLineId?.[0] as string }), - }); - - const flatData = flattenInfinityListData(data); - - return ( - <> - - - {flatData.map((article) => ( -
  • - -
  • - ))} -
    -
    - {hasNextPage && ( - { - !isFetchingNextPage && fetchNextPage(); - }} - /> - )} - - ); -} - -export default ListSection; diff --git a/services/next.ahhachul.com/src/components/lost/listSection/style.ts b/services/next.ahhachul.com/src/components/lost/listSection/style.ts deleted file mode 100644 index 9f447d7f9..000000000 --- a/services/next.ahhachul.com/src/components/lost/listSection/style.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { f } from '@/src/styles'; - -const ul = [ - f.sideGutter, - { - '& > li:first-of-type': { - '& > a > article': { paddingTop: 0 }, - }, - - '& > li:not(:last-of-type)': { - borderBottom: '1px solid hsla(0, 0%, 100%, .06)', - }, - }, -]; - -export { ul }; diff --git a/services/next.ahhachul.com/src/components/lost/rankCategory/RankCategory.tsx b/services/next.ahhachul.com/src/components/lost/rankCategory/RankCategory.tsx deleted file mode 100644 index 3690b4b3f..000000000 --- a/services/next.ahhachul.com/src/components/lost/rankCategory/RankCategory.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Flex, Box, Text } from '@ahhachul/react-components-layout'; -import bagImg from '@/src/static/img/lost/bag.png'; -import galaxyImg from '@/src/static/img/lost/galaxy.png'; -import iphoneImg from '@/src/static/img/lost/iphone.png'; -import walletImg from '@/src/static/img/lost/wallet.png'; - -const RANK_CATEGORY = { - iphone: { - label: '아이폰', - img: iphoneImg, - }, - galaxy: { - label: '갤럭시', - img: galaxyImg, - }, - wallet: { - label: '지갑', - img: walletImg, - }, - bag: { - label: '가방', - img: bagImg, - }, -}; - -function RankCategory() { - return ( - - - 인기 분실물 TOP 4 - - - {Object.entries(RANK_CATEGORY).map(([key, value]) => { - return ( - - - {/* */} - - - {value.label} - - - ); - })} - - - ); -} - -export default RankCategory; diff --git a/services/next.ahhachul.com/src/components/lost/style.ts b/services/next.ahhachul.com/src/components/lost/style.ts deleted file mode 100644 index d0f992430..000000000 --- a/services/next.ahhachul.com/src/components/lost/style.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { f } from '@/src/styles'; -import { CSSObject, Theme } from '@emotion/react'; - -const tabHeight = '68.4px'; -const filterSectionHeight = '46px'; -const paddingTopHeight = '14px'; - -const wrap = [f.fullWidth, f.flexColumn, { padding: `${paddingTopHeight} 0 48px` }]; - -const err = [ - f.posAbs, - ({ - dimensions: { - size: { - height: { header, navbar }, - }, - }, - }: Theme): CSSObject => ({ - bottom: navbar, - left: '50%', - transform: 'translateX(-50%)', - height: `calc(100% - ${header} - ${navbar} - ${tabHeight} - ${filterSectionHeight} - ${paddingTopHeight})`, - boxSizing: 'border-box', - }), -]; - -export { wrap, err }; diff --git a/services/next.ahhachul.com/src/components/lost/tabSection/TabSection.tsx b/services/next.ahhachul.com/src/components/lost/tabSection/TabSection.tsx deleted file mode 100644 index 65a5394dc..000000000 --- a/services/next.ahhachul.com/src/components/lost/tabSection/TabSection.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Box, Flex, Text } from '@ahhachul/react-components-layout'; -import IconCircleDown from '@/src/static/icons/lost/IconCircleDown'; -import IconCircleUp from '@/src/static/icons/lost/IconCircleUp'; -import { TabBtn } from './style'; -import { LostType } from '@/src/types'; -import { useRouter } from 'next/router'; - -const LOST_AND_FOUND_TABS = { - ACQUIRE: { - icon: , - label: '습득물', - value: 'ACQUIRE', - }, - LOST: { - icon: , - label: '분실물', - value: 'LOST', - }, -} as const; - -function TabSection() { - const router = useRouter(); - const asPath = router.asPath.split('?'); - const activeTab = router.query?.categoryType || Object.keys(LOST_AND_FOUND_TABS)[0]; - - const handleTab = (categoryType: LostType) => () => { - router.push(`${asPath[0]}?categoryType=${categoryType}`, undefined, { - shallow: true, - }); - }; - - return ( - - - {Object.entries(LOST_AND_FOUND_TABS).map(([key, { label, icon, value }]) => ( -
  • - - - {icon} - - - {label} - - -
  • - ))} -
    -
    - ); -} - -export default TabSection; diff --git a/services/next.ahhachul.com/src/components/lost/tabSection/index.ts b/services/next.ahhachul.com/src/components/lost/tabSection/index.ts deleted file mode 100644 index 1f34b04f9..000000000 --- a/services/next.ahhachul.com/src/components/lost/tabSection/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as TabSection } from './TabSection'; diff --git a/services/next.ahhachul.com/src/components/lost/tabSection/style.ts b/services/next.ahhachul.com/src/components/lost/tabSection/style.ts deleted file mode 100644 index 2b6ff1291..000000000 --- a/services/next.ahhachul.com/src/components/lost/tabSection/style.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Flex } from '@ahhachul/react-components-layout'; -import styled from '@emotion/styled'; - -const TabBtn = styled(Flex)` - cursor: pointer; - - & > span { - width: max-content; - border-radius: 50%; - aspect-ratio: 1 / 1; - background-color: #fff; - padding: 6px; - transition: background-color 0.2s ease; - - & > svg { - fill: black; - - & > path { - fill: black; - stroke: black; - } - } - } - - & > p { - transition: color 0.2s ease; - } - - &[aria-selected='true'] { - & > span { - background-color: #2acf6c; - - & > svg { - fill: white; - - & > path { - fill: white; - stroke: white; - } - } - } - - & > p { - font-weight: 700; - } - } -`; - -export { TabBtn }; diff --git a/services/next.ahhachul.com/src/components/onboarding/login/Login.tsx b/services/next.ahhachul.com/src/components/onboarding/login/Login.tsx deleted file mode 100644 index 282013ee0..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/login/Login.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -const Login = () => { - return ( -
    -

    this is login page

    -
    - ); -}; - -export default Login; diff --git a/services/next.ahhachul.com/src/components/onboarding/login/index.ts b/services/next.ahhachul.com/src/components/onboarding/login/index.ts deleted file mode 100644 index bf79baef9..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Login } from './Login'; diff --git a/services/next.ahhachul.com/src/components/onboarding/nickname/Nickname.tsx b/services/next.ahhachul.com/src/components/onboarding/nickname/Nickname.tsx deleted file mode 100644 index 09d684440..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/nickname/Nickname.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; - -import { wrap, pageTitle, title, subTitle } from './style'; -import useNickname from './useNickname'; - -interface Props { - nickname: string; - handleNickName: (nickname: string) => void; - handleNext: () => void; -} - -function Nickname({ nickname, handleNickName, handleNext }: Props) { - const { inputRef, invalidMsg, disabled, next } = useNickname({ nickname, handleNext }); - - return ( -
    -

    회원가입

    -

    닉네임

    -

    한글,영문 10자 이하로 입력해주세요

    - handleNickName(e.target.value)} - /> -

    ({ ...title(theme), margin: '80px 0 30px' })}>{invalidMsg}

    - -
    - ); -} - -export default Nickname; diff --git a/services/next.ahhachul.com/src/components/onboarding/nickname/index.ts b/services/next.ahhachul.com/src/components/onboarding/nickname/index.ts deleted file mode 100644 index f7b064428..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/nickname/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Nickname'; diff --git a/services/next.ahhachul.com/src/components/onboarding/nickname/style.ts b/services/next.ahhachul.com/src/components/onboarding/nickname/style.ts deleted file mode 100644 index fc4c16b44..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/nickname/style.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { CSSObject, Theme } from '@emotion/react'; - -const pageTitle = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[14], - fontWeight: fontWeight[700], - lineHeight: '1.3', - margin: '100px 0 60px', - alignSelf: 'flex-start', -}); - -const title = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[11], - fontWeight: fontWeight[700], - lineHeight: '1.3', - alignSelf: 'flex-start', -}); - -const subTitle = ({ typography: { fontSize, fontWeight } }: Theme): CSSObject => ({ - fontSize: fontSize[11], - fontWeight: fontWeight[600], - lineHeight: '1.3', - margin: '8px 0 36px', - alignSelf: 'flex-start', -}); - -const wrap = {}; - -export { wrap, pageTitle, title, subTitle }; diff --git a/services/next.ahhachul.com/src/components/onboarding/nickname/useCheckNickname.ts b/services/next.ahhachul.com/src/components/onboarding/nickname/useCheckNickname.ts deleted file mode 100644 index 49a19e44c..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/nickname/useCheckNickname.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { AxiosError } from 'axios'; -import { MemberQuery } from '@/src/queries'; -import { useEffect, useMemo, useRef, useState } from 'react'; -import { Subject, catchError, debounceTime, filter, from, map, mergeMap, of } from 'rxjs'; - -const MAX_LEN = 10; -const MIN_LEN = 2; - -interface Props { - nickname: string; - originNickname?: string; -} - -function useCheckNickname({ nickname, originNickname = '' }: Props) { - const inputRef = useRef(null); - const { mutateAsync, status } = MemberQuery.useCheckNickname(); - const subjectRef = useRef(new Subject()); - - const [invalidMsg, setInvalidMsg] = useState(''); - - const disabled = useMemo(() => { - if (invalidMsg !== '') return true; - if (status === 'pending') return true; - if (nickname.length < MIN_LEN || nickname.length > MAX_LEN) return true; - - return false; - }, [nickname, invalidMsg, status]); - - useEffect(() => { - subjectRef.current - .pipe( - debounceTime(500), - filter((v) => v !== originNickname), - map((v) => { - if (v.length > MAX_LEN) { - setInvalidMsg('한글,영문 10자 이하로 입력해주세요'); - return ''; - } else if (v.length === 1) { - setInvalidMsg('최소 2자 이상 입력해주세요'); - return ''; - } else { - setInvalidMsg(''); - return v; - } - }), - filter((v) => v !== ''), - mergeMap((v) => from(mutateAsync(v)).pipe(catchError((e) => of(e)))), - map((d) => { - if (d instanceof AxiosError) { - return '지원하지 않는 형식입니다'; - } - return d.data.payload ? '중복인 닉네임이라 사용할 수 없습니다.' : ''; - }), - ) - .subscribe((v: string) => { - setInvalidMsg(v); - }); - - return () => subjectRef.current?.unsubscribe(); - }, []); - - useEffect(() => { - subjectRef.current.next(nickname); - }, [nickname]); - - return { invalidMsg, disabled, inputRef }; -} - -export default useCheckNickname; diff --git a/services/next.ahhachul.com/src/components/onboarding/nickname/useNickname.ts b/services/next.ahhachul.com/src/components/onboarding/nickname/useNickname.ts deleted file mode 100644 index 90700439d..000000000 --- a/services/next.ahhachul.com/src/components/onboarding/nickname/useNickname.ts +++ /dev/null @@ -1,23 +0,0 @@ -import useCheckNickname from './useCheckNickname'; - -interface Props { - nickname: string; - handleNext: () => void; -} - -function useNickname({ nickname, handleNext }: Props) { - const { disabled: nicknameDisabled, inputRef, invalidMsg } = useCheckNickname({ nickname }); - - const next = () => { - if (nicknameDisabled) { - inputRef.current?.focus?.(); - return; - } - - handleNext(); - }; - - return { next, inputRef, invalidMsg, disabled: nicknameDisabled }; -} - -export default useNickname; diff --git a/services/next.ahhachul.com/src/components/seo/LdJson.tsx b/services/next.ahhachul.com/src/components/seo/LdJson.tsx deleted file mode 100644 index 3c59bee2e..000000000 --- a/services/next.ahhachul.com/src/components/seo/LdJson.tsx +++ /dev/null @@ -1,18 +0,0 @@ -const LdJsonList = ({ richResults }: { richResults: Record[] }) => { - return ( - <> - {richResults.map(({ id, value }: any) => ( -