warframe-worldstate-parser
Version:
An Open parser for Warframe's Worldstate in Javascript
124 lines (105 loc) • 3.24 kB
JavaScript
import { parseDate, fromNow, timeDeltaToString, languageString } from 'warframe-worldstate-data/utilities';
import mdConfig from '../supporting/MarkdownSettings.js';
/**
* Represents a flash sale
*/
export default class FlashSale {
/**
* @param {object} data The flash sale data
* @param {Dependency} deps The dependencies object
* @param {string} deps.locale Locale to use for translations
*/
constructor(data, { locale = 'en' } = { locale: 'en' }) {
/**
* The item being offered in the flash sale
* @type {string}
*/
this.item = languageString(data.TypeName, locale);
/**
* The date and time at which the sale will end
* @type {Date}
*/
this.expiry = parseDate(data.EndDate);
/**
* The date and time at which the sale will or did start
* @type {Date}
*/
this.activation = parseDate(data.StartDate);
/**
* The item's discount percentage
* @type {number}
*/
this.discount = data.Discount;
/**
* The item's discounted credit price
* @type {number}
*/
this.regularOverride = data.RegularOverride;
/**
* The item's discounted platinum price
* @type {number}
*/
this.premiumOverride = data.PremiumOverride;
/**
* Whether this item is show in the in-game market
* @type {boolean}
*/
this.isShownInMarket = data.ShowInMarket;
/**
* Whether this item is featured in the in-game market
* @type {boolean}
*/
this.isFeatured = data.Featured;
/**
* Whether this item is marked as popular in the in-game market
* @type {boolean}
*/
this.isPopular = data.Popular;
/**
* Unique identifier for this sale built from the end time and reward
* @type {string}
*/
this.id = `${data.TypeName.split('/').slice(-1)[0]}${this.expiry.getTime()}`;
/**
* Whether or not this is expired (at time of object creation)
* @type {boolean}
*/
this.expired = this.getExpired();
/**
* ETA string (at time of object creation)
* @type {string}
*/
this.eta = this.getETAString();
}
/**
* Get how much time is left before the deal expires
* @returns {string} The time left before the deal expires
*/
getETAString() {
return timeDeltaToString(fromNow(this.expiry));
}
/**
* Get whether or not this deal has expired
* @returns {boolean} Whether or not the deal has expired
*/
getExpired() {
return fromNow(this.expiry) < 0;
}
/**
* Returns a string representation of the flash sale
* @returns {string} The string representation of the flash sale
*/
toString() {
const lines = [`${this.item}, ${this.premiumOverride}p`, `Expires in ${this.getETAString()}`];
if (this.discount) {
lines.unshift(`${this.discount}% off!`);
} else if (this.isShownInMarket) {
lines.unshift('**ShowInMarket**');
} else if (this.isPopular) {
lines.unshift('**Popular**');
} else if (this.isFeatured) {
lines.unshift('**Featured**');
}
return `${mdConfig.codeBlock}${lines.join(mdConfig.lineEnd)}${mdConfig.blockEnd}`;
}
}