UNPKG

@sports-alliance/sports-lib

Version:

A Library to for importing / exporting and processing GPX, TCX, FIT and JSON files from services such as Strava, Movescount, Garmin, Polar etc

142 lines (141 loc) 6.05 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.Event = void 0; var duration_class_abstract_1 = require("../duration/duration.class.abstract"); var privacy_class_interface_1 = require("../privacy/privacy.class.interface"); var activity_types_1 = require("../activities/activity.types"); var data_activity_types_1 = require("../data/data.activity-types"); var data_device_names_1 = require("../data/data.device-names"); var Event = /** @class */ (function (_super) { __extends(Event, _super); function Event(name, startDate, endDate, privacy, description, isMerge) { if (isMerge === void 0) { isMerge = false; } var _this = _super.call(this, startDate, endDate) || this; _this.privacy = privacy_class_interface_1.Privacy.Private; _this.activities = []; _this.name = name; if (privacy) { _this.privacy = privacy; } if (description) { _this.description = description; } _this.isMerge = isMerge; return _this; } Event.prototype.addActivity = function (activity) { this.activities.push(activity); }; Event.prototype.addActivities = function (activities) { var _this = this; activities.forEach(function (activity) { return _this.addActivity(activity); }); }; Event.prototype.clearActivities = function () { this.activities = []; }; Event.prototype.removeActivity = function (activityToRemove) { this.activities = this.activities.filter(function (activity) { return activityToRemove.getID() !== activity.getID(); }); }; Event.prototype.getActivities = function () { this.sortActivities(); // PErhaps move on adding ? Lets check performance // debugger return this.activities; }; Event.prototype.getFirstActivity = function () { return this.getActivities().reduce(function (activityA, activityB) { return activityA.startDate < activityB.startDate ? activityA : activityB; }); }; Event.prototype.getLastActivity = function () { return this.getActivities().reduce(function (activityA, activityB) { return activityA.startDate < activityB.startDate ? activityB : activityA; }); }; Event.prototype.getActivityTypesAsArray = function () { var activityTypesStat = this.getStat(data_activity_types_1.DataActivityTypes.type); if (!activityTypesStat) { throw new Error("Event with id " + this.getID() + " has no activity types"); } return activityTypesStat.getValue(); }; Event.prototype.getActivityTypesAsString = function () { var activityTypesStat = this.getStat(data_activity_types_1.DataActivityTypes.type); if (!activityTypesStat) { throw new Error("Event with id " + this.getID() + " has no activity types"); } return activityTypesStat.getValue().length > 1 ? "" + this.getUniqueStringWithMultiplier(activityTypesStat .getValue() .map(function (activityType) { return activity_types_1.ActivityTypes[activityType]; })) : activity_types_1.ActivityTypes[activityTypesStat.getDisplayValue()]; }; Event.prototype.getDeviceNamesAsString = function () { var deviceNamesStat = this.getStat(data_device_names_1.DataDeviceNames.type); if (!deviceNamesStat) { throw new Error("Event with id " + this.getID() + " has no device names"); } return "" + this.getUniqueStringWithMultiplier(deviceNamesStat.getValue()); }; Event.prototype.sortActivities = function () { this.activities.sort(function (activityA, activityB) { return +activityA.startDate - +activityB.startDate; }); }; Event.prototype.getUniqueStringWithMultiplier = function (arrayOfStrings) { var uniqueObject = arrayOfStrings.reduce(function (uniqueObj, type, index) { if (!uniqueObj[type]) { uniqueObj[type] = 1; } else { uniqueObj[type] += 1; } return uniqueObj; }, {}); return Object.keys(uniqueObject) .reduce(function (uniqueArray, key, index, object) { if (uniqueObject[key] === 1) { uniqueArray.push(key); } else { uniqueArray.push(uniqueObject[key] + 'x ' + key); } return uniqueArray; }, []) .join(', '); }; Event.prototype.isMultiSport = function () { return !this.isMerge && this.getActivities().length > 1; }; Event.prototype.toJSON = function () { var stats = {}; this.stats.forEach(function (value, key) { Object.assign(stats, value.toJSON()); }); return { name: this.name, description: this.description || null, privacy: this.privacy, startDate: this.startDate.getTime(), endDate: this.endDate.getTime(), stats: stats, isMerge: this.isMerge }; }; return Event; }(duration_class_abstract_1.DurationClassAbstract)); exports.Event = Event;