]> git.localhorst.tv Git - alttp.git/blob - resources/js/helpers/Result.js
clickable results
[alttp.git] / resources / js / helpers / Result.js
1 import React from 'react';
2 import Icon from '../components/common/Icon';
3
4 export const formatTime = result => {
5         const hours = `${Math.floor(result.time / 60 / 60)}`;
6         let minutes = `${Math.floor((result.time / 60) % 60)}`;
7         let seconds = `${Math.floor(result.time % 60)}`;
8         while (minutes.length < 2) {
9                 minutes = `0${minutes}`;
10         }
11         while (seconds.length < 2) {
12                 seconds = `0${seconds}`;
13         }
14         return `${hours}:${minutes}:${seconds}`;
15 };
16
17 export const getIcon = (result, maySee) => {
18         if (!result || !result.has_finished) {
19                 return <Icon.PENDING className="text-muted" size="lg" />;
20         }
21         if (result.forfeit && maySee) {
22                 return <Icon.FORFEIT className="text-danger" size="lg" />;
23         }
24         if (result.placement === 1 && maySee) {
25                 return <Icon.FIRST_PLACE className="text-gold" size="lg" />;
26         }
27         if (result.placement === 2 && maySee) {
28                 return <Icon.SECOND_PLACE className="text-silver" size="lg" />;
29         }
30         if (result.placement === 3 && maySee) {
31                 return <Icon.THIRD_PLACE className="text-bronze" size="lg" />;
32         }
33         return <Icon.FINISHED className="text-success" size="lg" />;
34 };
35
36 export const getTime = (result, maySee) => {
37         if (!result || !maySee) {
38                 return null;
39         }
40         if (result.time) {
41                 return formatTime(result);
42         }
43         if (result.forfeit) {
44                 return 'DNF';
45         }
46         return '?';
47 };
48
49 export const parseTime = str => {
50         if (!str) return null;
51         return `${str}`.split(/[-.: ]+/).reduce((acc,time) => (60 * acc) + +time, 0);
52 };
53
54 export default {
55         formatTime,
56         getIcon,
57         getTime,
58         parseTime,
59 };