├── my-app
├── src
│ ├── App.css
│ ├── Logo
│ │ ├── rb.jpg
│ │ ├── pro.webp
│ │ └── ProjectLogo.webp
│ ├── Reducer
│ │ ├── actionType.js
│ │ ├── store.js
│ │ ├── action.js
│ │ └── reducer.js
│ ├── Pankaj
│ │ ├── Plan
│ │ │ ├── Plan.module.css
│ │ │ └── Plan.jsx
│ │ ├── Redux
│ │ │ ├── ActionType.js
│ │ │ ├── Store.js
│ │ │ ├── Action.js
│ │ │ └── Reducer.js
│ │ ├── Creator
│ │ │ ├── Creator.module.css
│ │ │ ├── Readmore.jsx
│ │ │ └── Creator.jsx
│ │ ├── Insportlight
│ │ │ ├── Inspotlight.module.css
│ │ │ └── Inspotlight.jsx
│ │ ├── Find
│ │ │ ├── Find.module.css
│ │ │ └── Find.jsx
│ │ ├── Place
│ │ │ ├── Place.module.css
│ │ │ └── Place.jsx
│ │ ├── Check
│ │ │ ├── Check.module.css
│ │ │ └── Check.jsx
│ │ ├── Watch
│ │ │ ├── Watch.module.css
│ │ │ └── Watch.jsx
│ │ ├── Book
│ │ │ ├── Book.module.css
│ │ │ └── Book.jsx
│ │ ├── Travel
│ │ │ └── Travel.module.css
│ │ ├── Home.module.css
│ │ └── Home.jsx
│ ├── setupTests.js
│ ├── App.test.js
│ ├── index.css
│ ├── reportWebVitals.js
│ ├── Context
│ │ ├── Context.jsx
│ │ └── ShowContext.jsx
│ ├── Components
│ │ ├── PrivateRoute.jsx
│ │ ├── Login.jsx
│ │ └── Signup.jsx
│ ├── firebase-config.js
│ ├── Home_Page_Component
│ │ ├── Main_Page.jsx
│ │ ├── Slider.jsx
│ │ ├── home_page_img.module.css
│ │ ├── Small_Img_Box.jsx
│ │ ├── home_page_img.jsx
│ │ ├── ImageSlider.jsx
│ │ ├── Exclusive_box.jsx
│ │ └── Find_best_place.jsx
│ ├── Navbar
│ │ ├── Navbar.module.css
│ │ ├── HamburgerMenu.jsx
│ │ ├── Home.jsx
│ │ ├── Homepage.css
│ │ └── Navbar.jsx
│ ├── index.js
│ ├── Routes
│ │ └── AllRoutes.jsx
│ ├── AdminPanal
│ │ ├── admin.jsx
│ │ ├── Adminnav.jsx
│ │ ├── Delete.jsx
│ │ ├── adminLogin.jsx
│ │ ├── orders.jsx
│ │ └── addProduct.jsx
│ ├── App.js
│ ├── Packages
│ │ ├── singlepage.jsx
│ │ ├── itemview.jsx
│ │ ├── confirmButton.jsx
│ │ ├── checkout.jsx
│ │ └── product.jsx
│ ├── Footer
│ │ ├── Footer.module.css
│ │ └── Footer.jsx
│ ├── logo.svg
│ └── beaches
│ │ ├── Comprehensive.jsx
│ │ ├── Topbeach.jsx
│ │ ├── Package.jsx
│ │ └── Beach.jsx
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── index.html
├── .gitignore
├── package.json
└── README.md
└── README.md
/my-app/src/App.css:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/my-app/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/my-app/src/Logo/rb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/src/Logo/rb.jpg
--------------------------------------------------------------------------------
/my-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/public/favicon.ico
--------------------------------------------------------------------------------
/my-app/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/public/logo192.png
--------------------------------------------------------------------------------
/my-app/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/public/logo512.png
--------------------------------------------------------------------------------
/my-app/src/Logo/pro.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/src/Logo/pro.webp
--------------------------------------------------------------------------------
/my-app/src/Logo/ProjectLogo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Nasirimam/R.P.S.N-Vacation/HEAD/my-app/src/Logo/ProjectLogo.webp
--------------------------------------------------------------------------------
/my-app/src/Reducer/actionType.js:
--------------------------------------------------------------------------------
1 | export const GET_PRODUCT_REQUEST = "GET_PRODUCT_REQUEST";
2 | export const GET_PRODUCT_SUCCESS = "GET_PRODUCT_SUCCESS";
3 | export const GET_PRODUCT_FAILED = "GET_PRODUCT_FAILED";
4 |
--------------------------------------------------------------------------------
/my-app/src/Reducer/store.js:
--------------------------------------------------------------------------------
1 | import { legacy_createStore } from "redux";
2 | import { reducer as nasirReducer } from "./reducer";
3 |
4 | const store = legacy_createStore(nasirReducer);
5 |
6 | export { store };
7 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Plan/Plan.module.css:
--------------------------------------------------------------------------------
1 | .maindiv{
2 |
3 | padding: 0 0.1rem 0 0.1rem;
4 |
5 | }
6 |
7 | .box{
8 |
9 | margin-left: 10px;
10 |
11 |
12 | }
13 | img{
14 | height: 24rem;
15 | width: 17rem;
16 | border-radius: 10px;
17 | }
--------------------------------------------------------------------------------
/my-app/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/my-app/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render( );
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Redux/ActionType.js:
--------------------------------------------------------------------------------
1 | export const REGISTER_LOADING="REGISTER_LOADING"
2 | export const REGISTER_SUCCESS="REGISTER_SUCCESS"
3 | export const REGISTER_FAILURE="REGISTER_FAILURE"
4 |
5 | export const LOGIN_LOADING="LOGIN_LOADING"
6 | export const LOGIN_SUCCESS="LOGIN_SUCCESS"
7 | export const LOGIN_FAILURE="LOGIN_FAILURE"
8 |
9 | export const LOGOUT_SUCCESS="LOGOUT_SUCCESS"
10 |
11 |
--------------------------------------------------------------------------------
/my-app/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/my-app/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/my-app/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/my-app/src/Context/Context.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { useState } from 'react'
3 | import { createContext } from 'react'
4 |
5 | export const ShowContext = createContext()
6 | function ShowContextProvider({ children }) {
7 |
8 | const [show, setShow] = useState(false)
9 |
10 | return (
11 |
12 |
13 | {children}
14 |
15 | )
16 | }
17 |
18 | export default ShowContextProvider
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Creator/Creator.module.css:
--------------------------------------------------------------------------------
1 | .show{
2 | text-align: left;
3 | color: #333333;
4 | height: 5rem;
5 |
6 | }
7 | .btn{
8 | color: #359391;
9 | border: none;
10 | background-color: #fff;
11 | margin-left: 33rem;
12 | cursor: pointer;
13 | }
14 |
15 | .creimg{
16 | display: flex;
17 | gap:1.3rem;
18 | justify-content: center;
19 | margin-top: 1.5rem;
20 |
21 | }
22 | img{
23 | height: 450px;
24 | width: 350px;
25 | }
--------------------------------------------------------------------------------
/my-app/src/Reducer/action.js:
--------------------------------------------------------------------------------
1 | import * as types from "./actionType";
2 |
3 | const getProductRequest = () => {
4 | return {
5 | type: types.GET_PRODUCT_REQUEST,
6 | };
7 | };
8 |
9 | const getProductSuccess = (payload) => {
10 | return {
11 | type: types.GET_PRODUCT_SUCCESS,
12 | payload,
13 | };
14 | };
15 |
16 | const getProductFailed = () => {
17 | return {
18 | type: types.GET_PRODUCT_FAILED,
19 | };
20 | };
21 |
22 | export { getProductFailed, getProductRequest, getProductSuccess };
23 |
--------------------------------------------------------------------------------
/my-app/src/Components/PrivateRoute.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Navigate } from "react-router-dom";
3 | import { useContext, children } from "react";
4 | import { ShowContext } from "../Context/ShowContext";
5 | import { useLocation } from "react-router-dom";
6 |
7 | const PrivateRoute = ({ children }) => {
8 | const { isAuth } = useContext(ShowContext);
9 | const location = useLocation();
10 |
11 | if (!isAuth) {
12 | return ;
13 | }
14 | return children;
15 | };
16 |
17 | export default PrivateRoute;
18 |
--------------------------------------------------------------------------------
/my-app/src/firebase-config.js:
--------------------------------------------------------------------------------
1 | import { initializeApp } from "firebase/app";
2 | import {getAuth} from "firebase/auth"
3 |
4 |
5 |
6 | const firebaseConfig = {
7 | apiKey: "AIzaSyBpsmRuCDJbp1qUA0AWJMNUIsKkJFeB2nA",
8 | authDomain: "tripoto-clone-authentication.firebaseapp.com",
9 | projectId: "tripoto-clone-authentication",
10 | storageBucket: "tripoto-clone-authentication.appspot.com",
11 | messagingSenderId: "206673037211",
12 | appId: "1:206673037211:web:da494b1f5ab925b6b9033e"
13 | };
14 |
15 | const app = initializeApp(firebaseConfig);
16 |
17 | export const auth=getAuth(app)
--------------------------------------------------------------------------------
/my-app/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/Main_Page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | // import HomePage_img from "./home_page_img";
3 | import Small_Img_Box from "./Small_Img_Box";
4 | import "../App.css"
5 | import Slider from "./Slider";
6 | import Find_best_place from "./Find_best_place";
7 | import Exclusive_box from "./Exclusive_box";
8 |
9 |
10 |
11 | function HomePage_Component(){
12 |
13 | return(
14 |
15 | {/* */}
16 |
17 |
18 |
19 |
20 |
21 | )
22 | }
23 | export default HomePage_Component
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Creator/Readmore.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react'
2 | import styles from "./Creator.module.css"
3 |
4 | export const Readmore = ({children}) => {
5 | const [show, setShow] = useState(false);
6 | const toggle = () => {
7 | setShow(show => !show)
8 | }
9 | return (
10 |
11 |
12 | {show ? children : children.substr(0,320)}
13 |
14 |
15 | {!show ? Show more {" "}
16 |
17 | : "" }
18 |
19 |
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/my-app/src/Reducer/reducer.js:
--------------------------------------------------------------------------------
1 | import * as types from "./actionType";
2 |
3 | const intitalState = {
4 | products: [],
5 | isLoding: false,
6 | isError: false,
7 | };
8 |
9 | const reducer = (oldState = intitalState, action) => {
10 | const { type, payload } = action;
11 |
12 | switch (type) {
13 | case types.GET_PRODUCT_REQUEST:
14 | return { ...oldState, isLoding: true };
15 | case types.GET_PRODUCT_SUCCESS:
16 | return { ...oldState, isLoding: false, products: payload };
17 | case types.GET_PRODUCT_FAILED:
18 | return { ...oldState, isLoding: false, isError: true };
19 | default:
20 | return oldState;
21 | }
22 | };
23 |
24 | export { reducer };
25 |
--------------------------------------------------------------------------------
/my-app/src/Navbar/Navbar.module.css:
--------------------------------------------------------------------------------
1 | #navbar {
2 | display: flex;
3 | color: white;
4 | justify-content: space-between;
5 | padding-left: 20px;
6 | padding-right: 10px;
7 | padding-top: 5px;
8 | padding-bottom: 5px;
9 | align-items: center;
10 | width: 100%;
11 | position: fixed;
12 | font-size: 20px;
13 | z-index: 99;
14 | }
15 |
16 | #navbar>div {
17 | display: flex;
18 | justify-content: center;
19 | gap: 30px;
20 | }
21 |
22 | .navSearch {
23 | margin-left: -100px;
24 | border-radius: 2px;
25 | font-size: 20px;
26 | }
27 | /* #navbar:hover{
28 | background-color: rgb(255, 255, 0);
29 | color: rgb(206, 11, 11);
30 | } */
31 | @media (max-width) {
32 | .navSearch {
33 | display: none;
34 | }
35 | }
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Redux/Store.js:
--------------------------------------------------------------------------------
1 | import {
2 | legacy_createStore,
3 | applyMiddleware,
4 | compose,
5 | combineReducers,
6 | } from "redux";
7 | import thunk from "redux-thunk";
8 | import { reducer } from "./Reducer";
9 | import { reducer as nasirReducer } from "../../Reducer/reducer";
10 |
11 | const rootReducer = combineReducers({ reducer, nasirReducer });
12 |
13 | const composeEnhancers =
14 | typeof window === "object" && window._REDUX_DEVTOOLS_EXTENSION_COMPOSE_
15 | ? window._REDUX_DEVTOOLS_EXTENSION_COMPOSE_({
16 | // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
17 | })
18 | : compose;
19 |
20 | export const store = legacy_createStore(
21 | rootReducer,
22 | composeEnhancers(applyMiddleware(thunk))
23 | );
24 |
--------------------------------------------------------------------------------
/my-app/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import "./index.css";
4 | import App from "./App";
5 | import reportWebVitals from "./reportWebVitals";
6 |
7 | import { ChakraProvider } from "@chakra-ui/react";
8 | import { BrowserRouter } from "react-router-dom";
9 | import ShowContextProvider from "./Context/ShowContext";
10 | import { Provider } from "react-redux";
11 | import { store } from "./Pankaj/Redux/Store";
12 | const root = ReactDOM.createRoot(document.getElementById("root"));
13 | root.render(
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 |
25 | reportWebVitals();
26 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Creator/Creator.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Readmore } from "./Readmore";
3 | import styles from "./Creator.module.css";
4 |
5 | export const Creator = () => {
6 | return (
7 |
8 |
9 |
10 |
11 | Tripoto Family is a community of travel content creators who create
12 | stunning photo blogs, engaging reels and videos as well as
13 | informative articles. Here are the most promising creators of the
14 | month who took us on a beautiful journey across India and the world
15 | through their content. Kudos to Tripoto's best creators for July
16 | 2022!
17 |
18 |
19 |
20 |
21 | );
22 | };
23 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/Slider.jsx:
--------------------------------------------------------------------------------
1 | import ImageSlider from "./ImageSlider";
2 | const Slider = () => {
3 | const slides = [
4 | { url: "https://cdn1.tripoto.com/media/filter/nxxl/img/1516992/Image/1670586625_img_0434.jpg", title: "beach" },
5 | { url: "https://cdn1.tripoto.com/media/filter/nxxl/img/2215463/Image/1669102212_1667974883_web1.jpeg", title: "boat" },
6 | { url: "https://cdn1.tripoto.com/media/filter/nxxl/img/2224454/Image/1670482094_homepage_recovered_op2.jpg", title: "forest" },
7 |
8 | ];
9 | const containerStyles = {
10 | margin:"auto",
11 | marginTop:"150px",
12 | width: "80%",
13 | height: "350px",
14 |
15 | };
16 | return (
17 |
23 | );
24 | };
25 |
26 | export default Slider;
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Insportlight/Inspotlight.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | height: 283.115px;
4 | width: 289px;
5 | margin: 0 0 30px 0;
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 | }
11 | .imge{
12 | height: 11rem;
13 | width: 16rem;
14 | border-radius: 5px;
15 | }
16 |
17 | .title{
18 | color: #FF6633;
19 | height: 17.1354px;
20 | width: 59.1345;
21 | font-size: 12px;
22 | font-weight: 700;
23 | line-height: 17.1429px;
24 | white-space: nowrap;
25 | word-spacing: 0px;
26 | margin-top: 5px;
27 | }
28 | .des{
29 | font-family: circularairpro-bold,Arial, Helvetica;
30 | font-size: 18px;
31 | font-weight: 700;
32 | text-decoration: none solid rgb(51, 51, 51);
33 | text-transform: capitalize;
34 | word-spacing: 0px;
35 | color: #333333;
36 | height: 102.833px;
37 | width: 259px;
38 | margin: 8px 0 0;
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/home_page_img.module.css:
--------------------------------------------------------------------------------
1 | *{
2 | margin: 0px;
3 | padding: 0px;
4 | color:white;
5 | margin: auto;
6 |
7 | }
8 |
9 | .top_img{
10 | height:360px;
11 | width:100%;
12 | text-align: center;
13 | background-image: url("https://cdn1.tripoto.com/assets/2.9/img/home_banner_road.jpg");
14 |
15 | background-color: #cccccc; /* Used if the image is unavailable */
16 |
17 | background-position: center; /* Center the image */
18 | background-repeat: no-repeat; /* Do not repeat the image */
19 | background-size: cover;
20 | border: .1px solid white;
21 | }
22 |
23 | .top_img_div>h1{
24 | text-align: center;
25 | margin-top: 140px;
26 | }
27 | .top_img_div>input{
28 | width: 600px;
29 | height: 50px;
30 | border-radius: 10px;
31 | margin-top: 20px;
32 | text-align: center;
33 | font-size: 16px;
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/my-app/src/Routes/AllRoutes.jsx:
--------------------------------------------------------------------------------
1 | import { Routes, Route } from "react-router-dom";
2 | import Admin from "../AdminPanal/admin";
3 | import Beach from "../beaches/Beach";
4 | import Homepage from "../Navbar/Home";
5 | import Product from "../Packages/product";
6 | import SinglePage from "../Packages/singlepage";
7 | import PrivateRoute from "../Components/PrivateRoute";
8 | import { Center, Heading } from "@chakra-ui/react";
9 |
10 | const AllRoutes = () => {
11 | return (
12 |
13 | } />
14 | } />
15 | } />
16 | } />
17 | } />
18 |
22 | Page Does Not Exist
23 |
24 | }
25 | />
26 |
27 | );
28 | };
29 |
30 | export { AllRoutes };
31 |
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/admin.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Tab,
4 | TabList,
5 | TabPanel,
6 | TabPanels,
7 | Tabs,
8 | Image,
9 | } from "@chakra-ui/react";
10 | import { useState } from "react";
11 | import AddProdct from "./addProduct";
12 | import AdminNav from "./Adminnav";
13 | import DeleteItem from "./Delete";
14 | import OrderItem from "./orders";
15 |
16 | const Admin = () => {
17 | const [showPage, setShowPage] = useState("AddProdct");
18 |
19 | return (
20 |
21 |
22 |
28 | ;
29 |
30 |
31 |
32 |
33 |
34 | {showPage == "AddProdct" ? : null}
35 | {showPage == "OrderItem" ? : null}
36 | {showPage == "DeleteItem" ? : null}
37 |
38 |
39 | );
40 | };
41 |
42 | export default Admin;
43 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/Small_Img_Box.jsx:
--------------------------------------------------------------------------------
1 | import { Grid } from "@chakra-ui/react";
2 | import { Image } from '@chakra-ui/react'
3 | function Small_Img_Box() {
4 | const outer_div = {
5 | width: "85%",
6 | margin:"auto",
7 | marginTop:"50px",
8 | };
9 |
10 | // const inner_div = {
11 | // display: "flex",
12 | // };
13 |
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 | }
26 |
27 | export default Small_Img_Box;
28 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Find/Find.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | height: 283.115px;
4 | width: 289px;
5 | /* margin: 0 0 30px 0; */
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 | }
11 | .imge{
12 | height: 11rem;
13 | width: 16rem;
14 | border-radius: 5px;
15 | }
16 |
17 | /* .title{
18 | color: #FF6633;
19 | height: 17.1354px;
20 | width: 59.1345;
21 | font-size: 12px;
22 | font-weight: 700;
23 | line-height: 17.1429px;
24 | white-space: nowrap;
25 | word-spacing: 0px;
26 | margin-top: 5px;
27 | } */
28 | .des{
29 | font-family: circularairpro-bold,Arial, Helvetica;
30 | font-size: 18px;
31 | font-weight: 700;
32 | text-decoration: none solid rgb(51, 51, 51);
33 | text-transform: capitalize;
34 | word-spacing: 0px;
35 | color: #333333;
36 | /* height: 102.833px; */
37 | width: 259px;
38 | margin: 8px 0 0 0;
39 |
40 |
41 | }
42 | .bydiv{
43 | margin-top: 5px;
44 | font-family: apple-system, Arial, Helvetica, sans-serif;
45 | }
46 | .by{
47 | font-size: 14px;
48 | margin-right: 0.5rem;
49 | margin-left: 0.1rem;
50 | }
51 | .byname{
52 | color: #1C70A2;
53 | font-size: 14px;
54 | }
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Place/Place.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | height: 283.115px;
4 | width: 289px;
5 | /* margin: 0 0 30px 0; */
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 | }
11 | .imge{
12 | height: 11rem;
13 | width: 16rem;
14 | border-radius: 5px;
15 | }
16 |
17 | /* .title{
18 | color: #FF6633;
19 | height: 17.1354px;
20 | width: 59.1345;
21 | font-size: 12px;
22 | font-weight: 700;
23 | line-height: 17.1429px;
24 | white-space: nowrap;
25 | word-spacing: 0px;
26 | margin-top: 5px;
27 | } */
28 | .des{
29 | font-family: circularairpro-bold,Arial, Helvetica;
30 | font-size: 18px;
31 | font-weight: 700;
32 | text-decoration: none solid rgb(51, 51, 51);
33 | text-transform: capitalize;
34 | word-spacing: 0px;
35 | color: #333333;
36 | /* height: 102.833px; */
37 | width: 240px;
38 | margin: 8px 0 0 0;
39 |
40 |
41 | }
42 | .bydiv{
43 | margin-top: 5px;
44 | font-family: apple-system, Arial, Helvetica, sans-serif;
45 | }
46 | .by{
47 | font-size: 14px;
48 | margin-right: 0.5rem;
49 | margin-left: 0.1rem;
50 | }
51 | .byname{
52 | color: #1C70A2;
53 | font-size: 14px;
54 | }
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Check/Check.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | height: 283.115px;
4 | width: 289px;
5 | margin: 0 0 30px 0;
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 | }
11 | .imge{
12 | height: 11rem;
13 | width: 16rem;
14 | border-radius: 5px;
15 | }
16 |
17 | .title{
18 | color: #FF6633;
19 | height: 17.1354px;
20 | width: 59.1345;
21 | font-size: 12px;
22 | font-weight: 700;
23 | line-height: 17.1429px;
24 | white-space: nowrap;
25 | word-spacing: 0px;
26 | margin-top: 5px;
27 | }
28 | .des{
29 | font-family: circularairpro-bold,Arial, Helvetica;
30 | font-size: 18px;
31 | font-weight: 700;
32 | text-decoration: none solid rgb(51, 51, 51);
33 | text-transform: capitalize;
34 | word-spacing: 0px;
35 | color: #333333;
36 | /* height: 102.833px; */
37 | width: 259px;
38 | margin: 8px 0 0 0;
39 |
40 |
41 | }
42 |
43 | .bydiv{
44 | margin-top: 5px;
45 | font-family: apple-system, Arial, Helvetica, sans-serif;
46 | }
47 | .by{
48 | font-size: 14px;
49 | margin-right: 0.5rem;
50 | margin-left: 0.1rem;
51 | }
52 | .byname{
53 | color: #1C70A2;
54 | font-size: 14px;
55 | }
56 |
57 |
--------------------------------------------------------------------------------
/my-app/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | // import HomePage from './Home_Page/Main_Page';
3 | import Signup from "./Components/Signup";
4 | import Login from "./Components/Login";
5 |
6 | import "./App.css";
7 | import { Navbar } from "./Navbar/Navbar";
8 | import { useEffect, useState } from "react";
9 | import HamburgerMenu from "./Navbar/HamburgerMenu";
10 | import Homepage from "./Navbar/Home";
11 | import Footer from "./Footer/Footer";
12 | import Beach from "./beaches/Beach";
13 | // import HomePage from './HomePage/Main_Page';
14 | import Product from "./Packages/product";
15 | import { AllRoutes } from "./Routes/AllRoutes";
16 |
17 | function App() {
18 | const [ham, setHam] = useState(false);
19 | const changeNav = () => {
20 | if (window.innerWidth < 500) {
21 | setHam(true);
22 | } else {
23 | setHam(false);
24 | }
25 | };
26 | useEffect(() => {
27 | window.addEventListener("resize", changeNav);
28 | }, []);
29 | return (
30 |
31 | {ham ?
:
}
32 |
33 | {/*
*/}
34 |
35 |
36 |
37 | );
38 | }
39 |
40 | export default App;
41 |
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/Adminnav.jsx:
--------------------------------------------------------------------------------
1 | import { Box, Flex, Heading } from "@chakra-ui/react";
2 | import { useState } from "react";
3 | import OrderItem from "./orders";
4 |
5 | const AdminNav = ({ setShowPage }) => {
6 | return (
7 |
8 |
9 | setShowPage("AddProdct")}
14 | size={"md"}
15 | >
16 | Add Packages
17 |
18 | setShowPage("OrderItem")}
23 | size={"md"}
24 | >
25 | Orders
26 |
27 | setShowPage("DeleteItem")}
32 | size={"md"}
33 | >
34 | Delete
35 |
36 |
37 |
38 | );
39 | };
40 | export default AdminNav;
41 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Watch/Watch.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | height: 283.115px;
4 | width: 289px;
5 | /* margin: 0 0 30px 0; */
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 | }
11 | .imgdiv{
12 | height: 250px;
13 | width: 250px;
14 | overflow: hidden;
15 | vertical-align: middle;
16 |
17 | }
18 | .imge{
19 | height: 600;
20 | width: 600;
21 | border-radius: 5px;
22 | vertical-align: middle;
23 | }
24 |
25 | /* .title{
26 | color: #FF6633;
27 | height: 17.1354px;
28 | width: 59.1345;
29 | font-size: 12px;
30 | font-weight: 700;
31 | line-height: 17.1429px;
32 | white-space: nowrap;
33 | word-spacing: 0px;
34 | margin-top: 5px;
35 | } */
36 | .des{
37 | font-family: circularairpro-bold,Arial, Helvetica;
38 | font-size: 18px;
39 | font-weight: 700;
40 | text-decoration: none solid rgb(51, 51, 51);
41 | text-transform: capitalize;
42 | word-spacing: 0px;
43 | color: #333333;
44 | /* height: 102.833px; */
45 | width: 240px;
46 | margin: 8px 0 0 0;
47 |
48 |
49 | }
50 | .bydiv{
51 | margin-top: 5px;
52 | font-family: apple-system, Arial, Helvetica, sans-serif;
53 | }
54 | .by{
55 | font-size: 14px;
56 | margin-right: 0.5rem;
57 | margin-left: 0.1rem;
58 | }
59 | .byname{
60 | color: #1C70A2;
61 | font-size: 14px;
62 | }
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Redux/Action.js:
--------------------------------------------------------------------------------
1 | import { LOGIN_FAILURE, LOGIN_LOADING, LOGIN_SUCCESS, LOGOUT_SUCCESS, PROFILE_FAILURE, PROFILE_LOADING, PROFILE_SUCCESS, REGISTER_FAILURE, REGISTER_LOADING, REGISTER_SUCCESS } from "./ActionType"
2 | import axios from "axios"
3 |
4 | export const register=(payload)=>(dispatch)=>{
5 | dispatch({type:REGISTER_LOADING})
6 | console.log(payload)
7 | return axios.post(`https://masai-api-mocker.herokuapp.com/auth/register`,payload).then((r)=>{
8 | dispatch({type:REGISTER_SUCCESS,payload:r.data});
9 | console.log("Reg Success")
10 | return REGISTER_SUCCESS
11 | })
12 | .catch((e)=>{
13 | dispatch({type:REGISTER_FAILURE,payload:e});
14 | return REGISTER_FAILURE
15 | })
16 | }
17 |
18 |
19 | export const login=(payload)=>(dispatch)=>{
20 | dispatch({type:LOGIN_LOADING})
21 |
22 | return axios.post(`https://masai-api-mocker.herokuapp.com/auth/login`,payload).then((r)=>{
23 | dispatch({type:LOGIN_SUCCESS,payload:r.data.token});
24 | console.log(r.data)
25 | return LOGIN_SUCCESS
26 | })
27 | .catch((e)=>{
28 | dispatch({type:LOGIN_FAILURE,payload:e})
29 | return LOGIN_FAILURE
30 | })
31 | }
32 |
33 |
34 | export const logout=()=>(dispatch)=>{
35 | return dispatch({type:LOGOUT_SUCCESS})
36 | }
37 |
38 |
39 |
--------------------------------------------------------------------------------
/my-app/src/Context/ShowContext.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react'
3 | import { useState } from 'react'
4 | import { createContext } from 'react'
5 |
6 | export const ShowContext = createContext()
7 | function ShowContextProvider({children}) {
8 |
9 | const [show, setShow] = useState(false)
10 | const [isAuth,setIsAuth]=useState(false)
11 |
12 | const [formValue1,setFormValue1] =useState( {email:"",city:"",fullname:"",contact:"",option1:"",option2:"",date:"",image1:"",duration:"",cost:"",place:""});
13 | const [formValue2,setFormValue2] =useState( {image:"",duration:"",cost:"",place:""});
14 |
15 |
16 | const fillForm1=(form)=>{
17 | setFormValue1({
18 | email:form.email,
19 | city:form.city,
20 | fullname:form.fullname,
21 | contact:form.contact,
22 | option1:form.option1,
23 | option2:form.option2,
24 | date:form.date,
25 | })
26 | }
27 | const fillForm2=(form)=>{
28 | setFormValue2({
29 | image:form.img,
30 | days:form.days,
31 | cost:form.cost,
32 | place:form.days
33 | })
34 | }
35 |
36 | return (
37 |
38 |
39 | {children}
40 |
41 | )
42 | }
43 |
44 | export default ShowContextProvider
45 |
46 |
--------------------------------------------------------------------------------
/my-app/src/Packages/singlepage.jsx:
--------------------------------------------------------------------------------
1 | import { Box, Flex, Image } from "@chakra-ui/react";
2 | import axios from "axios";
3 | import { useEffect, useState } from "react";
4 | import { useParams } from "react-router-dom";
5 | import Checkout from "./checkout";
6 | import ItemView from "./itemview";
7 |
8 | const SinglePage = () => {
9 | const param = useParams();
10 |
11 | const [data, setData] = useState({});
12 |
13 | const getSingleProduct = () => {
14 | return axios.get(
15 | `https://fantastic-lab-coat-moth.cyclic.app/Package/${param.id}`
16 | );
17 | };
18 |
19 | useEffect(() => {
20 | getSingleProduct()
21 | .then((e) => setData(e.data))
22 | .catch((e) => console.log(e));
23 | }, []);
24 |
25 | return (
26 |
27 |
33 |
34 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | );
50 | };
51 |
52 | export default SinglePage;
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ✨Tripoto-Clone✨
2 | ---
3 | This is a collaborative Project from Masai School in the Construct Week. We are 4 members of the team:
4 |
5 | 1. Pankaj Singh
6 |
7 | 2. Nasir Imam
8 |
9 | 3. Rahul Singh
10 |
11 | 4. Shikha Gupta
12 |
13 | 💻Project Unique Name :- R.P.S.N Vacation ✈️
14 | ---
15 | Tripoto is a travel Booking website, for providing end to end solution to to your travelling by making your bookings handy.
16 |
17 | 💫Tech & Tools Used :
18 | ---
19 |
20 | For Frontend : HTML5, CSS3, Javascript, ES6, ReactJS Redux.
21 |
22 | For database: Json Server (cyclic).
23 |
24 | Chakra UI (UI Styling Library) Styled-Components.
25 |
26 | For authentication: Google firebase authentication.
27 |
28 | ---
29 | | Serial No | Feature |
30 | | ----------------- | ------------------------------------------------------------------ |
31 | | 1 | User signup and Login |
32 | | 2 | Products Page with Filter and Sort Functionalities |
33 | | 3 | Dynamic add to cart and Wishlist feature |
34 | | 4 | Dynamic cart page and wishlist page using userId |
35 | | 5 | Admin Login & Page |
36 | | 6 | Dummy payment using UPI-Paytm |
37 |
38 | ---
39 |
40 |
41 | https://user-images.githubusercontent.com/107506646/208311924-c224a6b2-1ddc-4680-9bb1-1d9169f7a992.mp4
42 |
43 |
44 |
45 | ---
46 | Deployed Link : https://rpsn-vacations.netlify.app
47 |
48 |
49 | ----
50 | ✨Thank You✨
51 |
52 |
--------------------------------------------------------------------------------
/my-app/src/Footer/Footer.module.css:
--------------------------------------------------------------------------------
1 | #footer{
2 | display: grid;
3 | margin: auto;
4 | grid-template-columns: repeat(5, 1fr);
5 | width: 90%;
6 | margin-top: 20px;
7 | margin-bottom: 20px;
8 |
9 | }
10 | @media screen and (min-width: 1024px) {
11 | #footer {
12 | grid-template-columns: repeat(5, 1fr);
13 | }
14 | }
15 |
16 | @media screen and (min-width: 0px)and (max-width:424px) {
17 | #footer {
18 | grid-template-columns: repeat(1, 1fr);
19 | }
20 | }
21 |
22 | @media screen and (min-width: 425px) and (max-width:767px) {
23 | #footer {
24 | grid-template-columns: repeat(3, 1fr);
25 | }
26 | #footer div:nth-child(1){
27 | grid-area: 1/1/2/2;
28 | }
29 | #footer div:nth-child(2){
30 | grid-area: 2/1/3/2;
31 | }
32 | #footer div:nth-child(3){
33 | grid-area: 2/2/3/4;
34 | }
35 | #footer div:nth-child(4){
36 | grid-area: 3/1/3/2;
37 | }
38 | #footer div:nth-child(5){
39 | grid-area: 3/2/3/4;
40 | }
41 | }
42 |
43 | @media screen and (min-width: 768px)and (max-width:1023px){
44 | #footer {
45 | grid-template-columns: repeat(4, 1fr);
46 | }
47 | #footer div:nth-child(1){
48 | grid-area: 1;
49 | }
50 | #footer div:nth-child(2){
51 | grid-area: 2/1/3/2;
52 | }
53 | #footer div:nth-child(3){
54 | grid-area: 2/2/3/3;
55 | }
56 | #footer div:nth-child(4){
57 | grid-area: 2/3/3/4;
58 | }
59 | #footer div:nth-child(5){
60 | grid-area: 2/4/3/5;
61 | }
62 | }
--------------------------------------------------------------------------------
/my-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@chakra-ui/react": "^2.4.3",
7 | "@emotion/react": "^11.10.5",
8 | "@emotion/styled": "^11.10.5",
9 | "@testing-library/jest-dom": "^5.16.5",
10 | "@testing-library/react": "^13.4.0",
11 | "@testing-library/user-event": "^13.5.0",
12 | "axios": "^1.2.1",
13 | "firebase": "^9.15.0",
14 | "framer-motion": "^7.8.0",
15 | "json-server": "^0.17.1",
16 | "react": "^18.2.0",
17 | "react-carousel": "^4.3.0",
18 | "react-dom": "^18.2.0",
19 | "react-icons": "^4.7.1",
20 | "react-redux": "^8.0.5",
21 | "react-responsive-carousel": "^3.2.23",
22 | "react-router-dom": "^6.4.5",
23 | "react-scripts": "5.0.1",
24 | "react-slick": "^0.29.0",
25 | "redux": "^4.2.0",
26 | "redux-thunk": "^2.4.2",
27 | "slick-carousel": "^1.8.1",
28 | "styled-components": "^5.3.6",
29 | "swiper": "^8.4.5",
30 | "web-vitals": "^2.1.4"
31 |
32 | },
33 | "scripts": {
34 | "server": "json-server --watch db.json --port 8080",
35 | "start": "react-scripts start",
36 | "build": "react-scripts build",
37 | "test": "react-scripts test",
38 | "eject": "react-scripts eject"
39 | },
40 | "eslintConfig": {
41 | "extends": [
42 | "react-app",
43 | "react-app/jest"
44 | ]
45 | },
46 | "browserslist": {
47 | "production": [
48 | ">0.2%",
49 | "not dead",
50 | "not op_mini all"
51 | ],
52 | "development": [
53 | "last 1 chrome version",
54 | "last 1 firefox version",
55 | "last 1 safari version"
56 | ]
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Redux/Reducer.js:
--------------------------------------------------------------------------------
1 | import { LOGIN_FAILURE, LOGIN_LOADING, LOGIN_SUCCESS, LOGOUT_SUCCESS, PROFILE_FAILURE, PROFILE_LOADING, PROFILE_SUCCESS, REGISTER_FAILURE, REGISTER_LOADING, REGISTER_SUCCESS } from "./ActionType"
2 |
3 | let token=localStorage.getItem("token")
4 |
5 | const initialState={
6 | isAuth: false ,
7 | token:token || "",
8 | isLoading:false,
9 | isError:false,
10 | }
11 |
12 |
13 | export const reducer=(state=initialState,action)=>{
14 | const {type,payload}=action
15 | switch(type){
16 | case REGISTER_LOADING:{
17 | return {
18 | ...state,
19 | isLoading:true,
20 | isError:false
21 | }
22 | }
23 | case REGISTER_SUCCESS:{
24 |
25 | return {
26 | ...state,
27 | isLoading:false,
28 | isError:false,
29 | isAuth: true,
30 | }
31 | }
32 | case REGISTER_FAILURE:{
33 | return {
34 | ...state,
35 | isLoading:false,
36 | isError:true,
37 | isAuth:true,
38 | }
39 | }
40 |
41 |
42 |
43 | case LOGIN_LOADING:{
44 | return {
45 | ...state,
46 | isLoading:true,
47 | isError:false
48 | }
49 | }
50 | case LOGIN_SUCCESS:{
51 | localStorage.setItem("token",payload)
52 | return {
53 | ...state,
54 | isLoading:false,
55 | isError:false,
56 | token:payload,
57 | isAuth:true
58 | }
59 | }
60 | case LOGIN_FAILURE:{
61 | return {
62 | ...state,
63 | isLoading:false,
64 | isError:true,
65 | isAuth:true,
66 | token:""
67 | }
68 | }
69 |
70 | case LOGOUT_SUCCESS:{
71 | return {
72 | isAuth:true
73 | }
74 | }
75 |
76 |
77 |
78 |
79 |
80 | default:{
81 | return state
82 | }
83 | }
84 | }
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/Delete.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Button,
4 | Flex,
5 | FormControl,
6 | FormLabel,
7 | Heading,
8 | Input,
9 | useToast,
10 | } from "@chakra-ui/react";
11 | import axios from "axios";
12 | import { useState } from "react";
13 |
14 | const DeleteItem = () => {
15 | const [id, setId] = useState("");
16 | const toast = useToast();
17 |
18 | const handleChange = (e) => {
19 | setId(e.target.value);
20 | };
21 |
22 | const deleteByid = async (url) => {
23 | return await axios.delete(url);
24 | };
25 |
26 | const handleClick = () => {
27 | if (id) {
28 | deleteByid(`https://fantastic-lab-coat-moth.cyclic.app/Package/${id}`)
29 | .then(
30 | (e) => (
31 | setId(""),
32 | toast({
33 | title: "Package Deleted",
34 | status: "warning",
35 | duration: 9000,
36 | isClosable: true,
37 | })
38 | )
39 | )
40 | .catch(
41 | (e) => (
42 | setId(""),
43 | toast({
44 | title: "Package Deleted",
45 | status: "warning",
46 | duration: 9000,
47 | isClosable: true,
48 | })
49 | )
50 | );
51 | }
52 | };
53 |
54 | return (
55 |
56 |
57 | Delete Product
58 |
63 |
64 |
65 |
71 | Delete
72 |
73 |
74 |
75 | );
76 | };
77 |
78 | export default DeleteItem;
79 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/home_page_img.jsx:
--------------------------------------------------------------------------------
1 | // import React from "react";
2 | // import styles from "./home_page_img.module.css";
3 |
4 | // function HomePage_img() {
5 | // return (
6 | //
7 | //
8 |
9 |
10 | //
India's Largest Community of Travellers
11 | //
19 | // {/* */}
20 |
21 | //
22 | //
23 | // );
24 | // }
25 | // export default HomePage_img;
26 |
27 | // import { Box, Heading, Input } from "@chakra-ui/react";
28 | // import React, { useState } from "react";
29 | // import styles from "./BgImage.module.css";
30 |
31 | // function BgImage() {
32 | // return (
33 | //
34 | //
35 | //
42 | //
43 | // Exclusive Tours & Holiday Packages
44 | //
45 | //
52 | //
53 | // Stay with activities
54 | // Destination Packages
55 | // Rajasthan
56 | // Manali
57 | // Himanchal
58 | // Rishikesh
59 | // Uttarakhand
60 | //
61 | //
62 | //
63 | // );
64 | // }
65 |
66 | // export default BgImage;
67 |
--------------------------------------------------------------------------------
/my-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
17 |
18 |
19 |
23 |
24 |
28 |
29 |
38 | React App
39 |
40 |
41 | You need to enable JavaScript to run this app.
42 |
43 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/my-app/src/Navbar/HamburgerMenu.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Avatar,
3 | Box,
4 | Button,
5 | Drawer,
6 | DrawerBody,
7 | DrawerContent,
8 | DrawerHeader,
9 | DrawerOverlay,
10 | Image,
11 | useDisclosure,
12 | } from "@chakra-ui/react";
13 | import React, { useContext, useState } from "react";
14 | import { GiHamburgerMenu } from "react-icons/gi";
15 | import { NavLink } from "react-router-dom";
16 | import { ShowContext } from "../Context/ShowContext";
17 |
18 | function HamburgerMenu() {
19 | const { isOpen, onOpen, onClose } = useDisclosure();
20 | const [placement, setPlacement] = React.useState("top");
21 | const { show, setShow } = useContext(ShowContext);
22 |
23 |
24 | return (
25 | <>
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
46 |
47 | Visit Singapore
48 |
49 | Beaches
50 | Packages
51 |
52 |
53 |
54 |
55 |
56 | >
57 | );
58 | }
59 |
60 | export default HamburgerMenu;
61 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/ImageSlider.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | const slideStyles = {
4 | width: "auto",
5 | height: "100%",
6 | borderRadius: "10px",
7 | backgroundSize: "cover",
8 | // backgroundPosition: "center",
9 | };
10 |
11 | const rightArrowStyles = {
12 | position: "absolute",
13 | top: "50%",
14 | transform: "translate(0, -50%)",
15 | right: "32px",
16 | fontSize: "45px",
17 | color: "#fff",
18 | zIndex: 1,
19 | cursor: "pointer",
20 | };
21 |
22 | const leftArrowStyles = {
23 | position: "absolute",
24 | top: "50%",
25 | transform: "translate(0, -50%)",
26 | left: "32px",
27 | fontSize: "45px",
28 | color: "#fff",
29 | zIndex: 1,
30 | cursor: "pointer",
31 | };
32 |
33 | const sliderStyles = {
34 | position: "relative",
35 | height: "100%",
36 | };
37 |
38 | // const dotsContainerStyles = {
39 | // display: "flex",
40 | // justifyContent: "center",
41 | // };
42 |
43 | // const dotStyle = {
44 | // margin: "0 3px",
45 | // cursor: "pointer",
46 | // fontSize: "20px",
47 | // };
48 |
49 | const ImageSlider = ({ slides }) => {
50 | const [currentIndex, setCurrentIndex] = useState(0);
51 | const goToPrevious = () => {
52 | const isFirstSlide = currentIndex === 0;
53 | const newIndex = isFirstSlide ? slides.length - 1 : currentIndex - 1;
54 | setCurrentIndex(newIndex);
55 | };
56 | const goToNext = () => {
57 | const isLastSlide = currentIndex === slides.length - 1;
58 | const newIndex = isLastSlide ? 0 : currentIndex + 1;
59 | setCurrentIndex(newIndex);
60 | };
61 | const goToSlide = (slideIndex) => {
62 | setCurrentIndex(slideIndex);
63 | };
64 | const slideStylesWidthBackground = {
65 | ...slideStyles,
66 | backgroundImage: `url(${slides[currentIndex].url})`,
67 | };
68 |
69 | return (
70 |
71 |
72 |
73 | ❰
74 |
75 |
76 | ❱
77 |
78 |
79 |
80 | {/*
81 | {slides.map((slide, slideIndex) => (
82 |
goToSlide(slideIndex)}
86 | >
87 | ●
88 |
89 | ))}
90 |
*/}
91 |
92 | );
93 | };
94 |
95 | export default ImageSlider;
--------------------------------------------------------------------------------
/my-app/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/adminLogin.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | AlertDialog,
3 | AlertDialogBody,
4 | AlertDialogContent,
5 | AlertDialogFooter,
6 | AlertDialogHeader,
7 | AlertDialogOverlay,
8 | Box,
9 | Button,
10 | Input,
11 | useDisclosure,
12 | useToast,
13 | } from "@chakra-ui/react";
14 | import React, { useState } from "react";
15 | import { useNavigate } from "react-router-dom";
16 |
17 | function AdminLogin() {
18 | const { isOpen, onOpen, onClose } = useDisclosure();
19 | const cancelRef = React.useRef();
20 | const [pass, setPass] = useState("");
21 | const navigate = useNavigate();
22 | const toast = useToast();
23 |
24 | const handleChange = (e) => {
25 | setPass(e.target.value);
26 | };
27 |
28 | const handleAdminLogin = () => {
29 | if (pass) {
30 | if (pass == "12345678") {
31 | navigate("/admin");
32 | } else {
33 | toast({
34 | title: "Wrong Password",
35 | description: "Type Correct Password",
36 | status: "error",
37 | duration: 5000,
38 | isClosable: true,
39 | });
40 | }
41 | }
42 | };
43 |
44 | return (
45 | <>
46 |
47 | Admin
48 |
49 |
50 |
55 |
56 |
57 |
58 | Confirm Admin Password
59 |
60 |
61 |
62 |
68 |
69 |
70 |
71 |
72 | Back
73 |
74 | (onClose(), handleAdminLogin())}
76 | ml={3}
77 | bgColor={"blue.500"}
78 | _hover={{ bgColor: "blue.400" }}
79 | color={"whiteAlpha.900"}
80 | >
81 | Confirm
82 |
83 |
84 |
85 |
86 |
87 | >
88 | );
89 | }
90 |
91 | export default AdminLogin;
92 |
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/orders.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Heading,
4 | Table,
5 | Thead,
6 | Tbody,
7 | Tfoot,
8 | Tr,
9 | Th,
10 | Td,
11 | TableCaption,
12 | TableContainer,
13 | Button,
14 | } from "@chakra-ui/react";
15 | import axios from "axios";
16 | import { useEffect } from "react";
17 | import { useState } from "react";
18 |
19 | const OrderItem = () => {
20 | const getOrderData = async (url) => {
21 | return await axios.get(url);
22 | };
23 |
24 | const deleteOrder = async (url, id) => {
25 | return await axios.delete(`${url}/${id}`);
26 | };
27 |
28 | const [data, setData] = useState([]);
29 |
30 | useEffect(() => {
31 | if (data.length === 0) {
32 | getOrderData("https://powerful-lingerie-fawn.cyclic.app/booking").then(
33 | (e) => setData(e.data)
34 | );
35 | }
36 | }, [data.length]);
37 |
38 | const handleDelete = (id) => {
39 | deleteOrder("https://powerful-lingerie-fawn.cyclic.app/booking", id)
40 | .then((e) => getOrderData())
41 | .catch((e) => getOrderData());
42 | };
43 |
44 | console.log(data);
45 |
46 | return (
47 |
48 |
49 | Imperial to metric conversion factors
50 |
51 |
52 | S.No
53 | Name
54 | Email
55 | Number
56 | Guest City
57 | No Of Guest
58 | No Of Rooms
59 | Check In Date
60 | Package ID
61 |
62 |
63 |
64 | {data.map((elem) => (
65 |
66 | {elem.id}
67 | {elem.name}
68 | {elem.email}
69 | {elem.contect}
70 | {elem.city}
71 | {elem.people}
72 | {elem.room}
73 | {elem.date}
74 | {elem.packegeID}
75 |
76 | handleDelete(elem.id)}
78 | bgColor={"red.500"}
79 | _hover={{ bgColor: "red.400" }}
80 | color={"whiteAlpha.900"}
81 | >
82 | Delete
83 |
84 |
85 |
86 | ))}
87 |
88 |
89 |
90 | );
91 | };
92 |
93 | export default OrderItem;
94 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Book/Book.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | /* height: 283.115px; */
4 | width: 289px;
5 | margin: 0 0 30px 0;
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 | color: #333;
10 |
11 |
12 | }
13 | .imge{
14 | height: 11rem;
15 | width: 22rem;
16 | border-radius: 5px;
17 | }
18 |
19 | .title{
20 | color: #101010;
21 | height: 17.1354px;
22 | width: 59.1345;
23 | font-size: 12px;
24 | font-weight: 700;
25 | line-height: 17.1429px;
26 | white-space: nowrap;
27 | word-spacing: 0px;
28 | margin-top: 5px;
29 | margin-left: 0.23rem;
30 | }
31 | .des{
32 | font-family: circularairpro-bold,Arial, Helvetica;
33 | font-size: 18px;
34 | font-weight: 700;
35 | text-decoration: none solid rgb(51, 51, 51);
36 | text-transform: capitalize;
37 | word-spacing: 0px;
38 | color: #333333;
39 | /* height: 102.833px; */
40 | width: 21rem;
41 | margin: 8px 0 0 0;
42 |
43 |
44 | }
45 |
46 | .bydiv{
47 | margin-top: 15px;
48 | font-family: apple-system, Arial, Helvetica, sans-serif;
49 | color: #101010;
50 | }
51 | .by{
52 | font-size: 14px;
53 | margin-right: 0.5rem;
54 | margin-left: 0.1rem;
55 | color: #111212;
56 | }
57 | .byname{
58 | color: #242525;
59 | font-size: 14px;
60 | }
61 |
62 | .btn{
63 | font-family: apple-system, Arial, Helvetica;
64 | color: rgb(43, 42, 42);
65 | background-color: #359391; ;
66 | border-radius: 50px;
67 | border: none;
68 | font-size: 12px;
69 | padding: 3px 7px 3px 7px;
70 | }
71 | .spbtn{
72 | margin-left: 96px;
73 | color: #101010;
74 | }
75 |
76 | .pri{
77 | display: flex;
78 | justify-content: space-between;
79 | margin-top: 1.5rem;
80 | color: #101010;
81 |
82 | }
83 | .prdiv{
84 | margin-top: 0.5rem;
85 | color: #101010;
86 | }
87 |
88 | .pr{
89 | font-size: 18px;
90 | font-weight: 700;
91 | color: #333333;
92 | }
93 | .per{
94 | font-size: 14px;
95 | color: rgb(25, 25, 25);
96 | font-weight: 100;
97 | margin-left: 0.5rem;
98 |
99 | }
100 |
101 | .smbox{
102 | border: 1px solid #676868;
103 | padding: 0.4rem ;
104 | width: 5rem;
105 | height: 3rem;
106 | text-align: center;
107 | color: #151515;
108 | border-radius: 5px;
109 | margin-right: 5rem;
110 | font-size: 14px;
111 |
112 |
113 | }
114 |
115 | .ls{
116 |
117 | display: flex;
118 | gap:1rem;
119 | color: #101010;
120 | }
121 | .lsimg{
122 | height: 30px;
123 | width: 30px;
124 | border-radius: 15px;
125 | }
126 | .lstex{
127 | font-size: 14px;
128 | text-transform: capitalize;
129 | margin-top: 4px;
130 | color: #333333;
131 | }
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Travel/Travel.module.css:
--------------------------------------------------------------------------------
1 | .box{
2 | color: #333;
3 | /* height: 283.115px; */
4 | width: 289px;
5 | margin: 0 0 30px 0;
6 | min-height: 1px;
7 | padding: 0 15px 0 15px;
8 | text-align: left;
9 |
10 |
11 | }
12 | .imge{
13 | height: 11rem;
14 | width: 22rem;
15 | border-radius: 5px;
16 | }
17 |
18 | .title{
19 | color: #359391;
20 | height: 17.1354px;
21 | width: 59.1345;
22 | font-size: 12px;
23 | font-weight: 700;
24 | line-height: 17.1429px;
25 | white-space: nowrap;
26 | word-spacing: 0px;
27 | margin-top: 5px;
28 | margin-left: 0.23rem;
29 | }
30 | .des{
31 | font-family: circularairpro-bold,Arial, Helvetica;
32 | font-size: 18px;
33 | font-weight: 700;
34 | text-decoration: none solid rgb(51, 51, 51);
35 | text-transform: capitalize;
36 | word-spacing: 0px;
37 | color: #333333;
38 | /* height: 102.833px; */
39 | width: 21rem;
40 | margin: 8px 0 0 0;
41 |
42 |
43 | }
44 |
45 | .bydiv{
46 | margin-top: 15px;
47 | font-family: apple-system, Arial, Helvetica, sans-serif;
48 | }
49 | .by{
50 | font-size: 14px;
51 | margin-right: 0.5rem;
52 | margin-left: 0.1rem;
53 | color: #359391;
54 | }
55 | .byname{
56 | color: #359391;
57 | font-size: 14px;
58 | }
59 |
60 | .btn{
61 | font-family: apple-system, Arial, Helvetica;
62 | color: white;
63 | background-color: #359391; ;
64 | border-radius: 50px;
65 | border: none;
66 | font-size: 12px;
67 | padding: 3px 7px 3px 7px;
68 | }
69 | .spbtn{
70 | margin-left: 10rem;
71 | }
72 |
73 | .pri{
74 | display: flex;
75 | justify-content: space-between;
76 | margin-top: 1.5rem;
77 |
78 | }
79 | .prdiv{
80 | margin-top: 0.5rem;
81 | }
82 |
83 | .pr{
84 | font-size: 18px;
85 | font-weight: 700;
86 | color: #333333;
87 | }
88 | .per{
89 | font-size: 14px;
90 | color: rgb(180, 180, 180);
91 | font-weight: 100;
92 | margin-left: 0.5rem;
93 |
94 | }
95 |
96 | .smbox{
97 | border: 1px solid #359391;
98 | padding: 0.4rem ;
99 | width: 5rem;
100 | height: 2rem;
101 | text-align: center;
102 | color: #121313;
103 | border-radius: 5px;
104 | margin-right: 5rem;
105 | font-size: 14px;
106 |
107 |
108 | }
109 |
110 | .ls{
111 |
112 | display: flex;
113 | gap:1rem;
114 | }
115 | .lsimg{
116 | height: 30px;
117 | width: 30px;
118 | border-radius: 15px;
119 | }
120 | .lstex{
121 | font-size: 14px;
122 | text-transform: capitalize;
123 | margin-top: 4px;
124 | color: #333333;
125 | }
126 | .check{
127 | border: 1px solid black;
128 | width: 15px;
129 |
130 | background-color: #1C70A2;
131 | border-radius: 50%;
132 | padding-left: 2px;
133 | margin-left: 5px;
134 |
135 | }
136 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/Exclusive_box.jsx:
--------------------------------------------------------------------------------
1 | import { Grid } from "@chakra-ui/react";
2 | import {
3 | Image,
4 | Box,
5 | Text,
6 | Link,
7 | Heading,
8 | Badge,
9 | Flex,
10 | Spacer,
11 | Button,
12 | } from "@chakra-ui/react";
13 |
14 | function Exclusive_box() {
15 | const outer_div = {
16 | width: "85%",
17 | margin: "auto",
18 | marginTop: "50px",
19 | };
20 |
21 | return (
22 |
23 |
24 |
25 |
32 |
33 | 10 Best Places To Experience The Chills This Winter
34 |
35 |
36 |
37 |
45 |
49 | Manali
50 |
51 |
52 |
53 | 4D-3N
54 |
55 |
56 |
57 |
58 |
59 |
60 | 9,875/person
61 |
62 |
63 |
64 |
65 | Book Now
66 |
67 |
68 |
69 |
70 |
75 | Triopto's Mindfull Retreats
76 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | );
85 | }
86 |
87 | export default Exclusive_box;
88 |
--------------------------------------------------------------------------------
/my-app/src/Navbar/Home.jsx:
--------------------------------------------------------------------------------
1 | import { Box, Heading, Input, Text } from "@chakra-ui/react";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { ShowContext } from "../Context/ShowContext";
4 | import "./Homepage.css";
5 | import { Countries } from "./Countries";
6 | import styled from "styled-components";
7 | import { FaMapMarkerAlt } from "react-icons/fa";
8 | import HomePage_Component from "../Home_Page_Component/Main_Page";
9 | import {Home} from "../Pankaj/Home"
10 | const Homepage = () => {
11 | const { show, setShow } = useContext(ShowContext);
12 | const [result, setResults] = useState("");
13 | const [data, setData] = useState([]);
14 |
15 | const handleResult = (e) => {
16 | setResults(e.target.value);
17 | };
18 |
19 | useEffect(() => {
20 | if (result === "") {
21 | setData([]);
22 | } else {
23 | let show_data = Countries.filter((item) => {
24 | return item.country.toLowerCase().indexOf(result) !== -1 ? true : false;
25 | });
26 | setData(show_data);
27 | }
28 | }, [result]);
29 | // console.log(data)
30 |
31 | return (
32 |
33 |
34 |
35 |
40 |
41 | {!show && (
42 |
43 |
44 | India's Largest Community of Travellers
45 |
46 |
52 |
53 | {data.map((item) => {
54 | return (
55 |
56 |
57 | {item.country}
58 |
59 |
60 | );
61 | })}
62 |
63 |
64 | )}
65 |
66 |
67 |
68 | {/*
*/}
69 |
70 |
71 | );
72 | };
73 |
74 | export const Resulter = styled.div`
75 | position: absolute;
76 | top: 100%;
77 | left: 10%;
78 | max-height: ${({ limit }) => `${limit * 34}px`};
79 | border: 1px solid grey;
80 | border-bottom-left-radius: 5px;
81 | border-bottom-right-radius: 5px;
82 | background-color: white;
83 | width: 80%;
84 | overflow: scroll;
85 | `;
86 |
87 | export default Homepage;
88 |
--------------------------------------------------------------------------------
/my-app/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
13 |
14 | The page will reload when you make changes.\
15 | You may also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!**
35 |
36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
39 |
40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/my-app/src/Packages/itemview.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Square,
4 | Image,
5 | Heading,
6 | Flex,
7 | Avatar,
8 | Center,
9 | Divider,
10 | Button,
11 | } from "@chakra-ui/react";
12 | import axios from "axios";
13 | import { useEffect, useState } from "react";
14 | import {
15 | FaBinoculars,
16 | FaGem,
17 | FaHamburger,
18 | FaHiking,
19 | FaHome,
20 | FaMountain,
21 | FaPersonBooth,
22 | FaTree,
23 | FaWifi,
24 | } from "react-icons/fa";
25 | import { useParams } from "react-router-dom";
26 |
27 | const ItemView = ({ data }) => {
28 |
29 | return (
30 |
31 |
32 |
33 |
34 |
35 | {data.title}
36 |
37 |
38 |
49 |
58 | {data.brand_name}
59 |
60 |
61 |
62 |
68 |
74 | {data.button}
75 |
76 |
77 | {data.price}/person
78 |
79 |
80 |
81 |
82 | Location
83 |
84 |
90 | {data.location}
91 |
92 |
93 |
94 | Highlights
95 |
96 |
103 |
104 |
105 | Meals
106 |
107 |
108 |
109 | Sightseeing
110 |
111 |
112 | {" "}
113 |
114 | Homestay
115 |
116 |
117 |
118 | Adventure
119 |
120 |
121 | Hill Station
122 |
123 |
124 | Nature
125 |
126 |
127 | Wellness
128 |
129 |
130 | Hidden Gem
131 |
132 |
133 |
134 | Wi-Fi
135 |
136 |
137 |
138 | );
139 | };
140 |
141 | export default ItemView;
142 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Home.module.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | .banner{
4 | width: 100%;
5 | background-position: 50% 30%;
6 | object-position: 50% 30%;
7 | object-fit: cover;
8 | height: 340px;
9 | background-color: transparent;
10 | /* background-size: cover; */
11 | }
12 |
13 | .hometop{
14 | box-sizing: border-box;
15 | background-color: transparent;
16 | }
17 | .bannerh1{
18 |
19 | margin: auto;
20 | top: 110px;
21 | width: 100%;
22 | position: absolute;
23 | color: #fff;
24 | font-family: circularairpro-bold,Helvetica,Arial,sans-serif;
25 | font-weight: 700;
26 | background-color: transparent;
27 | }
28 |
29 | .hh1{
30 | font-family: inherit;
31 | font-weight: 500;
32 | line-height: 1.1;
33 | color: inherit;
34 | margin-top: 20px;
35 | margin-bottom: 10px;
36 | text-align: center;
37 | font-size: 36px;
38 | background-color: transparent;
39 | }
40 |
41 | .dark{
42 | color: #333;
43 |
44 | background-color: transparent;
45 |
46 |
47 |
48 | }
49 | .inp{
50 |
51 | margin: auto;
52 |
53 | width: 630px;
54 | max-width: 630px;
55 | position: relative;
56 | text-align: left;
57 | text-align: left;
58 | padding: 1rem;
59 | background-color: transparent;
60 |
61 | }
62 | .btn{
63 | margin: 6px;
64 | padding: 12px;
65 | border-radius: 50%;
66 | border: none;
67 | cursor: pointer;
68 | }
69 | .btn img{
70 | height: 16px;
71 | width: 17px;
72 | }
73 |
74 | .lig{
75 |
76 | background-color: #fff;
77 | border-radius: 5px;
78 |
79 | }
80 | .in{
81 | width: 89%;
82 | height: 3.2rem;
83 | border: none;
84 | margin-left: 0.5rem;
85 |
86 |
87 | }
88 | Input[type=text]{
89 | border: none;
90 | }
91 | Input[type=text]:focus {
92 | border: none;
93 | }
94 | .bottomhome{
95 | margin-left: 1vw;
96 | margin-right: 1vw;
97 | margin-top: 3rem;
98 |
99 | }
100 |
101 | .bandown{
102 | display: flex;
103 | justify-content: space-around;
104 |
105 |
106 | }
107 |
108 | .bandown img{
109 | height: 11vh;
110 | width: 19vw;
111 | }
112 |
113 | .container{
114 | padding-top: 15px;
115 | padding-right: 15px;
116 | padding-left: 15px;
117 | margin-right: auto;
118 | margin-left: auto;
119 | }
120 | .cont{
121 | padding-top: 10px;
122 | padding-right: 15px;
123 | padding-left: 15px;
124 | margin-right: auto;
125 | margin-left: 0.5rem;
126 | }
127 |
128 | .gif{
129 | height: 260px;
130 | width: 100%;
131 | cursor: pointer;
132 | }
133 |
134 | .divgif{
135 | margin-top: 2rem;
136 | }
137 |
138 |
139 | .find{
140 | padding-right: 15px;
141 | padding-left: 5px;
142 | margin-right: auto;
143 | margin-left: auto;
144 | text-align: left;
145 | margin-top: 2rem;
146 |
147 |
148 | }
149 | .place{
150 | padding-right: 15px;
151 | padding-left: 5px;
152 | margin-right: auto;
153 | margin-left: auto;
154 | text-align: left;
155 | }
156 |
157 | .creator{
158 | padding-right: 15px;
159 | padding-left: 5px;
160 | margin-right: auto;
161 | margin-left: auto;
162 | text-align: left;
163 | margin-top: 2rem;
164 | }
165 |
166 | .creimg{
167 | display: flex;
168 | gap:1.3rem;
169 | justify-content: center;
170 |
171 |
172 | }
173 | .creimg img{
174 | height: 450px;
175 | width: 350px;
176 | }
177 | .plan{
178 | padding-right: 15px;
179 | padding-left: 5px;
180 | margin-right: auto;
181 | margin-left: auto;
182 | text-align: left;
183 | margin-top: 2rem;
184 | }
185 | .watch{
186 | padding-right: 15px;
187 | padding-left: 5px;
188 | margin-right: auto;
189 | margin-left: auto;
190 | text-align: left;
191 | margin-top: 2rem;
192 | }
193 |
194 |
--------------------------------------------------------------------------------
/my-app/src/beaches/Comprehensive.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import axios from "axios";
3 | import "slick-carousel/slick/slick.css";
4 | import "slick-carousel/slick/slick-theme.css";
5 | import Slider from "react-slick";
6 | import styled from "styled-components";
7 | import { IoIosArrowDropleft, IoIosArrowDropright } from "react-icons/io";
8 | import { FaMapMarkerAlt } from "react-icons/fa";
9 |
10 | const Comprehensive = () => {
11 | const [packag, setPackage] = useState([]);
12 | useEffect(() => {
13 | axios
14 | .get("https://persian-blue-hen-slip.cyclic.app/Comprehensive")
15 | .then((res) => {
16 | setPackage(res.data);
17 | });
18 | }, []);
19 |
20 | function SampleNextArrow(props) {
21 | const { onClick } = props;
22 | return (
23 |
32 |
33 |
34 | );
35 | }
36 |
37 | function SamplePrevArrow(props) {
38 | const { onClick } = props;
39 |
40 | return (
41 |
51 |
52 |
53 | );
54 | }
55 |
56 | let settings = {
57 | infinite: true,
58 | speed: 500,
59 | slidesToShow: 3,
60 | slidesToScroll: 3,
61 | nextArrow: ,
62 | prevArrow: ,
63 | responsive: [
64 | {
65 | breakpoint: 1024,
66 | settings: {
67 | slidesToShow: 3,
68 | slidesToScroll: 3,
69 | infinite: true,
70 | dots: true
71 | }
72 | },
73 | {
74 | breakpoint: 600,
75 | settings: {
76 | slidesToShow: 2,
77 | slidesToScroll: 2,
78 | initialSlide: 2
79 | }
80 | },
81 | {
82 | breakpoint: 480,
83 | settings: {
84 | slidesToShow: 1,
85 | slidesToScroll: 1
86 | }
87 | }
88 | ]
89 | };
90 | return (
91 |
92 |
93 |
Explore Our Comprehensive Guides for More Details
94 |
95 |
104 | {packag &&
105 | packag.map((ele) => (
106 |
107 |
108 |
109 | {ele.title}
110 |
111 |
112 | ))}
113 |
114 |
115 | );
116 | }
117 |
118 | export default Comprehensive
119 |
120 |
121 |
122 | const WebseriesWrapper = styled.div`
123 | margin-top:50px;
124 | margin-bottom:50px;
125 | h1 {
126 | margin-bottom: 8px;
127 | font-size: 28px;
128 | font-weight: 700;
129 | line-height: 30.8px;
130 | }
131 |
132 |
133 | `;
134 |
135 | const WeseriesCard = styled.div`
136 | padding:0px 5px;
137 | margin-top:10px;
138 |
139 |
140 | img {
141 | align-items:center;
142 | height:210px;
143 | object-fit: cover;
144 | object-position:center;
145 | width:100%;
146 | border-radius: 4px;
147 |
148 | }
149 | h3{
150 | font-weight:700;
151 | margin-bottom:8px;
152 | font-size:20px;
153 | }
154 |
155 | `;
156 |
--------------------------------------------------------------------------------
/my-app/src/beaches/Topbeach.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react'
2 | import axios from 'axios';
3 | import "slick-carousel/slick/slick.css";
4 | import "slick-carousel/slick/slick-theme.css";
5 | import Slider from "react-slick";
6 | import { IoIosArrowDropleft, IoIosArrowDropright } from "react-icons/io"
7 | import styled from "styled-components"
8 | const Topbeach = () => {
9 | const [topBeach, setTopBeach] = useState([]);
10 | useEffect(() => {
11 | axios
12 | .get("https://persian-blue-hen-slip.cyclic.app/india")
13 | .then((res) => {
14 | setTopBeach(res.data);
15 | });
16 | }, []);
17 |
18 | function SampleNextArrow(props) {
19 |
20 | const { onClick } = props;
21 | return (
22 |
23 |
28 |
29 |
30 |
31 | );
32 | }
33 |
34 | function SamplePrevArrow(props) {
35 | const { onClick } = props;
36 |
37 | return (
38 |
39 |
44 |
45 |
46 |
47 | );
48 | }
49 |
50 | let settings = {
51 | infinite: true,
52 | speed: 500,
53 | slidesToShow: 3,
54 | slidesToScroll: 3,
55 | nextArrow: ,
56 | prevArrow: ,
57 | responsive: [
58 | {
59 | breakpoint: 1024,
60 | settings: {
61 | slidesToShow: 3,
62 | slidesToScroll: 3,
63 | infinite: true,
64 | dots: true
65 | }
66 | },
67 | {
68 | breakpoint: 600,
69 | settings: {
70 | slidesToShow: 2,
71 | slidesToScroll: 2,
72 | initialSlide: 2
73 | }
74 | },
75 | {
76 | breakpoint: 480,
77 | settings: {
78 | slidesToShow: 1,
79 | slidesToScroll: 1
80 | }
81 | }
82 | ]
83 | };
84 |
85 | return (
86 |
87 |
88 |
Top Beach Properties You Need to Experience This Year
89 |
90 |
91 |
92 |
93 | {
94 | topBeach && topBeach.map((ele) =>
95 |
96 | {ele.prop}
97 | {ele.title}
98 | By {ele.by}
99 | )
100 | }
101 |
102 |
103 |
104 | )
105 | }
106 |
107 | export default Topbeach
108 |
109 |
110 |
111 |
112 | export const WebseriesWrapper = styled.div`
113 | margin-top:50px;
114 | margin-bottom:50px;
115 | h1 {
116 | margin-bottom: 8px;
117 | font-size: 28px;
118 | font-weight: 700;
119 | line-height: 30.8px;
120 | }
121 | text {
122 | font-weight: 400;
123 | font-size: 16px;
124 | line-height: 22px;
125 | }
126 |
127 | span {
128 | color: black;
129 | margin-right: 2px;
130 | }
131 |
132 | h5 {
133 | color: rgb(56, 159, 221);
134 | line-height:15px;
135 |
136 | }
137 | h6{
138 | color:rgb(255,145,108);
139 | font-size:14px;
140 | margin-top:4px;
141 | }
142 | `;
143 |
144 | export const WeseriesCard = styled.div`
145 | padding:0px 5px;
146 | margin-top:10px;
147 |
148 |
149 | img {
150 | align-items:center;
151 | height:210px;
152 | object-fit: cover;
153 | object-position:center;
154 | width:100%;
155 | border-radius: 4px;
156 |
157 | }
158 | h3{
159 | font-weight:700;
160 | margin-bottom:8px;
161 | }
162 | h5{
163 | font-size:16px;
164 | }
165 | `;
166 |
--------------------------------------------------------------------------------
/my-app/src/Navbar/Homepage.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
6 | #banner {
7 | width: 100%;
8 | height: 340px;
9 | }
10 | #banner + div{
11 | width: 40%;
12 | left: 30%;
13 | top:35%;
14 | /* border: 1px solid red; */
15 | text-align: center;
16 | }
17 | #luftansa {
18 | /* border: 1px solid; */
19 | height: auto;
20 | width: 55%;
21 | margin: auto;
22 | margin-bottom: 5%;
23 | }
24 |
25 | /* Home1 */
26 |
27 | #home1_A {
28 | display: grid;
29 | grid-template-columns: repeat(4, 1fr);
30 | margin: auto;
31 | /* border: 1px solid; */
32 | gap: 10px;
33 | align-items: center;
34 | width: 76%;
35 | }
36 |
37 | #home1_A img {
38 | height: 75px;
39 | /* border: 1px solid silver; */
40 | }
41 |
42 | /* Tourism */
43 |
44 | #tour-flex {
45 | display: grid;
46 | width: 75%;
47 | margin: auto;
48 | /* border: 1px solid; */
49 | grid-template-columns: repeat(4, 1fr);
50 | gap: 20px;
51 | }
52 |
53 | #tour-flex > div {
54 | /* width: 23%; */
55 | /* border: 1px solid; */
56 | display: flex;
57 | flex-direction: column;
58 | align-items: center;
59 | }
60 |
61 | #tour-flex div img {
62 | height: 180px;
63 | border-radius: 10px;
64 | }
65 |
66 | #tour-flex div h4 {
67 | padding-left: 5px;
68 | padding-right: 0px;
69 | }
70 |
71 | /* Traveller */
72 |
73 | #traveller-flex {
74 | /* border: 1px solid; */
75 | display: grid;
76 | grid-template-columns: repeat(4, 1fr);
77 | width: 90%;
78 | margin: auto;
79 | gap: 20px;
80 | margin-bottom: 70px;
81 | }
82 |
83 | #traveller-flex > div {
84 | /* border: 1px solid silver; */
85 | border-radius: 5px;
86 | /* padding: 10px; */
87 | }
88 |
89 | #traveller-flex > div img {
90 | border-radius: 10px;
91 | height: 180px;
92 | width: 100%;
93 | }
94 |
95 | #traveller-flex > div > h4 {
96 | font-size: 17px;
97 | }
98 |
99 | /* Spotlight */
100 |
101 | #spot-flex {
102 | width: 75%;
103 | margin: auto;
104 | margin-bottom: 70px;
105 | }
106 |
107 | #spot-flex-2 {
108 | display: grid;
109 | grid-template-columns: repeat(3, 1fr);
110 | grid-template-rows: auto;
111 | gap: 30px;
112 | }
113 |
114 |
115 |
116 | #spot-flex-2 div img {
117 | border-radius: 5px;
118 | height: 95%;
119 | width: 100%;
120 | }
121 |
122 | /* Carousel */
123 |
124 | .carousel-wrapper {
125 | width: 100%;
126 | height: auto;
127 | }
128 |
129 | .content-div img {
130 | height: 170px;
131 | width: 100%;
132 | border-radius: 5px;
133 | }
134 |
135 | #carousel-parent {
136 | width: 90%;
137 | margin: auto;
138 | height: auto;
139 | }
140 |
141 | .content-div > h5 {
142 | font-size: 13px;
143 | color: rgb(215, 143, 9);
144 | }
145 |
146 | .content-div > h4 {
147 | font-size: 18px;
148 | color: rgba(0, 0, 0, 0.8);
149 | font-weight: 600;
150 | }
151 |
152 |
153 | .carousel-wrapper-country img {
154 | height: 320px;
155 | border-radius: 5px;
156 |
157 | }
158 |
159 | .rec.rec-arrow {
160 | background-color: white;
161 | font-size: 14px;
162 | display: block;
163 | margin: auto;
164 | /* width: 10px; */
165 | /* border: 1px solid red; */
166 | }
167 |
168 | .rec.rec-arrow:hover {
169 | background: rgb(164, 209, 249);
170 | }
171 |
172 | #suggestion::-webkit-scrollbar {
173 | display: none;
174 | }
175 |
176 | @media all and (min-width: 100px) and (max-width: 500px) {
177 | #home1_A,
178 | #spot-flex-2,
179 | #tour-flex,
180 | #traveller-flex {
181 | grid-template-columns: repeat(1, 1fr);
182 | grid-template-rows: auto;
183 | }
184 |
185 | .content-div > h5 {
186 | font-size: 10px;
187 | }
188 |
189 | .content-div > h4 {
190 | font-size: 12px;
191 | }
192 |
193 | #carousel-parent > h3{
194 | font-size: 20px;
195 | margin-bottom: 10px;
196 | }
197 |
198 | /* #spot-flex img{
199 |
200 | } */
201 |
202 | #middlepart_p{
203 | font-size: 16px;
204 | }
205 | #banner + div{
206 | width: 90%;
207 | left: 5%;
208 | top:35%;
209 | }
210 | }
211 |
--------------------------------------------------------------------------------
/my-app/src/AdminPanal/addProduct.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Button,
4 | Flex,
5 | FormControl,
6 | FormLabel,
7 | Input,
8 | Select,
9 | useToast,
10 | } from "@chakra-ui/react";
11 | import { useContext, useState } from "react";
12 | import axios from "axios";
13 | import { useEffect } from "react";
14 | import { ShowContext } from "../Context/ShowContext";
15 |
16 | const AddProdct = () => {
17 | const intProductData = {
18 | image: "",
19 | type: "",
20 | title: "",
21 | location: "",
22 | button: "",
23 | price: ``,
24 | person: "/person",
25 | quotes: "Get Quotes",
26 | brand_logo: "",
27 | brand_name: "",
28 | };
29 |
30 | const postPackages = async (url, data) => {
31 | try {
32 | return await axios.post(url, data);
33 | } catch (error) {
34 | console.log(error);
35 | }
36 | };
37 |
38 | const [form, setForm] = useState(intProductData);
39 | const toast = useToast();
40 |
41 | const handleChange = (e) => {
42 | const { name, value } = e.target;
43 | setForm({ ...form, [name]: value });
44 | };
45 |
46 | const handleClick = () => {
47 | if (
48 | form.image &&
49 | form.type &&
50 | form.title &&
51 | form.location &&
52 | form.button &&
53 | form.price &&
54 | form.brand_logo &&
55 | form.brand_name
56 | ) {
57 | postPackages("https://fantastic-lab-coat-moth.cyclic.app/Package", form)
58 | .then(
59 | () => (
60 | setForm(intProductData),
61 | toast({
62 | title: "Package Added.",
63 | status: "success",
64 | duration: 9000,
65 | isClosable: true,
66 | })
67 | )
68 | )
69 | .catch(() => setForm(intProductData));
70 | }
71 | };
72 |
73 | return (
74 |
75 |
76 |
77 | Product Name :
78 |
79 | Package Image Link :
80 |
86 | Product Type :
87 |
88 | Product Location :
89 |
94 | Product Validity :
95 |
101 | 1D-1N
102 | 2D-1N
103 | 1D-2N
104 | 2D-3N
105 | 3D-2N
106 | 4D-3N
107 | 3D-4N
108 | 5D-4N
109 | 4D-5N
110 |
111 | Product Price :
112 |
118 | Product Brand Logo :
119 |
125 | Product Brand Name :
126 |
131 |
132 |
133 |
139 | ADD PACKAGES
140 |
141 |
142 |
143 |
144 | );
145 | };
146 |
147 | export default AddProdct;
148 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Plan/Plan.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Plan.module.css";
6 |
7 | function SampleNextArrow(props) {
8 | const { className, style, onClick } = props;
9 | return (
10 |
15 | );
16 | }
17 |
18 | function SamplePrevArrow(props) {
19 | const { className, style, onClick } = props;
20 | return (
21 |
31 | );
32 | }
33 |
34 | export const Plan = () => {
35 | var settings = {
36 | dots: false,
37 | infinite: false,
38 | speed: 500,
39 | slidesToShow: 4,
40 | slidesToScroll: 4,
41 | initialSlide: 0,
42 | nextArrow: ,
43 | prevArrow: ,
44 | responsive: [
45 | {
46 | breakpoint: 1024,
47 | settings: {
48 | slidesToShow: 3,
49 | slidesToScroll: 3,
50 | infinite: true,
51 | dots: true,
52 | },
53 | },
54 | {
55 | breakpoint: 600,
56 | settings: {
57 | slidesToShow: 2,
58 | slidesToScroll: 2,
59 | initialSlide: 2,
60 | },
61 | },
62 | {
63 | breakpoint: 480,
64 | settings: {
65 | slidesToShow: 1,
66 | slidesToScroll: 1,
67 | },
68 | },
69 | ],
70 | };
71 | return (
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
87 |
88 |
89 |
90 |
91 |
92 |
96 |
97 |
98 |
99 |
100 |
101 |
105 |
106 |
107 |
108 |
109 |
110 |
114 |
115 |
116 |
117 |
118 |
119 |
123 |
124 |
125 |
126 |
127 |
128 |
132 |
133 |
134 |
135 |
136 |
140 |
141 |
142 |
143 |
144 |
145 | );
146 | };
147 |
--------------------------------------------------------------------------------
/my-app/src/Navbar/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Avatar,
3 | Box,
4 | Button,
5 | Heading,
6 | Image,
7 | Input,
8 | Menu,
9 | MenuButton,
10 | MenuItem,
11 | MenuList,
12 | } from "@chakra-ui/react";
13 | import { useEffect } from "react";
14 | import { useContext } from "react";
15 | import { useState } from "react";
16 | import { Link, NavLink } from "react-router-dom";
17 | import { ShowContext } from "../Context/ShowContext";
18 | import styles from "./Navbar.module.css";
19 | import image from "../Logo/pro.webp";
20 | import Login from "../Components/Login";
21 | import { signOut, onAuthStateChanged } from "firebase/auth";
22 | import { auth } from "../firebase-config";
23 | import AdminLogin from "../AdminPanal/adminLogin";
24 |
25 | export function Navbar() {
26 | const [color, setColor] = useState(false);
27 | const { show, setShow } = useContext(ShowContext);
28 | const [avatar, setAvatar] = useState("");
29 | const [avatarName, setAvatarName] = useState("");
30 | const [email, setEmail] = useState("");
31 | const { setIsAuth } = useContext(ShowContext);
32 |
33 | onAuthStateChanged(auth, (currentUser) => {
34 | setEmail(currentUser.email);
35 | setAvatarName(currentUser.displayName);
36 | setAvatar(currentUser.photoURL);
37 | setIsAuth(true);
38 | });
39 |
40 | let name = email.split("@");
41 | name = name[0].toUpperCase();
42 |
43 | function logoutUser() {
44 | signOut(auth).then((res) => {
45 | setEmail("");
46 | setAvatarName("");
47 | setAvatar("");
48 | setIsAuth(false);
49 | });
50 | }
51 |
52 | const changeColor = () => {
53 | if (window.scrollY > 100) {
54 | setShow(true);
55 | } else {
56 | setShow(false);
57 | }
58 | };
59 |
60 | useEffect(() => {
61 | window.addEventListener("scroll", changeColor);
62 | }, []);
63 | return (
64 |
72 |
73 |
74 |
75 | {/* https://cdn1.tripoto.com/assets/2.9/img/logo/tripoto.svg */}
76 |
77 |
78 |
79 | {show && (
80 |
89 | )}
90 |
91 |
92 |
93 | Inspiration
94 |
95 |
96 | Visit Singapore
97 |
98 |
99 | Beaches
100 |
101 | Mountain
102 | Heritage
103 | Weekend Guide
104 | Upcoming Festivals
105 | Honeymoon Packages
106 | Wildlife Tourism
107 | Roadlife Trips
108 | Getaways Guide
109 | Luxury Travel
110 | Explore More
111 |
112 |
113 |
114 |
115 | Packages
116 |
117 | Publish trip
118 |
119 |
120 | Create New
121 |
122 |
123 | Upload phtos/videos
124 |
125 | Import Blog
126 |
127 |
128 |
129 | {avatarName || name ? (
130 |
131 | {" "}
132 |
{" "}
133 | {avatarName || name}
134 |
135 | {" "}
136 | Log Out
137 | {" "}
138 |
139 | ) : (
140 |
141 | )}
142 |
143 |
144 |
145 | );
146 | }
147 |
--------------------------------------------------------------------------------
/my-app/src/Components/Login.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {
3 | createUserWithEmailAndPassword,
4 | signInWithEmailAndPassword,
5 | GoogleAuthProvider,
6 | signInWithPopup,
7 | } from "firebase/auth";
8 | import { auth } from "../firebase-config";
9 | import { useContext } from "react";
10 | import { useState } from "react";
11 | import { Navigate } from "react-router-dom";
12 | import { ShowContext } from "../Context/ShowContext";
13 | import { Link } from "react-router-dom";
14 | import { FcGoogle } from "react-icons/fc";
15 | import { FaFacebookF } from "react-icons/fa";
16 | import {
17 | Modal,
18 | ModalOverlay,
19 | ModalContent,
20 | ModalHeader,
21 | ModalFooter,
22 | ModalBody,
23 | ModalCloseButton,
24 | FormControl,
25 | Button,
26 | FormLabel,
27 | useDisclosure,
28 | Input,
29 | Box,
30 | } from "@chakra-ui/react";
31 |
32 | import Signup from "./Signup";
33 |
34 | function Login() {
35 | //this is for popup window
36 | const { isOpen, onOpen, onClose } = useDisclosure();
37 |
38 | //this is login input refrence
39 | const initialRef = React.useRef(null);
40 | const finalRef = React.useRef(null);
41 |
42 | //this contain email and password of user
43 | const [registerEmail, setRegisterEmail] = useState("");
44 | const [registerPassword, setRegisterPassword] = useState("");
45 |
46 | //for authentication
47 | const { isAuth, setIsAuth } = useContext(ShowContext);
48 |
49 | const provider = new GoogleAuthProvider();
50 |
51 | //this is a login function
52 |
53 | const signInWithGoogle = () => {
54 | signInWithPopup(auth, provider)
55 | .then((res) => {
56 | setIsAuth(true);
57 | })
58 | .catch((error) => {
59 | alert("Something Went wrong");
60 | });
61 | };
62 |
63 | const handleSubmit = () => {
64 | signInWithEmailAndPassword(auth, registerEmail, registerPassword)
65 | .then((res) => {
66 | setIsAuth(true);
67 | alert("LogIn Successful !");
68 | })
69 | .then((error) => {});
70 | };
71 |
72 | return (
73 | <>
74 |
75 | Log in
76 |
77 |
78 |
85 |
86 |
87 | Log in
88 |
100 |
101 | Log in with Facebook
102 |
103 |
104 |
116 |
117 | Log in with google
118 |
119 |
120 | OR
121 |
122 |
123 |
124 |
125 | Email
126 | setRegisterEmail(e.target.value)}
132 | />
133 |
134 |
135 |
136 | Password
137 | setRegisterPassword(e.target.value)}
142 | />
143 |
144 |
145 |
146 |
147 |
153 | LOG IN
154 |
155 |
156 |
165 | Don't have an account?
166 |
167 |
168 |
169 |
170 | >
171 | );
172 | }
173 |
174 | export default Login;
175 |
--------------------------------------------------------------------------------
/my-app/src/Packages/confirmButton.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | AlertDialog,
3 | AlertDialogBody,
4 | AlertDialogCloseButton,
5 | AlertDialogContent,
6 | AlertDialogFooter,
7 | AlertDialogHeader,
8 | AlertDialogOverlay,
9 | Box,
10 | Button,
11 | Center,
12 | Square,
13 | useDisclosure,
14 | useToast,
15 | } from "@chakra-ui/react";
16 | import axios from "axios";
17 | import React, { useEffect } from "react";
18 | import { useState } from "react";
19 | import { FaArrowCircleRight } from "react-icons/fa";
20 | import { useNavigate } from "react-router-dom";
21 |
22 | const ConfirmButton = ({ data, formData }) => {
23 | const { isOpen, onOpen, onClose } = useDisclosure();
24 | const cancelRef = React.useRef();
25 | const navigate = useNavigate();
26 | const toast = useToast();
27 |
28 | const pro = data.id;
29 |
30 | const intUserDetail = {
31 | name: formData.name,
32 | email: formData.email,
33 | contect: formData.number,
34 | city: formData.city,
35 | people: formData.people,
36 | children: formData.children,
37 | room: formData.room,
38 | date: formData.date,
39 | packegeID: pro,
40 | };
41 |
42 | const orderdone = async (url, data) => {
43 | try {
44 | return await axios.post(url, data);
45 | } catch (error) {
46 | console.log(error);
47 | }
48 | };
49 |
50 | const [userData, setUserData] = useState(null);
51 |
52 | const handleClickCofirm = () => {
53 | setUserData({ ...intUserDetail, packegeID: pro });
54 | };
55 |
56 | const handleClickonYes = () => {
57 | orderdone(`https://powerful-lingerie-fawn.cyclic.app/booking`, userData)
58 | .then((e) => console.log(e))
59 | .then((e) =>
60 | toast({
61 | title: "Package Added.",
62 | status: "success",
63 | duration: 9000,
64 | isClosable: true,
65 | })
66 | )
67 | .then(() => navigate("/packages"))
68 | .catch((e) => console.log(e));
69 | };
70 |
71 | return (
72 | <>
73 | (onOpen(), handleClickCofirm())}
75 | w={"90%"}
76 | h={"50px"}
77 | fontSize={20}
78 | rightIcon={ }
79 | bgColor={"blue.400"}
80 | _hover={{ bgColor: "blue.300" }}
81 | color={"whiteAlpha.900"}
82 | disabled={
83 | formData.name.length == 0 ||
84 | formData.email.length == 0 ||
85 | formData.number.length == 0 ||
86 | formData.city.length == 0 ||
87 | formData.people.length == 0 ||
88 | formData.date.length == 0
89 | }
90 | >
91 | Confirm
92 |
93 |
100 |
101 |
102 |
103 |
104 | {formData.name} Please Check Your Details
105 |
106 |
107 |
108 |
109 | Name :
110 | {formData.name}
111 |
112 |
113 | Email :
114 | {formData.email}
115 |
116 |
117 | Number :
118 |
119 | {formData.number}
120 |
121 |
122 | City :
123 |
124 | {formData.city}
125 |
126 |
127 | Number of Rooms :
128 |
129 | {formData.room}
130 |
131 |
132 | Number of Guest :
133 |
134 | {formData.people}
135 |
136 |
137 | Number of Children :
138 |
139 | {formData.children}
140 |
141 |
142 | Check In Date :
143 | {formData.date}
144 |
145 |
146 |
147 |
148 | No
149 |
150 |
157 | Yes
158 |
159 |
160 |
161 |
162 | >
163 | );
164 | };
165 |
166 | export default ConfirmButton;
167 |
--------------------------------------------------------------------------------
/my-app/src/Home_Page_Component/Find_best_place.jsx:
--------------------------------------------------------------------------------
1 | import { Grid } from "@chakra-ui/react";
2 | import { Image, Box, Text, Link, Heading } from "@chakra-ui/react";
3 | function Find_best_place() {
4 | const outer_div = {
5 | width: "85%",
6 | margin: "auto",
7 | marginTop: "50px",
8 | };
9 |
10 | // const inner_div = {
11 | // display: "flex",
12 | // };
13 |
14 | return (
15 |
16 |
21 |
22 |
29 |
30 | 10 Best Places To Experience The Chills This Winter
31 |
32 |
33 | By{" "}
34 |
35 | Kadambari Bhatte (curlytravelmess)
36 |
37 |
38 |
39 |
40 |
47 |
48 | 10 Best Places To Experience The Chills This Winter
49 |
50 |
51 | By{" "}
52 |
53 | Kadambari Bhatte (curlytravelmess)
54 |
55 |
56 |
57 |
58 |
65 |
66 | 10 Best Places To Experience The Chills This Winter
67 |
68 |
69 | By{" "}
70 |
71 | Kadambari Bhatte (curlytravelmess)
72 |
73 |
74 |
75 |
76 |
83 |
84 | 10 Best Places To Experience The Chills This Winter
85 |
86 |
87 | By{" "}
88 |
89 | Kadambari Bhatte (curlytravelmess)
90 |
91 |
92 |
93 |
94 |
101 |
102 | 10 Best Places To Experience The Chills This Winter
103 |
104 |
105 | By{" "}
106 |
107 | Kadambari Bhatte (curlytravelmess)
108 |
109 |
110 |
111 |
112 |
119 |
120 | 10 Best Places To Experience The Chills This Winter
121 |
122 |
123 | By{" "}
124 |
125 | Kadambari Bhatte (curlytravelmess)
126 |
127 |
128 |
129 |
130 |
137 |
138 | 10 Best Places To Experience The Chills This Winter
139 |
140 |
141 | By{" "}
142 |
143 | Kadambari Bhatte (curlytravelmess)
144 |
145 |
146 |
147 |
148 |
155 |
156 | 10 Best Places To Experience The Chills This Winter
157 |
158 |
159 | By{" "}
160 |
161 | Kadambari Bhatte (curlytravelmess)
162 |
163 |
164 |
165 |
166 |
167 | );
168 | }
169 |
170 | export default Find_best_place;
171 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Watch/Watch.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Watch.module.css";
6 |
7 | function SampleNextArrow(props) {
8 | const { className, style, onClick } = props;
9 | return (
10 |
15 | );
16 | }
17 |
18 | function SamplePrevArrow(props) {
19 | const { className, style, onClick } = props;
20 | return (
21 |
31 | );
32 | }
33 |
34 | export const Watch = () => {
35 | var settings = {
36 | dots: false,
37 | infinite: false,
38 | speed: 500,
39 | slidesToShow: 4,
40 | slidesToScroll: 4,
41 | initialSlide: 0,
42 | nextArrow: ,
43 | prevArrow: ,
44 | responsive: [
45 | {
46 | breakpoint: 1024,
47 | settings: {
48 | slidesToShow: 3,
49 | slidesToScroll: 3,
50 | infinite: true,
51 | dots: true,
52 | },
53 | },
54 | {
55 | breakpoint: 600,
56 | settings: {
57 | slidesToShow: 2,
58 | slidesToScroll: 2,
59 | initialSlide: 2,
60 | },
61 | },
62 | {
63 | breakpoint: 480,
64 | settings: {
65 | slidesToShow: 1,
66 | slidesToScroll: 1,
67 | },
68 | },
69 | ],
70 | };
71 | return (
72 |
73 |
74 |
75 |
76 |
77 |
81 |
82 |
83 |
84 | Best Weekend Getaways From Mumbai Under 250 Kms
85 |
86 |
87 |
88 | By
89 | {" "}
90 |
91 | Namita Mittal
92 |
93 |
94 |
95 |
96 |
97 |
98 |
102 |
103 |
104 |
105 | Narendra Bhawan:Palace Hotel In Bikaner
106 |
107 |
108 |
109 | By
110 | {" "}
111 |
112 | namita Mittal
113 |
114 |
115 |
116 |
117 |
118 |
119 |
123 |
124 |
125 |
126 | 5-Day Jaipur Itinerary To See The City Of Maharajas
127 |
128 |
129 |
130 | By
131 | {" "}
132 |
133 | Nimita Mittal
134 |
135 |
136 |
137 |
138 |
139 |
140 |
144 |
145 |
146 |
147 | 5 Beautiful Places In Delhi That Are Seriously Underrated
148 |
149 |
150 |
151 | By
152 | {" "}
153 |
154 | Nimita Mittal
155 |
156 |
157 |
158 |
159 |
160 |
161 |
165 |
166 |
167 |
10 Best Budget Hotels InDia
168 |
169 | By {" "}
170 | Nimita Mittal
171 |
172 |
173 |
174 |
175 |
176 | );
177 | };
178 |
--------------------------------------------------------------------------------
/my-app/src/Packages/checkout.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Button,
4 | Flex,
5 | Heading,
6 | Input,
7 | Select,
8 | Spacer,
9 | } from "@chakra-ui/react";
10 | import { useState } from "react";
11 | import { FaArrowCircleRight, FaRupeeSign } from "react-icons/fa";
12 | import ConfirmButton from "./confirmButton";
13 |
14 | const Checkout = ({ data }) => {
15 | const intData = {
16 | email: "",
17 | name: "",
18 | number: "",
19 | city: "",
20 | people: "1",
21 | children: "0",
22 | room: "1",
23 | date: "",
24 | };
25 |
26 | const [formData, setFormData] = useState(intData);
27 |
28 | const handleChange = (e) => {
29 | const { name, value } = e.target;
30 | setFormData({ ...formData, [name]: value });
31 | };
32 |
33 | let numberinprice = "";
34 |
35 | if (data.price) {
36 | {
37 | for (let i = 0; i < data.price.length; i++) {
38 | if (
39 | data.price[i] == "1" ||
40 | data.price[i] == "2" ||
41 | data.price[i] == "3" ||
42 | data.price[i] == "4" ||
43 | data.price[i] == "5" ||
44 | data.price[i] == "6" ||
45 | data.price[i] == "7" ||
46 | data.price[i] == "8" ||
47 | data.price[i] == "9" ||
48 | data.price[i] == "0"
49 | ) {
50 | numberinprice = numberinprice + data.price[i];
51 | }
52 | }
53 | }
54 | }
55 |
56 | let x = +formData.people;
57 | let y = +numberinprice;
58 |
59 | let total = y * x;
60 |
61 | return (
62 |
70 |
77 | Enter Your Details and Proceed To Book
78 |
79 |
85 |
93 |
100 |
108 |
115 |
123 | 1
124 | 2
125 | 3
126 | 4
127 | 5
128 | 6
129 |
130 |
137 | 0
138 | 1
139 | 2
140 | 3
141 | 4
142 | 5
143 | 6
144 |
145 |
152 | 1
153 | 2
154 | 3
155 | 4
156 | 5
157 | 6
158 |
159 |
169 |
170 |
177 | Amount:
178 |
179 |
180 | {total}
181 |
182 |
183 | Taxes and discounts are calculated at checkout.
184 | {formData.name.length == 0 ||
185 | formData.email.length == 0 ||
186 | formData.number.length == 0 ||
187 | formData.city.length == 0 ||
188 | formData.people.length == 0 ||
189 | formData.date.length == 0 ? (
190 |
191 | Fill All Crediantial To Enable Button
192 |
193 | ) : null}
194 |
195 |
196 | I accept the Terms of Use and Privacy Policy of Tripoto.
197 |
198 |
199 |
200 | );
201 | };
202 |
203 | export default Checkout;
204 |
--------------------------------------------------------------------------------
/my-app/src/Components/Signup.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {
3 | Box,
4 | Input,
5 | Modal,
6 | ModalCloseButton,
7 | ModalOverlay,
8 | ModalContent,
9 | ModalHeader,
10 | ModalBody,
11 | ModalFooter,
12 | useDisclosure,
13 | FormControl,
14 | FormLabel,
15 | Button,
16 | } from "@chakra-ui/react";
17 | import { useState } from "react";
18 | import { auth } from "../firebase-config";
19 | import { useContext } from "react";
20 | import { ShowContext } from "../Context/ShowContext";
21 | import {
22 | createUserWithEmailAndPassword,
23 | GoogleAuthProvider,
24 | onAuthStateChanged,
25 | signInWithPopup,
26 | updateCurrentUser,
27 | signOut,
28 | } from "firebase/auth";
29 | import { FcGoogle } from "react-icons/fc";
30 | import { FaFacebookF } from "react-icons/fa";
31 | import Login from "./Login";
32 | import { Navigate } from "react-router-dom";
33 |
34 | const Signup = () => {
35 | //this is for popup window
36 | const { isOpen, onOpen, onClose } = useDisclosure();
37 |
38 | //this is login input refrence
39 | const initialRef = React.useRef(null);
40 | const finalRef = React.useRef(null);
41 |
42 | //this contain email, password and name of users
43 | const [yourEmail, setYourEmail] = useState("");
44 | const [yourPassword, setYourPassword] = useState("");
45 | const [yourName, setYourName] = useState("");
46 |
47 | //this contain loding and error
48 | const [loading, setloading] = useState(false);
49 | const [error, setError] = useState("");
50 |
51 | //for authentication
52 | const { isAuth, setIsAuth } = useContext(ShowContext);
53 |
54 | //This Is a signup function
55 |
56 | const handleSubmit = (e) => {
57 | e.preventDefault();
58 | setloading(true);
59 | createUserWithEmailAndPassword(auth, yourEmail, yourPassword)
60 | .then((res) => {
61 | setIsAuth(true);
62 | console.log(res);
63 | alert("Signup Successful !");
64 | ;
65 | setloading(false);
66 | })
67 | .catch((err) => {});
68 | };
69 |
70 | return (
71 | <>
72 |
73 | Sign Up
74 |
75 |
82 |
83 |
84 | Sign Up
85 |
97 |
98 | Log in with Facebook
99 |
100 |
101 |
112 |
113 | Log in with google
114 |
115 |
116 | OR
117 |
118 |
119 |
120 |
121 |
122 |
123 | Full Name
124 | setYourName(e.target.value)}
129 | />
130 |
131 |
132 |
133 | Enter Email Address
134 | setYourEmail(e.target.value)}
139 | />
140 |
141 |
142 |
143 | Enter Password
144 | setYourPassword(e.target.value)}
149 | />
150 |
151 |
152 |
153 |
154 | Submit
155 |
156 |
157 |
167 | By signing up, you agree to R.P.S.N vaccation's terms and conditions
168 | and privacy policy.
169 |
170 |
171 |
180 | Already registered?
181 |
182 |
183 |
184 |
185 | >
186 | );
187 | };
188 |
189 | export default Signup;
190 |
--------------------------------------------------------------------------------
/my-app/src/Footer/Footer.jsx:
--------------------------------------------------------------------------------
1 | import { Box, Image, VStack } from '@chakra-ui/react'
2 | import React from 'react'
3 | import { FaInstagram, FaFacebookSquare, FaTwitterSquare, FaYoutube, FaPinterestSquare, FaSatelliteDish } from "react-icons/fa"
4 | import style from "./Footer.module.css"
5 | import { Link } from 'react-router-dom'
6 | function Footer() {
7 | return (
8 |
9 |
10 |
11 |
92 |
93 | )
94 | }
95 |
96 | export default Footer
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Check/Check.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Check.module.css";
6 |
7 | function SampleNextArrow(props) {
8 | const { className, style, onClick } = props;
9 | return (
10 |
15 | );
16 | }
17 |
18 | function SamplePrevArrow(props) {
19 | const { className, style, onClick } = props;
20 | return (
21 |
31 | );
32 | }
33 |
34 | export const Check = () => {
35 | var settings = {
36 | dots: false,
37 | infinite: false,
38 | speed: 500,
39 | slidesToShow: 4,
40 | slidesToScroll: 4,
41 | initialSlide: 0,
42 | nextArrow: ,
43 | prevArrow: ,
44 | responsive: [
45 | {
46 | breakpoint: 1024,
47 | settings: {
48 | slidesToShow: 3,
49 | slidesToScroll: 3,
50 | infinite: true,
51 | dots: true,
52 | },
53 | },
54 | {
55 | breakpoint: 600,
56 | settings: {
57 | slidesToShow: 2,
58 | slidesToScroll: 2,
59 | initialSlide: 2,
60 | },
61 | },
62 | {
63 | breakpoint: 480,
64 | settings: {
65 | slidesToShow: 1,
66 | slidesToScroll: 1,
67 | },
68 | },
69 | ],
70 | };
71 | return (
72 |
73 |
74 |
75 |
76 |
77 |
81 |
82 |
BUDGET STAYS
83 |
84 | These Hostels In Udaipur Are Perfect For Every Backpacker
85 |
86 |
87 | By {" "}
88 | Adebte Dhayina
89 |
90 |
91 |
92 |
93 |
94 |
98 |
99 |
BUDGET STAYS
100 |
101 | This Lakeside Hostel Is The Perfect Escape From Delhi
102 |
103 |
104 | By {" "}
105 | Sonalika Debnath
106 |
107 |
108 |
109 |
110 |
111 |
115 |
116 |
BUDGET STAYS
117 |
118 | This Lakeside Hostel Is The Perfect Escape From Delhi
119 |
120 |
121 | By {" "}
122 | Arkko Banarjee
123 |
124 |
125 |
126 |
127 |
128 |
132 |
133 |
LUXURY STAYS
134 |
135 | Mayfair,Gangtok:Find Luxury At Sikkim's Capital City
136 |
137 |
138 | By {" "}
139 | Rashmi Sharma
140 |
141 |
142 |
143 |
144 |
145 |
149 |
150 |
LUXURY STAYS
151 |
152 | Bookmark These Luxury Stays In Karnataka
153 |
154 |
155 | By {" "}
156 | Aparajita
157 |
158 |
159 |
160 |
161 |
162 |
166 |
167 |
HOMESTAYS
168 |
169 | This Father-Son Duo Turned Their Farm IntoAHomestay
170 |
171 |
172 | By {" "}
173 | Divyangna(Nomadic_Missy)
174 |
175 |
176 |
177 |
178 |
179 | );
180 | };
181 |
--------------------------------------------------------------------------------
/my-app/src/beaches/Package.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import axios from "axios";
3 | import "slick-carousel/slick/slick.css";
4 | import "slick-carousel/slick/slick-theme.css";
5 | import Slider from "react-slick";
6 | import { IoIosArrowDropleft, IoIosArrowDropright } from "react-icons/io";
7 | import { FaMapMarkerAlt } from "react-icons/fa";
8 | import styled from "styled-components";
9 |
10 | const Package = () => {
11 | const [packag, setPackage] = useState([]);
12 | useEffect(() => {
13 | axios
14 | .get("https://persian-blue-hen-slip.cyclic.app/Package")
15 | .then((res) => {
16 | setPackage(res.data);
17 | console.log(res.data)
18 | });
19 | }, []);
20 |
21 | function SampleNextArrow(props) {
22 | const { onClick } = props;
23 | return (
24 |
34 |
35 |
36 | );
37 | }
38 |
39 | function SamplePrevArrow(props) {
40 | const { onClick } = props;
41 |
42 | return (
43 |
54 |
55 |
56 | );
57 | }
58 |
59 | let settings = {
60 | infinite: true,
61 | speed: 500,
62 | slidesToShow: 4,
63 | slidesToScroll: 4,
64 | responsive: [
65 | {
66 | breakpoint: 1024,
67 | settings: {
68 | slidesToShow: 3,
69 | slidesToScroll: 3,
70 | infinite: true,
71 | dots: true
72 | }
73 | },
74 | {
75 | breakpoint: 600,
76 | settings: {
77 | slidesToShow: 2,
78 | slidesToScroll: 2,
79 | initialSlide: 2
80 | }
81 | },
82 | {
83 | breakpoint: 480,
84 | settings: {
85 | slidesToShow: 1,
86 | slidesToScroll: 1
87 | }
88 | }
89 | ],
90 | nextArrow: ,
91 | prevArrow: ,
92 | };
93 |
94 | return (
95 |
96 |
97 |
Packages
98 |
99 |
108 | {packag &&
109 | packag.map((ele) => (
110 |
111 |
112 | {ele.type}
113 | {ele.title}
114 |
115 |
116 |
117 | {ele.location}
118 |
119 |
120 | {ele.button}
121 |
122 |
123 |
124 |
125 |
126 | {ele.price}
127 | {ele.person}
128 |
129 |
130 | {ele.quotes}
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | {ele.brand_name}
139 |
140 |
141 |
142 | ))}
143 |
144 |
145 | );
146 | };
147 |
148 | export default Package;
149 |
150 |
151 |
152 | export const WebseriesWrapper = styled.div`
153 | margin-top:50px;
154 | margin-bottom:50px;
155 | h1 {
156 | margin-bottom: 8px;
157 | font-size: 28px;
158 | font-weight: 700;
159 | line-height: 30.8px;
160 | }
161 | `;
162 |
163 | export const WeseriesCard = styled.div`
164 | padding:0px 5px;
165 | margin-top:10px;
166 |
167 |
168 | img {
169 | align-items:center;
170 | height:210px;
171 | object-fit: cover;
172 | object-position:center;
173 | width:100%;
174 | border-radius: 4px;
175 |
176 | }
177 |
178 | `;
179 |
180 | export const PackageWrapper = styled.h5`
181 | color:rgb(53,147,145);
182 | font-size:14px;
183 | margin-top:5px;
184 | font-weight:bold;
185 | `
186 |
187 | export const TitleWrapper = styled.h4`
188 | font-weight:700;
189 | font-size:18px;
190 | letter-spacing:0.6px;
191 | `
192 |
193 | export const LoactionWrapper = styled.div`
194 | display:flex;
195 | justify-content: space-between;
196 | color:rgb(53,147,145);
197 | margin-top:5px;
198 | `
199 | export const LogoWrapper = styled.div`
200 | display:flex;
201 |
202 | `
203 | export const DaybuttonWrapper = styled.button`
204 | color:white;
205 | background-color: rgb(53,147,145);
206 | border-radius:13px;
207 | padding:3px 8px;
208 | font-size:13px;
209 | `
210 |
211 | export const LogoImage = styled.div`
212 | display:flex;
213 | align-items: center;
214 | margin-top:10px;
215 | img{
216 | width:30px;
217 | height:30px;
218 | border-radius: 50%;
219 | }
220 | h3{
221 | padding-left:5px;
222 | font-size:14px;
223 | }
224 | `
225 |
226 | export const PriceWrapper = styled.div`
227 | display:flex;
228 | justify-content: space-between;
229 | margin-top:15px;
230 | margin-bottom:10px;
231 | `
232 |
233 | export const PersonWrapper = styled.div`
234 | display:flex;
235 | h3{
236 | font-weight:bold;
237 | font-size:18px;
238 | }
239 | h6{
240 | margin-left:4px;
241 | }
242 | `
243 | export const Getquotes = styled.button`
244 | border:1px solid rgb(53,147,145);
245 | border-radius:6px;
246 | color:gray;
247 | padding:3px 7px;
248 | font-size:16px;
249 |
250 | `
251 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Place/Place.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Place.module.css";
6 |
7 | function SampleNextArrow(props) {
8 | const { className, style, onClick } = props;
9 | return (
10 |
15 | );
16 | }
17 |
18 | function SamplePrevArrow(props) {
19 | const { className, style, onClick } = props;
20 | return (
21 |
31 | );
32 | }
33 |
34 | export const Place = () => {
35 | var settings = {
36 | dots: false,
37 | infinite: false,
38 | speed: 500,
39 | slidesToShow: 4,
40 | slidesToScroll: 4,
41 | initialSlide: 0,
42 | nextArrow: ,
43 | prevArrow: ,
44 | responsive: [
45 | {
46 | breakpoint: 1024,
47 | settings: {
48 | slidesToShow: 3,
49 | slidesToScroll: 3,
50 | infinite: true,
51 | dots: true,
52 | },
53 | },
54 | {
55 | breakpoint: 600,
56 | settings: {
57 | slidesToShow: 2,
58 | slidesToScroll: 2,
59 | initialSlide: 2,
60 | },
61 | },
62 | {
63 | breakpoint: 480,
64 | settings: {
65 | slidesToShow: 1,
66 | slidesToScroll: 1,
67 | },
68 | },
69 | ],
70 | };
71 | return (
72 |
73 |
74 |
75 |
76 |
77 |
81 |
82 |
83 |
84 | All You Need To Know About Thailand Visa For Indians 2022
85 |
86 |
87 | By {" "}
88 | Tripoto
89 |
90 |
91 |
92 |
93 |
94 |
98 |
99 |
100 |
101 | Add These Offbeat Places In Europe To Your List
102 |
103 |
104 | By {" "}
105 | Tanisha Mundra
106 |
107 |
108 |
109 |
110 |
111 |
115 |
116 |
117 |
118 | Travel Solo To These SE Asian Countries Under 25K INR
119 |
120 |
121 | By {" "}
122 | Disha kapkoti
123 |
124 |
125 |
126 |
127 |
128 |
132 |
133 |
134 |
135 | You Can Travel To Serbia From india Without A Visa
136 |
137 |
138 | By {" "}
139 | Tripoto
140 |
141 |
142 |
143 |
144 |
145 |
149 |
150 |
151 |
152 | Head To This Kalediosocpic Volanic Lake In Indionasia
153 |
154 |
155 | By {" "}
156 | Deepti Divya
157 |
158 |
159 |
160 |
161 |
162 |
166 |
167 |
168 |
169 | This Town In MP Will SoonGain "WILD" Popularity
170 |
171 |
172 | By {" "}
173 | Sujay Jamkhandi
174 |
175 |
176 |
177 |
178 |
179 |
183 |
184 |
185 |
186 | This August, Take A trip To Vietname Like Never Before
187 |
188 |
189 | By {" "}
190 | Adete Dhaiya
191 |
192 |
193 |
194 |
195 |
196 | );
197 | };
198 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Insportlight/Inspotlight.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Inspotlight.module.css";
6 | import { useNavigate } from "react-router-dom";
7 |
8 | function SampleNextArrow(props) {
9 | const { className, style, onClick } = props;
10 | return (
11 |
16 | );
17 | }
18 |
19 | function SamplePrevArrow(props) {
20 | const { className, style, onClick } = props;
21 | return (
22 |
32 | );
33 | }
34 |
35 | export const Inspotlight = () => {
36 | const navigate = useNavigate();
37 |
38 | const gotodeta = () => {
39 | navigate("/details");
40 | };
41 |
42 | var settings = {
43 | dots: false,
44 | infinite: false,
45 | speed: 500,
46 | slidesToShow: 4,
47 | slidesToScroll: 4,
48 | initialSlide: 0,
49 | nextArrow: ,
50 | prevArrow: ,
51 | responsive: [
52 | {
53 | breakpoint: 1024,
54 | settings: {
55 | slidesToShow: 3,
56 | slidesToScroll: 3,
57 | infinite: true,
58 | dots: true,
59 | },
60 | },
61 | {
62 | breakpoint: 600,
63 | settings: {
64 | slidesToShow: 2,
65 | slidesToScroll: 2,
66 | initialSlide: 2,
67 | },
68 | },
69 | {
70 | breakpoint: 480,
71 | settings: {
72 | slidesToShow: 1,
73 | slidesToScroll: 1,
74 | },
75 | },
76 | ],
77 | };
78 | return (
79 |
80 |
81 |
82 |
83 |
84 |
88 |
89 |
GOSTOPS
90 |
91 | Experience The Best Of Monsoon With These Trendy GOSTOPS Stays
92 | Under Rs 2,000
93 |
94 |
95 |
96 |
97 |
98 |
102 |
103 |
SINGAPORE TOURISM BOARD
104 |
105 | The Panchi Befikra Contest Is Live And Here's Why You Should
106 | Participate!
107 |
108 |
109 |
110 |
111 |
112 |
116 |
117 |
SAUDI TOURISM AUTHORITY
118 |
119 | This Quiz on Saudi Will Help You Design Your Best Adventure!
120 |
121 |
122 |
123 |
124 |
125 |
129 |
130 |
NIYO GLOBAL
131 |
132 | India's Top Travel Influencers Share Their Best Secrets for
133 | Budget International Trips!
134 |
135 |
136 |
137 |
138 |
139 |
143 |
144 |
SAUDI TOURISM AUTHORITY
145 |
146 | Offering a Mix of Culture and Modernity, Riyadh Is Perfect for
147 | Every Kind of Traveller
148 |
149 |
150 |
151 |
152 |
153 |
157 |
158 |
SAUDI TOURISM AUTHORITY
159 |
160 | સાઉદીઃ કેવી રીતે કરવો આ અનોખા દેશનો યાદગાર પ્રવાસ
161 |
162 |
163 |
164 |
165 |
166 |
170 |
171 |
AMBERSTUDENTS
172 |
173 | Student in London? Here’s Your Guide to Affordable and Exciting
174 | Ways to Explore The City!
175 |
176 |
177 |
178 |
179 |
180 |
184 |
185 |
SAUDI TOURISM AUTHORITY
186 |
187 | সমুদ্র, স্থাপত্য ও ইতিহাসের এক অনন্য মেলবন্ধন - সৌদি আরব ভ্রমণের
188 | একটি সম্পূর্ণ ট্রাভেল গাইড
189 |
190 |
191 |
192 |
193 |
194 | );
195 | };
196 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Find/Find.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Find.module.css";
6 |
7 | function SampleNextArrow(props) {
8 | const { className, style, onClick } = props;
9 | return (
10 |
15 | );
16 | }
17 |
18 | function SamplePrevArrow(props) {
19 | const { className, style, onClick } = props;
20 | return (
21 |
31 | );
32 | }
33 |
34 | export const Find = () => {
35 | var settings = {
36 | dots: false,
37 | infinite: false,
38 | speed: 500,
39 | slidesToShow: 4,
40 | slidesToScroll: 4,
41 | initialSlide: 0,
42 | nextArrow: ,
43 | prevArrow: ,
44 | responsive: [
45 | {
46 | breakpoint: 1024,
47 | settings: {
48 | slidesToShow: 3,
49 | slidesToScroll: 3,
50 | infinite: true,
51 | dots: true,
52 | },
53 | },
54 | {
55 | breakpoint: 600,
56 | settings: {
57 | slidesToShow: 2,
58 | slidesToScroll: 2,
59 | initialSlide: 2,
60 | },
61 | },
62 | {
63 | breakpoint: 480,
64 | settings: {
65 | slidesToShow: 1,
66 | slidesToScroll: 1,
67 | },
68 | },
69 | ],
70 | };
71 | return (
72 |
73 |
74 |
75 |
76 |
77 |
81 |
82 |
83 |
84 | Tripoto's Destination Of The Month:Udaipur
85 |
86 |
87 | By {" "}
88 | Tripoto
89 |
90 |
91 |
92 |
93 |
94 |
98 |
99 |
100 |
101 | Cheapest Domestic Flights For Aug&Sept 2022
102 |
103 |
104 | By {" "}
105 | Tanisha Mundra
106 |
107 |
108 |
109 |
110 |
111 |
115 |
116 |
117 |
118 | Here Are The Best Places To Vist In August In India
119 |
120 |
121 | By {" "}
122 | Disha kapkoti
123 |
124 |
125 |
126 |
127 |
128 |
132 |
133 |
134 |
135 | Trips Under 10K INR That You Need To Bookmark For August
136 |
137 |
138 | By {" "}
139 | Tripoto
140 |
141 |
142 |
143 |
144 |
145 |
149 |
150 |
151 |
152 | Heven Hill Station That You Can Escape In This August
153 |
154 |
155 | By {" "}
156 | Deepti Divya
157 |
158 |
159 |
160 |
161 |
162 |
166 |
167 |
168 |
169 | This Town In MP Will SoonGain "WILD" Popularity
170 |
171 |
172 | By {" "}
173 | Sujay Jamkhandi
174 |
175 |
176 |
177 |
178 |
179 |
183 |
184 |
185 |
186 | Things To Remmber Before Planning A Monsoon Bike Trip
187 |
188 |
189 | By {" "}
190 | Adete Dhaiya
191 |
192 |
193 |
194 |
195 |
196 |
200 |
201 |
202 |
Why You Should Vist Goa In Monsoon
203 |
204 | By {" "}
205 | Vinnie Singh
206 |
207 |
208 |
209 |
210 |
211 | );
212 | };
213 |
--------------------------------------------------------------------------------
/my-app/src/beaches/Beach.jsx:
--------------------------------------------------------------------------------
1 | import React, { useContext, useEffect, useState } from "react";
2 | import styled from "styled-components"
3 | import axios from "axios";
4 | import "slick-carousel/slick/slick.css";
5 | import "slick-carousel/slick/slick-theme.css";
6 | import { IoIosArrowDropleft, IoIosArrowDropright } from "react-icons/io";
7 |
8 | import Topbeach from "./Topbeach";
9 | import Package from "./Package";
10 | import Comprehensive from "./Comprehensive"
11 | import { ShowContext } from "../Context/ShowContext";
12 | import { Box } from "@chakra-ui/react";
13 | const Beach = () => {
14 | const { show, setShow } = useContext(ShowContext)
15 | const [beachgrid, setBeachgrid] = useState([]);
16 | const [vlogData, setVlogData] = useState([]);
17 | useEffect(() => {
18 | axios
19 | .get(" https://persian-blue-hen-slip.cyclic.app/hotels")
20 | .then((res) => {
21 | setBeachgrid(res.data);
22 | setVlogData(res.data);
23 |
24 | });
25 | }, []);
26 | useEffect(() => {
27 | setShow(true)
28 | }, [])
29 |
30 | function SampleNextArrow(props) {
31 | const { onClick } = props;
32 | return (
33 |
34 |
39 |
40 |
41 |
42 | );
43 | }
44 |
45 | function SamplePrevArrow(props) {
46 | const { onClick } = props;
47 |
48 | return (
49 |
50 |
55 |
56 |
57 |
58 | );
59 | }
60 |
61 | let settings = {
62 | infinite: true,
63 | speed: 500,
64 | slidesToShow: 3,
65 | slidesToScroll: 3,
66 | nextArrow: ,
67 | prevArrow: ,
68 | responsive: [
69 | {
70 | breakpoint: 1024,
71 | settings: {
72 | slidesToShow: 3,
73 | slidesToScroll: 3,
74 | infinite: true,
75 | dots: true
76 | }
77 | },
78 | {
79 | breakpoint: 600,
80 | settings: {
81 | slidesToShow: 2,
82 | slidesToScroll: 2,
83 | initialSlide: 2
84 | }
85 | },
86 | {
87 | breakpoint: 480,
88 | settings: {
89 | slidesToShow: 1,
90 | slidesToScroll: 1
91 | }
92 | }
93 | ]
94 | };
95 |
96 | return (
97 |
98 |
99 |
104 |
105 | Best Beaches Around The World
106 | The crunch of white sand beneath your feet and the thundering ocean beckoning you into its cool waters. Explore all you need to know about taking a perfect trip to the beach!
107 |
108 |
109 | Sand, waves and wind make a perfect getaway from the hustle bustle of city life. Beaches can make anyone happy. Just take a beach vacation anywhere in the world and you will find your happiness in the waves. You can choose from a variety of destinations for your next beach holiday in India or anywhere. Pick a beach resort according to your budget and spend time with the family or go for a solo trip on picture perfect shores that nature has blessed us with. Enjoy the sunrise, go for water sports or just sit idle on sandy floors of these beautiful beaches.
110 |
111 |
112 | Tripoto's Top Beach Picks for January, February, March 2022
113 |
114 | {beachgrid &&
115 | beachgrid.map((ele) => (
116 |
117 |
118 |
{ele.title}
119 |
120 | By
121 | {ele.by}
122 |
123 |
124 | ))}
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | Top Tripoto Vlogs for Beaches This Week
133 |
134 |
135 | {vlogData &&
136 | vlogData.map((ele) => (
137 |
138 |
139 |
{ele.title}
140 |
141 | By
142 | {ele.by}
143 |
144 |
145 | ))}
146 |
147 |
148 |
149 | );
150 | };
151 |
152 | export default Beach;
153 |
154 | const BeachWrapper = styled.div`
155 | margin: auto;
156 | box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 2px, rgba(0, 0, 0, 0.1) 0px 2px 3px -3px, rgba(0, 0, 0, 0.1) 0px -3px 0px inset;
157 | width: 97%;
158 | font-family: sans-serif;
159 | backgroundColor:gray;
160 | h1{
161 | font-size:29px;
162 | font-weight:700;
163 | margin-bottom:8px;
164 | }
165 | text {
166 | line-height: 20px;
167 | letter-spacing: 0.6px;
168 | }
169 | @media (max-width: 790px) {
170 | width: 95%;
171 | }
172 | `;
173 |
174 | const BeachGridWrapper = styled.div`
175 | display: grid;
176 | gap: 10px;
177 |
178 | grid-template-columns: repeat(3, 1fr);
179 | img {
180 | width: 100%;
181 | height: 220px;
182 | border-radius: 8px;
183 | }
184 |
185 | h3 {
186 | font-weight: 700;
187 | }
188 |
189 | span {
190 | color: black;
191 | font-weight: 500;
192 | margin-right: 4px;
193 | }
194 |
195 | h5 {
196 | color: rgb(56, 159, 221);
197 | margin-left: 4px;
198 | margin-top: 5px;
199 | font-size: 16px;
200 | font-weight: 500;
201 | }
202 |
203 |
204 | @media (max-width: 1000px) {
205 | grid-template-columns: repeat(1, 1fr);
206 | img {
207 | width: 100%;
208 | height: 25rem;
209 | object-fit: cover;
210 | object-position: center;
211 | }
212 | }
213 | `;
214 |
215 | const VlogWrapper = styled.div`
216 | display: flex;
217 | margin: auto;
218 | justify-content: space-between;
219 | width: 100%;
220 | box-sizing: border-box;
221 | margin-bottom:40px;
222 | div {
223 | width: 23%;
224 | }
225 | img {
226 | width: 100%;
227 | height: 11rem;
228 | border-radius: 5px;
229 | object-fit: cover;
230 | object-position: center;
231 | }
232 |
233 | h3 {
234 | font-size: 18px;
235 | font-weight: 700;
236 | }
237 |
238 | span {
239 | color: black;
240 | font-weight: 500;
241 | margin-right: 4px;
242 | }
243 |
244 | h5 {
245 | color: rgb(56, 159, 221);
246 | margin-left: 4px;
247 | margin-top: -5px;
248 | font-size: 16px;
249 | font-weight: 500;
250 | }
251 |
252 | @media (max-width: 1000px) {
253 | flex-direction: column;
254 |
255 | div {
256 | width: 100%;
257 | }
258 | img {
259 | height: 25rem;
260 | object-fit: cover;
261 | object-position: center;
262 | }
263 | }
264 | `;
265 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styles from "./Home.module.css";
3 | import { Swiper, SwiperSlide } from "swiper";
4 | import "swiper/css";
5 | import { Input } from "@chakra-ui/react";
6 | import "swiper/css/navigation";
7 | import { Navigation } from "swiper";
8 | import { Inspotlight } from "./Insportlight/Inspotlight";
9 | import { Find } from "./Find/Find";
10 | import { Place } from "./Place/Place";
11 | import { Check } from "./Check/Check";
12 | import { Travel } from "./Travel/Travel";
13 | import { Readmore } from "./Creator/Readmore";
14 | import { Creator } from "./Creator/Creator";
15 | import { Plan } from "./Plan/Plan";
16 | import { Watch } from "./Watch/Watch";
17 | import { Book } from "./Book/Book";
18 |
19 | export const Home = () => {
20 | return (
21 |
22 |
23 | {/*
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
*/}
37 |
38 |
39 |
40 | In the Spotlight: Partnerships
41 |
42 |
43 |
44 |
45 |
46 |
50 |
51 |
52 |
53 |
54 |
62 | Find Best Places to Visit in India in August & September
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
80 | Plan International Trips for August & September
81 |
82 |
83 |
86 |
87 |
88 |
89 |
90 |
98 | Check Out Best Hotels and Properties for Every Type of
99 | Traveller
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
117 | Travel and Learn with Tripoto's Mindful Retreats
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
135 | Book Budget Tour Packages Curated For You
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 | {/*
144 |
145 |
153 | In the Spotlight: Tripoto Creators of the Month - July 2022
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
165 |
166 |
167 |
171 |
172 |
173 |
177 |
178 |
179 |
180 |
*/}
181 |
182 |
183 |
184 |
192 | Plan Your Next Trip Using Tripoto's Complete Destination
193 | Guides
194 |
195 |
196 |
199 |
200 |
201 |
202 |
203 |
211 | Watch Tripoto's Top Travel Vlogs of the Week
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 | );
224 | };
225 |
--------------------------------------------------------------------------------
/my-app/src/Packages/product.jsx:
--------------------------------------------------------------------------------
1 | import { useContext, useEffect } from "react";
2 | import { useDispatch, useSelector } from "react-redux";
3 | import {
4 | getProductFailed,
5 | getProductRequest,
6 | getProductSuccess,
7 | } from "../Reducer/action";
8 | import {
9 | Box,
10 | SimpleGrid,
11 | Image,
12 | Square,
13 | Flex,
14 | Button,
15 | Avatar,
16 | Center,
17 | Select,
18 | useToast,
19 | } from "@chakra-ui/react";
20 | import { MdLocationOn } from "react-icons/md";
21 | import { useState } from "react";
22 | import { useNavigate } from "react-router-dom";
23 | import { ShowContext } from "../Context/ShowContext";
24 |
25 | const Product = () => {
26 | const dispatch = useDispatch();
27 | const products = useSelector((store) => store.nasirReducer.products);
28 |
29 | const [page, setPage] = useState(1);
30 | const [width, setWidth] = useState(null);
31 | const [limit, setLimit] = useState(9);
32 | const [sort, setSort] = useState("asc");
33 | const [filter, setFilter] = useState(
34 | "OYO Total Holidays&brand_name=Destynasia Venture&brand_name=TUI India&brand_name=Tripoto Verified Partner&brand_name=IFLy Vacation PVT Ltd.&brand_name=Explore More Holidays&brand_name=IFLy Vacation PVT Ltd."
35 | );
36 |
37 | const navigate = useNavigate();
38 | const { isAuth } = useContext(ShowContext);
39 | const toast = useToast();
40 |
41 | const getProduct = async (url) => {
42 | return await fetch(url);
43 | };
44 |
45 | useEffect(() => {
46 | dispatch(getProductRequest());
47 | getProduct(
48 | `https://fantastic-lab-coat-moth.cyclic.app/Package?_limit=${limit}&_page=${page}&_sort=price&_order=${sort}&brand_name=${filter}`
49 | )
50 | .then((e) => e.json())
51 | .then((e) => dispatch(getProductSuccess(e)))
52 | .catch((e) => dispatch(getProductFailed()));
53 | }, [page, limit, width, sort, filter]);
54 |
55 | useEffect(() => {
56 | setWidth(window.screen.width);
57 | if (width < 1280) {
58 | setLimit(8);
59 | } else {
60 | setLimit(9);
61 | }
62 | }, [limit, width]);
63 |
64 | const handleChange = (e) => {
65 | setSort(e.target.value);
66 | };
67 |
68 | const handleFilter = (e) => {
69 | setFilter(e.target.value);
70 | };
71 |
72 | const handleGotoSinglePage = (id) => {
73 | if (isAuth) {
74 | navigate(`/packages/${id}`);
75 | } else {
76 | toast({
77 | title: "Your Are Not Logged In",
78 | description: "Please Login To Go To Cart",
79 | status: "error",
80 | duration: 4000,
81 | isClosable: true,
82 | });
83 | }
84 | };
85 |
86 | return (
87 |
88 |
93 |
94 |
105 |
106 | Low To High
107 | High To Low
108 |
109 |
110 |
121 |
122 | OYO
123 | Destynasia
124 | TUI India
125 |
126 | Tripoto Verified Partner
127 |
128 |
129 | IFLy Vacation PVT Ltd.
130 |
131 | Explore More Holidays
132 | SFM Travels
133 |
134 |
135 |
136 |
148 | {products.map((elem) => (
149 |
156 |
157 |
167 | {elem.title}
168 |
169 |
170 | }
187 | color={"blue.400"}
188 | >
189 | {elem.location}
190 |
191 |
209 | {elem.button}
210 |
211 |
212 |
213 |
222 | {elem.price} onwards
223 |
224 | handleGotoSinglePage(elem.id)}
245 | >
246 | Book Now
247 |
248 |
249 |
250 |
261 |
270 | {elem.brand_name}
271 |
272 |
273 |
274 | ))}
275 |
276 |
277 | setPage((prev) => prev - 1)}
280 | borderColor={"blue.400"}
281 | bgColor={"blue.300"}
282 | >
283 | Prev
284 |
285 |
293 | {page}
294 |
295 | setPage((prev) => prev + 1)}
298 | borderColor={"blue.400"}
299 | bgColor={"blue.300"}
300 | >
301 | Next
302 |
303 |
304 |
305 | );
306 | };
307 |
308 | export default Product;
309 |
--------------------------------------------------------------------------------
/my-app/src/Pankaj/Book/Book.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import "slick-carousel/slick/slick.css";
3 | import "slick-carousel/slick/slick-theme.css";
4 | import Slider from "react-slick";
5 | import styles from "./Book.module.css";
6 | import { Button, ButtonGroup } from "@chakra-ui/react";
7 | import { useNavigate } from "react-router-dom";
8 |
9 | function SampleNextArrow(props) {
10 | const { className, style, onClick } = props;
11 | return (
12 |
17 | );
18 | }
19 |
20 | function SamplePrevArrow(props) {
21 | const { className, style, onClick } = props;
22 | return (
23 |
33 | );
34 | }
35 |
36 | export const Book = () => {
37 | var settings = {
38 | dots: false,
39 | infinite: false,
40 | speed: 500,
41 | slidesToShow: 3,
42 | slidesToScroll: 3,
43 | initialSlide: 0,
44 | nextArrow: ,
45 | prevArrow: ,
46 | responsive: [
47 | {
48 | breakpoint: 1024,
49 | settings: {
50 | slidesToShow: 3,
51 | slidesToScroll: 3,
52 | infinite: true,
53 | dots: true,
54 | },
55 | },
56 | {
57 | breakpoint: 600,
58 | settings: {
59 | slidesToShow: 2,
60 | slidesToScroll: 2,
61 | initialSlide: 2,
62 | },
63 | },
64 | {
65 | breakpoint: 480,
66 | settings: {
67 | slidesToShow: 1,
68 | slidesToScroll: 1,
69 | },
70 | },
71 | ],
72 | };
73 |
74 | const navigate = useNavigate();
75 |
76 | const handleClick = () => {
77 | navigate("/packages");
78 | };
79 |
80 | return (
81 |
82 |
83 |
84 |
85 |
86 |
90 |
91 |
PACKAGE
92 |
93 | Learn Sketchinng & Go On Guided Foreset Walks Around The Himalayan
94 | Trails | Cosmix Greeks, Dharamkot
95 |
96 |
97 |
98 |
99 | {" "}
100 |
Himachal Pradesh
101 |
102 | 3D - 2N
103 |
104 |
105 |
106 |
107 | ₹ 8500 / person
108 |
109 |
110 |
111 | Get Quotes
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
124 |
125 | Tripoto Verified Partner
126 |
127 |
128 |
129 |
130 |
131 |
132 |
136 |
137 |
PACKAGE
138 |
139 | Embrace Minimalistic Community Life & Learn A Traditional Martial
140 | Art | Beyond Community
141 |
142 |
143 |
144 |
145 | {" "}
146 |
147 | Sonalika Debnath
148 |
149 |
150 |
151 | 3D - 2N
152 |
153 |
154 |
155 |
156 |
157 | ₹ 8500{" "}
158 |
159 | {" "}
160 | / person{" "}
161 |
162 |
163 |
164 |
169 | Get Quotes
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
182 |
183 | Tripoto Verified Partner
184 |
185 |
186 |
187 |
188 |
189 |
190 |
194 |
195 |
PACKAGE
196 |
197 | Leaarn To Cook A Traditional Rajasthani Meal At A 200 Year-old
198 | Luxury Haveli
199 |
200 |
201 |
202 |
203 | {" "}
204 |
Rajasthan
205 |
206 |
207 | 3D - 2N
208 |
209 |
210 |
211 |
212 |
213 | ₹ 8500 / person
214 |
215 |
216 |
221 | Get Quotes
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
233 |
Tripoto Verified Partner
234 |
235 |
236 |
237 |
238 |
239 |
243 |
244 |
PACKAGE
245 |
246 | Trek To Triund And Stay At The Residence Of Kangra's Maharaja |
247 | Clouds End Villa, Dharamshala
248 |
249 |
250 |
251 |
252 | {" "}
253 |
Rashmi Sharma
254 |
255 | 3D - 2N
256 |
257 |
258 |
259 |
260 | ₹ 8500 / person
261 |
262 |
263 |
268 | Get Quotes
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
280 |
Tripoto Verified Partner
281 |
282 |
283 |
284 |
285 |
286 |
290 |
291 |
PACKAGE
292 |
293 | Stargaze & Enjoy A Picnic In the Hills As You Stay At A Unique
294 | A-Framed Cottage | Urna Boutique Stay
295 |
296 |
297 |
298 |
299 | {" "}
300 |
Aparajita
301 |
302 |
303 | 3D - 2N
304 |
305 |
306 |
307 |
308 |
309 | ₹ 8500 / person
310 |
311 |
312 |
317 | Get Quotes
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
329 |
Tripoto Verified Partner
330 |
331 |
332 |
333 |
334 |
335 |
339 |
340 |
PACKAGE
341 |
342 | Explore One Of Asia's Spookiest Spots While Unwinding Amidst
343 | Nature
344 |
345 |
346 |
347 |
348 | {" "}
349 |
Divyangna(Nomadic_Missy)
350 |
351 | 3D - 2N
352 |
353 |
354 |
355 |
356 | ₹ 8500 / person
357 |
358 |
359 |
364 | Get Quotes
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
376 |
Tripoto Verified Partner
377 |
378 |
379 |
380 |
381 |
382 | );
383 | };
384 |
--------------------------------------------------------------------------------