Merge branch 'client' of github.com:Priyatham-sai-chand/locaft into client

This commit is contained in:
Priyatham Sai Chand 2021-03-25 11:48:31 +05:30
commit eea8ce0794
57 changed files with 0 additions and 19922 deletions

View File

@ -1,2 +0,0 @@
[1206/101249.288:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)
[1231/174759.272:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)

17308
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,51 +0,0 @@
{
"name": "locaft",
"version": "0.1.0",
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-brands-svg-icons": "^5.15.1",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.13",
"@testing-library/jest-dom": "^5.11.5",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"axios": "^0.21.0",
"bootstrap": "^4.5.3",
"install": "^0.13.0",
"react": "^17.0.1",
"react-bootstrap": "^1.4.0",
"react-dom": "^17.0.1",
"react-lottie": "^1.2.3",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.0",
"styled-components": "^5.2.1",
"styled-icons": "^10.22.0",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"dev": "npm run start && nodemon index.js"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

View File

@ -1,46 +0,0 @@
<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="119.66407" height="40" viewBox="0 0 119.66407 40">
<title>Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917</title>
<g>
<g>
<g>
<path d="M110.13477,0H9.53468c-.3667,0-.729,0-1.09473.002-.30615.002-.60986.00781-.91895.0127A13.21476,13.21476,0,0,0,5.5171.19141a6.66509,6.66509,0,0,0-1.90088.627A6.43779,6.43779,0,0,0,1.99757,1.99707,6.25844,6.25844,0,0,0,.81935,3.61816a6.60119,6.60119,0,0,0-.625,1.90332,12.993,12.993,0,0,0-.1792,2.002C.00587,7.83008.00489,8.1377,0,8.44434V31.5586c.00489.3105.00587.6113.01515.9219a12.99232,12.99232,0,0,0,.1792,2.0019,6.58756,6.58756,0,0,0,.625,1.9043A6.20778,6.20778,0,0,0,1.99757,38.001a6.27445,6.27445,0,0,0,1.61865,1.1787,6.70082,6.70082,0,0,0,1.90088.6308,13.45514,13.45514,0,0,0,2.0039.1768c.30909.0068.6128.0107.91895.0107C8.80567,40,9.168,40,9.53468,40H110.13477c.3594,0,.7246,0,1.084-.002.3047,0,.6172-.0039.9219-.0107a13.279,13.279,0,0,0,2-.1768,6.80432,6.80432,0,0,0,1.9082-.6308,6.27742,6.27742,0,0,0,1.6172-1.1787,6.39482,6.39482,0,0,0,1.1816-1.6143,6.60413,6.60413,0,0,0,.6191-1.9043,13.50643,13.50643,0,0,0,.1856-2.0019c.0039-.3106.0039-.6114.0039-.9219.0078-.3633.0078-.7246.0078-1.0938V9.53613c0-.36621,0-.72949-.0078-1.09179,0-.30664,0-.61426-.0039-.9209a13.5071,13.5071,0,0,0-.1856-2.002,6.6177,6.6177,0,0,0-.6191-1.90332,6.46619,6.46619,0,0,0-2.7988-2.7998,6.76754,6.76754,0,0,0-1.9082-.627,13.04394,13.04394,0,0,0-2-.17676c-.3047-.00488-.6172-.01074-.9219-.01269-.3594-.002-.7246-.002-1.084-.002Z" style="fill: #a6a6a6"/>
<path d="M8.44483,39.125c-.30468,0-.602-.0039-.90429-.0107a12.68714,12.68714,0,0,1-1.86914-.1631,5.88381,5.88381,0,0,1-1.65674-.5479,5.40573,5.40573,0,0,1-1.397-1.0166,5.32082,5.32082,0,0,1-1.02051-1.3965,5.72186,5.72186,0,0,1-.543-1.6572,12.41351,12.41351,0,0,1-.1665-1.875c-.00634-.2109-.01464-.9131-.01464-.9131V8.44434S.88185,7.75293.8877,7.5498a12.37039,12.37039,0,0,1,.16553-1.87207,5.7555,5.7555,0,0,1,.54346-1.6621A5.37349,5.37349,0,0,1,2.61183,2.61768,5.56543,5.56543,0,0,1,4.01417,1.59521a5.82309,5.82309,0,0,1,1.65332-.54394A12.58589,12.58589,0,0,1,7.543.88721L8.44532.875H111.21387l.9131.0127a12.38493,12.38493,0,0,1,1.8584.16259,5.93833,5.93833,0,0,1,1.6709.54785,5.59374,5.59374,0,0,1,2.415,2.41993,5.76267,5.76267,0,0,1,.5352,1.64892,12.995,12.995,0,0,1,.1738,1.88721c.0029.2832.0029.5874.0029.89014.0079.375.0079.73193.0079,1.09179V30.4648c0,.3633,0,.7178-.0079,1.0752,0,.3252,0,.6231-.0039.9297a12.73126,12.73126,0,0,1-.1709,1.8535,5.739,5.739,0,0,1-.54,1.67,5.48029,5.48029,0,0,1-1.0156,1.3857,5.4129,5.4129,0,0,1-1.3994,1.0225,5.86168,5.86168,0,0,1-1.668.5498,12.54218,12.54218,0,0,1-1.8692.1631c-.2929.0068-.5996.0107-.8974.0107l-1.084.002Z"/>
</g>
<g id="_Group_" data-name="&lt;Group&gt;">
<g id="_Group_2" data-name="&lt;Group&gt;">
<g id="_Group_3" data-name="&lt;Group&gt;">
<path id="_Path_" data-name="&lt;Path&gt;" d="M24.76888,20.30068a4.94881,4.94881,0,0,1,2.35656-4.15206,5.06566,5.06566,0,0,0-3.99116-2.15768c-1.67924-.17626-3.30719,1.00483-4.1629,1.00483-.87227,0-2.18977-.98733-3.6085-.95814a5.31529,5.31529,0,0,0-4.47292,2.72787c-1.934,3.34842-.49141,8.26947,1.3612,10.97608.9269,1.32535,2.01018,2.8058,3.42763,2.7533,1.38706-.05753,1.9051-.88448,3.5794-.88448,1.65876,0,2.14479.88448,3.591.8511,1.48838-.02416,2.42613-1.33124,3.32051-2.66914a10.962,10.962,0,0,0,1.51842-3.09251A4.78205,4.78205,0,0,1,24.76888,20.30068Z" style="fill: #fff"/>
<path id="_Path_2" data-name="&lt;Path&gt;" d="M22.03725,12.21089a4.87248,4.87248,0,0,0,1.11452-3.49062,4.95746,4.95746,0,0,0-3.20758,1.65961,4.63634,4.63634,0,0,0-1.14371,3.36139A4.09905,4.09905,0,0,0,22.03725,12.21089Z" style="fill: #fff"/>
</g>
</g>
<g>
<path d="M42.30227,27.13965h-4.7334l-1.13672,3.35645H34.42727l4.4834-12.418h2.083l4.4834,12.418H43.438ZM38.0591,25.59082h3.752l-1.84961-5.44727h-.05176Z" style="fill: #fff"/>
<path d="M55.15969,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H48.4302v1.50586h.03418a3.21162,3.21162,0,0,1,2.88281-1.60059C53.645,21.34766,55.15969,23.16406,55.15969,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C52.30227,29.01563,53.24953,27.81934,53.24953,25.96973Z" style="fill: #fff"/>
<path d="M65.12453,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H58.395v1.50586h.03418A3.21162,3.21162,0,0,1,61.312,21.34766C63.60988,21.34766,65.12453,23.16406,65.12453,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C62.26711,29.01563,63.21438,27.81934,63.21438,25.96973Z" style="fill: #fff"/>
<path d="M71.71047,27.03613c.1377,1.23145,1.334,2.04,2.96875,2.04,1.56641,0,2.69336-.80859,2.69336-1.91895,0-.96387-.67969-1.541-2.28906-1.93652l-1.60937-.3877c-2.28027-.55078-3.33887-1.61719-3.33887-3.34766,0-2.14258,1.86719-3.61426,4.51855-3.61426,2.624,0,4.42285,1.47168,4.4834,3.61426h-1.876c-.1123-1.23926-1.13672-1.9873-2.63379-1.9873s-2.52148.75684-2.52148,1.8584c0,.87793.6543,1.39453,2.25488,1.79l1.36816.33594c2.54785.60254,3.60645,1.626,3.60645,3.44238,0,2.32324-1.85059,3.77832-4.79395,3.77832-2.75391,0-4.61328-1.4209-4.7334-3.667Z" style="fill: #fff"/>
<path d="M83.34621,19.2998v2.14258h1.72168v1.47168H83.34621v4.99121c0,.77539.34473,1.13672,1.10156,1.13672a5.80752,5.80752,0,0,0,.61133-.043v1.46289a5.10351,5.10351,0,0,1-1.03223.08594c-1.833,0-2.54785-.68848-2.54785-2.44434V22.91406H80.16262V21.44238H81.479V19.2998Z" style="fill: #fff"/>
<path d="M86.065,25.96973c0-2.84863,1.67773-4.63867,4.29395-4.63867,2.625,0,4.29492,1.79,4.29492,4.63867,0,2.85645-1.66113,4.63867-4.29492,4.63867C87.72609,30.6084,86.065,28.82617,86.065,25.96973Zm6.69531,0c0-1.9541-.89551-3.10742-2.40137-3.10742s-2.40039,1.16211-2.40039,3.10742c0,1.96191.89453,3.10645,2.40039,3.10645S92.76027,27.93164,92.76027,25.96973Z" style="fill: #fff"/>
<path d="M96.18606,21.44238h1.77246v1.541h.043a2.1594,2.1594,0,0,1,2.17773-1.63574,2.86616,2.86616,0,0,1,.63672.06934v1.73828a2.59794,2.59794,0,0,0-.835-.1123,1.87264,1.87264,0,0,0-1.93652,2.083v5.37012h-1.8584Z" style="fill: #fff"/>
<path d="M109.3843,27.83691c-.25,1.64355-1.85059,2.77148-3.89844,2.77148-2.63379,0-4.26855-1.76465-4.26855-4.5957,0-2.83984,1.64355-4.68164,4.19043-4.68164,2.50488,0,4.08008,1.7207,4.08008,4.46582v.63672h-6.39453v.1123a2.358,2.358,0,0,0,2.43555,2.56445,2.04834,2.04834,0,0,0,2.09082-1.27344Zm-6.28223-2.70215h4.52637a2.1773,2.1773,0,0,0-2.2207-2.29785A2.292,2.292,0,0,0,103.10207,25.13477Z" style="fill: #fff"/>
</g>
</g>
</g>
<g id="_Group_4" data-name="&lt;Group&gt;">
<g>
<path d="M37.82619,8.731a2.63964,2.63964,0,0,1,2.80762,2.96484c0,1.90625-1.03027,3.002-2.80762,3.002H35.67092V8.731Zm-1.22852,5.123h1.125a1.87588,1.87588,0,0,0,1.96777-2.146,1.881,1.881,0,0,0-1.96777-2.13379h-1.125Z" style="fill: #fff"/>
<path d="M41.68068,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C44.57522,13.99463,45.01369,13.42432,45.01369,12.44434Z" style="fill: #fff"/>
<path d="M51.57326,14.69775h-.92187l-.93066-3.31641h-.07031l-.92676,3.31641h-.91309l-1.24121-4.50293h.90137l.80664,3.436h.06641l.92578-3.436h.85254l.92578,3.436h.07031l.80273-3.436h.88867Z" style="fill: #fff"/>
<path d="M53.85354,10.19482H54.709v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915h-.88867V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
<path d="M59.09377,8.437h.88867v6.26074h-.88867Z" style="fill: #fff"/>
<path d="M61.21779,12.44434a2.13346,2.13346,0,1,1,4.24756,0,2.1338,2.1338,0,1,1-4.24756,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C64.11232,13.99463,64.5508,13.42432,64.5508,12.44434Z" style="fill: #fff"/>
<path d="M66.4009,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76563.562,1.76563,1.51318v3.07666h-.85547v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,66.4009,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,69.29543,13.03955Z" style="fill: #fff"/>
<path d="M71.34816,12.44434c0-1.42285.73145-2.32422,1.86914-2.32422a1.484,1.484,0,0,1,1.38086.79h.06641V8.437h.88867v6.26074h-.85156v-.71143h-.07031a1.56284,1.56284,0,0,1-1.41406.78564C72.0718,14.772,71.34816,13.87061,71.34816,12.44434Zm.918,0c0,.95508.4502,1.52979,1.20313,1.52979.749,0,1.21191-.583,1.21191-1.52588,0-.93848-.46777-1.52979-1.21191-1.52979C72.72121,10.91846,72.26613,11.49707,72.26613,12.44434Z" style="fill: #fff"/>
<path d="M79.23,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C82.12453,13.99463,82.563,13.42432,82.563,12.44434Z" style="fill: #fff"/>
<path d="M84.66945,10.19482h.85547v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915H87.605V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
<path d="M93.51516,9.07373v1.1416h.97559v.74854h-.97559V13.2793c0,.47168.19434.67822.63672.67822a2.96657,2.96657,0,0,0,.33887-.02051v.74023a2.9155,2.9155,0,0,1-.4834.04541c-.98828,0-1.38184-.34766-1.38184-1.21582v-2.543h-.71484v-.74854h.71484V9.07373Z" style="fill: #fff"/>
<path d="M95.70461,8.437h.88086v2.48145h.07031a1.3856,1.3856,0,0,1,1.373-.80664,1.48339,1.48339,0,0,1,1.55078,1.67871v2.90723H98.69v-2.688c0-.71924-.335-1.0835-.96289-1.0835a1.05194,1.05194,0,0,0-1.13379,1.1416v2.62988h-.88867Z" style="fill: #fff"/>
<path d="M104.76125,13.48193a1.828,1.828,0,0,1-1.95117,1.30273A2.04531,2.04531,0,0,1,100.73,12.46045a2.07685,2.07685,0,0,1,2.07617-2.35254c1.25293,0,2.00879.856,2.00879,2.27V12.688h-3.17969v.0498a1.1902,1.1902,0,0,0,1.19922,1.29,1.07934,1.07934,0,0,0,1.07129-.5459Zm-3.126-1.45117h2.27441a1.08647,1.08647,0,0,0-1.1084-1.1665A1.15162,1.15162,0,0,0,101.63527,12.03076Z" style="fill: #fff"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,53 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link href="./src/style.css" rel="stylesheet"/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo.jpg" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- CSS Stylesheets -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<!-- Bootstrap Scripts -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<title>Locaft</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,15 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1,74 +0,0 @@
import React, { useEffect, useState } from 'react';
import Axios from 'axios';
import HomePage from "./components/HomePage";
import PricingPlan from "./components/PricingPlan";
import LogInContainer from "./components/LogInContainer";
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import UserContext from "./context/UserContext";
import Options from "./components/Options";
import Stepper from './components/Stepper';
import NavBar from "./components/NavBar";
import FillingDetails from "./components/FillingDetails";
import Error404 from './components/Error404';
import Payment from './components/Payment'
export default function App() {
const [userData, setUserData ] = useState({
token: undefined,
user: undefined
});
useEffect(() => {
const checkLoggedIn = async () => {
let token = localStorage.getItem("auth-token");
if (token == null) {
localStorage.setItem("auth-token","");
token ="";
}
const tokenRes = await Axios.post(
"http://localhost:5000/users/tokenIsValid",
null,
{headers: {"x-auth-token": token }}
);
if (tokenRes.data) {
const userRes = await Axios.get("http://localhost:5000/users/",
{headers:{"x-auth-token":token},
});
setUserData({
token,
user: userRes.data,
});
}
};
checkLoggedIn();
},[])
return (
<>
<div className="App">
<BrowserRouter>
<UserContext.Provider value= {{userData, setUserData}}>
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="asdf" component={NavBar} />
<Route path="/user" component={LogInContainer} />
<Route path="/pricing" component={PricingPlan} />
<Route path="/track" component={Stepper} />
<Route path="/options" component={Options} />
<Route path="/details" component={FillingDetails} />
<Route path="/payment" component={Payment} />
<Route path="/" component={Error404} />
</Switch>
</UserContext.Provider>
</BrowserRouter>
</div>
</>
);
}

View File

@ -1,8 +0,0 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

View File

@ -1,58 +0,0 @@
import React from 'react';
import styled from 'styled-components';
import Lottie from 'react-lottie';
import animationData from '../lottie/box_error';
const Body = styled.div`
@import url(https://fonts.googleapis.com/css?family=Roboto:400,100,300,500);
font-size: 100%;
line-height: 1.5;
font-family: "Roboto", sans-serif;
display:flex;
justify-content: center;
align-items: center;
`;
const Container = styled.div`
position: relative;
background-color: #66bfbf;
text-align: center;
`;
const Heading = styled.h1`
padding-top: 15%;
color: white;
font-size: 4rem;
margin: 0px;
`;
const defaultOptions = {
loop: true,
autoplay: true,
animationData: animationData,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice"
}
};
const Error404 = () => {
return (
<Body>
<Container>
<Heading>Error </Heading>
<br />
<Lottie height={500} width={500} options={defaultOptions} />
</Container>
</Body>
);
}
export default Error404;

View File

@ -1,35 +0,0 @@
import React from "react";
import styled from 'styled-components';
import Footer from "./Footer";
export default function ErrorNotice(props) {
const ErrorNotice = styled.div`
margin: 1rem 0;
padding: 0.5rem;
border: 1px solid #e07c7c;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #f8d6d6;
`;
const ErrorMessage = styled.div`
color: #000000;
`;
const ErrorButton = styled.button
`
width: 17px;
height: 28px;
display:flex;
background-color: #df4343;
color: #ffffff;
`;
return (
<ErrorNotice>
<ErrorMessage>{props.message}</ErrorMessage>
<ErrorButton onClick={props.clearError}>x</ErrorButton>
</ErrorNotice>
);
}

View File

@ -1,75 +0,0 @@
import React,{useState} from 'react';
import styled from 'styled-components';
import Footer from './Footer';
import NavBar from './NavBar';
const Selector = styled.select`
width: 25%;
`;
const Container = styled.div`
padding: 50px;
`;
const Heading = styled.h1`
color: #66bfbf !important;
`;
const FillingDetails = () => {
const [foodState, setFoodState] = useState(null);
return (
<Container>
<NavBar></NavBar>
<br></br>
<br></br>
<Heading>Details</Heading>
<br></br>
<div>
Source:&nbsp;&nbsp;
<Selector
className="custom-select"
value={foodState}
onChange={(e) => {
const selectedFood = e.target.value;
setFoodState(selectedFood);
}}
>
<option value="source1" >source12</option>
<option value="source2">source2</option>
<option value="source3">source3</option>
</Selector>
<br></br>
{foodState}
<br></br>
<br></br>
<br></br>
Destination: &nbsp;&nbsp;
<Selector
className="custom-select"
value={foodState}
onChange={(e) => {
const selectedFood = e.target.value;
setFoodState(selectedFood);
}}
>
<option value="dest1" >dest1</option>
<option value="dest2">dest2</option>
<option value="dest3">dest3</option>
</Selector>
<br></br>
{foodState}
</div>
<Footer />
</Container>
);
}
export default FillingDetails;

View File

@ -1,62 +0,0 @@
import React from 'react';
import styled from 'styled-components';
import { Facebook, Twitter, Instagram } from "@styled-icons/fa-brands";
import { Envelope } from "@styled-icons/fa-solid";
import { StyledIconBase } from '@styled-icons/styled-icon'
import {
Container
} from 'react-bootstrap';
const ContainerPadded = styled(Container)`
padding: 7% 15%;
text-align: center;
`;
const WhiteSection = styled.footer`
background: ${props => props.background || "white"};
`;
const ContainerCentered = styled.div`
display:flex;
flex-direction: row;
justify-content: center;
`;
const IconStyler = styled.div`
${StyledIconBase} {
width: ${props => props.width ? props.width : 26}px;
height: ${props => props.height ? props.height : 26};
color: ${props => props.color ? props.color : "white"};
}
margin: 20px 10px;
`;
const Footer = () => {
return (
<WhiteSection>
<ContainerPadded fluid>
<ContainerCentered>
<IconStyler color="#000" width={20} height={20}><Facebook /></IconStyler>
<IconStyler color="#000" width={20} height={20}><Twitter /></IconStyler>
<IconStyler color="#000" width={20} height={20}><Instagram /></IconStyler>
<IconStyler color="#000" width={20} height={20}><Envelope /></IconStyler >
</ContainerCentered>
<p>© Copyright 2020 Locaft</p>
<p><a href="/tc">Terms and Conditions</a></p>
<p><a href="/pp">Privacy Policy</a></p>
</ContainerPadded >
</WhiteSection >
)
}
export default Footer;

View File

@ -1,244 +0,0 @@
import React from 'react';
import NavBar from './NavBar';
import Footer from './Footer';
import { useHistory } from "react-router-dom";
import Lottie from 'react-lottie';
import animationData from '../lottie/plane_gif';
import {Container,Row,Col,Carousel, Button} from "react-bootstrap";
import styled from 'styled-components';
import { CheckCircle, Heart, AddressCard, ChartLine } from '@styled-icons/fa-solid';
import { Bullseye } from "@styled-icons/fa-solid";
import { StyledIconBase } from '@styled-icons/styled-icon'
const IconStyler = styled.div`
${StyledIconBase} {
width: ${props => props.width ? props.width : 26}px;
height: ${props => props.height ? props.height : 26};
color: ${ props => props.color ? props.color: "white"};
}
`;
const defaultOptions = {
loop: true,
autoplay: true,
animationData: animationData,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice"
}
};
const ColoredSection = styled.section`
background-color:#66bfbf;
color: #fff;
`;
const WhiteSection = styled.section`
background:#fff;
`;
const PressSection = styled(ColoredSection)`
padding-bottom: 3%;
align-items:center;
`;
const PressLogo = styled.img`
width: 18%;
height: 18%;
margin: 20px 20px 50px;
`;
const FeatureCol = styled(Col)`
padding: 4.5%;
width: 100vw;
height: 100vh;
`;
const ContainerPadded = styled(Container)`
padding: 5% 5%;
text-align: center;
`;
const BigHeading = styled.h1`
font-size: 5rem;
line-height: 1.5;
font-family: "Ubuntu";
color: white;
font-weight: bold;
`;
const FeatureTitle = styled.h3`
font-size: 1.5rem;
color:#8f8f8f;
align-self: center;
`;
const TestimonalTitle = styled.h2`
font-size: 3rem;
color:#fff;
line-height: 1.5;
align-content: center;
padding: 10px 50px;
font-style: italic;
`;
export default function HomePage() {
const history = useHistory();
return (
<div className="HomePage">
<NavBar />
<ColoredSection >
<ContainerPadded fluid>
<Row>
<FeatureCol lg="6">
<BigHeading>Adapt to a new place easy peasy.</BigHeading>
<Button variant="info" onClick={() => {
history.push("/user/login")
}} >Log In</Button> &nbsp;
<Button variant="info" onClick={() => history.push("/user/register")} >Sign Up</Button>
</FeatureCol>
<FeatureCol lg="6">
<Lottie options= { defaultOptions } />
</FeatureCol>
</Row>
</ContainerPadded>
</ColoredSection>
<WhiteSection id="services">
<ContainerPadded fluid>
<Row>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><CheckCircle /></IconStyler>
<br/>
<FeatureTitle>Easy to use.</FeatureTitle>
<p>Get relocated.We'll take care of everything.</p>
</FeatureCol>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><Bullseye /></IconStyler>
<br />
<FeatureTitle>Efficient</FeatureTitle>
<p>Get highest number of services for lowest cost possible.</p>
</FeatureCol>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><Heart /></IconStyler>
<br />
<FeatureTitle>Relax</FeatureTitle>
<p>Sit back , we'll do the dirty work.</p>
</FeatureCol>
</Row>
</ContainerPadded>
</WhiteSection>
<ColoredSection>
<br/>
<br/>
<Carousel>
<Carousel.Item>
<Carousel.Caption>
</Carousel.Caption>
<TestimonalTitle>"I had to shift from Bangalore to Hyderabad. Thanks to Locaft , it was easy to know about this place."</TestimonalTitle>
<p style={{'text-align':'center'}}>Nishant, Pune</p>
</Carousel.Item>
<Carousel.Item >
<Carousel.Caption>
</Carousel.Caption>
<TestimonalTitle>"Relocation took me 3 months previously , but thanks to Locaft , everything was done within 3 days."</TestimonalTitle>
<p style={{'text-align': 'center'}}>Mani, Hyderabad</p>
</Carousel.Item>
</Carousel>
</ColoredSection>
<PressSection>
<ContainerPadded fluid>
<BigHeading>Our Partners</BigHeading>
<PressLogo src="/indigo_optimized.jpg" alt="indigo-brand" />
<PressLogo src="/avasa_optmized.jpg" alt="avassa-brand" />
<PressLogo src="/vrl_optmized.jpg" alt="vrl-brand" />
</ContainerPadded>
</PressSection>
<WhiteSection id="about-us">
<ContainerPadded fluid>
<Row>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><AddressCard /></IconStyler>
<br />
<FeatureTitle>About Us</FeatureTitle>
<p>Adapting to a new place is always hard in any phase of life. We aim to make it easy. </p>
</FeatureCol>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><Bullseye /></IconStyler>
<br />
<FeatureTitle>Vision</FeatureTitle>
<p>Bringing all the basic amenities to the new place before your arrival.</p>
</FeatureCol>
<FeatureCol lg="4">
<IconStyler color="#66bfbf" width={50} height={50}><ChartLine /></IconStyler>
< br/>
<FeatureTitle>Mission</FeatureTitle>
<p>Getting adapted and familiar to the new place made easy.</p>
</FeatureCol>
</Row>
</ContainerPadded>
</WhiteSection>
<ColoredSection>
<ContainerPadded fluid>
<BigHeading>Recommend us to your friends !</BigHeading>
<img width="200px" src="google-play-badge.png"></img>
&nbsp;
<img width="160px" src="apple_badge.svg" ></img>
</ContainerPadded>
</ColoredSection>
<div id="footer">
<Footer />
</div>
</div>
);
}

View File

@ -1,113 +0,0 @@
import React from 'react';
import styled from 'styled-components';
const Image = styled.img`
display:block;
`;
const Tick = styled.input.attrs(props => ({
type: "radio",
name: "radiobtn"
}))`
`;
const Overlay = styled.div`
position: block;
bottom: 0;
background: rgb(0, 0, 0);
background: rgba(0, 0, 0, 0.5);
color: #f1f1f1;
width: 100%;
transition: .5s ease;
opacity:0;
color: white;
font-size: 20px;
padding: 20px;
text-align: center;
margin-top: -90px;
`;
const Card = styled.div`
width: 300px;
height: 300px;
border-radius: 40px;
box-shadow: 4px 4px 5px 5px rgba(0,0,0,0.01), -2px -2px 5px 5px rgba(0,0,0,0.22);
cursor: pointer;
transition: 0.4s;
& .card_image {
width: inherit;
height:inherit;
}
& .card_image ${Image} {
width: inherit;
height:inherit;
border-radius: 40px;
object-fit:cover;
}
& .card_title {
text-align: center;
border-radius: 0px 0px 40px 40px;
font-family: sans-serif;
font-weight: bold;
font-size: 30px;
margin-top: -80px;
height: 40px;
}
& .card_title {
text-align: center;
border-radius: 0px 0px 40px 40px;
font-family: sans-serif;
font-weight: bold;
font-size: 30px;
margin-top: -80px;
height: 40px;
color: white !important;
}
& .card_tick {
content:'asdf';
border-radius: 0px 0px 40px 40px;
margin-top: -90px;
height: 40px;
color: white;
}
&:hover {
box-shadow: 2px 2px 5px 9px rgba(0,0,0,0.22), -2px -2px 5px 5px rgba(0,0,0,0.11);
;
}
&:hover ${Overlay}{
opacity: 1;
}
`;
const HouseCard = (props) => {
return (
<Card>
<Card className="card_image"> <Image src={props.img} alt="asdf" /></Card>
<Card className="card_title">
<p>Card Title</p>
</Card>
</Card>
);
}
export default HouseCard;

View File

@ -1,16 +0,0 @@
import React from 'react';
const HouseDetails = (props) => {
const contin = e => {
e.preventDefault();
this.props.nextStep();
};
const back = e => {
e.preventDefault();
this.props.prevStep();
};
const {values, handleChange} = props;
}

View File

@ -1,52 +0,0 @@
import React from 'react';
import { BrowserRouter, Route, NavLink, Switch,withRouter } from 'react-router-dom';
import Register from './Register';
import Login from './Login';
import Footer from './Footer';
import '../login_reg.css';
const LogInContainer = (props) => {
return (
<BrowserRouter basename="user">
<div className="Apper">
<div className="Apper__Aside">
<div className="Apper_logo">
<img src="/logo.jpg" alt="plane logo"></img>
</div>
<div className="Apper__Aside__text">
<h1 className="Apper_heading">locaft</h1>
<p className="Apper_quote">Sit back, let us move you</p>
</div>
<div className="Apper_Aside_image">
<img src="/skyscraper.png" alt="skyscraper"></img>
</div>
</div>
<div className="Apper__Form">
<div className="PageSwitcher">
<NavLink to="/login" activeClassName="PageSwitcher__Item--Active" className="PageSwitcher__Item">Sign In</NavLink>
<NavLink to="/register" activeClassName="PageSwitcher__Item--Active" className="PageSwitcher__Item">Sign Up</NavLink>
</div>
<div className="FormTitle">
<NavLink to="/login" activeClassName="FormTitle__Link--Active" className="FormTitle__Link">Sign In</NavLink> or <NavLink exact to="/register" activeClassName="FormTitle__Link--Active" className="FormTitle__Link">Sign Up</NavLink>
</div>
<Switch>
<Route path="/register" component={Register} />
<Route path="/login" component={Login} />
</Switch>
<p>
</p>
</div>
</div>
<Footer background="blue"/>
</BrowserRouter>
);
}
export default withRouter(LogInContainer);

View File

@ -1,61 +0,0 @@
import React, { useState, useContext } from "react";
import UserContext from "../context/UserContext";
import Axios from "axios";
import ErrorNotice from "./ErrorNotice";
import { Link, useHistory, withRouter } from "react-router-dom";
const Login = () => {
const [email, setEmail] = useState();
const [password, setPassword] = useState();
const [error, setError] = useState();
const { userData,setUserData } = useContext(UserContext);
const history = useHistory();
const submit = async (e) => {
e.preventDefault();
try {
const loginUser = { email, password };
const loginRes = await Axios.post(
"http://localhost:5000/users/login",
loginUser
);
setUserData({
token: loginRes.data.token,
user: loginRes.data.user,
});
localStorage.setItem("auth-token", loginRes.data.token);
history.push("/");
} catch (err) {
err.response.data.msg && setError(err.response.data.msg);
}
};
return (
<div className="FormCenter">
{error && (
<ErrorNotice message={error} clearError={() => setError(undefined)} />
)}
<form className="FormFields" onSubmit={submit}>
<div className="FormField">
<label className="FormField__Label" htmlFor="email">E-Mail Address</label>
<input type="email" id="email" className="FormField__Input" value={ email } placeholder="Enter your email" name="email" onChange={(e) => setEmail(e.target.value)} />
</div>
<div className="FormField">
<label className="FormField__Label" htmlFor="password">Password</label>
<input type="password" id="password" className="FormField__Input" value={ password } placeholder="Enter your password" name="password" onChange={(e) => setPassword(e.target.value)} />
</div>
<div className="FormField">
<button className="FormField__Button mr-20" >Sign In</button> <Link exact to="/register" className="FormField__Link">Not a member?</Link>
</div>
</form>
</div>
);
}
export default withRouter(Login);

View File

@ -1,146 +0,0 @@
import React, {useContext,useEffect } from 'react';
import { Link } from "react-router-dom";
import UserContext from "../context/UserContext";
import styled,{ css } from 'styled-components';
const Header = styled.header`
@import url('https://fonts.googleapis.com/css?family=Montserrat|Ubuntu');
background: #66bfbf;
position: fixed;
top: 0;
left: 0;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
transition: 0.6s;
padding: 10px 15px;
z-index: 100000;
font-family: Ubuntu;
${ props => props.sticky ? css`
${Header};
padding: 3px 45px;
min-height: 3vh;
opacity: 0.85;
display: fixed;
`:css``};
& .logo {
font-family: "Ubuntu";
font-size: 2rem;
font-weight: bold;
position: relative;
color: #fff;
text-decoration: none;
text-transform: lowercase;
transition: 0.6s;
}
`;
const List = styled.ul`
position: relative;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 13px 50px;
flex-wrap: nowrap;
margin-bottom: 0px !important;
`;
const ListElement = styled.li`
color: #fff;
text-decoration: none;
text-transform: uppercase;
position:relative;
padding:3px 50px;
`;
const Anchor = styled.a`
color: #fff;
text-transform: uppercase;
color: inherit;
letter-spacing: 2px;
font-size: 1.2em;
padding: 3px ;
transition: 0.6s;
white-space: nowrap;
`;
const Linker = styled(Link)`
color:#fff;
text-transform: uppercase;
color: inherit;
letter-spacing: 2px;
font-size: 1.2em;
padding: 3px 0;
transition: 0.6s;
`;
export default function NavBar() {
const { userData, setUserData } = useContext(UserContext);
const logout = () => {
setUserData({
token: undefined,
user: undefined,
});
localStorage.setItem("auth-token", "");
};
const [scrolled,setScrolled]=React.useState(false);
const handleScroll=() => {
const offset=window.scrollY;
if(offset > 200 ){
setScrolled(true);
}
else{
setScrolled(false);
}
}
useEffect(() => {
window.addEventListener('scroll',handleScroll)
})
return (
<div className="navbar">
<Header sticky = {scrolled} >
<Anchor href="/" className="logo">locaft</Anchor>
<List>
<ListElement><Anchor href="/">Home</Anchor></ListElement>
<ListElement><Anchor href="/#about-us">About</Anchor></ListElement>
<ListElement><Anchor href="/#services">Services</Anchor></ListElement>
<ListElement><Anchor href="/#footer">Contact us</Anchor></ListElement>
{userData.user ? (
<React.Fragment>
<ListElement><Linker onClick={logout}>{userData.user.username}</Linker></ListElement>
</React.Fragment>
) : (
<React.Fragment>
<ListElement><Linker to="/user/register">Register</Linker></ListElement>
<ListElement><Linker to="/user/login">login</Linker></ListElement>
</React.Fragment>
)}
</List>
</Header>
</div>
)
}

View File

@ -1,92 +0,0 @@
import React from 'react';
import '../options.css';
import Card from './HouseCard';
import Footer from "./Footer";
import styled from 'styled-components';
const CardList = styled.div`
z-index: 0;
width: 100%;
display: flex;
justify-content: space-around;
flex-wrap: wrap;
`;
export default function Options() {
document.addEventListener('DOMContentLoaded', () => {
const previousBtn = document.getElementById('previousBtn');
const nextBtn = document.getElementById('nextBtn');
const finishBtn = document.getElementById('finishBtn');
const content = document.getElementById('content');
const bullets = [...document.querySelectorAll('.bullet')];
const MAX_STEPS = 4;
let currentStep = 1;
nextBtn.addEventListener('click', () => {
bullets[currentStep - 1].classList.add('completed');
currentStep += 1;
previousBtn.disabled = false;
if (currentStep === MAX_STEPS) {
nextBtn.disabled = true;
finishBtn.disabled = false;
}
content.innerText = `Step Number ${currentStep}`;
});
previousBtn.addEventListener('click', () => {
bullets[currentStep - 2].classList.remove('completed');
currentStep -= 1;
nextBtn.disabled = false;
finishBtn.disabled = true;
if (currentStep === 1) {
previousBtn.disabled = true;
}
content.innerText = `Step Number ${currentStep}`;
});
finishBtn.addEventListener('click', () => {
window.location.reload();
});
})
return (
<div className="container">
<div id="stepProgressBar">
<div className="step">
<p className="step-text">About</p>
<div className="bullet">1</div>
</div>
<div className="step">
<p className="step-text">Contact</p>
<div className="bullet">2</div>
</div>
<div className="step">
<p className="step-text">Step 3</p>
<div className="bullet">3</div>
</div>
<div className="step">
<p className="step-text">Step 4</p>
<div className="bullet ">4</div>
</div>
</div>
<div id="main">
<p id="content" className="text-center">Step Number 1</p>
<button id="previousBtn" >Previous</button>
<button id="nextBtn">Next</button>
<button id="finishBtn" >Finish</button>
</div>
<Footer />
</div>
)
}

View File

@ -1,21 +0,0 @@
import React,{ useContext } from 'react';
import NavBar from './NavBar';
import Footer from './Footer';
import UserContext from '../context/UserContext'
const Payment = (props) => {
const { userData, setUserData } = useContext(UserContext);
return (
<div>
<h1>{userData.user.username}</h1>
<h2>{props.pricing}</h2>
</div>
);
}
export default Payment;

View File

@ -1,339 +0,0 @@
import React, { useState,useContext } from 'react';
import NavBar from './NavBar';
import Footer from './Footer';
import styled,{css} from 'styled-components';
import UserContext from "../context/UserContext";
import Payment from "./Payment";
import { useHistory } from "react-router-dom";
import Axios from 'axios';
const size = {
mobileS: '320px',
mobileM: '375px',
mobileL: '425px',
tablet: '768px',
laptop: '1024px',
laptopL: '1440px',
desktop: '2560px'
}
export const Device = {
mobileS: `(min-width: ${size.mobileS})`,
mobileM: `(min-width: ${size.mobileM})`,
mobileL: `(min-width: ${size.mobileL})`,
tablet: `(min-width: ${size.tablet})`,
laptop: `(min-width: ${size.laptop})`,
laptopL: `(min-width: ${size.laptopL})`,
desktop: `(min-width: ${size.desktop})`,
desktopL: `(min-width: ${size.desktop})`
};
const PricingPlanContainer = styled.div`
display:flex;
align-items: center;
justify-content: center;
padding: 10px;
flex-direction: column;
@media ${Device.laptop} {
flex-direction: row;
}
`;
const Radio = styled.input`
display:none;
`;
const Label = styled.label`
display: relative;
cursor:pointer;
`;
const Pricing = styled.section`
background: white;
border-radius: 25px;
box-shadow: 0 0 5px rgba(0,0,0,0.2);
overflow: hidden;
font-family: sans-serif;
font-size: 16px;
line-height: 1.5;
color: #555555;
margin: 15px;
&:hover {
cursor: pointer;
box-shadow: 0 0 15px rgba(0,0,0,0.4);
transform: scale(1.05);
}
${props => props.pricing_id === props.pricing_plan ? css`
box-shadow: 0 0 15px rgba(0,0,0,0.4);
transform: scale(1.05);
`:css``};
`;
const Text = styled.p`
font-size: 0.9em;
text-align: center;
margin: 0 0 10px 0;
`;
const Currency = styled.p`
margin: 0;
text-align: center;
font-size: 2em;
color:#000000;
`;
const Title = styled.h1`
font-size:1.5em;
font-weight: 400;
`;
const Header = styled.div`
padding:25px;
background: #009578;
color: #ffffff;
`;
const Summary = styled.h2`
font-size: 1em;
font-weight: 300;
`;
const SpecialText = styled.div`
padding: 10px;
text-align: center;
font-weight: bold;
color: #ffffff;
background: #007c64;
box-shadow: 0 0 10px rgba(0,0,0,0.2) inset;
&, ${Title}{
margin: 0;
text-align: center;
font-family: sans-serif;
}
`;
const Description = styled.div`
display:block;
padding: 25px;
`;
const List = styled.ul`
padding: 0;
margin: 0;
text-align: left;
`;
const Feature = styled.li`
margin: 0 0 25px 0;
padding-left: 25px;
position: relative;
font-size: 0.9 em;
&:not(:last-child) {
margin-bottom: 2em;
}
&::before {
content: "✓ ";
color: green;
}
`;
const Actions = styled.div`
padding: 25px;
border-top: 1px solid #eeeeee;
display: flex;
flex-direction: column;
`;
const Button = styled.a`
display: inline-block;
margin: 15px auto;
padding: 8px 20px;
color: #009578;
background: #ffffff;
border-radius: 5px;
border: 1px solid #009578;
text-transform: uppercase;
letter-spacing: 0.02em;
font-weight: bold;
text-align: center;
cursor: pointer;
&:hover {
background: #009578;
color: white !important;
}
`;
const Heading = styled.h1`
color: #66bfbf;
margin-left: 20px;
margin-top: 100px;
`;
const PricingPlan = () => {
const { userData, setUserData } = useContext(UserContext);
const [ purchased, setPurchased ] = useState(false);
const [ pricing, setPricing ] = useState();
const history = useHistory();
const submit = async (props) => {
props.preventDefault();
try {
const id = userData.user.id;
const pricingRes = await Axios.put(
"http://localhost:5000/users/update", {
id,
pricing
}
);
} catch (err) {
console.log(err);
}
}
return (
<div className="body">
<NavBar />
{ !purchased ? (
<React.Fragment>
<Heading>Pricing Plan</Heading>
<PricingPlanContainer onChange={event => setPricing(event.target.value)}>
<Pricing pricing_plan={pricing} pricing_id="basic">
<Radio type ="radio" value="basic" name="pricing" id = "basic"/>
<Label for="basic">
<Header>
<Title>Basic Package</Title>
<Summary>For those getting started</Summary>
</Header>
<Description>
<List>
<Feature>Feature #1</Feature>
<Feature>Feature #2</Feature>
<Feature>Feature #3</Feature>
<Feature>Feature #4</Feature>
</List>
</Description>
<Actions>
<Currency>$10</Currency>
<Text>per month</Text>
<Text>Minimum sped over 12 months</Text>
</Actions>
</Label>
</Pricing>
<Pricing pricing_plan={pricing} pricing_id="intermediate">
<Radio type="radio" value="intermediate" name="pricing" id="intermediate" />
<Label for="intermediate" >
<SpecialText>Recommended</SpecialText>
<Header>
<Title>Intermediate Package</Title>
<Summary>For those getting started</Summary>
</Header>
<Description>
<List>
<Feature>Feature #1</Feature>
<Feature>Feature #2</Feature>
<Feature>Feature #3</Feature>
<Feature>Feature #4</Feature>
</List>
</Description>
<Actions>
<Currency>$50</Currency>
<Text>per month</Text>
<Text>Minimum spend over 12 months</Text>
</Actions>
</Label>
</Pricing>
<Pricing pricing_plan={pricing} pricing_id="luxury">
<Radio type="radio" value="luxury" name="pricing" id="luxury" />
<Label for="luxury">
<Header>
<Title>Luxury Package</Title>
<Summary>For those getting started</Summary>
</Header>
<Description>
<List>
<Feature>Feature #1</Feature>
<Feature>Feature #2</Feature>
<Feature>Feature #3</Feature>
<Feature>Feature #4</Feature>
</List>
</Description>
<Actions>
<Currency>$100</Currency>
<Text>per month</Text>
<Text>Minimum spend over 12 months</Text>
</Actions>
</Label>
</Pricing>
</PricingPlanContainer>
<PricingPlanContainer>
<Button onClick={() => setPurchased(true) }>Purchase</Button>
</PricingPlanContainer>
</React.Fragment>
): (
<React.Fragment>
<PricingPlanContainer styles = "{'flex-direction':'column'}">
<Heading>user name: {userData.user.username}</Heading>
<Heading>Plan selected : {pricing}</Heading>
<Button onClick={submit}>Confirm and Pay</Button>
</PricingPlanContainer>
</React.Fragment>
)
}
<Footer />
</div>
)
}
export default PricingPlan;

View File

@ -1,67 +0,0 @@
import React from "react";
import styled from "styled-components";
const RadioWrapper = styled.div`
`;
const Mark = styled.span`
position: relative;
border: 1px solid #777777;
width: 14px;
height: 14px;
left: 0;
border-radius: 50%;
margin-right: 5px;
vertical-align: middle;
&::after {
content: "";
display: block;
width: 0;
height: 0;
border-radius: 50%;
background-color: #03a9f4;
opacity: 0;
left: 50%;
top: 50%;
position: absolute;
transition: all 110ms;
}
`;
const Input = styled.input`
position: absolute;
visibility: hidden;
display: none;
&:checked + ${Mark} {
&::after {
width: 10px;
height: 10px;
opacity: 1;
left: 12%;
top: 12%;
}
}
`;
const Label = styled.label`
cursor: pointer;
position: relative;
${props =>
props.disabled &&
`
cursor: not-allowed;
opacity: 0.4;
`}
`;
const Radio = ({ name, children }) => (
<RadioWrapper>
<Label>
<Input name={name} type="radio" />
<Mark />
{children}
</Label>
</RadioWrapper>
);
export default Radio;

View File

@ -1,102 +0,0 @@
import React, { useState, useContext } from "react";
import { useHistory, withRouter } from "react-router-dom";
import UserContext from "../context/UserContext";
import Axios from "axios";
import { Link } from "react-router-dom";
import ErrorNotice from "./ErrorNotice";
const Register = () => {
const [email, setEmail] = useState();
const [password, setPassword] = useState();
const [phonenumber, setPhonenumber] = useState();
const [username, setUsername] = useState();
const [error, setError] = useState();
const { setUserData } = useContext(UserContext);
const history = useHistory();
const submit = async (e) => {
e.preventDefault();
try {
const newUser = { username,email,phonenumber,password};
await Axios.post("http://localhost:5000/users/register", newUser);
const loginRes = await Axios.post("http://localhost:5000/users/login", {
email,
password,
});
setUserData({
token: loginRes.data.token,
user: loginRes.data.user,
});
localStorage.setItem("auth-token", loginRes.data.token);
history.push("/");
} catch (err) {
return err.response.data.msg && setError(err.response.data.msg);
}
};
return (
<div className="FormCenter">
{error && (
<ErrorNotice message={error} clearError={() => setError(undefined)} />
)}
<form className="FormFields" onSubmit={submit}>
<div className="FormField">
<label className="FormField__Label" htmlFor="name">UserName</label>
<input
type="text"
id="name"
className="FormField__Input"
placeholder="Enter your full name"
onChange= { (e) => setUsername(e.target.value)}
/>
</div>
<div className="FormField">
<label className="FormField__Label" htmlFor="password">Password</label>
<input
type="password"
id="password"
className="FormField__Input"
placeholder="Enter your password"
onChange= { (e) => setPassword(e.target.value)}
/>
</div>
<div className="FormField">
<label className="FormField__Label" htmlFor="email">E-Mail Address</label>
<input
type="email"
id="email"
className="FormField__Input"
placeholder="Enter your email"
onChange= { (e) => setEmail(e.target.value)}
/>
</div>
<div className="FormField">
<label className="FormField__Label" htmlFor="phone">Phone number</label>
<input
type="number"
id="phonenumber"
className="FormField__Input"
placeholder="Enter your Phone no. (+91)"
onChange= { (e) => setPhonenumber(parseInt( e.target.value,10))}
/>
</div>
<div className="FormField">
<label className="FormField__CheckboxLabel">
<input className="FormField__Checkbox" type="checkbox" name="hasAgreed" required="true" /> I agree all statements in <a href="/" className="FormField__TermsLink">terms of service</a>
</label>
</div>
<div className="FormField">
<button className="FormField__Button mr-20" type="submit">Sign Up</button> <Link to="/login" className="FormField__Link">already a member?</Link>
</div>
</form>
</div>
);
}
export default withRouter( Register );

View File

@ -1,70 +0,0 @@
import React from 'react';
import Footer from './Footer';
import '../stepper.css';
import NavBar from './NavBar';
export default function Stepper() {
document.addEventListener('DOMContentLoaded', () => {
var list = document.getElementById('progress'),
next = document.getElementById('next'),
clear = document.getElementById('clear'),
children = list.children,
completed = 0;
// activating a node button
next.addEventListener('click', function() {
// count the number of completed nodes.
completed = (completed === 0) ? 1 : completed + 2;
if (completed > children.length) return;
// for each node that is completed, reflect the status
// and show a green color!
for (var i = 0; i < completed; i++) {
children[i].children[0].classList.remove('grey');
children[i].children[0].classList.add('green');
// if this child is a node and not divider,
// make it shine a little more
if (i % 2 === 0) {
children[i].children[0].classList.add('activated');
}
}
}, false);
// clear the activated state of the markers
clear.addEventListener('click', function() {
for (var i = 0; i < children.length; i++) {
children[i].children[0].classList.remove('green');
children[i].children[0].classList.remove('activated');
children[i].children[0].classList.add('grey');
}
completed = 0;
}, false);
});
return (
<div className="container">
< NavBar />
<h1 className ="relocheading">Relocation Status</h1>
<br />
<br />
<br />
<ul id="progress">
<li className="ele"><div className="node grey"></div><p>Transport tickets confirmed</p></li>
<li className="ele" ><div className="divider grey"></div></li>
<li className="ele" ><div className="node grey"></div><p>Packers & movers due to come in a day</p></li>
<li className="ele"><div className="divider grey"></div></li>
<li className="ele"><div className="node grey"></div><p>school admission being confirmed</p></li>
<li className = "ele"><div className="divider grey"></div></li>
<li className = "ele"><div className="node grey"></div><p>House is empty</p></li>
</ul>
<input type="button" value="Next" id="next" />
<input type="button" value="Clear" id="clear" />
<Footer />
</div>
)
}

View File

@ -1,103 +0,0 @@
import React from 'react';
import Footer from './Footer';
import '../tracking.css';
export default function Tracking() {
document.addEventListener('DOMContentLoaded', () => {
const previousBtn = document.getElementById('previousBtn');
const nextBtn = document.getElementById('nextBtn');
const finishBtn = document.getElementById('finishBtn');
const content = document.getElementById('content');
const nodes = [...document.querySelectorAll('.node')];
const dividers = [...document.querySelectorAll('.divider')];
const MAX_STEPS = 4;
let currentStep = 1;
if (nextBtn) {
nextBtn.addEventListener('click', () => {
nodes[currentStep - 1].classList.add('completed');
currentStep += 1;
previousBtn.disabled = false;
if (currentStep === MAX_STEPS) {
nextBtn.disabled = true;
finishBtn.disabled = false;
}
content.innerText = `Step Number ${currentStep}`;
dividers[currentStep -1 ].classList.add('completed');
});
}
if (previousBtn) {
previousBtn.addEventListener('click', () => {
nodes[currentStep - 2].classList.remove('completed');
currentStep -= 1;
nextBtn.disabled = false;
finishBtn.disabled = true;
if (currentStep === 1) {
previousBtn.disabled = true;
}
content.innerText = `Step Number ${currentStep}`;
});
}
if (finishBtn) {
finishBtn.addEventListener('click', () => {
window.location.reload();
});
}
})
return (
<div class="wrapper">
<ul class="StepProgressBar">
<li class="step">
<p class="step-text">
</p>
<div class="node">
1
</div>
</li>
<li><div class="divider"></div></li>
<li class="step">
<p class="step-text">
</p>
<div class="node">
2
</div>
</li>
<li><div class="divider"></div></li>
<li class="step">
<p class="step-text">
</p>
<div class="node">
3
</div>
</li>
<li><div class="divider"></div></li>
<li class="step">
<p class="step-text">
</p>
<div class="node">
4
</div>
</li>
<li><div class="divider"></div></li>
</ul>
<div class="main">
<p id="content" class="text-center">Step Number 1</p>
<button id="previousBtn" >Previous</button>
<button id="nextBtn">Next</button>
<button id="finishBtn" >Finish</button>
</div>
<Footer />
</div>
)
}

View File

@ -1,3 +0,0 @@
import { createContext } from "react";
export default createContext(null);

View File

@ -1,116 +0,0 @@
@import url('https://fonts.googleapis.com/css?family=Montserrat|Ubuntu');
div {
}
h1, h2, h3, h4, h5, h6 {
}
h1 {
color: white ;
}
p {
color: #8f8f8f;
}
/* Headings */
.big-heading {
font-family: "Montserrat-Black";
font-size: 3.5rem;
line-height: 1.5;
}
.section-heading {
font-size: 3rem;
line-height: 1.5;
}
*/
.container-fluid{
padding: 7% 15%;
}
.comment{
padding-bottom: 5%;
}
.submit{
margin-top: 5%;
}
.loginb {
margin: 5% 3% 5% 0;
}
/* Title Section */
#title {
background-color: #66bfbf;
color: #fff;
text-align: left;
}
#title .container-fluid {
padding: 3% 15% 7%;
}
/* Title Image */
.title-image {
width: 70%;
position: absolute;
right: 5%;
}
/* Features Section */
#features {
position: relative;
}
.icon:hover {
color: #66bfbf;
}
/* Testimonial Section */
#testimonials {
background-color: #66bfbf;
}
.testimonial-text {
font-size: 3rem;
line-height: 1.5;
}
.testimonial-image {
width: 20%;
border-radius: 100%;
margin: 20px;
}
@media (max-width: 1028px) {
#title {
text-align: center;
}
.title-image {
position: static;
transform: rotate(0);
}
}

View File

@ -1,15 +0,0 @@
@import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700');
@import url('https://fonts.googleapis.com/css?family=Montserrat|Ubuntu');
* {
box-sizing: border-box;
font-family: "Roboto", sans-serif;
}
body {
margin: 0;
padding: 0;
}
.mr-20 {
margin-right: 20px !important;
}

View File

@ -1,7 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />,document.getElementById('root'));

View File

@ -1,186 +0,0 @@
@import url('https://fonts.googleapis.com/css?family=Montserrat|Ubuntu');
.Apper {
display: flex;
color: white;
height:100vh;
}
.Apper__Aside {
width: 50%;
background-color: #66bfbf;
display:flex;
flex-direction: column;
justify-content: flex-end;
}
.Apper__Form {
width: 50%;
background-color: #ffffff;
padding: 25px 40px;
overflow: auto;
}
.PageSwitcher {
display: flex;
justify-content: flex-end;
margin-bottom: 10%;
}
.Apper_heading{
position: relative;
text-align: center;
font-family: Ubuntu;
font-size: 5rem;
font-weight: bold;
color: #ffffff;
text-decoration: none;
text-transform: lowercase;
}
.Apper_logo img{
width:100px;
display:flex;
margin-bottom: 50px;
align-content: flex-start;
justify-content: flex-start;
}
.Apper__Aside__text {
text-align: center;
margin-bottom: 25%;
}
.Apper_quote{
color:white;
font-size: 1.25em;
font-style:italic;
}
.Apper__Aside_image{
margin-top: 600px;
width: 100%;
background-size: 100%;
}
.PageSwitcher__Item {
background-color: #4C5D72;
color: white;
padding: 10px 25px;
cursor: pointer;
font-size: .9em;
border: none;
outline: none;
display: inline-block;
text-decoration: none;
}
.PageSwitcher__Item--Active {
background-color: #66bfbf;
color: white;
}
.PageSwitcher__Item:first-child {
border-top-left-radius: 25px;
border-bottom-left-radius: 25px;
}
.PageSwitcher__Item:last-child {
border-top-right-radius: 25px;
border-bottom-right-radius: 25px;
}
.FormCenter {
margin-bottom: 100px;
}
.FormTitle {
color: #000000;
font-weight: 300;
margin-bottom: 50px;
}
.FormTitle__Link {
color: #707C8B;
text-decoration: none;
display: inline-block;
font-size: 1.7em;
margin: 0 10px;
padding-bottom: 5px;
}
.FormTitle__Link:first-child {
margin-left: 0;
}
.FormTitle__Link--Active {
color: #707c8b;
border-bottom: 1px solid #199087;
}
.FormField {
margin-bottom: 40px;
}
.FormField__Label {
display: block;
text-transform: uppercase;
font-size: 1.25em;
color: #4C5D72;
text-align: start;
}
.FormField__Input {
width: 85%;
background-color: transparent;
border: none;
color: #4C5D72;
outline: none;
border-bottom: 1px solid #445366;
font-size: .9em;
font-weight: 300;
padding-bottom: 10px;
margin-top: 10px;
}
.FormField__Input::placeholder {
color: #616E7F;
}
.FormField__Button {
background-color: #52C4B9;
color: white;
border: none;
outline: none;
border-radius: 25px;
padding: 15px 70px;
font-size: .8em;
font-weight: 500;
}
.FormField__Link {
color: #66707D;
text-decoration: none;
display: inline-block;
padding-bottom: 5px;
margin-left: 12px;
}
.FormField__CheckboxLabel {
color: #646F7D;
font-size: .9em;
}
.FormField__Checkbox {
position: relative;
top: 1.5px;
}
.FormField__TermsLink {
color: #646F7D;
border-bottom: 1px solid #199087;
text-decoration: none;
display: inline-block;
padding-bottom: 2px;
margin-left: 5px;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,92 +0,0 @@
* {
box-sizing: border-box;
text-decoration: none;
}
header{
background: #66bfbf;
position: fixed;
top: 0;
left: 0;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
transition: 0.6s;
padding: 10px 15px;
z-index: 100000;
font-family: Ubuntu;
}
header.sticky{
padding: 3px 50px;
background: #66bfbf;
opacity: 0.85;
}
header .logo{
font-family: "Ubuntu";
font-size: 2rem;
font-weight: bold;
position: relative;
color: #fff;
text-decoration: none;
text-transform: lowercase;
padding-left: 100px;
transition: 0.6s;
}
header ul {
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
header ul li {
position: relative;
list-style: none;
}
header ul li a {
position: relative;
}
header ul li a {
position: absolute;
content: '';
left:0;
bottom: 0;
height: 5px;
text-decoration: none;
}
header.sticky ul li a{
color: #fff;
}
.checkbtn
{
color:white;
font-size: 30px;
float:right;
line-height: 80px;
margin-right: 40px;
cursor: pointer;
display: none;
}
#check{
display: none;
}

View File

@ -1,82 +0,0 @@
#stepProgressBar {
display: flex;
justify-content: space-between;
align-items: flex-end;
width: 300px;
margin: 0 auto;
margin-bottom: 40px;
}
.step {
text-align: center;
}
.step-text {
margin-bottom: 10px;
color: #28a745;
}
.bullet {
border: 1px solid #28a745;
height: 20px;
width: 20px;
border-radius: 100%;
color: #28a745;
display: inline-block;
position: relative;
transition: background-color 500ms;
line-height:20px;
}
.bullet.completed {
color: white;
background-color: #28a745;
}
.bullet.completed::after {
content: '';
position: absolute;
right: -60px;
bottom: 10px;
height: 1px;
width: 54px;
background-color: #28a745;
}
/* Base styles and helper stuff */
.hidden {
display: none;
}
button {
padding: 5px 10px;
border: 1px solid black;
transition: 250ms background-color;
}
button:hover {
cursor: pointer;
background-color: black;
color: white;
}
button:disabled:hover {
opacity: 0.6;
cursor: not-allowed;
}
.text-center {
text-align: center;
}
.container {
max-width: 400px;
margin: 0 auto;
margin-top: 20px;
padding: 40px;
}

View File

@ -1,72 +0,0 @@
.pricing-plan-container
{
}
.pricing-plan {
}
.pricing-plan:hover .pricing-plan:active {
}
.pricing-plan__header{
}
.pricing-plan__special-text {
}
.pricing-plan__title,.pricing-plan__summary{
}
.pricing-plan__title{
}
.pricing-plan__summary {
}
.pricing-plan__desc {
}
.pricing-plan__list {
}
.pricing-plan__feature {
}
.pricing-plan__feature:not(:last-child) {
}
.pricing-plan__feature::before {
}
.pricing-plan__actions {
}
.pricing-plan__button {
}
.pricing-plan__button:hover{
}
.pricing-plan__cost{
}
.pricing-plan__text {
}
.pricing-plan-container{
}

View File

@ -1,13 +0,0 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

View File

@ -1,5 +0,0 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';

View File

@ -1,60 +0,0 @@
*, *:after, *:before { margin:0; padding:0; }
body {
font-family: Helvetica, sans-serif;
}
input[type="button"] {
margin-top: 20px;
}
.container{
margin-left:0px;
max-width: 100vw;
}
.relocheading{
font-family: Ubuntu;
text-align: left;
color: #66bfbf !important;
margin-top: 0px;
}
ul{
text-align: left;
}
.node {
height: 12px;
width: 12px;
border-radius: 100%;
display:inline-block;
transition: all 1000ms ease;
}
.activated {
box-shadow: 0px 0px 0px 0px rgba(194, 255, 194, 0.8);
}
.divider {
height: 86px;
width: 2px;
margin-left: 4px;
transition: all 800ms ease;
}
p {
margin-bottom: 0rem;
}
li p {
display:inline-block;
margin-left: 25px;
}
li {
list-style: none;
line-height: 1px;
}
.blue { background-color: rgba(82, 165, 255, 1); }
.green{ background-color: rgba(92, 184, 92, 1) }
.red { background-color: rgba(255, 148, 148, 1); }
.grey { background-color: rgba(201, 201, 201, 1); }

View File

@ -1,53 +0,0 @@
*, *:after, *:before { margin:0; padding:0; }
.wrapper{
max-width: 400px;
margin: 0 auto;
margin-top: 20px;
padding: 40px;
}
.stepProgressBar {
display: flex;
justify-content: space-between;
align-items: flex-start;
width: 300px;
margin: 0 auto;
margin-bottom: 40px;
}
li{
list-style-type: none;
}
.node {
border: 1px solid #28a745;
height: 20px;
width: 20px;
border-radius: 100%;
color: #28a745;
display: inline-block;
position: relative;
transition: background-color 500ms;
line-height:20px;
}
.node.completed {
content: "";
color: white;
background-color: #28a745;
}
.node.completed::after {
content: "";
position: absolute;
height: 1px;
width: 54px;
background-color: #28a745;
}
.divider.completed::after{
list-style-type: none;
background-color: grey;
position: relative;
height: 80px;
width: 2px;
margin-left: 134px;
transition: all 800ms ease;
}