import React from 'react'; import ReactDOM from 'react-dom'; import Select from 'react-select'; import icons from “megadraft/lib/icons”; import page_store from 'slickr/package/slickr/packs/slickr_page_edit.jsx' import text_editor_store from 'slickr/package/slickr/packs/slickr_text_area_editor.jsx'

export default class PdfLinkInput extends React.Component {

constructor(props) {
  super(props);
  this.onAdminChange = this.onAdminChange.bind(this);
  this.loadData = this.loadData.bind(this);

  this.state = {
    loading: false,
    pdfs: []
  }
}

loadData = (index) => {
  var promise = new Promise((resolve, reject) => {
    (function waitForData(){
      if(text_editor_store[index]) {
        if (text_editor_store[index].getState().loadedPdfs.length > 0) return resolve();
        setTimeout(waitForData, 30);
      } else {
        if (page_store.getState().loadedPdfs.length > 0) return resolve();
        setTimeout(waitForData, 30);
      }
    })();
  });
  return promise;
}

componentWillMount() {
  let textAreaStoreIndex = 0
  let textareaList = document.getElementsByTagName('textarea');

  Array.prototype.forEach.call(textareaList, function(textarea, index) {
    if (textarea.classList.contains('active_textarea')) textAreaStoreIndex = index
  })
  this.props.onChange('load_pdfs')

  this.loadData(textAreaStoreIndex).then(() => {
    let pdfs = text_editor_store[textAreaStoreIndex] ? text_editor_store[textAreaStoreIndex].getState().loadedPdfs : page_store.getState().loadedPdfs
    this.setState({
      pdfs: pdfs,
      loading: false
    });
  });
}

onAdminChange(selection) {
  var url = selection === null ? "" : selection.value
  if(selection !== null) {
    this.props.setEntity({url});
    this.props.cancelEntity();
    // Force blur to work around Firefox's NS_ERROR_FAILURE
    event.target.blur();
  } else {
    this.props.removeEntity();
  }
}

render() {
  let pdfs = this.state.pdfs.map(
    ({attachment}, index) => (
      { value: attachment.url, label: attachment.url.substr(attachment.url.lastIndexOf('/') + 1) }
    )
  )

  return (
    <Select
      name="form-field-name"
      value={this.props.url}
      options={pdfs}
      onChange={this.onAdminChange}
    />
  );
}

}