Skip to content

Commit

Permalink
ModalWindow
Browse files Browse the repository at this point in the history
  • Loading branch information
OlenaIa committed Dec 1, 2023
1 parent a78cef1 commit 3ff8c4f
Show file tree
Hide file tree
Showing 9 changed files with 315 additions and 87 deletions.
23 changes: 0 additions & 23 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
"@testing-library/react": "^12.1.4",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.6.2",
"nanoid": "^5.0.3",
"notiflix": "^3.2.6",
"react": "^18.1.0",
"react-dom": "^18.1.0",
Expand Down
9 changes: 5 additions & 4 deletions src/components/CarItem/CarItem.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { useDispatch, useSelector } from "react-redux";
import { addFavoriteCar, deleteFavoriteCar } from "redux/favoriteCarsSlice/favoriteCarsSlice";
import { selectFavoriteCars } from "redux/selectors";
import { ModalWindowWrap } from "components/ModalWindowWrap/ModalWindowWrap";
import { ModalReadMore } from "components/ModalReadMore/ModalReadMore";


export const CarItem = ({ car, index }) => {
Expand Down Expand Up @@ -33,7 +34,7 @@ const toggleModal = () => {

return (
<CarItemStyle key={id}>
{showModal && <ModalWindowWrap onClick={toggleModal}>Modal</ModalWindowWrap>}
{showModal && <ModalWindowWrap onClick={toggleModal}><ModalReadMore car={car} /></ModalWindowWrap>}
<CarCard>
<ImgWrap>
<Img src={img ?
Expand All @@ -55,14 +56,14 @@ const toggleModal = () => {
</TitleH3>
<p>{rentalPrice}</p>
</TitleWrap>
<DescriptListWrap>
<DescriptList>
<DescriptListWrap height='36px'>
<DescriptList $overflow='hidden'>
<DescriptItem>{cityCountry[0]}</DescriptItem>
<DescriptItem>{cityCountry[1]}</DescriptItem>
<DescriptItem>{rentalCompany}</DescriptItem>
{/* <DescriptItem>Premium</DescriptItem> */}
</DescriptList>
<DescriptList>
<DescriptList $overflow='hidden'>
<DescriptItem>{type}</DescriptItem>
{/* Подумати як вдесятый машині вивести майк на екран */}
<DescriptItem> {(index === 0 || index > 4 || index !== 10) ? model : make}</DescriptItem>
Expand Down
33 changes: 11 additions & 22 deletions src/components/CarItem/CarItem.styled.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,18 +153,12 @@ font-weight: inherit;
`;
export const Span = styled.span`
color: var(--color-text-loadmore);
@media screen and (min-width: 768px) {
}
@media screen and (min-width: 1440px) {
}
`;

export const DescriptListWrap = styled.div`
display: flex;
height: 36px;
gap: 4px;
height: ${props => props.height || 'auto'};
gap: ${props => props.$gap || '4px'};
flex-direction: column;
@media screen and (min-width: 768px) {
Expand All @@ -174,13 +168,12 @@ flex-direction: column;
}
`;
export const DescriptList = styled.ul`
display: flex;
display: inline-flex;
height: 18px;
column-gap: 6px;
gap: 6px;
color: var(--color-text-second);
flex-wrap: nowrap;
overflow: hidden;
white-space: nowrap;
overflow-x: ${props => props.$overflow || 'scroll'};
@media screen and (min-width: 768px) {
}
Expand All @@ -192,16 +185,14 @@ overflow: hidden;
export const DescriptItem = styled.li`
display: flex;
flex-shrink: 1;
/* color: var(--color-text-second); */
&:not(:last-child) {
&:after {
&:not(:first-child) {
&:before {
display: block;
height: 16px;
width: 1px;
background-color: rgba(18, 20, 23, 0.10);
margin-left: 6px;
margin-right: 6px;
content: '';
}}
Expand All @@ -214,12 +205,10 @@ content: '';

export const Button = styled.button`
display: flex;
width: 100%;
width: ${props => props.width || '100%'};
height: 44px;
padding: 12px;
justify-content: center;
align-items: center;
flex-shrink: 0;
border: none;
border-radius: 12px;
background: var(--color-button);
Expand Down
118 changes: 118 additions & 0 deletions src/components/ModalReadMore/ModalReadMore.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import {
Button,
DescriptItem,
DescriptList,
DescriptListWrap,
Span
} from "../CarItem/CarItem.styled";
import {
Block,
ConditionsItem,
ConditionsList,
Description,
ModalCarWrap,
ModalCard,
ModalDescriptionWrap,
ModalImg,
ModalImgWrap,
ModalTitleH3,
ModalTitleH4
} from "./ModalReadMore.styled";

export const ModalReadMore = ({ car }) => {
const {
id,
make,
model,
year,
img,
rentalPrice,
mileage,
type,
functionalities,
address,
fuelConsumption,
engineSize,
description,
accessories,
rentalConditions
} = car;
const cityCountry = address?.split(', ').slice(-2);
const arrOfConditions = rentalConditions.split('\n');

const age = (conditionWithAge) => {
const conditionWithAgeArr = conditionWithAge.split(': ');
return conditionWithAgeArr;
};

const makeComaInMileage = (mileage) => {
const mileageStringArr = mileage.toString().split('');
mileageStringArr.splice(1, 0, ',');
return mileageStringArr.join('');
};

return (
<ModalCarWrap key={id}>
<ModalCard>
<ModalImgWrap>
<ModalImg src={img ?
img :
'https://www.braasco.com//ASSETS/IMAGES/ITEMS/ZOOM/no_image.jpeg'}
alt={make} />
</ModalImgWrap>
<ModalDescriptionWrap>
<Block>
<ModalTitleH3>
{make}
<Span> {model}</Span>, {year}
</ModalTitleH3>
<DescriptListWrap>
<DescriptList>
<DescriptItem>{cityCountry[0]}</DescriptItem>
<DescriptItem>{cityCountry[1]}</DescriptItem>
<DescriptItem>Id: {id}</DescriptItem>
<DescriptItem>Year: {year}</DescriptItem>
<DescriptItem>Type: {type}</DescriptItem>
</DescriptList>
<DescriptList>
<DescriptItem>Fuel Consumption: {fuelConsumption}</DescriptItem>
<DescriptItem>Engine Size: {engineSize}</DescriptItem>
</DescriptList>
</DescriptListWrap>
<Description>{description}</Description>
</Block>
<Block>
<ModalTitleH4>Accessories and functionalities:</ModalTitleH4>
<DescriptListWrap>
<DescriptList>
{accessories?.map(item =>
<DescriptItem>{item}</DescriptItem>
)}
</DescriptList>
<DescriptList>
{functionalities?.map(item =>
<DescriptItem>{item}</DescriptItem>
)}
</DescriptList>
</DescriptListWrap>
</Block>
<Block>
<ModalTitleH4>Rental Conditions:</ModalTitleH4>
<DescriptListWrap $gap='8px'>
<ConditionsList>
<ConditionsItem>{age(arrOfConditions[0])[0]}: <Span>{age(arrOfConditions[0])[1]}</Span></ConditionsItem>
<ConditionsItem>{arrOfConditions[1]}</ConditionsItem>
</ConditionsList>
<ConditionsList>
<ConditionsItem>{arrOfConditions[2]}</ConditionsItem>
<ConditionsItem>Mileage: <Span>{makeComaInMileage(mileage)}</Span></ConditionsItem>
<ConditionsItem>Price: <Span>{rentalPrice.replace('$', '')}$</Span></ConditionsItem>
</ConditionsList>
</DescriptListWrap>
</Block>
</ModalDescriptionWrap>
</ModalCard>
<Button width='168px'><a href="tel:+380730000000">Rental car</a></Button>
</ModalCarWrap>
)
};
Loading

0 comments on commit 3ff8c4f

Please sign in to comment.