Vulcan/packages/nova-embedly/lib/components/EmbedlyURL.jsx

92 lines
2 KiB
React
Raw Normal View History

2016-04-07 12:43:41 +09:00
import React, { PropTypes, Component } from 'react';
import FRC from 'formsy-react-components';
const Input = FRC.Input;
class EmbedlyURL extends Component {
constructor() {
super();
this.handleBlur = this.handleBlur.bind(this);
this.state = {
loading: false
}
}
// called whenever the URL input field loses focus
handleBlur() {
this.setState({loading: true});
2016-07-04 12:57:41 +09:00
const url = this.input.getValue();
if (url.length) {
// the URL has changed, get a new thumbnail
this.context.actions.call("getEmbedlyData", url, (error, result) => {
console.log("querying Embedly…");
this.setState({loading: false});
if (error) {
console.log(error)
this.context.throwError({content: error.message, type: "error"});
} else {
console.log(result)
this.context.addToAutofilledValues({
title: result.title,
body: result.description,
thumbnailUrl: result.thumbnailUrl
});
}
});
}
2016-04-07 12:43:41 +09:00
}
render() {
const Loading = Telescope.components.Loading;
const wrapperStyle = {
position: "relative"
};
const loadingStyle = {
position: "absolute",
pointerEvents: "none",
top: "15px",
right: "15px"
};
loadingStyle.display = this.state.loading ? "block" : "none";
return (
<div className="embedly-url-field" style={wrapperStyle}>
<Input
{...this.props}
onBlur={this.handleBlur}
type="text"
ref={ref => this.input = ref}
/>
<div className="embedly-url-field-loading" style={loadingStyle}>
<Loading />
</div>
2016-04-07 12:43:41 +09:00
</div>
);
}
}
EmbedlyURL.propTypes = {
name: React.PropTypes.string,
value: React.PropTypes.any,
label: React.PropTypes.string
}
EmbedlyURL.contextTypes = {
2016-05-12 11:47:49 +09:00
addToAutofilledValues: React.PropTypes.func,
throwError: React.PropTypes.func,
actions: React.PropTypes.object,
2016-04-07 12:43:41 +09:00
}
export default EmbedlyURL;