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()}
-
- {'<'}
-
-
- {'X'}
+
+
>
)}
@@ -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 (
+
+ {
+ handleBriefStationInfoOpen(station);
+ handleStationDetailsOpen(stationId);
+ }}
+ >
+
+
+
+ {companyName}
+
+
+ {stationName}
+
+
+ {address || '주소를 직접 알아내자'}
+
+
+ {operatingTime}
+
+
+
+ {isPrivate ? '이용제한구역' : '공공 충전소'}
+
+
+ {isParkingFree ? '무료 주차' : '유료 주차'}
+
+
+
+ {fastChargerCount !== 0 && }
+
+
+
+
+ 급속
+
+ {fastChargerCount}
+
+
+
+ 완속
+
+ {slowChargerCount}
+
+
+
+
+ );
+ })}
+
+ )
);
};
-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) {