diff --git a/frontend/src/components/common/Button/Button.tsx b/frontend/src/components/common/Button/Button.tsx index 5a36ef90d..37c10dbd7 100644 --- a/frontend/src/components/common/Button/Button.tsx +++ b/frontend/src/components/common/Button/Button.tsx @@ -84,12 +84,12 @@ const S = { const labelButtonStyle = css` position: absolute; top: 1.2rem; - right: -3.4rem; + right: -3.37rem; height: 6.2rem; padding: 0 0.6rem 0 0.2rem; background: #fcfcfc; border: 1.5px solid #e1e4eb; - border-left: none; + border-left: 0.2px solid #e1e4eb; ${borderRadius('left')} `; diff --git a/frontend/src/components/ui/Accordion/BasePanel.tsx b/frontend/src/components/ui/Accordion/BasePanel.tsx index 8255c5f96..4deeda856 100644 --- a/frontend/src/components/ui/Accordion/BasePanel.tsx +++ b/frontend/src/components/ui/Accordion/BasePanel.tsx @@ -1,3 +1,4 @@ +import { ChevronLeftIcon } from '@heroicons/react/24/outline'; import { css } from 'styled-components'; import type { ReactNode } from 'react'; @@ -5,7 +6,6 @@ import { useContext } from 'react'; import Button from '@common/Button'; import FlexBox from '@common/FlexBox'; -import Text from '@common/Text'; import type { BasePanelType } from '.'; import { AccordionContext } from '.'; @@ -25,8 +25,8 @@ const BasePanel = ({ render }: Props) => { {isBasePanelOpen && render(basePanelType)} {canViewCloseButton && ( - )} @@ -38,20 +38,4 @@ const containerCss = css` margin-left: 7rem; `; -export const closeAllPanelButtonCss = css` - width: 2rem; - height: 3rem; - - border: 1px solid lightgrey; - border-left: 0; - border-radius: 0; - - position: absolute; - top: 50%; - right: -2rem; - - background-color: white; - color: black; -`; - export default BasePanel; diff --git a/frontend/src/components/ui/Accordion/LastPanel.tsx b/frontend/src/components/ui/Accordion/LastPanel.tsx index 524fe9238..ca720d632 100644 --- a/frontend/src/components/ui/Accordion/LastPanel.tsx +++ b/frontend/src/components/ui/Accordion/LastPanel.tsx @@ -1,3 +1,4 @@ +import { ChevronLeftIcon } from '@heroicons/react/24/outline'; import { css } from 'styled-components'; import type { ReactNode } from 'react'; @@ -5,10 +6,8 @@ import { useContext } from 'react'; import Button from '@common/Button'; import FlexBox from '@common/FlexBox'; -import Text from '@common/Text'; import { AccordionContext } from '.'; -import { closeAllPanelButtonCss } from './BasePanel'; import { useAccordionAction } from './hooks/useAccordionAction'; interface Props { @@ -16,7 +15,7 @@ interface Props { } const LastPanel = ({ render }: Props) => { - const { handleCloseAllPanel, handleCloseLastPanel } = useAccordionAction(); + const { handleCloseLastPanel } = useAccordionAction(); const { isLastPanelOpen, isBasePanelOpen } = useContext(AccordionContext); return ( @@ -24,11 +23,8 @@ const LastPanel = ({ render }: Props) => { {isLastPanelOpen && isBasePanelOpen && ( <> {render()} - - )} @@ -40,20 +36,4 @@ const containerCss = css` position: relative; `; -const closeLastPanelButtonCss = css` - width: 3rem; - height: 3rem; - - border: 1px solid lightgrey; - border-left: 0; - border-radius: 0; - - position: absolute; - top: 0; - right: -3rem; - - background-color: white; - color: black; -`; - export default LastPanel; diff --git a/frontend/src/components/ui/DetailedStationInfo/DetailedStation.tsx b/frontend/src/components/ui/DetailedStationInfo/DetailedStation.tsx index 6dcbec1b3..eae5e6e34 100644 --- a/frontend/src/components/ui/DetailedStationInfo/DetailedStation.tsx +++ b/frontend/src/components/ui/DetailedStationInfo/DetailedStation.tsx @@ -8,7 +8,6 @@ import Alert from '@common/Alert'; import Box from '@common/Box'; import Button from '@common/Button'; import FlexBox from '@common/FlexBox'; -import Text from '@common/Text'; import ChargerCard from '@ui/DetailedStationInfo/ChargerCard'; import ChargerReportConfirmation from '@ui/DetailedStationInfo/ChargerReportConfirmation'; @@ -78,7 +77,8 @@ const containerCss = css` height: 100vh; background-color: white; box-shadow: 1px 1px 2px gray; - + border-left: 0.5px solid #e1e4eb; + border-right: 0.5px solid #e1e4eb; overflow: scroll; `; diff --git a/frontend/src/components/ui/Navigator/Navigator.tsx b/frontend/src/components/ui/Navigator/Navigator.tsx index 45a595bad..fbe593f27 100644 --- a/frontend/src/components/ui/Navigator/Navigator.tsx +++ b/frontend/src/components/ui/Navigator/Navigator.tsx @@ -2,7 +2,7 @@ import type { BasePanelType } from '@ui/Accordion'; import Accordion from '@ui/Accordion'; import DetailedStationInfo from '@ui/DetailedStationInfo'; import ServerStationFilters from '@ui/ServerStationFilters'; -import StationList from '@ui/StationList/StationList'; +import StationListWindow from '@ui/StationList/StationListWindow'; import StationSearchWindow from '@ui/StationSearchWindow'; const Navigator = () => { @@ -13,7 +13,7 @@ const Navigator = () => { case 'serverStationFilters': return ; case 'stationList': - return ; + return ; } }; diff --git a/frontend/src/components/ui/ServerStationFilters/ServerStationFilters.tsx b/frontend/src/components/ui/ServerStationFilters/ServerStationFilters.tsx index 0d34937f0..8f7e6eabc 100644 --- a/frontend/src/components/ui/ServerStationFilters/ServerStationFilters.tsx +++ b/frontend/src/components/ui/ServerStationFilters/ServerStationFilters.tsx @@ -27,7 +27,7 @@ const overFlowCss = css` `; const borderCss = css` - border-right: 0.1rem solid \#dddddd; + outline: 1.5px solid #e1e4eb; `; const buttonCss = css` diff --git a/frontend/src/components/ui/StationList/StationList.tsx b/frontend/src/components/ui/StationList/StationList.tsx index 6b445486e..71e853344 100644 --- a/frontend/src/components/ui/StationList/StationList.tsx +++ b/frontend/src/components/ui/StationList/StationList.tsx @@ -10,14 +10,16 @@ import { selectedStationIdStore } from '@stores/selectedStationStore'; import { useStations } from '@hooks/useStations'; import { useUpdateStations } from '@hooks/useUpdateStations'; +import Button from '@common/Button'; import FlexBox from '@common/FlexBox'; import List from '@common/List'; import ListItem from '@common/ListItem'; +import Text from '@common/Text'; import { useAccordionAction } from '@ui/Accordion/hooks/useAccordionAction'; +import ChargingSpeedIcon from '@ui/ChargingSpeedIcon'; import BriefStationInfo from '../BriefStationInfo'; -import StationCard from './StationCard'; import type { StationSummary } from 'types'; @@ -57,48 +59,129 @@ const StationList = () => { }; return ( - - {isSuccess && ( - - {stations.map((station) => { - const { stationId } = station; - - return ( - - { - handleBriefStationInfoOpen(station); - handleStationDetailsOpen(stationId); - }} - /> - - ); - })} - - )} - + isSuccess && ( + + {stations.map((station) => { + const { + stationId, + stationName, + address, + companyName, + isPrivate, + isParkingFree, + operatingTime, + chargers, + } = station; + const chargerCount = chargers.length; + const fastChargerCount = chargers.filter(({ capacity }) => capacity >= 50).length; + const slowChargerCount = chargerCount - fastChargerCount; + + return ( + + + + ); + })} + + ) ); }; -const containerCss = css` - padding: 2rem; +const searchResultList = css` + position: fixed; + left: 7rem; + bottom: 0; + width: 34rem; + height: calc(100vh - 16rem); + border-top: 2.4rem solid var(--lighter-color); + border-bottom: 4rem solid var(--lighter-color); + border-top-left-radius: 30px; + border-top-right-radius: 30px; + background: var(--lighter-color); + overflow: auto; +`; - background-color: white; +const companyNameText = css` + font-size: 1.3rem; +`; - border-right: 1px solid #ddd; - border-radius: 0; +const foundStationButton = css` + padding: 1.4rem 1.2rem 1.8rem; + box-shadow: 0 0.3rem 0.8rem 0 var(--gray-200-color); + border-radius: 1.2rem; `; -const noPadding = css` - padding: 0; +const labelStyle = css` + padding: 0.2rem 1rem; + background: var(--light-color); + border-radius: 0.8rem; `; -const listContainer = css` +const chargerTypeStyle = css` width: 100%; - height: 100%; - - overflow: scroll; + padding: 0.4rem 2rem; + border: 1.5px solid #e5e5e5; + border-radius: 0.8rem; `; export default StationList; diff --git a/frontend/src/components/ui/StationList/StationListWindow.tsx b/frontend/src/components/ui/StationList/StationListWindow.tsx new file mode 100644 index 000000000..8269f3b7a --- /dev/null +++ b/frontend/src/components/ui/StationList/StationListWindow.tsx @@ -0,0 +1,36 @@ +import { css, styled } from 'styled-components'; + +import Text from '@common/Text'; + +import StationList from './StationList'; + +const StationListWindow = () => { + return ( + + + 주변 충전소 + + + + ); +}; + +const S = { + Container: styled.section` + width: 34rem; + height: 100vh; + background: #fcfcfc; + outline: 1.5px solid #e1e4eb; + padding: 2.8rem 2.2rem 5.2rem; + + & > ul { + height: calc(100vh - 7.8rem); + } + `, +}; + +const labelText = css` + padding: 0.8rem 0 2.2rem; +`; + +export default StationListWindow; diff --git a/frontend/src/components/ui/StationSearchWindow/SearchResult.tsx b/frontend/src/components/ui/StationSearchWindow/SearchResult.tsx index f9986968e..f929c48e4 100644 --- a/frontend/src/components/ui/StationSearchWindow/SearchResult.tsx +++ b/frontend/src/components/ui/StationSearchWindow/SearchResult.tsx @@ -60,9 +60,10 @@ const SearchResult = (props: SearchResultProps) => { export const searchResultList = css` position: absolute; - width: 29.2rem; - max-height: 20rem; - margin-top: 2.2rem; + z-index: 9999; + width: 29.6rem; + max-height: 32rem; + margin-top: 2rem; overflow: auto; border: 1.5px solid #d9d9da; border-radius: 10px; diff --git a/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.stories.tsx b/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.stories.tsx index c37a4a977..ed48342e8 100644 --- a/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.stories.tsx +++ b/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.stories.tsx @@ -48,7 +48,7 @@ const S = { height: 100vh; background: #fcfcfc; outline: 1.5px solid #e1e4eb; - padding: 2.8rem 2.4rem 5.2rem; + padding: 2.8rem 2.2rem 5.2rem; `, }; diff --git a/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.tsx b/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.tsx index a287cbeb5..f8b57b824 100644 --- a/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.tsx +++ b/frontend/src/components/ui/StationSearchWindow/StationSearchWindow.tsx @@ -1,37 +1,36 @@ -import { ChevronLeftIcon } from '@heroicons/react/24/outline'; import { css, styled } from 'styled-components'; -import Button from '@common/Button'; import Text from '@common/Text'; +import StationList from '@ui/StationList/StationList'; + import StationSearchBar from './StationSearchBar'; const StationSearchWindow = () => { return ( - - + 주변 충전소 + + ); }; const S = { - Container: styled.section` + Container: styled.article` width: 34rem; height: 100vh; background: #fcfcfc; outline: 1.5px solid #e1e4eb; - padding: 2.8rem 2.4rem 5.2rem; + padding: 2.8rem 2.2rem 5.2rem; `, }; const labelText = css` - padding: 3.6rem 0 2.2rem; + padding: 4.8rem 0 2.2rem; `; export default StationSearchWindow; diff --git a/frontend/src/style/GlobalStyle.ts b/frontend/src/style/GlobalStyle.ts index 1624232a2..0e88d672b 100644 --- a/frontend/src/style/GlobalStyle.ts +++ b/frontend/src/style/GlobalStyle.ts @@ -20,7 +20,10 @@ export const GlobalStyle = createGlobalStyle` } :root { - + --light-color: #e9edf8; + --lighter-color: #eef0f5; + + --gray-200-color: #ebebeb; } body:has(.modal-open) {