import React from 'react' import InputString from './InputString' import SmallError from './SmallError' function validate(url: string) { if (url === "") { return; } let error; const getProtocol = (url: string) => { 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 type FieldUrlProps = { "data-wd-key"?: string value: string style?: object default?: string onChange(...args: unknown[]): unknown onInput?(...args: unknown[]): unknown multi?: boolean required?: boolean 'aria-label'?: string type?: string className?: string }; type FieldUrlState = { error?: React.ReactNode } export default class FieldUrl extends React.Component { static defaultProps = { onInput: () => {}, } constructor (props: FieldUrlProps) { super(props); this.state = { error: validate(props.value) }; } onInput = (url: string) => { this.setState({ error: validate(url) }); if (this.props.onInput) this.props.onInput(url); } onChange = (url: string) => { this.setState({ error: validate(url) }); this.props.onChange(url); } render () { return (
{this.state.error}
); } }