laipower/wp-content/plugins/easy-digital-downloads/assets/js/admin/orders/order-overview/collections/order-adjustments.js

102 lines
2.0 KiB
JavaScript

/* global Backbone */
/**
* Internal dependencies
*/
import { OrderAdjustment } from './../models/order-adjustment.js';
import { OrderAdjustmentDiscount } from './../models/order-adjustment-discount.js';
/**
* Collection of `OrderAdjustment`s.
*
* @since 3.0
*
* @class Adjustments
* @augments Backbone.Collection
*/
export const OrderAdjustments = Backbone.Collection.extend( {
/**
* @since 3.0
*/
comparator: 'type',
/**
* Initializes the `OrderAdjustments` collection.
*
* @since 3.0
*
* @constructs OrderAdjustments
* @augments Backbone.Collection
*/
initialize() {
this.getByType = this.getByType.bind( this );
},
/**
* Determines which Model to use and instantiates it.
*
* @since 3.0
*
* @param {Object} attributes Model attributes.
* @param {Object} options Model options.
*/
model( attributes, options ) {
let model;
switch ( attributes.type ) {
case 'discount':
model = new OrderAdjustmentDiscount( attributes, options );
break;
default:
model = new OrderAdjustment( attributes, options );
}
return model;
},
/**
* Defines the model's attribute that defines it's ID.
*
* Uses the `OrderAdjustment`'s Type ID.
*
* @since 3.0
*
* @param {Object} attributes Model attributes.
* @return {number}
*/
modelId( attributes ) {
return `${ attributes.type }-${ attributes.typeId }-${ attributes.description }`;
},
/**
* Determines if `OrderAdjustments` contains a specific `OrderAdjustment`.
*
* @since 3.0
*
* @param {OrderAdjustment} model Model to look for.
* @return {bool} True if the Collection contains the Model.
*/
has( model ) {
return (
undefined !==
this.findWhere( {
typeId: model.get( 'typeId' ),
} )
);
},
/**
* Returns a list of `OrderAdjustment`s by type.
*
* @since 3.0
*
* @param {string} type Type of adjustment to retrieve. `fee`, `credit`, or `discount`.
* @return {Array} List of type-specific adjustments.
*/
getByType( type ) {
return this.where( {
type,
} );
},
} );