Add CSV download for compare (change backing service, too)
This commit is contained in:
		
							parent
							
								
									7c194447f7
								
							
						
					
					
						commit
						da4ebc9b29
					
				
					 3 changed files with 34 additions and 32 deletions
				
			
		| 
						 | 
				
			
			@ -3,6 +3,13 @@ import Ember from 'ember';
 | 
			
		|||
export default Ember.Controller.extend({
 | 
			
		||||
  queryParams: ['strain_ids', 'characteristic_ids'],
 | 
			
		||||
 | 
			
		||||
  csvLink: function() {
 | 
			
		||||
    let token = encodeURIComponent(this.get('session.secure.token'));
 | 
			
		||||
    return `${this.get('globals.apiURL')}/api/${this.get('globals.genus')}/` +
 | 
			
		||||
      `compare?token=${token}&strain_ids=${this.get('strain_ids')}&` +
 | 
			
		||||
      `characteristic_ids=${this.get('characteristic_ids')}&mimeType=csv`;
 | 
			
		||||
  }.property('strain_ids', 'characteristic_ids').readOnly(),
 | 
			
		||||
 | 
			
		||||
  strains: function() {
 | 
			
		||||
    let strains = [];
 | 
			
		||||
    let strain_ids = this.get('strain_ids').split(',');
 | 
			
		||||
| 
						 | 
				
			
			@ -21,30 +28,4 @@ export default Ember.Controller.extend({
 | 
			
		|||
    return characteristics;
 | 
			
		||||
  }.property('characteristic_ids'),
 | 
			
		||||
 | 
			
		||||
  // Set up data table matrix
 | 
			
		||||
  data: function() {
 | 
			
		||||
    let characteristics = this.get('characteristics');
 | 
			
		||||
    let strains = this.get('strains');
 | 
			
		||||
    let measurements = this.get('model');
 | 
			
		||||
    let data = Ember.A();
 | 
			
		||||
 | 
			
		||||
    characteristics.forEach((characteristic) => {
 | 
			
		||||
      let row = {
 | 
			
		||||
        characteristic: characteristic.get('characteristicName'),
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      strains.forEach((strain) => {
 | 
			
		||||
        let meas = measurements.filterBy('strain.id', strain.get('id'))
 | 
			
		||||
          .filterBy('characteristic.id', characteristic.get('id'));
 | 
			
		||||
        if (!Ember.isEmpty(meas)) {
 | 
			
		||||
          row[strain.get('id')] = meas[0].get('value');
 | 
			
		||||
        } else {
 | 
			
		||||
          row[strain.get('id')] = '';
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      data.pushObject(row);
 | 
			
		||||
    });
 | 
			
		||||
    return data;
 | 
			
		||||
  }.property('characteristics', 'strains').readOnly(),
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
import Ember from 'ember';
 | 
			
		||||
import ajaxRequest from '../../../../utils/ajax-request';
 | 
			
		||||
 | 
			
		||||
export default Ember.Route.extend({
 | 
			
		||||
  queryParams: {
 | 
			
		||||
| 
						 | 
				
			
			@ -12,16 +13,35 @@ export default Ember.Route.extend({
 | 
			
		|||
 | 
			
		||||
  beforeModel: function(transition) {
 | 
			
		||||
    this._super(transition);
 | 
			
		||||
    if (Ember.$.isEmptyObject(transition.queryParams)) {
 | 
			
		||||
    if (Ember.$.isEmptyObject(transition.queryParams.strain_ids) ||
 | 
			
		||||
        Ember.$.isEmptyObject(transition.queryParams.characteristic_ids)) {
 | 
			
		||||
      this.transitionTo('protected.compare');
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  model: function(params) {
 | 
			
		||||
    if (params.strain_ids === '' || params.characteristic_ids === '') {
 | 
			
		||||
      this.transitionTo('protected.compare');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let compare = this.controllerFor('protected.compare');
 | 
			
		||||
    compare.set('selectedStrains', params.strain_ids);
 | 
			
		||||
    compare.set('selectedCharacteristics', params.characteristic_ids);
 | 
			
		||||
    return this.store.query('measurement', params);
 | 
			
		||||
 | 
			
		||||
    let url = `${this.get('globals.apiURL')}/api/${this.get('globals.genus')}/compare`;
 | 
			
		||||
    let options = {
 | 
			
		||||
      method: 'GET',
 | 
			
		||||
      data: params,
 | 
			
		||||
    };
 | 
			
		||||
    return ajaxRequest(url, options);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  setupController: function(controller, model) {
 | 
			
		||||
    model.forEach((m, i) => {
 | 
			
		||||
      let c = this.store.peekRecord('characteristic', m[0]);
 | 
			
		||||
      model[i][0] = c.get('characteristicName');
 | 
			
		||||
    });
 | 
			
		||||
    controller.set('model', model);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,14 +13,15 @@
 | 
			
		|||
      </tr>
 | 
			
		||||
    </thead>
 | 
			
		||||
    <tbody>
 | 
			
		||||
      {{#each data as |row|}}
 | 
			
		||||
      {{#each model as |row|}}
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td>{{row.characteristic}}</td>
 | 
			
		||||
          {{#each strains as |strain|}}
 | 
			
		||||
            <td>{{get-property row strain.id}}</td>
 | 
			
		||||
          {{#each row key="@index" as |col|}}
 | 
			
		||||
            <td>{{col}}</td>
 | 
			
		||||
          {{/each}}
 | 
			
		||||
        </tr>
 | 
			
		||||
      {{/each}}
 | 
			
		||||
    </tbody>
 | 
			
		||||
  </table>
 | 
			
		||||
  <hr>
 | 
			
		||||
  <a href="{{csvLink}}" download>Download as CSV</a>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue