add onboarding
9
public/icons/apart.svg
Normal file
After Width: | Height: | Size: 16 KiB |
9
public/icons/bar.svg
Normal file
After Width: | Height: | Size: 21 KiB |
3
public/icons/bus.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 17.5C3 18.6046 3.89543 19.5 5 19.5V20.7C5 25.1804 5 27.4206 5.87195 29.1319C6.39052 30.1497 7.11795 31.0388 8 31.745V34C8 35.3807 9.11929 36.5 10.5 36.5C11.8807 36.5 13 35.3807 13 34V33.4232C14.2571 33.5 15.8069 33.5 17.8 33.5H22.2C24.1931 33.5 25.7429 33.5 27 33.4232V34C27 35.3807 28.1193 36.5 29.5 36.5C30.8807 36.5 32 35.3807 32 34V31.745C32.8821 31.0388 33.6095 30.1497 34.1281 29.1319C35 27.4206 35 25.1804 35 20.7V19.5C36.1046 19.5 37 18.6046 37 17.5V15.5C37 14.3954 36.1046 13.5 35 13.5L34.9888 13.5C34.9522 10.7998 34.7959 9.1788 34.1281 7.86808C33.3611 6.36278 32.1372 5.13893 30.6319 4.37195C28.9206 3.5 26.6804 3.5 22.2 3.5H17.8C13.3196 3.5 11.0794 3.5 9.36808 4.37195C7.86278 5.13893 6.63894 6.36278 5.87195 7.86808C5.2041 9.1788 5.04777 10.7998 5.01118 13.5L5 13.5C3.89543 13.5 3 14.3954 3 15.5V17.5ZM11 27.5C12.1046 27.5 13 26.6046 13 25.5C13 24.3954 12.1046 23.5 11 23.5C9.89543 23.5 9 24.3954 9 25.5C9 26.6046 9.89543 27.5 11 27.5ZM29 27.5C30.1046 27.5 31 26.6046 31 25.5C31 24.3954 30.1046 23.5 29 23.5C27.8954 23.5 27 24.3954 27 25.5C27 26.6046 27.8954 27.5 29 27.5ZM9.43597 10.684C9 11.5397 9 12.6598 9 14.9V15.3C9 16.4201 9 16.9802 9.21799 17.408C9.40973 17.7843 9.7157 18.0903 10.092 18.282C10.5198 18.5 11.0799 18.5 12.2 18.5H27.8C28.9201 18.5 29.4802 18.5 29.908 18.282C30.2843 18.0903 30.5903 17.7843 30.782 17.408C31 16.9802 31 16.4201 31 15.3V14.9C31 12.6598 31 11.5397 30.564 10.684C30.1805 9.93139 29.5686 9.31947 28.816 8.93597C27.9603 8.5 26.8402 8.5 24.6 8.5H15.4C13.1598 8.5 12.0397 8.5 11.184 8.93597C10.4314 9.31947 9.81947 9.93139 9.43597 10.684Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
4
public/icons/bycicle.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5007 5.83366C17.5007 4.91318 18.2468 4.16699 19.1673 4.16699H21.4631C24.2896 4.16699 26.8089 5.94944 27.7497 8.61486L31.1824 18.3408C35.6232 18.5234 39.1673 22.1813 39.1673 26.667C39.1673 31.2694 35.4364 35.0003 30.834 35.0003C26.8025 35.0003 23.4397 32.1376 22.6674 28.3341H20.8724C20.8473 28.3347 20.8222 28.3347 20.7972 28.3341H10.0007C9.08018 28.3341 8.33398 27.5879 8.33398 26.6674C8.33398 25.7469 9.08018 25.0008 10.0007 25.0008H18.3064L14.735 16.6674H11.6673C10.7468 16.6674 10.0007 15.9212 10.0007 15.0008C10.0007 14.0803 10.7468 13.3341 11.6673 13.3341H15.7956C15.8207 13.3335 15.8458 13.3335 15.8708 13.3341H18.334C19.2545 13.3341 20.0007 14.0803 20.0007 15.0008C20.0007 15.9121 19.2693 16.6525 18.3615 16.6672L21.933 25.0008H22.6673C23.2372 22.1923 25.2195 19.8967 27.8405 18.8875L24.6064 9.72426C24.136 8.39155 22.8764 7.50033 21.4631 7.50033H19.1673C18.2468 7.50033 17.5007 6.75413 17.5007 5.83366ZM30.834 31.667C33.5954 31.667 35.834 29.4284 35.834 26.667C35.834 23.9056 33.5954 21.667 30.834 21.667C28.0726 21.667 25.834 23.9056 25.834 26.667C25.834 29.4284 28.0726 31.667 30.834 31.667Z" fill="black"/>
|
||||||
|
<path d="M13.2289 29.5837C12.3213 30.8454 10.8403 31.667 9.16732 31.667C6.40589 31.667 4.16732 29.4284 4.16732 26.667C4.16732 23.9056 6.40589 21.667 9.16732 21.667C10.8403 21.667 12.3213 22.4886 13.2289 23.7503H16.976C15.7937 20.5864 12.7436 18.3337 9.16732 18.3337C4.56494 18.3337 0.833984 22.0646 0.833984 26.667C0.833984 31.2694 4.56494 35.0003 9.16732 35.0003C12.7436 35.0003 15.7937 32.7476 16.976 29.5837H13.2289Z" fill="black"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
9
public/icons/cafe.svg
Normal file
After Width: | Height: | Size: 25 KiB |
3
public/icons/car.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.59471 11.1443C7.26834 8.15039 7.60515 6.65344 8.70081 5.77692C9.79646 4.90039 11.3308 4.90039 14.3996 4.90039H25.5996C28.6683 4.90039 30.2027 4.90039 31.2984 5.77692C32.394 6.65344 32.7308 8.15039 33.4045 11.1443L34.4746 15.9004H35.6996C36.0862 15.9004 36.3996 16.2138 36.3996 16.6004V19.2004C36.3996 19.587 36.0862 19.9004 35.6996 19.9004H34.9996V23.5671C34.9996 27.3383 34.9996 29.2239 33.828 30.3955C33.292 30.9314 32.6066 31.2222 31.6596 31.38V33.1003C31.6596 34.2049 30.7642 35.1003 29.6596 35.1003H28.6596C27.555 35.1003 26.6596 34.2049 26.6596 33.1003V31.567H13.3396V33.1003C13.3396 34.2049 12.4442 35.1003 11.3396 35.1003H10.3396C9.23508 35.1003 8.33965 34.2049 8.33965 33.1003V31.38C7.39258 31.2222 6.70715 30.9315 6.17116 30.3955C4.99959 29.2239 4.99959 27.3383 4.99959 23.567V20.0005H4.29961C3.91301 20.0005 3.59961 19.6871 3.59961 19.3005V16.7005C3.59961 16.3139 3.91301 16.0005 4.29961 16.0005H5.50207L6.59471 11.1443ZM10.2637 12.2726C10.6242 11.1596 10.8044 10.6031 11.2395 10.2349C11.6746 9.86669 12.2348 9.7837 13.3552 9.61772C15.2603 9.33551 17.9528 9.0005 19.9996 9.0005C22.0464 9.0005 24.7389 9.33551 26.644 9.61773C27.7644 9.7837 28.3246 9.86669 28.7597 10.2349C29.1948 10.6031 29.375 11.1596 29.7355 12.2726L30.6443 15.0783L30.6443 15.0783L30.6443 15.0784C31.1007 16.4874 31.3289 17.192 30.9732 17.6161C30.6176 18.0402 29.8745 17.9369 28.3883 17.7304C25.9345 17.3894 22.5723 17.0005 19.9996 17.0005C17.4269 17.0005 14.0647 17.3894 11.6109 17.7304C10.1248 17.9369 9.38168 18.0402 9.02602 17.6161C8.67036 17.192 8.89856 16.4874 9.35495 15.0783L10.2637 12.2726ZM12.3396 23.567C12.3396 24.6716 11.4441 25.567 10.3396 25.567C9.23499 25.567 8.33956 24.6716 8.33956 23.567C8.33956 22.4625 9.23499 21.567 10.3396 21.567C11.4441 21.567 12.3396 22.4625 12.3396 23.567ZM31.6595 23.567C31.6595 24.6716 30.7641 25.567 29.6595 25.567C28.555 25.567 27.6595 24.6716 27.6595 23.567C27.6595 22.4625 28.555 21.567 29.6595 21.567C30.7641 21.567 31.6595 22.4625 31.6595 23.567Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/icons/exhibition.png
Normal file
After Width: | Height: | Size: 15 KiB |
9
public/icons/hostel.svg
Normal file
After Width: | Height: | Size: 21 KiB |
9
public/icons/hotel.svg
Normal file
After Width: | Height: | Size: 24 KiB |
19
public/icons/liked.svg
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g filter="url(#filter0_b_866_68773)">
|
||||||
|
<g clip-path="url(#clip0_866_68773)">
|
||||||
|
<rect width="40" height="40" rx="8" fill="#1D1D1D" fill-opacity="0.15"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.87 20.5366C31.0775 18.279 31.0775 14.6716 28.87 12.4139C26.5913 10.0834 22.8415 10.0834 20.5627 12.4139L19.9992 12.9903L19.4356 12.4139C17.1568 10.0834 13.407 10.0834 11.1283 12.4139C8.92079 14.6716 8.92079 18.279 11.1283 20.5366L18.7393 28.3206C19.4304 29.0275 20.5679 29.0275 21.2591 28.3206L28.87 20.5366Z" fill="#E23108"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<filter id="filter0_b_866_68773" x="-8" y="-8" width="56" height="56" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feGaussianBlur in="BackgroundImageFix" stdDeviation="4"/>
|
||||||
|
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_866_68773"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_866_68773" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<clipPath id="clip0_866_68773">
|
||||||
|
<rect width="40" height="40" rx="8" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/icons/monument.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
public/icons/museum.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
public/icons/not_found.jpeg
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
public/icons/park.png
Normal file
After Width: | Height: | Size: 13 KiB |
10
public/icons/plane.svg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_864_64383)">
|
||||||
|
<path d="M5.4248 11.6705L17.5054 18.2599L12.0248 23.6332C11.9314 23.6054 11.7968 23.5677 11.6283 23.5267C11.2906 23.4445 10.8153 23.3488 10.2634 23.2945C9.16534 23.1864 7.73434 23.2391 6.48256 23.9192C6.0865 24.1344 5.74339 24.389 5.48437 24.6052C5.06075 24.9588 5.21204 25.5769 5.65955 25.7913C6.83441 26.3543 9.31199 27.6335 10.6743 28.9861C12.0163 30.3185 13.2951 32.7341 13.8793 33.9255C14.1102 34.3964 14.7647 34.5141 15.107 34.0658C15.2717 33.8501 15.4636 33.5833 15.66 33.2773C16.4893 31.9857 16.5526 30.4843 16.4201 29.3292C16.3534 28.7488 16.2365 28.2477 16.1361 27.8914C16.086 27.7133 16.0399 27.5709 16.006 27.4722L21.3965 22.1487L27.9886 34.2343C28.2284 34.6739 28.8233 34.7595 29.1774 34.4055L30.253 33.3298C30.8168 32.766 31.0401 31.946 30.84 31.1742L27.0382 16.51L33.4189 10.1293C34.4947 9.05346 34.4947 7.31597 33.4189 6.24017C32.3431 5.16438 30.6056 5.16438 29.5298 6.24017L23.1491 12.6209L8.48492 8.81904C7.71312 8.61895 6.89306 8.84226 6.32927 9.40605L5.25361 10.4817C4.89956 10.8358 4.98524 11.4307 5.4248 11.6705Z" fill="#1D1D1D" stroke="#1D1D1D" stroke-width="0.5"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_864_64383">
|
||||||
|
<rect width="40" height="40" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
9
public/icons/rest.svg
Normal file
After Width: | Height: | Size: 33 KiB |
4
public/icons/scooter.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M16.666 6.50065C16.666 5.58018 17.4122 4.83398 18.3327 4.83398H20.5797C23.4379 4.83398 25.9781 6.65598 26.8945 9.36333L31.0587 21.6667H31.666C35.3479 21.6667 38.3327 24.6514 38.3327 28.3333C38.3327 32.0152 35.3479 35 31.666 35H31.2115C28.1954 35 25.6814 32.8506 25.1175 30H8.33268C7.41221 30 6.66602 29.2538 6.66602 28.3333C6.66602 27.4129 7.41221 26.6667 8.33268 26.6667H26.2115C27.383 26.6667 28.3327 27.6164 28.3327 28.7879C28.3327 30.3778 29.6216 31.6667 31.2115 31.6667H31.666C33.507 31.6667 34.9993 30.1743 34.9993 28.3333C34.9993 26.6746 33.7878 25.2989 32.2014 25.0428L33.0781 27.633C33.3732 28.5049 32.9056 29.4509 32.0337 29.746C31.1618 30.0411 30.2158 29.5735 29.9207 28.7016L23.7371 10.432C23.2789 9.07831 22.0088 8.16732 20.5797 8.16732H18.3327C17.4122 8.16732 16.666 7.42113 16.666 6.50065Z" fill="black"/>
|
||||||
|
<path d="M14.3292 25.4167C13.2472 23.1965 10.9686 21.6667 8.33268 21.6667C4.65078 21.6667 1.66602 24.6514 1.66602 28.3333C1.66602 32.0152 4.65078 35 8.33268 35C10.9686 35 13.2472 33.4702 14.3292 31.25H11.242C10.7331 31.25 10.2322 31.3562 9.73102 31.4625C9.39616 31.5335 9.06114 31.6046 8.72345 31.644C8.59528 31.659 8.46488 31.6667 8.33268 31.6667C6.49173 31.6667 4.99935 30.1743 4.99935 28.3333C4.99935 26.4924 6.49173 25 8.33268 25C8.46488 25 8.59528 25.0077 8.72345 25.0227C9.06114 25.0621 9.39615 25.1331 9.731 25.2042C10.2322 25.3104 10.7331 25.4167 11.242 25.4167H14.3292Z" fill="black"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
4
public/icons/stars/1.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="36" height="28" viewBox="0 0 36 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M7.368 5V23H4.128V10.352H0.6V8.312C3.192 8.312 4.464 7.4 4.464 5H7.368Z" fill="#1D1D1D"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.6734 3.66974C24.5474 3.41283 24.2862 3.25 24 3.25C23.7139 3.25 23.4527 3.41283 23.3267 3.66974L20.5004 9.43218L14.8908 10.258C14.6101 10.2993 14.3767 10.4955 14.2878 10.765C14.1989 11.0345 14.2697 11.331 14.4707 11.5313L18.6768 15.7218L17.2686 21.9241C17.2041 22.2085 17.3102 22.5044 17.5406 22.683C17.7711 22.8616 18.0842 22.8904 18.3434 22.7569L24 19.8436L29.6566 22.7569C29.9158 22.8904 30.2289 22.8616 30.4594 22.683C30.6899 22.5044 30.796 22.2085 30.7314 21.9241L29.3233 15.7218L33.5294 11.5313C33.7304 11.331 33.8012 11.0345 33.7123 10.765C33.6234 10.4955 33.39 10.2993 33.1093 10.258L27.4996 9.43218L24.6734 3.66974Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 897 B |
4
public/icons/stars/2.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="42" height="28" viewBox="0 0 42 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.232 19.88V23H1.68V20.12C7.296 15.224 10.344 13.184 10.344 10.52C10.344 8.72 9.288 7.736 7.752 7.736C5.904 7.736 4.992 9.152 4.968 11.72H1.512C1.536 9.608 2.136 7.928 3.312 6.656C4.488 5.384 6.048 4.76 7.944 4.76C11.376 4.76 13.896 6.992 13.896 9.968C13.896 12.608 13.056 14.408 6.24 19.88H14.232Z" fill="#1D1D1D"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.6734 3.66974C30.5474 3.41283 30.2862 3.25 30 3.25C29.7139 3.25 29.4527 3.41283 29.3267 3.66974L26.5004 9.43218L20.8908 10.258C20.6101 10.2993 20.3767 10.4955 20.2878 10.765C20.1989 11.0345 20.2697 11.331 20.4707 11.5313L24.6768 15.7218L23.2686 21.9241C23.2041 22.2085 23.3102 22.5044 23.5406 22.683C23.7711 22.8616 24.0842 22.8904 24.3434 22.7569L30 19.8436L35.6566 22.7569C35.9158 22.8904 36.2289 22.8616 36.4594 22.683C36.6899 22.5044 36.796 22.2085 36.7314 21.9241L35.3233 15.7218L39.5294 11.5313C39.7304 11.331 39.8012 11.0345 39.7123 10.765C39.6234 10.4955 39.39 10.2993 39.1093 10.258L33.4996 9.43218L30.6734 3.66974Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
4
public/icons/stars/3.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="42" height="28" viewBox="0 0 42 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M1.344 17.072V16.904H4.752V17.072C4.752 19.208 6.192 20.408 8.04 20.408C9.96 20.408 10.992 19.184 10.992 17.624C10.992 15.992 9.792 14.888 7.392 14.888H5.592V12.848H7.224C10.032 12.848 10.44 11.264 10.44 10.112C10.44 8.744 9.384 7.568 7.728 7.568C6.288 7.568 5.016 8.672 5.016 10.376V10.592H1.608V10.496C1.608 7.112 4.248 4.76 7.896 4.76C11.424 4.76 13.992 6.728 13.992 9.416C13.992 11.144 13.08 12.656 11.28 13.64C13.488 14.528 14.544 16.184 14.544 17.984C14.544 21.008 11.928 23.24 8.04 23.24C4.224 23.24 1.344 21.104 1.344 17.072Z" fill="#1D1D1D"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.6734 3.66974C30.5474 3.41283 30.2862 3.25 30 3.25C29.7139 3.25 29.4527 3.41283 29.3267 3.66974L26.5004 9.43218L20.8908 10.258C20.6101 10.2993 20.3767 10.4955 20.2878 10.765C20.1989 11.0345 20.2697 11.331 20.4707 11.5313L24.6768 15.7218L23.2686 21.9241C23.2041 22.2085 23.3102 22.5044 23.5406 22.683C23.7711 22.8616 24.0842 22.8904 24.3434 22.7569L30 19.8436L35.6566 22.7569C35.9158 22.8904 36.2289 22.8616 36.4594 22.683C36.6899 22.5044 36.796 22.2085 36.7314 21.9241L35.3233 15.7218L39.5294 11.5313C39.7304 11.331 39.8012 11.0345 39.7123 10.765C39.6234 10.4955 39.39 10.2993 39.1093 10.258L33.4996 9.43218L30.6734 3.66974Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
4
public/icons/stars/4.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="44" height="28" viewBox="0 0 44 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M15.668 16.16V19.016H12.26V23H9.02V19.016H1.34V16.16L9.02 5H12.26V16.16H15.668ZM4.052 16.16H9.02V8.984L4.052 16.16Z" fill="#1D1D1D"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.1734 3.66974C32.0474 3.41283 31.7862 3.25 31.5 3.25C31.2139 3.25 30.9527 3.41283 30.8267 3.66974L28.0004 9.43218L22.3908 10.258C22.1101 10.2993 21.8767 10.4955 21.7878 10.765C21.6989 11.0345 21.7697 11.331 21.9707 11.5313L26.1768 15.7218L24.7686 21.9241C24.7041 22.2085 24.8102 22.5044 25.0406 22.683C25.2711 22.8616 25.5842 22.8904 25.8434 22.7569L31.5 19.8436L37.1566 22.7569C37.4158 22.8904 37.7289 22.8616 37.9594 22.683C38.1899 22.5044 38.296 22.2085 38.2314 21.9241L36.8233 15.7218L41.0294 11.5313C41.2304 11.331 41.3012 11.0345 41.2123 10.765C41.1234 10.4955 40.89 10.2993 40.6093 10.258L34.9996 9.43218L32.1734 3.66974Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 945 B |
4
public/icons/stars/5.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="42" height="28" viewBox="0 0 42 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M1.104 19.04L4.152 17.552C4.896 19.184 6.192 20.24 7.752 20.24C9.648 20.24 10.8 18.992 10.8 17.072C10.8 15.152 9.552 13.88 7.704 13.88C6.552 13.88 5.376 14.432 4.68 15.368L2.016 14.24L3.552 5H13.752L13.248 8.12H5.952L5.28 11.984C6.216 11.432 7.248 11.24 8.304 11.24C11.664 11.24 14.304 13.4 14.304 16.976C14.304 20.576 11.688 23.24 7.824 23.24C4.344 23.24 2.088 21.44 1.104 19.04Z" fill="#1D1D1D"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.6734 3.66974C30.5474 3.41283 30.2862 3.25 30 3.25C29.7139 3.25 29.4527 3.41283 29.3267 3.66974L26.5004 9.43218L20.8908 10.258C20.6101 10.2993 20.3767 10.4955 20.2878 10.765C20.1989 11.0345 20.2697 11.331 20.4707 11.5313L24.6768 15.7218L23.2686 21.9241C23.2041 22.2085 23.3102 22.5044 23.5406 22.683C23.7711 22.8616 24.0842 22.8904 24.3434 22.7569L30 19.8436L35.6566 22.7569C35.9158 22.8904 36.2289 22.8616 36.4594 22.683C36.6899 22.5044 36.796 22.2085 36.7314 21.9241L35.3233 15.7218L39.5294 11.5313C39.7304 11.331 39.8012 11.0345 39.7123 10.765C39.6234 10.4955 39.39 10.2993 39.1093 10.258L33.4996 9.43218L30.6734 3.66974Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
3
public/icons/train.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.02734 17.8529C7.02734 11.9182 7.02734 8.9509 8.78364 7.03834C8.91162 6.89898 9.04547 6.76513 9.18483 6.63716C11.0974 4.88086 14.0647 4.88086 19.9994 4.88086C25.934 4.88086 28.9014 4.88086 30.8139 6.63716C30.9533 6.76513 31.0871 6.89898 31.2151 7.03834C32.9714 8.9509 32.9714 11.9182 32.9714 17.8529V22.5664C32.9714 28.5011 32.9714 31.4684 31.2151 33.381C31.0871 33.5203 30.9533 33.6542 30.8139 33.7822C29.7305 34.7771 27.0741 35.2182 24.8983 35.4057L26.7686 37.5929C27.2921 38.205 27.2202 39.1256 26.6081 39.649C25.996 40.1725 25.0754 40.1006 24.5519 39.4885L21.1737 35.5379C20.7956 35.5385 20.4044 35.5385 19.9994 35.5385C19.4222 35.5385 19.1442 35.5423 18.9369 35.5452C18.6484 35.5492 18.4969 35.5513 17.8664 35.5385L16.8252 36.7468L14.5186 39.482C13.9994 40.0977 13.0794 40.176 12.4637 39.6567L12.444 39.6399C12.3403 39.577 12.2595 39.4821 12.1997 39.3653C11.8385 38.8378 11.8567 38.1143 12.2889 37.6017L14.1402 35.4065C12.1236 35.2105 10.2371 34.7484 9.18483 33.7822C9.04547 33.6542 8.91162 33.5203 8.78364 33.381C7.02734 31.4684 7.02734 28.5011 7.02734 22.5664V17.8529ZM10.0547 17.0519C10.0547 16.2775 10.0547 15.8902 10.1187 15.5682C10.3818 14.2459 11.4154 13.2123 12.7377 12.9493C13.0597 12.8852 13.4469 12.8852 14.2214 12.8852H18.8047V21.2185H14.2214C13.4469 21.2185 13.0597 21.2185 12.7377 21.1545C11.4154 20.8915 10.3818 19.8578 10.1187 18.5355C10.0547 18.2135 10.0547 17.8263 10.0547 17.0519ZM21.3047 21.2185H25.888C26.6624 21.2185 27.0497 21.2185 27.3717 21.1545C28.694 20.8915 29.7276 19.8578 29.9906 18.5355C30.0547 18.2135 30.0547 17.8263 30.0547 17.0519C30.0547 16.2775 30.0547 15.8902 29.9906 15.5682C29.7276 14.2459 28.694 13.2123 27.3717 12.9493C27.0497 12.8852 26.6624 12.8852 25.888 12.8852H21.3047V21.2185ZM13.388 26.2185C13.388 27.139 12.6418 27.8852 11.7214 27.8852C10.8009 27.8852 10.0547 27.139 10.0547 26.2185C10.0547 25.2981 10.8009 24.5519 11.7214 24.5519C12.6418 24.5519 13.388 25.2981 13.388 26.2185ZM28.388 27.8852C29.3085 27.8852 30.0547 27.139 30.0547 26.2185C30.0547 25.2981 29.3085 24.5519 28.388 24.5519C27.4675 24.5519 26.7214 25.2981 26.7214 26.2185C26.7214 27.139 27.4675 27.8852 28.388 27.8852Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/icons/unesco.png
Normal file
After Width: | Height: | Size: 12 KiB |
19
public/icons/unliked.svg
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g filter="url(#filter0_b_866_69264)">
|
||||||
|
<g clip-path="url(#clip0_866_69264)">
|
||||||
|
<rect width="40" height="40" rx="8" fill="#1D1D1D" fill-opacity="0.15"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9932 13.1358C17.9938 10.7984 14.6597 10.1696 12.1547 12.31C9.64964 14.4504 9.29697 18.029 11.2642 20.5604C12.8998 22.6651 17.8498 27.1041 19.4721 28.5408C19.6536 28.7016 19.7444 28.7819 19.8502 28.8135C19.9426 28.8411 20.0437 28.8411 20.1361 28.8135C20.2419 28.7819 20.3327 28.7016 20.5142 28.5408C22.1365 27.1041 27.0865 22.6651 28.7221 20.5604C30.6893 18.029 30.3797 14.4279 27.8316 12.31C25.2835 10.1922 21.9925 10.7984 19.9932 13.1358Z" fill="#1D1D1D" fill-opacity="0.15" stroke="white" stroke-opacity="0.8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<filter id="filter0_b_866_69264" x="-8" y="-8" width="56" height="56" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feGaussianBlur in="BackgroundImageFix" stdDeviation="4"/>
|
||||||
|
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_866_69264"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_866_69264" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<clipPath id="clip0_866_69264">
|
||||||
|
<rect width="40" height="40" rx="8" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
3
public/icons/walk.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M22.5 8.33366C24.3333 8.33366 25.8333 6.83366 25.8333 5.00033C25.8333 3.16699 24.3333 1.66699 22.5 1.66699C20.6667 1.66699 19.1667 3.16699 19.1667 5.00033C19.1667 6.83366 20.6667 8.33366 22.5 8.33366ZM16.3333 14.0003L12.0667 35.517C11.85 36.5337 12.65 37.5003 13.7 37.5003H13.8333C14.6167 37.5003 15.2833 36.967 15.4667 36.2003L18.1667 24.167L21.6667 27.5003V35.8337C21.6667 36.7503 22.4167 37.5003 23.3333 37.5003C24.25 37.5003 25 36.7503 25 35.8337V26.4337C25 25.517 24.6333 24.6503 23.9667 24.017L21.5 21.667L22.5 16.667C24.2833 18.7337 26.8667 20.217 29.7667 20.6837C30.7667 20.8337 31.6667 20.0337 31.6667 19.017C31.6667 18.2003 31.0667 17.517 30.25 17.3837C27.7167 16.967 25.6167 15.467 24.5 13.5003L22.8333 10.8337C21.9 9.35033 20.0333 8.75033 18.4167 9.43366L12.0333 12.1337C10.8 12.667 10 13.867 10 15.217V19.167C10 20.0837 10.75 20.8337 11.6667 20.8337C12.5833 20.8337 13.3333 20.0837 13.3333 19.167V15.167L16.3333 14.0003Z" fill="#1D1D1D"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -4,4 +4,6 @@ export const backend = axios.create({
|
||||||
baseURL: 'https://dev2.akarpov.ru/api/',
|
baseURL: 'https://dev2.akarpov.ru/api/',
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
headers: {'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg3Mjk0NTExLCJpYXQiOjE2ODQ3MDI1MTEsImp0aSI6ImUwNGNjZGViMzA0NzQxYTlhYzJhODRhNzc1YWFkZTIxIiwidXNlcl9pZCI6N30.M-F08v6Wit5Bbm668m84JThyDX5yZhzsh3_GFh3nzXM'}
|
headers: {'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjg3Mjk0NTExLCJpYXQiOjE2ODQ3MDI1MTEsImp0aSI6ImUwNGNjZGViMzA0NzQxYTlhYzJhODRhNzc1YWFkZTIxIiwidXNlcl9pZCI6N30.M-F08v6Wit5Bbm668m84JThyDX5yZhzsh3_GFh3nzXM'}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
39
src/elements/AttractionCard/index.tsx
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { backend } from "../../consts";
|
||||||
|
import { Button } from "../Button";
|
||||||
|
import './style.css'
|
||||||
|
|
||||||
|
export interface AttractionCardIE{
|
||||||
|
city:string,
|
||||||
|
description: string,
|
||||||
|
oid: string,
|
||||||
|
title:string,
|
||||||
|
type:string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const AttractionCard:React.FC<AttractionCardIE> = (props) =>{
|
||||||
|
const [liked, setLiked] = useState(false)
|
||||||
|
|
||||||
|
const onLiked = ()=>{
|
||||||
|
backend.get('/onboarding/' + props.oid + '/add_to_favorites/')
|
||||||
|
setLiked(!liked)
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div className="hotelCard" >
|
||||||
|
<div className="hotelCardTools">
|
||||||
|
<div></div>
|
||||||
|
<img className="likeHotelBtn" onClick={()=>onLiked()} src={liked? 'icons/liked.svg':'icons/unliked.svg'}></img>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img className="hotelImg" src='icons/not_found.jpeg'></img>
|
||||||
|
<h5>{props.title}</h5>
|
||||||
|
<div className="hotelCardRow">
|
||||||
|
<div>{props.description}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
93
src/elements/AttractionCard/style.css
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
.hotelCard{
|
||||||
|
width: 250px;
|
||||||
|
padding: 0px 15px 15px 15px;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-radius: 20px;
|
||||||
|
height: 350px;
|
||||||
|
|
||||||
|
}
|
||||||
|
h3{
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.likeHotelBtn{
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.likeHotelBtn:hover{
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ratingTile{
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: #007470;
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 18px;
|
||||||
|
color:white;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelCardTools{
|
||||||
|
position: relative;
|
||||||
|
top:15px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 250px;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelCardRow{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap:15px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelBtn{
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openHotelCardBG{
|
||||||
|
position: fixed;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgba(0,0,0, 0.2);
|
||||||
|
left: 0px;
|
||||||
|
top:0px;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
z-index: 10000;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.openHotelCard{
|
||||||
|
width: 75%;
|
||||||
|
height: 75vh;
|
||||||
|
overflow-y: scroll;
|
||||||
|
padding: 50px;
|
||||||
|
background-color: white;
|
||||||
|
z-index: 10000;
|
||||||
|
border-radius: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.hotelImg{
|
||||||
|
margin-top: -65px;
|
||||||
|
margin-left: -15px;
|
||||||
|
width: 280px;
|
||||||
|
height: 240px;
|
||||||
|
}
|
73
src/elements/ChoiceIcon/index.tsx
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import './style.css'
|
||||||
|
export interface ChoiceIconIE{
|
||||||
|
onChange: (key:string[]) => void
|
||||||
|
options:{
|
||||||
|
icon:string,
|
||||||
|
name: string,
|
||||||
|
key:string
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ChoiceIcon:React.FC<ChoiceIconIE> = (props) => {
|
||||||
|
let startActives = new Array<boolean>()
|
||||||
|
|
||||||
|
for (let i=0; i < props.options.length; i++){
|
||||||
|
startActives.push(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
const [state, setState] = useState({
|
||||||
|
actives: startActives,
|
||||||
|
keys: new Array<string>()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const onChange = (key:string, index:number) =>{
|
||||||
|
let localActives = state.actives
|
||||||
|
localActives[index] = !localActives[index]
|
||||||
|
|
||||||
|
if (localActives[index]){
|
||||||
|
props.onChange([...state.keys, key])
|
||||||
|
setState(
|
||||||
|
{
|
||||||
|
keys: [...state.keys, key],
|
||||||
|
actives: localActives
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
} else{
|
||||||
|
let localKeys = state.keys
|
||||||
|
if (localKeys.indexOf(key) != -1){
|
||||||
|
localKeys.splice(localKeys.indexOf(key), 1)
|
||||||
|
if (localKeys.length > 0){
|
||||||
|
props.onChange(localKeys)
|
||||||
|
}
|
||||||
|
setState(
|
||||||
|
{
|
||||||
|
keys: localKeys,
|
||||||
|
actives: localActives
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let icons = new Array<JSX.Element>()
|
||||||
|
|
||||||
|
props.options.forEach((item, index)=>{
|
||||||
|
icons.push(
|
||||||
|
<div key={index.toString()+item.name} className="choiceBtnWrapper" onClick={()=>onChange(item.key, index)}>
|
||||||
|
<img className={state.actives[index]? 'choiceBtnActive':"choiceBtn"} src={item.icon}></img>
|
||||||
|
{item.name}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
return(
|
||||||
|
<div className="choiceIconWrapper">
|
||||||
|
{
|
||||||
|
icons
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
44
src/elements/ChoiceIcon/style.css
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
.choiceIconWrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap:30px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choiceBtn{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 30px;
|
||||||
|
border: 2px solid #FAEFDB;
|
||||||
|
background: #FAEFDB;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choiceBtn:hover{
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.choiceBtnActive{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 30px;
|
||||||
|
background: #FAEFDB;
|
||||||
|
border: 2px solid #FFCF08;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: 0.3s;
|
||||||
|
}
|
||||||
|
.choiceBtnWrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap:10px
|
||||||
|
}
|
|
@ -11,8 +11,8 @@
|
||||||
transform: translateY(-60px) translateX(10px);
|
transform: translateY(-60px) translateX(10px);
|
||||||
}
|
}
|
||||||
.likeButton:hover{
|
.likeButton:hover{
|
||||||
transform: scale(1.1);
|
opacity: 0.5
|
||||||
}
|
;}
|
||||||
.titleFavoriteCard{
|
.titleFavoriteCard{
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
|
|
91
src/elements/HotelCard/index.tsx
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { Button } from "../Button";
|
||||||
|
import './style.css'
|
||||||
|
|
||||||
|
export interface HotelCardIE{
|
||||||
|
address:string,
|
||||||
|
can_buy:boolean,
|
||||||
|
city:string,
|
||||||
|
description:string,
|
||||||
|
email:string,
|
||||||
|
lat:number,
|
||||||
|
lon:number,
|
||||||
|
phones: {
|
||||||
|
id:number,
|
||||||
|
name:string,
|
||||||
|
number: string
|
||||||
|
}[],
|
||||||
|
place?:any,
|
||||||
|
polymorphic_ctype:number,
|
||||||
|
priority: boolean,
|
||||||
|
region: string,
|
||||||
|
rooms:{
|
||||||
|
amenities:string[],
|
||||||
|
description:string,
|
||||||
|
images: {
|
||||||
|
source:{
|
||||||
|
id:string
|
||||||
|
}
|
||||||
|
}[],
|
||||||
|
integration_id:string,
|
||||||
|
name:string,
|
||||||
|
rate_plans:{
|
||||||
|
description:string,
|
||||||
|
integration_id:string,
|
||||||
|
name:string
|
||||||
|
}[]
|
||||||
|
}[],
|
||||||
|
sort:number,
|
||||||
|
source: any,
|
||||||
|
stars:number,
|
||||||
|
title: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const HotelCard:React.FC<HotelCardIE> = (props) =>{
|
||||||
|
const [liked, setLiked] = useState(false)
|
||||||
|
const [opened, setOpened] = useState(false)
|
||||||
|
console.log(props)
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
{
|
||||||
|
opened? <div className="openHotelCardBG">
|
||||||
|
<div className="openHotelCard">
|
||||||
|
<h1>{props.title}</h1>
|
||||||
|
<div>
|
||||||
|
<h4>{props.address}</h4>
|
||||||
|
<div>
|
||||||
|
{props.phones.map((phone)=><div>{phone.name} {phone.number}</div>)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{props.rooms.map((room)=><div>
|
||||||
|
<h5>{room.name}</h5>
|
||||||
|
<div>{room.description}</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<Button className="" onClick={()=>setOpened(!opened)}>Закрыть</Button>
|
||||||
|
</div>
|
||||||
|
</div>:null
|
||||||
|
}
|
||||||
|
<div className="hotelCard">
|
||||||
|
<div className="hotelCardTools">
|
||||||
|
<div className="ratingTile">{props.stars}*</div>
|
||||||
|
<img className="likeHotelBtn" onClick={()=>setLiked(!liked)} src={liked? 'icons/liked.svg':'icons/unliked.svg'}></img>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img className="hotelImg" src='icons/not_found.jpeg'></img>
|
||||||
|
<h3>{props.title}</h3>
|
||||||
|
<div className="hotelCardRow">
|
||||||
|
<div>{props.address}</div>
|
||||||
|
{
|
||||||
|
props.rooms == null? null:<div>{props.rooms.length} видов номеров</div>
|
||||||
|
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<Button className="hotelBtn" onClick={()=>setOpened(!opened)}>Посмотреть</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
93
src/elements/HotelCard/style.css
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
.hotelCard{
|
||||||
|
width: 250px;
|
||||||
|
padding: 0px 15px 15px 15px;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-radius: 20px;
|
||||||
|
height: 380px;
|
||||||
|
|
||||||
|
}
|
||||||
|
h3{
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.likeHotelBtn{
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.likeHotelBtn:hover{
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ratingTile{
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: #007470;
|
||||||
|
border-radius: 8px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 18px;
|
||||||
|
color:white;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelCardTools{
|
||||||
|
position: relative;
|
||||||
|
top:15px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 250px;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelCardRow{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap:15px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelBtn{
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.openHotelCardBG{
|
||||||
|
position: fixed;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgba(0,0,0, 0.2);
|
||||||
|
left: 0px;
|
||||||
|
top:0px;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
z-index: 10000;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.openHotelCard{
|
||||||
|
width: 75%;
|
||||||
|
height: 75vh;
|
||||||
|
overflow-y: scroll;
|
||||||
|
padding: 50px;
|
||||||
|
background-color: white;
|
||||||
|
z-index: 10000;
|
||||||
|
border-radius: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.hotelImg{
|
||||||
|
margin-top: -65px;
|
||||||
|
margin-left: -15px;
|
||||||
|
width: 280px;
|
||||||
|
height: 240px;
|
||||||
|
}
|
327
src/elements/Prefernces/index.tsx
Normal file
|
@ -0,0 +1,327 @@
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import { Carousel, Tabs } from 'antd';
|
||||||
|
import type { TabsProps } from 'antd';
|
||||||
|
import { Button } from "../Button";
|
||||||
|
import './style.css'
|
||||||
|
import { ChoiceIcon, ChoiceIconIE } from "../ChoiceIcon";
|
||||||
|
import { syncBuiltinESMExports } from "module";
|
||||||
|
import axios from "axios";
|
||||||
|
import { backend } from "../../consts";
|
||||||
|
import { HotelCard, HotelCardIE } from "../HotelCard";
|
||||||
|
import { AttractionCard, AttractionCardIE } from "../AttractionCard";
|
||||||
|
export const Prefernces = () =>{
|
||||||
|
const [activeTab, setActiveTab] = useState(1)
|
||||||
|
const [cities, setCities] = useState([])
|
||||||
|
const [regions, setRegions] = useState([])
|
||||||
|
const [hotels, setHotels] = useState([])
|
||||||
|
const [events, setEvents] = useState([])
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
if (cities.length == 0){
|
||||||
|
backend.get('/data/cities').then((response)=>setCities(response.data))
|
||||||
|
backend.get('/data/regions').then((response)=>setRegions(response.data))
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const transportOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: 'Автобус',
|
||||||
|
icon: 'icons/bus.svg',
|
||||||
|
key: 'bus'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Машина',
|
||||||
|
icon: 'icons/car.svg',
|
||||||
|
key: 'car'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Самолет',
|
||||||
|
icon: 'icons/plane.svg',
|
||||||
|
key: 'plane'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Поезд',
|
||||||
|
icon: 'icons/train.svg',
|
||||||
|
key: 'train'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
onChange: (e)=>console.log(e)
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
|
||||||
|
const transportCityOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: 'Транспорт',
|
||||||
|
icon: 'icons/bus.svg',
|
||||||
|
key: 'bus'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Машина',
|
||||||
|
icon: 'icons/car.svg',
|
||||||
|
key: 'car'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Велосипед',
|
||||||
|
icon: 'icons/bycicle.svg',
|
||||||
|
key: 'bycicle'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Самокат',
|
||||||
|
icon: 'icons/scooter.svg',
|
||||||
|
key: 'scooter'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Пешком',
|
||||||
|
icon: 'icons/walk.svg',
|
||||||
|
key: 'walk'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
onChange: (e)=>console.log(e)
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
const hotelOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: 'Отель',
|
||||||
|
icon: 'icons/hotel.svg',
|
||||||
|
key: 'hotel'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Хостел',
|
||||||
|
icon: 'icons/hostel.svg',
|
||||||
|
key: 'hostel'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Апартаменты',
|
||||||
|
icon: 'icons/apart.svg',
|
||||||
|
key: 'apart'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onChange: (e)=>console.log(e)
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const ratingOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: '1',
|
||||||
|
icon: 'icons/stars/1.svg',
|
||||||
|
key: '1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2',
|
||||||
|
icon: 'icons/stars/2.svg',
|
||||||
|
key: '2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '3',
|
||||||
|
icon: 'icons/stars/3.svg',
|
||||||
|
key: '3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '4',
|
||||||
|
icon: 'icons/stars/4.svg',
|
||||||
|
key: '4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '5',
|
||||||
|
icon: 'icons/stars/5.svg',
|
||||||
|
key: '5'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onChange: (e)=>backend.post('/onboarding/hotels/', {
|
||||||
|
stars: e.map((value)=>Number(value))
|
||||||
|
}).then((response)=>setHotels(response.data.hotels))
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
|
||||||
|
const eatOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: 'Кафе',
|
||||||
|
icon: 'icons/cafe.svg',
|
||||||
|
key: 'cafe'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Ресторан',
|
||||||
|
icon: 'icons/rest.svg',
|
||||||
|
key: 'rest'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Бар',
|
||||||
|
icon: 'icons/bar.svg',
|
||||||
|
key: 'bar'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onChange: (e)=>console.log(e)
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
const eatRatingOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: '1',
|
||||||
|
icon: 'icons/stars/1.svg',
|
||||||
|
key: '1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '2',
|
||||||
|
icon: 'icons/stars/2.svg',
|
||||||
|
key: '2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '3',
|
||||||
|
icon: 'icons/stars/3.svg',
|
||||||
|
key: '3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '4',
|
||||||
|
icon: 'icons/stars/4.svg',
|
||||||
|
key: '4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '5',
|
||||||
|
icon: 'icons/stars/5.svg',
|
||||||
|
key: '5'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onChange: (e)=>console.log(e)
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
const attractionOptions = {
|
||||||
|
options:[
|
||||||
|
{
|
||||||
|
name: 'Park',
|
||||||
|
icon: 'icons/park.png',
|
||||||
|
key: 'park'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Monument',
|
||||||
|
icon: 'icons/monument.png',
|
||||||
|
key: 'monument'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Museum',
|
||||||
|
icon: 'icons/museum.png',
|
||||||
|
key: 'museum'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Unesco',
|
||||||
|
icon: 'icons/unesco.png',
|
||||||
|
key: 'unesco'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Exhibition',
|
||||||
|
icon: 'icons/exhibition.png',
|
||||||
|
key: 'exhibition'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onChange: (e)=>backend.post('/onboarding/event/', {
|
||||||
|
stars: e.map((value)=>Number(value))
|
||||||
|
}).then((response)=>setEvents(response.data.events))
|
||||||
|
|
||||||
|
} as ChoiceIconIE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const items: TabsProps['items'] = [
|
||||||
|
{
|
||||||
|
key: '1',
|
||||||
|
label: `Транспорт`,
|
||||||
|
children:
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<h2>Как вы предпочитаете добираться</h2>
|
||||||
|
<ChoiceIcon {...transportOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Как вы предпочитаете передвигаться на месте</h2>
|
||||||
|
<ChoiceIcon {...transportCityOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '2',
|
||||||
|
label: `Проживание`,
|
||||||
|
children: <div>
|
||||||
|
<div>
|
||||||
|
<h2>Где вы предпочитаете остановится</h2>
|
||||||
|
<ChoiceIcon {...hotelOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Рейтинг</h2>
|
||||||
|
<ChoiceIcon {...ratingOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Выберите понравившеися вам отели</h2>
|
||||||
|
<div className='hotelsCardWrapper'>
|
||||||
|
{
|
||||||
|
hotels.map((hotel:HotelCardIE)=><HotelCard key={hotel.title} {...hotel}></HotelCard>)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '3',
|
||||||
|
label: `Питание`,
|
||||||
|
children: <div>
|
||||||
|
<div>
|
||||||
|
<h2>Где вы предпочитаете есть</h2>
|
||||||
|
<ChoiceIcon {...eatOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Рейтинг</h2>
|
||||||
|
<ChoiceIcon {...eatRatingOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '4',
|
||||||
|
label: `Развлечения`,
|
||||||
|
children: <div>
|
||||||
|
<div>
|
||||||
|
<h2>Что вы хотите увидеть</h2>
|
||||||
|
<ChoiceIcon {...attractionOptions}></ChoiceIcon>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Выберите самое интересное</h2>
|
||||||
|
<div className='hotelsCardWrapper'>
|
||||||
|
{
|
||||||
|
events.map((event:AttractionCardIE)=>{
|
||||||
|
return <AttractionCard key={event.oid} {...event}></AttractionCard>
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div className="prefsbg">
|
||||||
|
<div className="prefs">
|
||||||
|
<div className="prefsHeadWrapper">
|
||||||
|
<h1>Мои предпочтения</h1>
|
||||||
|
<div style={{color:'rgba(29, 29, 29, 0.5)'}}>Отметьте свои предпочтения, чтобы мы смогли предоставить лучшие рекомендации туров</div>
|
||||||
|
</div>
|
||||||
|
<Tabs activeKey={activeTab.toString()} items={items} onChange={(e)=>setActiveTab(Number(e))} />
|
||||||
|
<Button className="btn-y" onClick={()=> setActiveTab((activeTab+1)%5)}>Далее</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
38
src/elements/Prefernces/style.css
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
.prefs{
|
||||||
|
width: 60%;
|
||||||
|
position: fixed;
|
||||||
|
top:0px;
|
||||||
|
right:0px;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
padding: 25px;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prefsHeadWrapper{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prefsbg{
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hotelsCardWrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap:30px;
|
||||||
|
height: 400px;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
overflow-y: scroll;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
import { AutoComplete, DatePicker, Input, Checkbox } from 'antd';
|
import { AutoComplete, DatePicker, Input, Checkbox, Select } from 'antd';
|
||||||
import react, { useState } from 'react'
|
import react, { useEffect, useState } from 'react'
|
||||||
|
import { backend } from '../../consts';
|
||||||
import { Button } from '../../elements/Button';
|
import { Button } from '../../elements/Button';
|
||||||
import { FavoriteCard, FavoriteCardIE } from '../../elements/FavoriteCard';
|
import { FavoriteCard, FavoriteCardIE } from '../../elements/FavoriteCard';
|
||||||
import { GenerateCard } from '../../elements/GenerateCard';
|
import { GenerateCard } from '../../elements/GenerateCard';
|
||||||
|
@ -9,6 +10,14 @@ import './style.css'
|
||||||
|
|
||||||
export const Main: react.FC = () => {
|
export const Main: react.FC = () => {
|
||||||
const { RangePicker } = DatePicker;
|
const { RangePicker } = DatePicker;
|
||||||
|
const [cities, setCities] = useState([])
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
if (cities.length == 0){
|
||||||
|
backend.get('/data/cities').then((response)=>setCities(response.data))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
const TourPropsCard = {
|
const TourPropsCard = {
|
||||||
name: 'Я покажу тебе Москву',
|
name: 'Я покажу тебе Москву',
|
||||||
|
@ -77,9 +86,25 @@ export const Main: react.FC = () => {
|
||||||
<div>Фильтры</div>
|
<div>Фильтры</div>
|
||||||
</div>
|
</div>
|
||||||
<img src='react.svg'></img>
|
<img src='react.svg'></img>
|
||||||
<AutoComplete>
|
<Select
|
||||||
<Input.Search style={{width:'25vw'}} className='searchBar' size="large" placeholder="Введите направление"/>
|
className='antdBorder'
|
||||||
</AutoComplete>
|
showSearch
|
||||||
|
placeholder="Выберите направление"
|
||||||
|
optionFilterProp="children"
|
||||||
|
// onChange={onChange}
|
||||||
|
// onSearch={onSearch}
|
||||||
|
filterOption={(input, option) =>
|
||||||
|
(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
|
||||||
|
}
|
||||||
|
options={cities.map((city:any)=>{
|
||||||
|
return {
|
||||||
|
value:city.oid,
|
||||||
|
label: city.title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
<img src='react.svg'></img>
|
<img src='react.svg'></img>
|
||||||
<RangePicker
|
<RangePicker
|
||||||
onChange={(e)=>setDates(e as any)}
|
onChange={(e)=>setDates(e as any)}
|
||||||
|
|
|
@ -113,6 +113,10 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap:10px
|
gap:10px
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ant-select-selector, .ant-picker{
|
||||||
|
border: 0px !important;
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { Login } from './pages/Login';
|
||||||
import { Main } from './pages/Main';
|
import { Main } from './pages/Main';
|
||||||
import { EventMatch } from './pages/EventMatch';
|
import { EventMatch } from './pages/EventMatch';
|
||||||
import { GenerateTour } from './pages/GenerateTour';
|
import { GenerateTour } from './pages/GenerateTour';
|
||||||
|
import { Prefernces } from './elements/Prefernces';
|
||||||
|
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
|
@ -33,6 +34,10 @@ const routes = [
|
||||||
{
|
{
|
||||||
path: '/generate',
|
path: '/generate',
|
||||||
element: <GenerateTour></GenerateTour>
|
element: <GenerateTour></GenerateTour>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/prefs',
|
||||||
|
element: <Prefernces></Prefernces>
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|