You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CreateScrapeRequest.js 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import React, { useState } from 'react';
  2. import Select from 'react-select'
  3. import { prices, beds, types, lifeStyles } from '../../constants/filters';
  4. import './CreateScrapeRequest.scss'
  5. import PropTypes from 'prop-types';
  6. import { states } from '../../constants/states'
  7. import Autocomplete from 'react-autocomplete';
  8. import { useTranslation } from 'react-i18next';
  9. export function matchStateToTerm(state, value) {
  10. return (
  11. state.label.toLowerCase().indexOf(value.toLowerCase()) !== -1
  12. )
  13. }
  14. const CreateScrapeRequest = ({ handleRequest }) => {
  15. const [requestObject, setRequestObject] = useState({ location: '' })
  16. const { t } = useTranslation();
  17. const handleChangePriceType = async selectedOption => {
  18. setRequestObject(s => ({ ...s, price: selectedOption.value }))
  19. };
  20. const handleChangeBedType = async selectedOption => {
  21. setRequestObject(s => ({ ...s, beds: selectedOption.value }))
  22. };
  23. const handleChangeFilterType = async selectedOption => {
  24. setRequestObject(s => ({ ...s, type: selectedOption.value }))
  25. };
  26. const handleChangeLifeStyleType = async selectedOption => {
  27. setRequestObject(s => ({ ...s, lifestyle: selectedOption.value }))
  28. };
  29. console.log("requestObject", requestObject)
  30. return (
  31. <div className="card card-primary">
  32. <form >
  33. <div className="card-body">
  34. <div className="row">
  35. {/* <div className="col-md-3">
  36. <div className="form-group">
  37. <input type="text" className="form-control input-field cursor-pointer" value={requestObject.location} placeholder={t('createScrapeRequest.LocationPlaceholder')} onChange={e => setRequestObject(s => ({ ...s, location: e.target.value }))} />
  38. </div>
  39. </div> */}
  40. <div className="col-md-3">
  41. <div className="form-group">
  42. <Autocomplete
  43. menuStyle={{
  44. padding: ".375rem .75rem",
  45. fontSize: '1rem',
  46. fontWeight: '400',
  47. lineHeight: 1.5,
  48. color: "#495057",
  49. backgroundColor: '#fff',
  50. backgroundClip: "padding-box",
  51. border: "1px solid #ced4da",
  52. borderRadius: ".25rem",
  53. boxShadow: "inset 0 0 0 transparent",
  54. transition: " border-color .15s ease-in-out,box-shadow .15s ease-in-out",
  55. background: 'rgba(255, 255, 255, 0.9)',
  56. position: 'fixed',
  57. overflow: 'auto',
  58. maxHeight: '50%',
  59. zIndex: 2001
  60. }}
  61. renderInput={(props) => <input {...props} type="text" className="form-control input-field cursor-pointer" placeholder={t('createScrapeRequest.LocationPlaceholder')} />}
  62. getItemValue={(item) => item.label}
  63. items={states.map(s => ({ label: s }))}
  64. renderItem={(item, isHighlighted) =>
  65. <div style={{ background: isHighlighted ? 'lightgray' : 'white', }}>
  66. {item.label}
  67. </div>
  68. }
  69. shouldItemRender={matchStateToTerm}
  70. value={requestObject.location}
  71. onChange={(e, val) => setRequestObject(s => ({ ...s, location: val }))}
  72. onSelect={(val) => setRequestObject(s => ({ ...s, location: val }))}
  73. />
  74. </div>
  75. </div>
  76. <div className="col-md-2">
  77. <div className="form-group">
  78. <Select options={prices} onChange={handleChangePriceType} placeholder={t('createScrapeRequest.PricePlaceholder')} />
  79. </div>
  80. </div>
  81. <div className="col-md-2">
  82. <div className="form-group">
  83. <Select className="cursor-pointer" options={beds} onChange={handleChangeBedType} placeholder={t('createScrapeRequest.BedsPlaceholder')}/>
  84. </div>
  85. </div>
  86. <div className="col-md-2">
  87. <Select className="cursor-pointer" options={types} onChange={handleChangeFilterType} placeholder={t('createScrapeRequest.TypePlaceholder')} />
  88. </div>
  89. <div className="col-md-2">
  90. <Select className="cursor-pointer" options={lifeStyles} onChange={handleChangeLifeStyleType} placeholder={t('createScrapeRequest.LifestylePlaceholder')}/>
  91. </div>
  92. <div className="col-md-1">
  93. <button type="button" onClick={() => { handleRequest(requestObject); setRequestObject({ location: '' }) }} className="btn btn-outline-primary cursor-pointer">Request</button>
  94. </div>
  95. </div>
  96. </div>
  97. </form>
  98. </div>
  99. );
  100. };
  101. CreateScrapeRequest.propTypes = {
  102. handleRequest: PropTypes.func
  103. };
  104. export default CreateScrapeRequest;