コード例 #1
0
var React = require('react');
var objectAssign = require('object-assign');

var Base = require('components/Base.react');
var cx = require('classnames');

var u = require('utils/HelperUtil');

var RequestStore = require('stores/ComplaintPage/RequestStore');
var RequestEmailResourceUtil = require('utils/RequestEmailResourceUtil.js');
var RequestDocumentErrorPresenter = require('presenters/RequestDocumentErrorPresenter');
var InterfaceText = require('components/Shared/InterfaceText.react');
var TickIcon = require('components/Shared/TickIcon');


var RequestModalContent = React.createClass(objectAssign(Base(RequestStore), {
  propTypes: {
    document: React.PropTypes.object
  },

  contextTypes: {
    modalName: React.PropTypes.string,
    action: React.PropTypes.func
  },

  getInitialState: function () {
    return {
      requested: false,
      submitFailed: false,
      errors: {},
      email: ''
コード例 #2
0
var _ = require('lodash');
var React = require('react');

var Base = require('components/Base.react');
var ComplaintListAPI = require('utils/ComplaintListAPI');
var ComplaintSectionStore = require('stores/OfficerPage/ComplaintSectionStore');
var Counter = require('components/DataToolPage/Counter.react');
var InvestigationList = require('components/InvestigatorPage/InvestigationList.react');
var OutcomeFilter = require('components/DataToolPage/ComplaintList/OutcomeFilter.react');
var RequestModal = require('components/DataToolPage/Complaint/RequestModal.react');


var InvestigationsSection = React.createClass(_.assign(Base(ComplaintSectionStore), {
  componentDidMount: function () {
    var investigator = this.props.investigator.id || '';

    ComplaintSectionStore.addChangeListener(this._onChange);
    ComplaintListAPI.getAllForInvestigator(investigator);
  },

  componentWillUnmount: function () {
    ComplaintSectionStore.removeChangeListener(this._onChange);
  },

  componentWillReceiveProps: function (newProps) {
    var investigator = newProps.investigator.id || '';
    ComplaintListAPI.getAllForInvestigator(investigator);
  },

  render: function () {
    return (
コード例 #3
0
var _ = require('lodash');
var React = require('react');
var classnames = require('classnames');
var PropTypes = React.PropTypes;

var Base = require('components/Base.react');
var Allegation = require('components/DataToolPage/Allegation.react');
var ComplaintListActions = require('actions/ComplaintList/ComplaintListActions');
var ComplaintListStore = require('stores/ComplaintListStore');
var SessionAPI = require('utils/SessionAPI');

var AllegationPresenterFactory = require('presenters/AllegationPresenterFactory');


var InvestigationListRow = React.createClass(_.assign(Base(ComplaintListStore), {
  propTypes: {
    complaint: PropTypes.object.isRequired
  },

  componentDidUpdate: function (e) {
    var id = this.props.complaint.allegation.id;
    var kindOfUserInteraction = this.state.show ? 'open' : 'close';
    ga('send', 'event', 'allegation', kindOfUserInteraction, id);
  },

  detailRendered: function () {
    return this.state.hasShown || this.detailIsCurrentlyShown();
  },

  detailIsCurrentlyShown: function () {
    return this.state.activeComplaints.indexOf(this.props.complaint['officer_allegation']['id']) > -1;
コード例 #4
0
ファイル: SearchResults.react.js プロジェクト: invinst/CPDB
var React = require('react');
var objectAssign = require('object-assign');

var Base = require('components/Base.react');

var FailedSearch = require('components/Shared/SearchablePage/SearchResults/FailedSearch.react');
var SuccessfulSearch = require('components/Shared/SearchablePage/SearchResults/SuccessfulSearch.react');
var Wrapper = require('components/Shared/Wrapper.react');
var SearchResultsStore = require('stores/MainPage/SearchResultsStore');
var LoadingPage = require('components/Shared/LoadingPage.react');


var SearchResults = React.createClass(objectAssign(Base(SearchResultsStore), {
  getInitialState: function () {
    return {
      'searching': 0,
      'success': false,
      'term': '',
      'suggestions': []
    };
  },

  render: function () {
    if (this.state.searching) {
      return (
        <LoadingPage />
      );
    }

    if (!this.state.success) {
      return (
コード例 #5
0
ファイル: Disclaimer.react.js プロジェクト: invinst/CPDB
var _ = require('lodash');
var React = require('react');
var cookie = require('react-cookie');

var Base = require('components/Base.react');
var DisclaimerStore = require('stores/DisclaimerStore');
var DisclaimerActions = require('actions/DisclaimerActions');

var Disclaimer = React.createClass(_.assign(Base(DisclaimerStore), {
  componentDidUpdate: function () {
    if (this.state.show) {
      jQuery('#disclaimer').modal('show');
    }
  },

  hiddenModal: function () {
    DisclaimerActions.hidden();
  },

  componentDidMount: function () {
    DisclaimerStore.addChangeListener(this._onChange);
    if (!cookie.load('disclaimered') && SHOW_DISCLAIMER) {
      DisclaimerActions.show();
    }
    jQuery('#disclaimer').on('hidden.bs.modal', this.hiddenModal);
  },

  render: function () {
    return (
      <div className='modal fade' role='dialog' id='disclaimer'>
        <div className='modal-dialog' role='document'>
コード例 #6
0
var _ = require('lodash');
var React = require('react');

var Base = require('components/Base.react');

var InvestigationsSection = require('components/InvestigatorPage/InvestigationsSection.react');
var InvestigatorDetail = require('components/InvestigatorPage/InvestigatorDetail.react');
var InvestigatorPageStore = require('stores/InvestigatorPageStore');
var InvestigatorPageAPI = require('utils/InvestigatorPageAPI');


var InvestigatorPage = React.createClass(_.assign(Base(InvestigatorPageStore), {
  initAPIRequest: function (investigatorId) {
    InvestigatorPageAPI.getInvestigatorData(investigatorId);
  },

  componentDidMount: function () {
    var investigatorId = this.props.params.id || '';

    InvestigatorPageStore.addChangeListener(this._onChange);
    this.initAPIRequest(investigatorId);
  },

  componentWillReceiveProps: function (newProps) {
    var investigatorId = newProps.params.id || '';
    this.initAPIRequest(investigatorId);
  },

  componentDidUpdate: function () {
    var investigatorName = _.get(this.state.data, 'investigator.name', '');
    document.title = investigatorName;
コード例 #7
0
ファイル: DocumentSection.react.js プロジェクト: invinst/CPDB
var Base = require('components/Base.react');
var AppConstants = require('../constants/AppConstants');

var Document = require('components/DocumentSection/Document.react');
var DocumentList = require('components/DocumentSection/DocumentList.react');
var Tabs = require('./DocumentSection/Tabs.react');
var DocumentSectionStore = require('stores/DocumentSectionStore');
var DocumentRequestAPI = require('utils/DocumentRequestAPI');
var AddDocumentLinkModal = require('components/DocumentSection/AddDocumentLinkModal.react');
var AddDocumentLinkModalActions = require('actions/DocumentSection/AddDocumentLinkModalActions');
var UploadDocumentModal = require('components/DocumentSection/UploadDocumentModal.react');
var DocumentCrawlStats = require('./DocumentSection/DocumentCrawlStats.react');


var DocumentSection = React.createClass(_.assign(Base(DocumentSectionStore), {
  isShowingSingleDocument: function () {
    return !!this.props.params.id;
  },

  content: function () {
    if (this.isShowingSingleDocument()) {
      return (
        <div id='documents' className='col-md-12'>
          <Document documentId={ this.props.params.id } />
        </div>
      );
    }
    return (
      <div id='documents' className='col-md-12'>
        <Tabs />
コード例 #8
0
ファイル: SearchablePage.react.js プロジェクト: invinst/CPDB
var cx = require('classnames');
var objectAssign = require('object-assign');
var React = require('react');

var Base = require('components/Base.react');

var SearchBar = require('components/Shared/SearchablePage/SearchBar.react');
var SearchablePageStore = require('stores/Shared/SearchablePageStore');
var SearchResults = require('components/Shared/SearchablePage/SearchResults.react');


var SearchablePage = React.createClass(objectAssign(Base(SearchablePageStore, 'SearchablePage'), {
  getInitialState: function () {
    return {
      'focus': 0
    };
  },

  render: function () {
    var focus = this.state.focus;
    var childrenClassName = cx('child-content', {'invisible': focus});
    var searchResultClassName = cx('result-content', {'invisible': !focus});

    return (
      <div className='searchable-page'>
        <SearchBar />
        <div className={ searchResultClassName }>
          <SearchResults />
        </div>
        <div className={ childrenClassName }>
          { this.props.children }
コード例 #9
0
ファイル: Footer.react.js プロジェクト: invinst/CPDB
var _ = require('lodash');
var React = require('react');
var classnames = require('classnames');

var DisclaimerActions = require('actions/DisclaimerActions');
var EmbedAction = require('actions/EmbedActions');
var Base = require('components/Base.react');
var Download = require('components/DataToolPage/Download.react');
var EmbedStore = require('stores/EmbedStore');
var jQuery = require('utils/jQuery');


var Footer = React.createClass(_.assign(Base(EmbedStore), {
  componentDidUpdate: function () {
    if (this.state.embedMode) {
      jQuery('body').addClass('embedding');
    } else {
      jQuery('body').removeClass('embedding');
    }
  },

  toggleEmbedMode: function (e) {
    var currentScrollTop = jQuery(window).scrollTop();
    var currentBodyHeight = jQuery(document).height();

    e.preventDefault();

    if (this.state.embedMode) {
      EmbedAction.leaveEmbedMode();
    } else {
      EmbedAction.enterEmbedMode();
コード例 #10
0
ファイル: SearchBar.react.js プロジェクト: invinst/CPDB
var React = require('react');
var cx = require('classnames');
var objectAssign = require('object-assign');

var Base = require('components/Base.react');

var SuggestionAPI = require('utils/SuggestionAPI');
var SearchBarActions = require('actions/MainPage/SearchBarActions');
var SearchBarStore = require('stores/MainPage/SearchBarStore');


var SearchBar = React.createClass(objectAssign(Base(SearchBarStore), {
  getInitialState: function () {
    return {
      'status': 'blank',
      'term': ''
    };
  },

  _onInputChange: function (event) {
    var term = event.currentTarget.value;
    SearchBarActions.changed(term);
    SuggestionAPI.get(term);
  },

  _onFocus: function () {
    SearchBarActions.focus();
  },

  _onBlur: function () {
    if (!this.state.term) {
コード例 #11
0
ファイル: FilterTags.react.js プロジェクト: invinst/CPDB
var _ = require('lodash');
var React = require('react');
var classnames = require('classnames');

var Base = require('components/Base.react');
var FilterTagsActions = require('actions/FilterTagsActions');
var FilterTagStore = require('stores/FilterTagStore');


var FilterTags = React.createClass(_.assign(Base(FilterTagStore), {
  removeTag: function (category, item) {
    FilterTagsActions.removeTag(category, item.value, true);
    FilterTagsActions.removedTag(category, item);
  },

  pinTag: function (category, value) {
    FilterTagsActions.pinTag(category, value);
  },

  renderTags: function () {
    var that = this;
    return _.map(this.state.filters, function (items, category) {
      return items.map(function (item, key) {
        var tagClassName = classnames('tag label label-info-autocomplete fadeIn', {
          'pinned': item.pinned
        });
        return (
          <span className={ tagClassName } key={ key }>
            <a href='javascript:void(0);'
              className='action remove'
              onClick={ that.removeTag.bind(that, category, item) }>