+import React from 'react';
+import Icon from '../components/common/Icon';
+
+export const compareResult = (a, b) => {
+ const a_placement = a && a.placement ? a.placement : 0;
+ const b_placement = b && b.placement ? b.placement : 0;
+ if (a_placement) {
+ if (b_placement) {
+ if (a_placement < b_placement) return -1;
+ if (b_placement < a_placement) return 1;
+ return compareUsername(a, b);
+ }
+ return -1;
+ }
+ if (b_placement) {
+ return 1;
+ }
+ return compareUsername(a, b);
+};
+
+export const compareUsername = (a, b) => {
+ const a_name = (a && a.user && a.user.username) || '';
+ const b_name = (b && b.user && b.user.username) || '';
+ return a_name.localeCompare(b_name);
+};
+
export const formatTime = result => {
const hours = `${Math.floor(result.time / 60 / 60)}`;
let minutes = `${Math.floor((result.time / 60) % 60)}`;
return `${hours}:${minutes}:${seconds}`;
};
+export const getIcon = (result, maySee) => {
+ if (!result || !result.has_finished) {
+ return <Icon.PENDING className="text-muted" size="lg" />;
+ }
+ if (result.forfeit && maySee) {
+ return <Icon.FORFEIT className="text-danger" size="lg" />;
+ }
+ if (result.placement === 1 && maySee) {
+ return <Icon.FIRST_PLACE className="text-gold" size="lg" />;
+ }
+ if (result.placement === 2 && maySee) {
+ return <Icon.SECOND_PLACE className="text-silver" size="lg" />;
+ }
+ if (result.placement === 3 && maySee) {
+ return <Icon.THIRD_PLACE className="text-bronze" size="lg" />;
+ }
+ return <Icon.FINISHED className="text-success" size="lg" />;
+};
+
+export const getTime = (result, maySee) => {
+ if (!result || !maySee) {
+ return null;
+ }
+ if (result.time) {
+ return formatTime(result);
+ }
+ if (result.forfeit) {
+ return 'DNF';
+ }
+ return '?';
+};
+
+export const parseTime = str => {
+ if (!str) return null;
+ return `${str}`.trim().split(/[-.: ]+/).reduce((acc,time) => (60 * acc) + +time, 0);
+};
+
export default {
+ compareResult,
+ compareUsername,
formatTime,
+ getIcon,
+ getTime,
+ parseTime,
};