reactstrap#InputGroup TypeScript Examples
The following examples show how to use
reactstrap#InputGroup.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: text_search_bar.tsx From website with Apache License 2.0 | 6 votes |
/**
* Component for the search box in the rich search interface. The value of the
* is not controlled to prevent constantly updating the hash URL.
*/
export function TextSearchBar({
onSearch,
initialValue,
placeholder,
}: TextSearchBarPropType): JSX.Element {
const [invalid, setInvalid] = useState(false);
const [value, setValue] = useState(initialValue);
const callback = () => (value ? onSearch(value) : setInvalid(true));
return (
<div className="input-query">
<InputGroup>
<Input
invalid={invalid}
placeholder={placeholder}
value={value}
onChange={(e) => {
setValue(e.target.value);
setInvalid(false);
}}
onKeyPress={(e) => e.key === "Enter" && callback()}
className="pac-target-input"
/>
<Button onClick={callback} className="rich-search-button">
<span className="material-icons search rich-search-icon">search</span>
</Button>
</InputGroup>
</div>
);
}
Example #2
Source File: Modals.tsx From health-cards-tests with MIT License | 6 votes |
ConfigEditOption: React.FC<{
title: string;
default: string;
value: string;
onChange: (string) => void;
}> = (props) => {
return <>
<InputGroup>
<InputGroupAddon addonType='prepend' className='config-prepend'>
<InputGroupText>{props.title}</InputGroupText>
</InputGroupAddon>
<Input type="text" value={props.value} onChange={e => props.onChange(e.target.value)}>
</Input>
<InputGroupAddon addonType="prepend">
<Button onClick={e => props.onChange(props.default)}>↻</Button>
</InputGroupAddon>
</InputGroup>
<br />
</>;
}
Example #3
Source File: SiopApproval.tsx From health-cards-tests with MIT License | 5 votes |
SiopRequestReceiver: React.FC<SiopRequestReceiverProps> = (props) => {
const [currentCode, setCurrentCode] = useState("")
const runningQrScanner = useRef(null)
let qrScanner; // scope bound to callback
const videoCallback = useCallback((videoElement) => {
if (!videoElement) {
if (qrScanner) {
qrScanner.destroy()
}
return;
}
qrScanner = new QrScanner(videoElement, result => {
if (result.length)
props.onReady(result)
});
runningQrScanner.current = qrScanner
qrScanner.start();
}, [])
useEffect(() => {
if (props.redirectMode === "window-open") {
const onMessage = ({ data, source }) => {
props.onReady(data)
}
const registered = window.addEventListener("message", onMessage)
const opened = window.open(props.startUrl)
return () => {
window.removeEventListener("message", onMessage)
}
}
}, [])
return props.redirectMode === "qr" ? <>
<Modal isOpen={true}>
<ModalHeader>Connect to {props.label}</ModalHeader>
<ModalBody>
<div>Scan a QR Code</div>
<video ref={videoCallback} style={{ maxWidth: "100%", maxHeight: "30vh" }} />
</ModalBody>
<ModalFooter >
<InputGroup>
<Input placeholder="Or paste a URL directly..." type="text" autoFocus={true} value={currentCode} onChange={e => setCurrentCode(e.target.value)}>
</Input>
</InputGroup>
{props.onCancel ?
<Button color="error" onClick={e => props.onCancel()}>
Cancel
</Button> : ""
}
<Button color="success" onClick={e => props.onReady(currentCode)}>
Connect
</Button>
</ModalFooter>
</Modal>
</> : <>
<span>Waiting for redirect...</span>
</>
}
Example #4
Source File: ClientSettings.tsx From TutorBase with MIT License | 4 votes |
ClientSettings = () => {
let clientData = useSelector(selectClientData);
let dispatch = useDispatch();
let [nameModalOpen, setNameModalOpen] = useState<boolean>(false);
let [imgModalOpen, setImgModalOpen] = useState<boolean>(false);
let [tempName, setTempName] = useState<Name>({
first_name: "",
last_name: ""
});
let [clientName, setClientName] = useState<Name>({
first_name: "",
last_name: ""
});
let [croppedImg, setCroppedImg] = useState<string>("");
let [clientImg, setClientImg] = useState<string>("");
const saveNameChange = async () => {
let name: Name = {first_name: tempName.first_name, last_name: tempName.last_name};
await api.SetClientName(name, clientData.clientId);
setClientName(name);
dispatch(clientDataActions.setFirstName(tempName.first_name));
dispatch(clientDataActions.setLastName(tempName.last_name));
setNameModalOpen(false);
}
const handleImageSave = async (img: string) => {
await api.SetClientProfileImage(img, clientData.clientId);
setClientImg(img);
dispatch(clientDataActions.setProfileImage(img));
}
const saveImgChange = async () => {
if(croppedImg.toString() !== "") {
CompressAndSaveImg(croppedImg, clientData.first_name + clientData.last_name + "-photo", handleImageSave);
} else {
handleImageSave(croppedImg);
}
setImgModalOpen(false);
}
const cancelNameChange = () => {
setNameModalOpen(false);
setTempName(clientName);
}
const cancelImgChange = () => {
setCroppedImg("");
setImgModalOpen(false);
}
useEffect(() => {
const getUser = async () => {
return (await api.GetUserById(clientData.clientId)).data;
}
getUser().then(value => {
setTempName({first_name: value[0].first_name, last_name: value[0].last_name});
setClientName({first_name: value[0].first_name, last_name: value[0].last_name});
setClientImg(value[0].profile_img);
dispatch(clientDataActions.setFirstName(value[0].first_name));
dispatch(clientDataActions.setLastName(value[0].last_name));
dispatch(clientDataActions.setProfileImage(value[0].profile_img));
});
}, [clientData.clientId, dispatch]);
return (
<Container className="settings" fluid>
<Row className="title" style={{ marginTop: '25px'}}>
<div className="profile-text">Settings</div>
</Row>
<hr></hr>
<Row>
<ListGroup>
<ListGroupItem className="img-item">
<img src={clientImg === "" ? defaultUser : clientImg} width="200px"/>
<a href="#" className="modal-link" onClick={() => setImgModalOpen(true)}>
<span className="heading-item"><FontAwesomeIcon icon={faEdit} className="font-adj"/></span>
</a>
<Modal isOpen={imgModalOpen} fade={false} toggle={() => {setImgModalOpen(!imgModalOpen)}} className="img-modal">
<ModalHeader toggle={() => {cancelImgChange()}}>Edit Profile Photo</ModalHeader>
<ModalBody>
Change your profile photo here.
<hr/>
<Avatar
width={250}
height={250}
cropColor="#E66064"
closeIconColor="#E66064"
onCrop={(img) => setCroppedImg(img)}
onClose={() => {setCroppedImg("")}}
onBeforeFileLoad={() => {}}
src={clientImg === "" ? defaultUser : clientImg}
/>
</ModalBody>
<ModalFooter>
<Button className="btn-red" onClick={() => {saveImgChange()}}>Save</Button>
<Button color="secondary" onClick={() => {cancelImgChange()}}>Cancel</Button>
</ModalFooter>
</Modal>
</ListGroupItem>
<ListGroupItem className="name-item">
<span className="heading-item">{clientName.first_name} {clientName.last_name}</span>
<a href="#" className="modal-link" onClick={() => {setNameModalOpen(true)}}>
<span className="heading-item"><FontAwesomeIcon icon={faEdit} className="font-adj"/></span>
</a>
<Modal isOpen={nameModalOpen} fade={false} toggle={() => {setNameModalOpen(!nameModalOpen)}} className="name-modal">
<ModalHeader toggle={() => {cancelNameChange()}}>Edit Name</ModalHeader>
<ModalBody>
Change your name here.
<hr/>
<InputGroup>
First Name:<Input id="first-name" value={tempName.first_name} onChange={(value) => setTempName({first_name: value.target.value, last_name: tempName.last_name})} />
</InputGroup>
<InputGroup>
Last Name:<Input id="last-name" value={tempName.last_name} onChange={(value) => setTempName({first_name: tempName.first_name, last_name: value.target.value})} />
</InputGroup>
</ModalBody>
<ModalFooter>
<Button className="btn-red" onClick={() => {saveNameChange()}}>Save</Button>
<Button color="secondary" onClick={() => {cancelNameChange()}}>Cancel</Button>
</ModalFooter>
</Modal>
</ListGroupItem>
</ListGroup>
</Row>
</Container>
);
}