- Beautiful & luxurious studio at great location
-
-
-
-
-
-
- Rating
-
- 4.8
-
-
-
- Apartment
-
-
- 3 Bedrooms
-
-
- Max 4 adults
-
-
-
- €120
- night
-
-
-
What's inside
-
-
Wi-Fi
-
Washing machine
-
Towels
-
Heating
-
Coffee machine
-
Baby seat
-
Kitchen
-
Dishwasher
-
Cabel TV
-
Fridge
-
-
-
-
Meet the host
-
-
-
-
- Angelina
- Pro
-
-
-
- A quiet cozy and picturesque that hides behind a a river by
- the unique lightness of Amsterdam. The building is green and
- from 18th century.
-
-
- An independent House, strategically located between Rembrand
- Square and National Opera, but where the bustle of the city
- comes to rest in this alley flowery and colorful.
-
-
-
-
-
- Reviews · 1
-
-
-
-
-
-
-
- Max
-
-
-
-
-
- Rating
-
-
-
- A quiet cozy and picturesque that hides behind a a river
- by the unique lightness of Amsterdam. The building is
- green and from 18th century.
-
+
);
}
diff --git a/src/Pages/NotFoundPage/NotFoundPage.module.css b/src/Pages/not-found-page/not-found-page.module.css
similarity index 100%
rename from src/Pages/NotFoundPage/NotFoundPage.module.css
rename to src/Pages/not-found-page/not-found-page.module.css
diff --git a/src/Pages/NotFoundPage/NotFoundPage.tsx b/src/Pages/not-found-page/not-found-page.tsx
similarity index 91%
rename from src/Pages/NotFoundPage/NotFoundPage.tsx
rename to src/Pages/not-found-page/not-found-page.tsx
index 28d5664..ce3c619 100644
--- a/src/Pages/NotFoundPage/NotFoundPage.tsx
+++ b/src/Pages/not-found-page/not-found-page.tsx
@@ -1,5 +1,5 @@
import { Link } from 'react-router-dom';
-import styles from './NotFoundPage.module.css';
+import styles from './not-found-page.module.css';
import { Helmet } from 'react-helmet-async';
export function NotFoundPage(): React.JSX.Element {
diff --git a/src/Pages/offer-page.tsx b/src/Pages/offer-page.tsx
new file mode 100644
index 0000000..a671867
--- /dev/null
+++ b/src/Pages/offer-page.tsx
@@ -0,0 +1,195 @@
+import { Helmet } from 'react-helmet-async';
+import { Layout } from '../components/layout.tsx';
+import { OffersList } from '../components/offer/offers-list.tsx';
+import { offerMocks } from '../mocks/offers.ts';
+import { ReviewForm } from '../components/review-form.tsx';
+
+export function OfferPage(): React.JSX.Element {
+ return (
+
+
+ 6 cities - offer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Premium
+
+
+
+ Beautiful & luxurious studio at great location
+
+
+
+
+
+
+ Rating
+
+ 4.8
+
+
+
+ Apartment
+
+
+ 3 Bedrooms
+
+
+ Max 4 adults
+
+
+
+ €120
+ night
+
+
+
What's inside
+
+
Wi-Fi
+
Washing machine
+
Towels
+
Heating
+
Coffee machine
+
Baby seat
+
Kitchen
+
Dishwasher
+
Cabel TV
+
Fridge
+
+
+
+
Meet the host
+
+
+
+
+ Angelina
+ Pro
+
+
+
+ A quiet cozy and picturesque that hides behind a a river by
+ the unique lightness of Amsterdam. The building is green and
+ from 18th century.
+
+
+ An independent House, strategically located between Rembrand
+ Square and National Opera, but where the bustle of the city
+ comes to rest in this alley flowery and colorful.
+
+
+
+
+
+ Reviews · 1
+
+
+
+
+
+
+
+ Max
+
+
+
+
+
+ Rating
+
+
+
+ A quiet cozy and picturesque that hides behind a a river
+ by the unique lightness of Amsterdam. The building is
+ green and from 18th century.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Other places in the neighbourhood
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/App.tsx b/src/components/App.tsx
deleted file mode 100644
index 827aa5d..0000000
--- a/src/components/App.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { MainPage } from '../Pages/MainPage.tsx';
-import React from 'react';
-import { BrowserRouter, Route, Routes } from 'react-router-dom';
-import { LoginPage } from '../Pages/LoginPage.tsx';
-import { FavoritesPage } from '../Pages/FavoritesPage.tsx';
-import { OfferPage } from '../Pages/OfferPage.tsx';
-import { NotFoundPage } from '../Pages/NotFoundPage/NotFoundPage.tsx';
-import { AuthorizationWrapper } from './AuthorizationWrapper.tsx';
-import { AppRoutes } from '../DataTypes/AppRoutes.tsx';
-import { HelmetProvider } from 'react-helmet-async';
-
-interface AppProps {
- placeCount: number;
-}
-
-export function App({ placeCount }: AppProps): React.JSX.Element {
- return (
-
-
-
- }
- />
- } />
-
-
-
- }
- />
- } />
- } />
-
-
-
- );
-}
diff --git a/src/components/app.tsx b/src/components/app.tsx
new file mode 100644
index 0000000..58fd7f6
--- /dev/null
+++ b/src/components/app.tsx
@@ -0,0 +1,40 @@
+import { MainPage } from '../pages/main-page.tsx';
+import { BrowserRouter, Route, Routes } from 'react-router-dom';
+import { LoginPage } from '../pages/login-page.tsx';
+import { FavoritesPage } from '../pages/favorites-page.tsx';
+import { OfferPage } from '../pages/offer-page.tsx';
+import { NotFoundPage } from '../pages/not-found-page/not-found-page.tsx';
+import { AuthorizationWrapper } from './authorization-wrapper.tsx';
+import { AppRoutes } from '../dataTypes/enums/app-routes.ts';
+import { HelmetProvider } from 'react-helmet-async';
+import { Offer } from '../dataTypes/offer.ts';
+
+interface AppProps {
+ offers: Offer[];
+}
+
+export function App({ offers }: AppProps): React.JSX.Element {
+ return (
+
+
+
+ }
+ />
+ } />
+
+
+
+ }
+ />
+ } />
+ } />
+
+
+
+ );
+}
diff --git a/src/components/AuthorizationWrapper.tsx b/src/components/authorization-wrapper.tsx
similarity index 87%
rename from src/components/AuthorizationWrapper.tsx
rename to src/components/authorization-wrapper.tsx
index b0b3603..b7370a5 100644
--- a/src/components/AuthorizationWrapper.tsx
+++ b/src/components/authorization-wrapper.tsx
@@ -1,12 +1,13 @@
import { Navigate } from 'react-router-dom';
interface AuthorizationWrapperProps {
+ isAuthorized: boolean;
children: React.JSX.Element;
}
export function AuthorizationWrapper({
+ isAuthorized,
children,
}: AuthorizationWrapperProps): React.JSX.Element {
- const isAuthorized = false;
return isAuthorized ? children : ;
}
diff --git a/src/components/layout.tsx b/src/components/layout.tsx
new file mode 100644
index 0000000..21bdb6d
--- /dev/null
+++ b/src/components/layout.tsx
@@ -0,0 +1,69 @@
+import { AppRoutes } from '../dataTypes/enums/app-routes.ts';
+import { Link } from 'react-router-dom';
+
+interface LayoutProps {
+ children: React.JSX.Element;
+ showFooter?: boolean;
+}
+
+export function Layout({
+ children,
+ showFooter,
+}: LayoutProps): React.JSX.Element {
+ return (
+