diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml deleted file mode 100644 index 9d30e02c..00000000 --- a/.github/workflows/CI.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: CI - -on: - pull_request: - branches: ['main'] - push: - branches: [ "main" ] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Install dependencies - run: yarn install - - - name: Build # 빌드 - run: yarn build - - - name: Close PR, if build fails - if: ${{ failure() }} - uses: actions/github-script@v6 - with: - github-token: ${{ github.TOKEN }} - script: | - const pull_number = ${{ github.event.pull_request.number }} - const updated_title = `[BUILD FAIL] ${{ github.event.pull_request.title }}` - await github.rest.pulls.createReview({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: pull_number, - body: '빌드에 실패했습니다.', - event: 'REQUEST_CHANGES' - }) - await github.rest.pulls.update({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: pull_number, - title: updated_title, - state: 'closed' - }) - - push_main: - runs-on: ubuntu-latest - container: pandoc/latex - steps: - - uses: actions/checkout@v2 - - name: Install mustache (to update the date) - run: apk add ruby && gem install mustache - - name: creates output - run: sh ./build.sh - - name: Pushes to another repository - id: push_directory - uses: cpina/github-action-push-to-another-repository@main - env: - API_TOKEN_GITHUB: ${{ secrets.AUTO_ACTIONS }} - with: - source-directory: 'output' - destination-github-username: ljh0608 - destination-repository-name: ASAP_Client - user-email: ${{ secrets.LEAD_EMAIL }} - commit-message: ${{ github.event.commits[0].message }} - target-branch: main - - name: Test get variable exported by push-to-another-repository - run: echo $DESTINATION_CLONED_DIRECTORY diff --git a/.github/workflows/push-buildRepo.yml b/.github/workflows/push-buildRepo.yml index c43ecfee..d67bc1fe 100644 --- a/.github/workflows/push-buildRepo.yml +++ b/.github/workflows/push-buildRepo.yml @@ -1,4 +1,4 @@ -name: Push Main +name: Push Main on: push: diff --git a/src/App.tsx b/src/App.tsx index d0f1a518..efd8517e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,14 +1,12 @@ /**카카오톡 인앱브라우저 종료후 크롬 및 사파리로 오픈하는 utils file */ -import './utils/changeBrowser'; import 'react-toastify/dist/ReactToastify.css'; import './App.css'; +import './utils/changeBrowser'; import { useEffect } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import { ThemeProvider } from 'styled-components'; -import styled from 'styled-components'; +import styled, { ThemeProvider } from 'styled-components'; import ToastContainerBox from 'utils/toast/ToastContainer'; import Router from './Router'; @@ -27,7 +25,7 @@ const MobileWrapper = styled.div` padding-right: 2rem; padding-left: 2rem; - max-width: var(--app-max-width, 37.5rem); + max-width: var(--app-max-width, 43.5rem); min-height: calc(var(--vh, 1vh) * 100); `; @@ -37,7 +35,8 @@ function App() { document.documentElement.style.setProperty('--vh', `${vh}px`); const windowWidth = window.innerWidth || document.documentElement.clientWidth; - const maxWidth = Math.min(37.5, windowWidth); + + const maxWidth = Math.min(43, windowWidth); document.documentElement.style.setProperty('--app-max-width', `${maxWidth}rem`); }; @@ -60,7 +59,7 @@ function App() { - + {/* */} diff --git a/src/components/Icon/icon.ts b/src/components/Icon/icon.ts index 88563acc..e2572dd2 100644 --- a/src/components/Icon/icon.ts +++ b/src/components/Icon/icon.ts @@ -67,6 +67,6 @@ export { RadioCheckIc, SpeechBubbleIc, TimeIc, - TooltipArrowIc, Wave, + TooltipArrowIc, }; diff --git a/src/components/common/BottomSheet/BottomSheet.tsx b/src/components/common/BottomSheet/BottomSheet.tsx index da0295c4..3e5d7ea5 100644 --- a/src/components/common/BottomSheet/BottomSheet.tsx +++ b/src/components/common/BottomSheet/BottomSheet.tsx @@ -28,12 +28,13 @@ const BottomSheetModal = styled.div<{ $isModalOpen: boolean }>` gap: 0.8rem; transition: transform 600ms cubic-bezier(0.86, 0, 0.07, 1); z-index: 1; - border-top-left-radius: 1.2rem; - border-top-right-radius: 1.2rem; + border-top-left-radius: 1.8rem; + border-top-right-radius: 1.8rem; background-color: ${({ theme }) => theme.colors.grey8}; - padding: 4.4rem 2rem 4rem; - width: 37.5rem; + padding: 3.6rem 2rem 4.8rem; + width: 100%; + max-width: 43rem; & button { width: 100%; diff --git a/src/components/common/atomComponents/Button.tsx b/src/components/common/atomComponents/Button.tsx index 34f99cd2..9cf8e0d3 100644 --- a/src/components/common/atomComponents/Button.tsx +++ b/src/components/common/atomComponents/Button.tsx @@ -1,7 +1,7 @@ -import { css, styled } from 'styled-components'; - import React from 'react'; +import { css, styled } from 'styled-components'; + interface ButtonProps { children: React.ReactNode; typeState: string; @@ -27,10 +27,11 @@ const buttonDefaultCSS = { border-radius: 0.8rem; padding: 1.6rem; - width: 33.5rem; + width: 100%; + max-width: 39rem; height: 5.4rem; letter-spacing: -0.032rem; - + /* margin: 0 2rem; */ pointer-events: auto; `, }; @@ -44,19 +45,22 @@ const buttonCSS = { halfPrimaryActive: css` ${buttonDefaultCSS.basicCss}; background: ${({ theme }) => theme.colors.main1}; - width: 15.2rem; + width: 100%; + max-width: 18.8rem; color: ${({ theme }) => theme.colors.white}; `, halfPrimaryDisabled: css` ${buttonDefaultCSS.basicCss}; background: ${({ theme }) => theme.colors.grey7}; - width: 15.2rem; + max-width: 18.8rem; + width: 100%; color: ${({ theme }) => theme.colors.grey4}; `, primaryDisabled: css` ${buttonDefaultCSS.basicCss}; background: ${({ theme }) => theme.colors.grey7}; color: ${({ theme }) => theme.colors.grey4}; + cursor: default; `, secondaryActive: css` ${buttonDefaultCSS.basicCss}; @@ -66,7 +70,7 @@ const buttonCSS = { halfSecondaryActive: css` ${buttonDefaultCSS.basicCss}; background: ${({ theme }) => theme.colors.main5}; - width: 15.2rem; + max-width: 18.8rem; color: ${({ theme }) => theme.colors.grey9}; `, secondaryDisabled: css` @@ -74,11 +78,12 @@ const buttonCSS = { background: ${({ theme }) => theme.colors.grey7}; color: ${({ theme }) => theme.colors.grey5}; pointer-events: none; + cursor: default; `, halfsecondaryDisabled: css` ${buttonDefaultCSS.basicCss}; background: ${({ theme }) => theme.colors.grey7}; - width: 15.2rem; + max-width: 18.8rem; color: ${({ theme }) => theme.colors.grey5}; `, tertiaryActive: css` @@ -91,7 +96,7 @@ const buttonCSS = { ${buttonDefaultCSS.basicCss}; border: 1px solid ${({ theme }) => theme.colors.main3}; background-color: ${({ theme }) => theme.colors.grey10}; - width: 15.2rem; + max-width: 18.8rem; color: ${({ theme }) => theme.colors.main3}; `, tertiaryDisabled: css` diff --git a/src/components/common/atomComponents/PasswordInput.tsx b/src/components/common/atomComponents/PasswordInput.tsx index 59945ec1..e0f02082 100644 --- a/src/components/common/atomComponents/PasswordInput.tsx +++ b/src/components/common/atomComponents/PasswordInput.tsx @@ -25,7 +25,7 @@ function PasswordInput({ value, placeholder, passWordOnChange, page }: ValueProp placeholder={placeholder} value={value} onChange={passWordOnChange} - $iserror={value.length < 4} + $iserror={value.length < 4 || value.length > 8} type={inputType ? 'password' : `number`} inputMode="numeric" /> @@ -34,15 +34,25 @@ function PasswordInput({ value, placeholder, passWordOnChange, page }: ValueProp {page === 'createMeeting' ? ( - - - * - - - 확정 후 비밀번호는 수정할 수 없으며, 비밀번호가 있어야 방장 페이지에 접속할 수 있으니 - 반드시 기억해주세요! - - + <> + {value.length > 8 && ( + + + 최대 8자리까지 입력 가능해요{' '} + + + )} + + + + * + + + 확정 후 비밀번호는 수정할 수 없으며, 비밀번호가 있어야 방장 페이지에 접속할 수 있으니 + 반드시 기억해주세요! + + + ) : ( undefined )} @@ -78,7 +88,7 @@ const StyledPasswordInput = styled.input<{ $iserror: boolean }>` background: ${({ theme }) => theme.colors.grey7}; padding: 1rem 1.6rem; - width: 33.5rem; + width: 100%; height: 5.2rem; caret-color: ${({ theme }) => theme.colors.main1}; @@ -117,3 +127,11 @@ const SubTextSection = styled.div` font-weight: 600; } `; + +const InvalidPWTextSection = styled.div` + margin-top: 0.9rem; + + span { + font-weight: 600; + } +`; diff --git a/src/components/common/atomComponents/PlaceInput.tsx b/src/components/common/atomComponents/PlaceInput.tsx index b81e7fd7..a708b12b 100644 --- a/src/components/common/atomComponents/PlaceInput.tsx +++ b/src/components/common/atomComponents/PlaceInput.tsx @@ -51,7 +51,9 @@ function PlaceInput({ value, setValue, placeholder }: ValueProps) { export default PlaceInput; -const PlaceInputWrapper = styled.div``; +const PlaceInputWrapper = styled.div` + width: 100%; +`; const InputSection = styled.div` display: flex; @@ -78,7 +80,7 @@ const StyledTextInput = styled.input<{ $iserror: boolean }>` padding: 1rem 1.6rem; - width: 33.5rem; + width: 100%; height: 5.2rem; color: ${({ theme }) => theme.colors.white}; diff --git a/src/components/common/atomComponents/TextAreaInput.tsx b/src/components/common/atomComponents/TextAreaInput.tsx index f4c3032c..d559151d 100644 --- a/src/components/common/atomComponents/TextAreaInput.tsx +++ b/src/components/common/atomComponents/TextAreaInput.tsx @@ -24,6 +24,7 @@ function TextAreaInput({ value, setValue, placeholder }: ValueProps) { export default TextAreaInput; const TextAreaWrapper = styled.div` + width: 100%; position: relative; `; @@ -32,7 +33,7 @@ const StyledTextArea = styled.textarea` border-radius: 1rem; background-color: ${({ theme }) => theme.colors.grey8}; padding: 1.8rem; - width: 33.5rem; + width: 100%; height: 20.8rem; resize: none; color: ${({ theme }) => theme.colors.white}; diff --git a/src/components/common/atomComponents/TextInput.tsx b/src/components/common/atomComponents/TextInput.tsx index 18cf7156..62c4c6b6 100644 --- a/src/components/common/atomComponents/TextInput.tsx +++ b/src/components/common/atomComponents/TextInput.tsx @@ -9,10 +9,11 @@ interface ValueProps { value: string; setValue: (e: React.ChangeEvent) => void; resetValue: () => void; + max: number; placeholder: string; } -function TextInput({ value, setValue, resetValue, placeholder }: ValueProps) { +function TextInput({ value, setValue, resetValue, max, placeholder }: ValueProps) { const [focus, setFocus] = useState(false); const resetOnClick = () => { @@ -20,7 +21,7 @@ function TextInput({ value, setValue, resetValue, placeholder }: ValueProps) { setFocus(false); }; return ( - <> + setFocus(true)} - $iserror={value?.length > 15} + $iserror={value?.length > max} /> {focus && ( - {value && value.length > 15 ? : } + {value && value.length > max ? : } )} {value && - value.length > 15 && ( + value.length > max && ( - 공백포함 최대 15자까지 입력가능해요 + {`공백포함 최대 ${String(max)}자까지 입력가능해요`} )} - + ); } export default TextInput; -const TextInputWrapper = styled.div``; +const TextInputWrapper = styled.div` + display: flex; + flex-direction: column; + width: 100%; +`; const InputSection = styled.div` display: flex; position: relative; flex-direction: column; - +width: 100%; input:focus + div { display: flex; svg { @@ -77,7 +82,8 @@ const StyledTextInput = styled.input<{ $iserror: boolean }>` background: ${({ theme }) => theme.colors.grey7}; padding: 1rem 1.6rem; - width: 33.5rem; + width: 100%; + max-width: 39rem; height: 5.2rem; color: ${({ theme }) => theme.colors.white}; diff --git a/src/components/common/moleculesComponents/BottomBtnSection.tsx b/src/components/common/moleculesComponents/BottomBtnSection.tsx new file mode 100644 index 00000000..83652dff --- /dev/null +++ b/src/components/common/moleculesComponents/BottomBtnSection.tsx @@ -0,0 +1,22 @@ +import { ReactNode } from 'react'; + +import styled from 'styled-components'; + +interface BottomBtnProps { + children: ReactNode; +} + +const BottomBtnSection = ({ children }: BottomBtnProps) => { + return {children}; +}; + +const ButtomBtnWrapper = styled.div` + display: flex; + justify-content: center; + width: 100%; + position: fixed; + bottom: 1.2rem; + padding: 0 2rem; + gap: 1.4rem; +`; +export default BottomBtnSection; diff --git a/src/components/common/moleculesComponents/Header.tsx b/src/components/common/moleculesComponents/Header.tsx index bf0a6491..c6b79168 100644 --- a/src/components/common/moleculesComponents/Header.tsx +++ b/src/components/common/moleculesComponents/Header.tsx @@ -25,7 +25,7 @@ function Header({ position, setFunnelStep }: HeaderProps) { const { scheduleStep, setScheduleStep } = useScheduleStepContext(); const navigationOptions = [ { - title: '약속 생성하기', + title: '회의 일정 정하기', url: '/meet/create', }, { @@ -112,7 +112,7 @@ function Header({ position, setFunnelStep }: HeaderProps) { ) : undefined} {position === 'createMeeting' ? ( - 회의정보입력 + 회의 정보 입력 ) : position === 'confirmMeet' ? ( diff --git a/src/components/common/timetableComponents/Timetable.tsx b/src/components/common/timetableComponents/Timetable.tsx index c16cd699..53dbe72a 100644 --- a/src/components/common/timetableComponents/Timetable.tsx +++ b/src/components/common/timetableComponents/Timetable.tsx @@ -45,6 +45,7 @@ export default Timetable; const TimetableWrapper = styled.div` display: flex; + justify-content: center; width: 100%; gap: 1.1rem; `; diff --git a/src/pages/bestMeetTime/ChooseBestTime.tsx b/src/pages/bestMeetTime/ChooseBestTime.tsx index 541b0356..8a456ff2 100644 --- a/src/pages/bestMeetTime/ChooseBestTime.tsx +++ b/src/pages/bestMeetTime/ChooseBestTime.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import Header from 'components/common/moleculesComponents/Header'; import BestMeetTime from 'pages/bestMeetTime/components/BestMeetTime'; @@ -38,6 +38,7 @@ const ViewPickerWrapper = styled.div` `; const ChangeViewPicker = styled.div<{ $isClicked: boolean }>` + cursor: pointer; display: flex; justify-content: center; margin-top: 2.5rem; @@ -73,6 +74,7 @@ const ChangeViewPicker = styled.div<{ $isClicked: boolean }>` const ViewContainer = styled.div` display: flex; align-items: center; + justify-content: center; width: 100%; margin-top: 3.6rem; margin-bottom: 16.4rem; diff --git a/src/pages/bestMeetTime/components/BestMeetTime.tsx b/src/pages/bestMeetTime/components/BestMeetTime.tsx index f76c1a7b..d30a127b 100644 --- a/src/pages/bestMeetTime/components/BestMeetTime.tsx +++ b/src/pages/bestMeetTime/components/BestMeetTime.tsx @@ -1,7 +1,8 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { DropDown, DropUp } from 'components/Icon/icon'; import BestTimeCard from 'pages/bestMeetTime/components/BestTimeCard'; import ConfirmModal from 'pages/bestMeetTime/components/ConfirmModal'; @@ -21,14 +22,14 @@ function BestMeetTime() { const [selected, setSelected] = useState(0); const [showModal, setShowModal] = useState(false); const { meetingId } = useParams(); - const { isloading, bestTimeData, isError } = GetBestMeetimeListHooks( + const { isLoading, bestTimeData, isError } = GetBestMeetimeListHooks( (meetingId as unknown) as string, ); const navigate = useNavigate(); if (isError) { navigate(`/*`); } - if (isloading) { + if (isLoading) { return ( @@ -104,11 +105,11 @@ function BestMeetTime() { ) : null} ) : null} - + - + {showModal && bestMeetimeObj && ( ` + display: flex; + flex-direction: column; width: 100%; + align-items: center; `; const TitleSection = styled.article` display: flex; @@ -158,6 +164,7 @@ const AlternativeSection = styled.section` display: flex; flex-direction: column; gap: 1.6rem; + width: 100%; `; const BasicIconContainer = styled.div` display: flex; @@ -168,7 +175,9 @@ const BasicIconContainer = styled.div` height: 3rem; `; const BtnWrapper = styled.div` + display: flex; + justify-content: center; + width: 100%; position: fixed; bottom: 1.2rem; - border-radius: 50%; `; diff --git a/src/pages/bestMeetTime/components/BestTimeCard.tsx b/src/pages/bestMeetTime/components/BestTimeCard.tsx index bdba9e78..d9cae088 100644 --- a/src/pages/bestMeetTime/components/BestTimeCard.tsx +++ b/src/pages/bestMeetTime/components/BestTimeCard.tsx @@ -47,6 +47,7 @@ const BestTimeCardWrapper = styled.article<{ $rank: number; $selected: number }> display: flex; position: relative; flex-direction: row; + align-items: center; border: 1px solid ${({ $rank, $selected, theme }) => $rank === $selected ? theme.colors.main1 : theme.colors.grey7}; diff --git a/src/pages/bestMeetTime/components/BlankMeetCard.tsx b/src/pages/bestMeetTime/components/BlankMeetCard.tsx index 7ae5bf1a..d354c9f2 100644 --- a/src/pages/bestMeetTime/components/BlankMeetCard.tsx +++ b/src/pages/bestMeetTime/components/BlankMeetCard.tsx @@ -15,6 +15,7 @@ function BlankMeetCard() { export default BlankMeetCard; const BlankMeetCardWrapper = styled.div` + width: 100%; display: flex; align-items: center; justify-content: center; diff --git a/src/pages/bestMeetTime/hooks/getBestMeetimeList.ts b/src/pages/bestMeetTime/hooks/getBestMeetimeList.ts index 1ab9c09b..2fbec504 100644 --- a/src/pages/bestMeetTime/hooks/getBestMeetimeList.ts +++ b/src/pages/bestMeetTime/hooks/getBestMeetimeList.ts @@ -6,7 +6,7 @@ import { DateTimeData } from '../types/meetCardData'; const GetBestMeetimeListHooks = (meetingId: string) => { const [isError, setIsError] = useState(false); - const [isloading, setIsloading] = useState(true); + const [isLoading, setIsloading] = useState(true); const [bestTimeData, setBestTimeData] = useState(); const getBestMeetimeList = async () => { @@ -27,7 +27,7 @@ const GetBestMeetimeListHooks = (meetingId: string) => { }, [meetingId], ); - return { isloading, bestTimeData, isError }; + return { isLoading, bestTimeData, isError }; }; export default GetBestMeetimeListHooks; diff --git a/src/pages/completeCreateMeeting/CompleteCreateMeeting.tsx b/src/pages/completeCreateMeeting/CompleteCreateMeeting.tsx index 573b4727..2b7a3c36 100644 --- a/src/pages/completeCreateMeeting/CompleteCreateMeeting.tsx +++ b/src/pages/completeCreateMeeting/CompleteCreateMeeting.tsx @@ -1,6 +1,7 @@ import stepingCheck from 'assets/images/steppingCheck.png'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import CheckPoint from 'components/common/moleculesComponents/CheckPoint'; import Header from 'components/common/moleculesComponents/Header'; import { useNavigate, useParams } from 'react-router-dom'; @@ -24,11 +25,11 @@ const CompleteCreateMeeting = () => { mainText={'회의 생성 완료!'} subText={'이제 나의 가능 시간을 입력하러 가볼까요?'} /> - + - + ); @@ -36,10 +37,6 @@ const CompleteCreateMeeting = () => { export default CompleteCreateMeeting; -const BtnWrapper = styled.div` - position: absolute; - bottom: 1.2rem; -`; const CompleteCreateMeetingWrapper = styled.div` display: flex; flex-direction: column; diff --git a/src/pages/createMeeting/components/ReturnTitleComponent.tsx b/src/pages/createMeeting/components/ReturnTitleComponent.tsx index c7340c69..bcdcbeb7 100644 --- a/src/pages/createMeeting/components/ReturnTitleComponent.tsx +++ b/src/pages/createMeeting/components/ReturnTitleComponent.tsx @@ -25,7 +25,7 @@ const funnelSteps: FunnelSteps = { }, hostInfo: { main: '방장 정보를 입력해주세요', - sub: '관리자 페이지에 접속할 때 필요해요', + sub: '방장 페이지에 접속할 때 필요해요', }, additionalInfo: { main: '더 알리고 싶은 내용이 있나요?', diff --git a/src/pages/createMeeting/components/useFunnel/SetAdditionalInfo.tsx b/src/pages/createMeeting/components/useFunnel/SetAdditionalInfo.tsx index dc511ea2..35e5eae4 100644 --- a/src/pages/createMeeting/components/useFunnel/SetAdditionalInfo.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetAdditionalInfo.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React from 'react'; import { isAxiosError } from 'axios'; import Button from 'components/common/atomComponents/Button'; @@ -6,6 +6,7 @@ import Text from 'components/common/atomComponents/Text'; import TextAreaInput from 'components/common/atomComponents/TextAreaInput'; import BottomSheet from 'components/common/BottomSheet/BottomSheet'; import useModalState from 'components/common/Modal/hooks/useModalState'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { durationType, placeType, weekDayType } from 'pages/createMeeting/data/meetingInfoData'; import { FunnelProps, MeetingInfo } from 'pages/createMeeting/types/useFunnelInterface'; import { useNavigate } from 'react-router-dom'; @@ -65,7 +66,7 @@ function SetAdditionalInfo({ meetingInfo, setMeetingInfo }: FunnelProps) { setValue={textAreaOnChange} placeholder={'회의 안건, 준비물 등 회의와 관련하여 알리고 싶은 추가 내용을 적어 보세요.'} /> - + - + @@ -138,17 +139,12 @@ function SetAdditionalInfo({ meetingInfo, setMeetingInfo }: FunnelProps) { export default SetAdditionalInfo; const SetAdditionalInfoWrapper = styled.div` +width:100%; display: flex; align-items: center; justify-content: center; `; -const StyledBtnWrapper = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; -`; - const BottomSheetDescription = styled.div` display: flex; flex-direction: column; diff --git a/src/pages/createMeeting/components/useFunnel/SetDates.css b/src/pages/createMeeting/components/useFunnel/SetDates.css index 5765289d..dba47b97 100644 --- a/src/pages/createMeeting/components/useFunnel/SetDates.css +++ b/src/pages/createMeeting/components/useFunnel/SetDates.css @@ -29,7 +29,7 @@ } .rmdp-calendar { - width: 36rem; + width: 100%; height: 37.9rem; } @@ -38,12 +38,12 @@ } .rmdp-day-picker > div { - width: 36rem; + width: 100%; } .rmdp-day-picker > div > div:first-child { margin-bottom: 0.7rem; - border-bottom: 0.5px solid white; + /* border-bottom: 0.5px solid white; */ } /* .rmdp-week { @@ -154,10 +154,10 @@ pointer-events: none !important; } .rmdp-day { - width: 4rem; - height: 4rem; + width: 5rem; + height: 5rem; /*날짜*/ - padding: 2.5rem 2.5rem; + padding: 2.7rem 2.7rem; } .rmdp-day span { font-weight: 400; @@ -173,7 +173,7 @@ .rmdp-week-day { /*요일*/ - width: 4rem; + width: 5.4rem !important; height: 4rem; padding: 0 0.4rem; } @@ -197,3 +197,7 @@ .rmdp-day.rmdp-disabled.rmdp-deactive { color: var(--rmdp-grey10) !important; } + +.rmdp-header-values.rmdp-header-values span { + padding: 0px; +} diff --git a/src/pages/createMeeting/components/useFunnel/SetDates.tsx b/src/pages/createMeeting/components/useFunnel/SetDates.tsx index 05a32a73..fa408993 100644 --- a/src/pages/createMeeting/components/useFunnel/SetDates.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetDates.tsx @@ -5,6 +5,7 @@ import './SetDates.css'; import { methodStateAtom } from 'atoms/atom'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { FunnelProps, MeetingInfo } from 'pages/createMeeting/types/useFunnelInterface'; import { Calendar, DateObject, getAllDatesInRange } from 'react-multi-date-picker'; import { useRecoilState } from 'recoil'; @@ -27,7 +28,6 @@ const months = [ const weekDays = ['일', '월', '화', '수', '목', '금', '토']; const dateRangeFormat = 'YYYY/MM/DD/ddd'; function SetDates({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { - // const [multiple, setMultiple] = useState(false); const [multiple, setMultiple] = useRecoilState(methodStateAtom); return ( @@ -76,6 +76,8 @@ function SetDates({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { shadow={false} showOtherDays weekDays={weekDays} + headerOrder={['LEFT_BUTTON', 'YEAR_MONTH', 'RIGHT_BUTTON']} + monthYearSeparator={'년 '} className="bg-dark" range={!multiple} multiple={multiple} @@ -117,7 +119,7 @@ function SetDates({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { /> - + - + ); } @@ -155,18 +157,15 @@ const SetDatesWrapper = styled.div` display: flex; align-items: center; justify-content: center; + width: 100%; `; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - z-index: 3; -`; const DateSelectorWrapper = styled.div` display: flex; flex-direction: column; align-items: center; justify-content: center; + width: 100%; `; const RangeInputBox = styled.div<{ $isClicked: boolean }>` @@ -177,19 +176,20 @@ const RangeInputBox = styled.div<{ $isClicked: boolean }>` border-radius: 0.8rem; border-color: ${({ $isClicked, theme }) => $isClicked ? theme.colors.grey5 : theme.colors.main1}; - width: 33.5rem; + width: 100%; height: 5.2rem; + cursor: pointer; color: ${({ theme }) => theme.colors.white}; `; const Input = styled.input` appearance: none; - margin: 1.5rem 0 1.5rem 1.6rem; background-image: url("data:image/svg+xml,%3Csvg width='22' height='22' viewBox='0 0 22 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='11' cy='11' r='10' stroke='%23D9D9D9' stroke-width='2'/%3E%3C/svg%3E%0A"); background-repeat: no-repeat; - width: 2.2rem; + width: 3.2rem; height: 2.2rem; - + margin-left: 1.5rem; + cursor: pointer; &:checked { background-image: url("data:image/svg+xml,%3Csvg width='22' height='22' viewBox='0 0 22 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='11' cy='11' r='11' fill='%233C49FF'/%3E%3Ccircle cx='11' cy='11' r='4' fill='white'/%3E%3C/svg%3E "); } @@ -200,9 +200,10 @@ const Input = styled.input` const Label = styled.label` display: flex; align-items: center; - margin-left: 1.2rem; + padding: 0 1.2rem; height: 5rem; - width: 28rem; + width: 100%; + cursor: pointer; ${({ theme }) => theme.fonts.button1}; color: ${({ theme }) => theme.colors.grey6}; `; @@ -216,7 +217,7 @@ const MultipleInputBox = styled.div<{ $isClicked: boolean }>` border-color: ${({ $isClicked, theme }) => $isClicked ? theme.colors.main1 : theme.colors.grey5}; background-color: transparent; - width: 33.5rem; + width: 100%; height: 5.2rem; color: ${({ theme }) => theme.colors.white}; `; @@ -224,7 +225,7 @@ const MultipleInputBox = styled.div<{ $isClicked: boolean }>` const InputContianer = styled.div` display: flex; flex-direction: column; - align-items: left; + width: 100%; margin-bottom: 3rem; div:first-child { margin-bottom: 1.1rem; diff --git a/src/pages/createMeeting/components/useFunnel/SetDuration.tsx b/src/pages/createMeeting/components/useFunnel/SetDuration.tsx index 45fcf35c..02c7f1a2 100644 --- a/src/pages/createMeeting/components/useFunnel/SetDuration.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetDuration.tsx @@ -1,5 +1,6 @@ import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { durationType } from 'pages/createMeeting/data/meetingInfoData'; import { FunnelProps, MeetingInfo } from 'pages/createMeeting/types/useFunnelInterface'; import styled from 'styled-components'; @@ -26,7 +27,7 @@ function SetDuration({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { ); })} - + - + ); } @@ -54,16 +55,14 @@ const SetAdditionalInfoWrapper = styled.div` display: flex; align-items: center; justify-content: center; -`; - -const StyledBtnWrapper = styled.section` - position: fixed; - bottom: 1.2rem; + width: 100%; `; const DurationWrapper = styled.div` - display: flex; - flex-wrap: wrap; + display: grid; + grid-template-columns: repeat(2, 1fr); /* 3열로 나누기 */ + grid-template-rows: repeat(3, 1fr); /* 2행으로 나누기 */ + width: 100%; gap: 1.1rem; justify-content: center; diff --git a/src/pages/createMeeting/components/useFunnel/SetHostInfo.tsx b/src/pages/createMeeting/components/useFunnel/SetHostInfo.tsx index e0dc7f9c..20726fe4 100644 --- a/src/pages/createMeeting/components/useFunnel/SetHostInfo.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetHostInfo.tsx @@ -4,6 +4,7 @@ import Button from 'components/common/atomComponents/Button'; import PasswordInput from 'components/common/atomComponents/PasswordInput'; import Text from 'components/common/atomComponents/Text'; import TextInput from 'components/common/atomComponents/TextInput'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { FunnelProps, MeetingInfo } from 'pages/createMeeting/types/useFunnelInterface'; import styled from 'styled-components'; import { theme } from 'styles/theme'; @@ -22,11 +23,7 @@ function SetHostInfo({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { const passWordOnChange = (e: React.ChangeEvent) => { setMeetingInfo((prev: MeetingInfo) => { - if (e.target.value.length < 9) { - return { ...prev, password: e.target.value }; - } - alert('비밀번호는 8자리 이하로 말해주세요'); - return { ...prev }; + return { ...prev, password: e.target.value }; }); }; @@ -44,6 +41,15 @@ function SetHostInfo({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { } }; + const validateForm = () => { + return ( + meetingInfo.name && + meetingInfo.name.length <= 15 && + meetingInfo.password.length >= 4 && + meetingInfo.password.length <= 8 + ); + }; + return ( @@ -55,6 +61,7 @@ function SetHostInfo({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { value={meetingInfo.name} setValue={hostOnChange} resetValue={resetHost} + max={8} placeholder={'방장 이름'} /> @@ -64,28 +71,20 @@ function SetHostInfo({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { - + - + ); } @@ -98,12 +97,6 @@ const SetHostInfoWrapper = styled.div` justify-content: center; `; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; -`; - const HostNameSection = styled.section` display: flex; flex-direction: column; @@ -113,5 +106,4 @@ const HostInfoSection = styled.div` display: flex; flex-direction: column; gap: 3.4rem; - padding: 0 2rem; `; diff --git a/src/pages/createMeeting/components/useFunnel/SetPlace.tsx b/src/pages/createMeeting/components/useFunnel/SetPlace.tsx index 948b0136..55bc9d32 100644 --- a/src/pages/createMeeting/components/useFunnel/SetPlace.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetPlace.tsx @@ -1,6 +1,7 @@ import Button from 'components/common/atomComponents/Button'; import PlaceInput from 'components/common/atomComponents/PlaceInput'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { placeType } from 'pages/createMeeting/data/meetingInfoData'; import { FunnelProps } from 'pages/createMeeting/types/useFunnelInterface'; import styled from 'styled-components'; @@ -39,7 +40,7 @@ function SetPlace({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { ); })} - + - + ); } export default SetPlace; -const SetPlaceWrapper = styled.div``; +const SetPlaceWrapper = styled.div` + display: flex; + justify-content: center; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; + width: 100%; `; const PlaceInfoSection = styled.section` display: flex; flex-direction: column; gap: 1rem; + width: 100%; `; const PlaceSection = styled.section``; diff --git a/src/pages/createMeeting/components/useFunnel/SetTitle.tsx b/src/pages/createMeeting/components/useFunnel/SetTitle.tsx index 8720ec27..f018df72 100644 --- a/src/pages/createMeeting/components/useFunnel/SetTitle.tsx +++ b/src/pages/createMeeting/components/useFunnel/SetTitle.tsx @@ -3,6 +3,7 @@ import React from 'react'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; import TextInput from 'components/common/atomComponents/TextInput'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import { FunnelProps, MeetingInfo } from 'pages/createMeeting/types/useFunnelInterface'; import styled from 'styled-components'; @@ -24,9 +25,10 @@ function SetTitle({ meetingInfo, setMeetingInfo, setStep }: FunnelProps) { value={meetingInfo.title} setValue={titleOnChange} resetValue={resetTitle} + max={15} placeholder={'서비스 기획 1차 회의'} /> - + - + ); } @@ -56,10 +58,14 @@ const SetTitleWrapper = styled.div` display: flex; align-items: center; justify-content: center; + width: 100%; `; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; -`; +// const StyledBtnSection = styled.section` +// position: absolute; +// width: 100%; +// display: flex; +// justify-content: center; +// bottom: 1.2rem; +// border-radius: 50%; +// `; diff --git a/src/pages/cueCard/CueCard.tsx b/src/pages/cueCard/CueCard.tsx index 7c98975d..db5b5519 100644 --- a/src/pages/cueCard/CueCard.tsx +++ b/src/pages/cueCard/CueCard.tsx @@ -2,6 +2,7 @@ import { useRef } from 'react'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import Header from 'components/common/moleculesComponents/Header'; import html2canvas from 'html2canvas'; import CueCardTitle from 'pages/cueCard/components/CueCardTitle'; @@ -32,7 +33,7 @@ function CueCard() {
- + - + ); } @@ -62,12 +63,3 @@ const CueCardWrapper = styled.div` width: 100%; `; - -const ButtonSection = styled.section` - display: flex; - position: fixed; - bottom: 1.2rem; - flex-direction: row; - gap: 1.4rem; - justify-content: center; -`; diff --git a/src/pages/errorLoading/ErrorPage404.tsx b/src/pages/errorLoading/ErrorPage404.tsx index 2608b094..bd3e90f3 100644 --- a/src/pages/errorLoading/ErrorPage404.tsx +++ b/src/pages/errorLoading/ErrorPage404.tsx @@ -1,11 +1,13 @@ import Error404 from 'assets/images/Error404.png'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; -import { Link } from 'react-router-dom'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; +import { useNavigate } from 'react-router-dom'; import styled from 'styled-components'; import { theme } from 'styles/theme'; function ErrorPage404() { + const navigate = useNavigate(); return ( @@ -27,13 +29,16 @@ function ErrorPage404() { - - - - - + + + ); } diff --git a/src/pages/loginEntrance/LoginEntrance.tsx b/src/pages/loginEntrance/LoginEntrance.tsx index d9bd5ff4..9f08703a 100644 --- a/src/pages/loginEntrance/LoginEntrance.tsx +++ b/src/pages/loginEntrance/LoginEntrance.tsx @@ -38,5 +38,6 @@ export default LoginEntrance; const LoginEntranceWrapper = styled.div` display: flex; flex-direction: column; + align-items: center; width: 100%; `; diff --git a/src/pages/loginEntrance/components/HostComponent.tsx b/src/pages/loginEntrance/components/HostComponent.tsx index f99fd3ee..962b961a 100644 --- a/src/pages/loginEntrance/components/HostComponent.tsx +++ b/src/pages/loginEntrance/components/HostComponent.tsx @@ -5,6 +5,7 @@ import Button from 'components/common/atomComponents/Button'; import PasswordInput from 'components/common/atomComponents/PasswordInput'; import Text from 'components/common/atomComponents/Text'; import TextInput from 'components/common/atomComponents/TextInput'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import Header from 'components/common/moleculesComponents/Header'; import TitleComponent from 'components/common/moleculesComponents/TitleComponents'; import { useNavigate, useParams } from 'react-router-dom'; @@ -75,7 +76,7 @@ function HostComponent({ hostInfo, setHostInfo }: HostProps) { } }; return ( - <> +
@@ -87,6 +88,7 @@ function HostComponent({ hostInfo, setHostInfo }: HostProps) { value={hostInfo.name} setValue={hostOnChange} resetValue={resetHostId} + max={8} placeholder={'방장 이름'} /> @@ -96,13 +98,13 @@ function HostComponent({ hostInfo, setHostInfo }: HostProps) { - + - + {ismodalOpen ? : undefined} {isLoginModalOpen ? ( ) : ( undefined )} - + ); } export default HostComponent; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; +const HostComponentWrapper = styled.div` + display: flex; + flex-direction: column; + + align-items: center; + width: 100%; `; const HostNameSection = styled.section` display: flex; flex-direction: column; gap: 1rem; + width: 100%; `; const HostInfoSection = styled.div` display: flex; flex-direction: column; gap: 3.4rem; + + width: 100%; `; diff --git a/src/pages/loginEntrance/components/IncorrectInfoModal.tsx b/src/pages/loginEntrance/components/IncorrectInfoModal.tsx index 1e1218df..ebe7af8e 100644 --- a/src/pages/loginEntrance/components/IncorrectInfoModal.tsx +++ b/src/pages/loginEntrance/components/IncorrectInfoModal.tsx @@ -1,8 +1,7 @@ -import { Link, useParams } from 'react-router-dom'; -import React, { Dispatch, SetStateAction, useState } from 'react'; +import { Dispatch, SetStateAction } from 'react'; -import { ExitIc } from 'components/Icon/icon'; import Text from 'components/common/atomComponents/Text'; +import { ExitIc } from 'components/Icon/icon'; import styled from 'styled-components'; import { theme } from 'styles/theme'; diff --git a/src/pages/loginEntrance/components/MemberComponent.tsx b/src/pages/loginEntrance/components/MemberComponent.tsx index ea8187b1..22cac341 100644 --- a/src/pages/loginEntrance/components/MemberComponent.tsx +++ b/src/pages/loginEntrance/components/MemberComponent.tsx @@ -4,6 +4,7 @@ import { userNameAtom } from 'atoms/atom'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; import TextInput from 'components/common/atomComponents/TextInput'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import Header from 'components/common/moleculesComponents/Header'; import TitleComponent from 'components/common/moleculesComponents/TitleComponents'; import { useParams } from 'react-router'; @@ -57,37 +58,35 @@ function MemberComponent({ hostInfo, setHostInfo }: HostProps) { value={hostInfo.name} setValue={hostOnChange} resetValue={resetHostId} + max={8} placeholder={'참여자 이름'} /> - + - + ); } export default MemberComponent; -const StyledBtnSection = styled.section` - position: fixed; - bottom: 1.2rem; - border-radius: 50%; -`; - const HostNameSection = styled.section` display: flex; flex-direction: column; gap: 1rem; + width: 100%; `; const HostInfoSection = styled.div` display: flex; flex-direction: column; gap: 3.4rem; + + width: 100%; `; diff --git a/src/pages/loginEntrance/components/NoAvailableTimeModal.tsx b/src/pages/loginEntrance/components/NoAvailableTimeModal.tsx index f1d83cbe..2904a546 100644 --- a/src/pages/loginEntrance/components/NoAvailableTimeModal.tsx +++ b/src/pages/loginEntrance/components/NoAvailableTimeModal.tsx @@ -1,8 +1,7 @@ -import React, { Dispatch, SetStateAction, useState } from 'react'; +import { Dispatch, SetStateAction } from 'react'; import Text from 'components/common/atomComponents/Text'; -import { ExitIc } from 'components/Icon/icon'; -import { Link, useParams } from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router-dom'; import styled from 'styled-components'; import { theme } from 'styles/theme'; @@ -12,30 +11,26 @@ interface ModalProps { function NoAvailableTimeModal({ setIsModalOpen }: ModalProps) { const { meetingId } = useParams(); + const navigate = useNavigate(); + return ( - + setIsModalOpen(false)}> - setIsModalOpen(false)}> - - - - 잠깐! - - - 나의 가능 시간을 입력해야 + + 가능 시간을 입력하지 않으셨나요? + + + 나의 가능 시간을 입력해야
방장 페이지에 접속할 수 있어요 +
+
+ + navigate(`/host/select/${meetingId}?step=selectSchedule`)}> - 방장 페이지에 접속할 수 있어요! + 가능 시간 입력하러 가기 - - - - - 가능 시간 입력하러 가기 - - - +
); @@ -43,6 +38,11 @@ function NoAvailableTimeModal({ setIsModalOpen }: ModalProps) { export default NoAvailableTimeModal; +const ModalText = styled.span` + ${({ theme }) => theme.fonts.body2}; + color: ${({ theme }) => theme.colors.grey3}; +`; + const ReturnModalWrpper = styled.div` display: flex; position: absolute; @@ -57,14 +57,16 @@ const ReturnModalWrpper = styled.div` const ModalSection = styled.article` display: flex; - position: relative; + /* position: relative; */ flex-direction: column; align-items: center; justify-content: center; + gap: 2.4rem; border-radius: 0.8rem; background-color: ${({ theme }) => theme.colors.grey8}; - width: 28.8rem; - height: 21.2rem; + width: 32.4rem; + height: 18.4rem; + padding: 2.4rem 2rem; `; const IconCatainer = styled.div` @@ -83,15 +85,17 @@ const MentContainer = styled.div` display: flex; flex-direction: column; align-items: center; - margin-top: 1.2rem; + justify-content: center; + gap: 0.8rem; + text-align: center; `; const ModalBtn = styled.button` display: flex; align-items: center; justify-content: center; - margin-top: 2.4rem; + border-radius: 0.6rem; background-color: ${({ theme }) => theme.colors.main1}; - width: 17.6rem; + width: 100%; height: 4.2rem; `; diff --git a/src/pages/onBoarding/OnBoarding.tsx b/src/pages/onBoarding/OnBoarding.tsx index 81f520fd..382553c6 100644 --- a/src/pages/onBoarding/OnBoarding.tsx +++ b/src/pages/onBoarding/OnBoarding.tsx @@ -8,8 +8,9 @@ import MakePng from 'assets/images/make.png'; import PointPng from 'assets/images/point.png'; import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import Header from 'components/common/moleculesComponents/Header'; -import { Link } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; import styled from 'styled-components'; import { Autoplay, Navigation, Pagination } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; @@ -44,11 +45,14 @@ const slides = [ ]; function OnBoarding() { + const navigate = useNavigate(); + const handleCreateMeeting = () => { + navigate('/meet/create?step=title'); + }; return ( <>
- {slide.icon} */} {/* 로딩 속도로 차선책 png code */} {slide.icon} - + <> - + ))} - - - - - - + + + ); @@ -92,6 +93,10 @@ function OnBoarding() { export default OnBoarding; const OnboardingWrapper = styled.div` + display: flex; + flex-direction: column; + + align-items: center; width: 100%; `; @@ -100,8 +105,6 @@ const SwiperContext = styled.div` height: 50rem; `; -const SwiperSection = styled.section``; - const StyledSwiperSlide = styled(SwiperSlide)` display: flex; flex-direction: column; @@ -113,10 +116,3 @@ const SvgContainer = styled.section` height: 33rem; } `; - -const ExplainContainer = styled.section``; - -const ButtonSection = styled.section` - position: fixed; - bottom: 1.2rem; -`; diff --git a/src/pages/selectSchedule/SelectSchedule.tsx b/src/pages/selectSchedule/SelectSchedule.tsx index 151a0695..e6ab6ccc 100644 --- a/src/pages/selectSchedule/SelectSchedule.tsx +++ b/src/pages/selectSchedule/SelectSchedule.tsx @@ -66,7 +66,12 @@ function SelectSchedule() { sub={TITLES[scheduleStep].sub} padding={scheduleStep === 'selectTimeSlot' ? `0 0 2.6rem` : `4.4rem 0 3.2rem 0`} /> - {isLottieOpen && } + {isLottieOpen && ( + + )} theme.colors.dim_gradient}; diff --git a/src/pages/selectSchedule/components/selectPriority/PriorityDropdown.tsx b/src/pages/selectSchedule/components/selectPriority/PriorityDropdown.tsx index d289137c..49a57f7a 100644 --- a/src/pages/selectSchedule/components/selectPriority/PriorityDropdown.tsx +++ b/src/pages/selectSchedule/components/selectPriority/PriorityDropdown.tsx @@ -193,10 +193,10 @@ const PriorityDropdownWrapper = styled.div` flex-direction: column; gap: 1.2rem; justify-content: start; - + align-items: center; margin-top: 3rem; margin-bottom: 7.5rem; - width: 100%; + width: 33.5rem; height: 18rem; `; @@ -254,7 +254,7 @@ const DropdownWrapper = styled.div` background-color: ${({ theme }) => theme.colors.grey6}; width: 27.4rem; height: fit-content; - max-height: 15.6rem; + max-height: 18.3rem; overflow-x: hidden; overflow-y: auto; diff --git a/src/pages/selectSchedule/components/selectTimeSlot/OnboardingLottie.tsx b/src/pages/selectSchedule/components/selectTimeSlot/OnboardingLottie.tsx index 51eb13b6..101817c2 100644 --- a/src/pages/selectSchedule/components/selectTimeSlot/OnboardingLottie.tsx +++ b/src/pages/selectSchedule/components/selectTimeSlot/OnboardingLottie.tsx @@ -5,9 +5,10 @@ import styled from 'styled-components'; interface OnboardingLottieProps { onClose: () => void; + top: number; } -function OnboardingLottie({ onClose }: OnboardingLottieProps) { +function OnboardingLottie({ onClose, top }: OnboardingLottieProps) { const defaultOptions = { loop: true, autoplay: true, @@ -18,7 +19,7 @@ function OnboardingLottie({ onClose }: OnboardingLottieProps) { }; return ( <> - + @@ -29,9 +30,9 @@ function OnboardingLottie({ onClose }: OnboardingLottieProps) { export default OnboardingLottie; -const OnboardingLottieWrapper = styled.aside` +const OnboardingLottieWrapper = styled.aside<{ $top: number }>` position: absolute; - top: 29.4rem; + top: ${({ $top }) => $top}rem; z-index: 1; `; diff --git a/src/pages/selectSchedule/components/selectTimeSlot/SelectionColumn.tsx b/src/pages/selectSchedule/components/selectTimeSlot/SelectionColumn.tsx index 7d63b3da..eb1fe6a3 100644 --- a/src/pages/selectSchedule/components/selectTimeSlot/SelectionColumn.tsx +++ b/src/pages/selectSchedule/components/selectTimeSlot/SelectionColumn.tsx @@ -26,16 +26,12 @@ function SelectionColumn({ date, timeSlots }: ColumnStructure) { * 가능시간 입력 시간표 스타일링 * 1. border-top: 30분 단위는 dashed, 1시간 단위는 solid * 2. border: 탭투탭 시 startSlot에 dashed - * 3. background-color: 선택된 시간이면서 맨 첫번째 Slot이라면 그라디언트, 그 외는 main1, 선택된 시간이 아니면 transparent; + * 3. background-color: 선택된 시간이라면 main1, 선택된 시간이 아니면 transparent; */ const borderStyle = slotId.endsWith(':30') ? 'dashed' : 'solid'; const border = isStartSlot && `1px dashed ${theme.colors.main5}`; const borderTop = `1px ${borderStyle} ${theme.colors.grey7}`; - const background = isSelectedSlot - ? isFirstSlot - ? 'linear-gradient(180deg, #496AFF 0%, #3253FF 75%)' - : theme.colors.main1 - : 'transparent'; + const background = isSelectedSlot ? theme.colors.main1 : 'transparent'; return ` cursor:pointer; diff --git a/src/pages/selectSchedule/components/selectTimeSlot/TimeSlotCta.tsx b/src/pages/selectSchedule/components/selectTimeSlot/TimeSlotCta.tsx index 1de825e1..01c25098 100644 --- a/src/pages/selectSchedule/components/selectTimeSlot/TimeSlotCta.tsx +++ b/src/pages/selectSchedule/components/selectTimeSlot/TimeSlotCta.tsx @@ -51,8 +51,7 @@ const BtnDim = styled.div` margin-top: 3rem; background: ${({ theme }) => theme.colors.dim_gradient}; - padding-bottom: 2.9rem; - + padding: 0 2rem 2.9rem 2rem; width: 100%; height: 16.4rem; diff --git a/src/pages/steppingStone/components/SteppingBody.tsx b/src/pages/steppingStone/components/SteppingBody.tsx index 54e16c9f..5177f8a8 100644 --- a/src/pages/steppingStone/components/SteppingBody.tsx +++ b/src/pages/steppingStone/components/SteppingBody.tsx @@ -77,12 +77,6 @@ function SteppingBody({ steppingType, meetingTitle }: SteppingProps) { export default SteppingBody; -// const LinkToolTipIcon = styled(LinkTooltipIc)` -// position: relative; -// left: 10.3rem; -// cursor: pointer; -// `; - const ImageSection = styled.section` display: flex; align-items: center; diff --git a/src/pages/steppingStone/components/SteppingBtnSection.tsx b/src/pages/steppingStone/components/SteppingBtnSection.tsx index b46a0042..04ce89d8 100644 --- a/src/pages/steppingStone/components/SteppingBtnSection.tsx +++ b/src/pages/steppingStone/components/SteppingBtnSection.tsx @@ -2,13 +2,13 @@ import Button from 'components/common/atomComponents/Button'; import Text from 'components/common/atomComponents/Text'; +import BottomBtnSection from 'components/common/moleculesComponents/BottomBtnSection'; import CopyToClipboard from 'react-copy-to-clipboard'; import { useParams } from 'react-router'; -import { Link } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; import styled from 'styled-components'; import { notify } from 'utils/toast/copyLinkToast'; - interface SteppingProps { steppingType: string; } @@ -16,19 +16,18 @@ interface SteppingProps { function SteppingBtnSection({ steppingType }: SteppingProps) { const { meetingId } = useParams(); + const navigate=useNavigate(); return ( <> - + { { hostScheduleComplete: ( <> - - - @@ -40,30 +39,24 @@ function SteppingBtnSection({ steppingType }: SteppingProps) { ), meetEntrance: ( <> - - - - - - ), memberScheduleComplete: ( <> - - - ), }[steppingType] } - + ); } diff --git a/src/styles/globalStyles.ts b/src/styles/globalStyles.ts index 5209820c..29b2e69d 100644 --- a/src/styles/globalStyles.ts +++ b/src/styles/globalStyles.ts @@ -12,7 +12,9 @@ const GlobalStyle = createGlobalStyle` } - +input { + margin:0; +} html, body { margin: 0 auto;