({ queryName, description, validator, handleQueryValid, handleQueryInvalid })
| 3 | import React, { useState } from 'react'; |
| 4 | |
| 5 | export const StringQuery = ({ queryName, description, validator, handleQueryValid, handleQueryInvalid }) => { |
| 6 | const [show, setShow] = useState(true); |
| 7 | const [string, setString] = useState(''); |
| 8 | |
| 9 | const handleStringChange = (e) => { |
| 10 | const value = e.target.value; |
| 11 | setString(value); |
| 12 | const valid = validator(value); |
| 13 | if (valid) { |
| 14 | return handleQueryValid(queryName, valid); |
| 15 | } |
| 16 | handleQueryInvalid(queryName); |
| 17 | }; |
| 18 | |
| 19 | return ( |
| 20 | <div className="mb-10"> |
| 21 | <div className="divider mb-8"> |
| 22 | <div className="tooltip" data-tip={description}> |
| 23 | <button |
| 24 | onClick={() => setShow(!show)} |
| 25 | disabled={!validator(string)} |
| 26 | className={string ? 'btn btn-success w-80' : 'btn w-80'} |
| 27 | > |
| 28 | {queryName} |
| 29 | </button> |
| 30 | </div> |
| 31 | </div> |
| 32 | {show && ( |
| 33 | <div className="card bg-neutral text-neutral-content"> |
| 34 | <div className="card-body"> |
| 35 | <input |
| 36 | data-testid="string-input" |
| 37 | onChange={handleStringChange} |
| 38 | value={string} |
| 39 | type="text" |
| 40 | placeholder={description} |
| 41 | className="input input-bordered w-full" |
| 42 | /> |
| 43 | </div> |
| 44 | </div> |
| 45 | )} |
| 46 | </div> |
| 47 | ); |
| 48 | }; |
| 49 | |
| 50 | export default StringQuery; |
nothing calls this directly
no test coverage detected