@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
JavaScript
;
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;