import React, {Fragment} from 'react' import PropTypes from 'prop-types' import InputString from './InputString' import SmallError from './SmallError' function validate (url) { if (url === "") { return; } let error; const getProtocol = (url) => { try { const urlObj = new URL(url); return urlObj.protocol; } catch (err) { return undefined; } }; const protocol = getProtocol(url); const isSsl = window.location.protocol === "https:"; if (!protocol) { error = ( Must provide protocol { isSsl ? https:// : <>http:// or https:// } ); } else if ( protocol && protocol === "http:" && window.location.protocol === "https:" ) { error = ( CORS policy won't allow fetching resources served over http from https, use a https:// domain ); } return error; } export default class FieldUrl extends React.Component { static propTypes = { "data-wd-key": PropTypes.string, value: PropTypes.string, style: PropTypes.object, default: PropTypes.string, onChange: PropTypes.func, onInput: PropTypes.func, multi: PropTypes.bool, required: PropTypes.bool, 'aria-label': PropTypes.string, } static defaultProps = { onInput: () => {}, } constructor (props) { super(props); this.state = { error: validate(props.value) }; } onInput = (url) => { this.setState({ error: validate(url) }); this.props.onInput(url); } onChange = (url) => { this.setState({ error: validate(url) }); this.props.onChange(url); } render () { return (
{this.state.error}
); } }