Skip to content
This repository was archived by the owner on Dec 26, 2022. It is now read-only.

Commit 46db5b5

Browse files
committed
Fix calc gapsMs->restMs
1 parent 4d29d3a commit 46db5b5

File tree

6 files changed

+34
-33
lines changed

6 files changed

+34
-33
lines changed
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
type CallbackPrev<T, R> = (prev: T | undefined, cur: T, index: number) => R;
22

3-
export function mapPrevCurrent<T, R = any>(
3+
export function iterPrevCurrent<T, R = any>(
4+
items: T[],
5+
callback: CallbackPrev<T, R>
6+
) {
7+
for (let i = 0; i < items.length; i++) {
8+
if (i === 0) {
9+
callback(undefined, items[i], i);
10+
} else {
11+
callback(items[i - 1], items[i], i);
12+
}
13+
}
14+
}
15+
16+
export function arrayHelper<T, R = any>(
417
items: T[],
518
callback: CallbackPrev<T, R>
619
): R[] {

src/helpers/DateTime.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ITimeRangeModel } from '../models/TaskModel';
22
import { format } from 'date-fns';
3-
import { mapPrevCurrent } from './MapPrevCurrent';
3+
import { iterPrevCurrent } from './ArrayHelper';
44

55
function timePad(time: number): string {
66
return String(time).padStart(2, '0');
@@ -49,11 +49,17 @@ export function calcDuration(taskTime: ITimeRangeModel[]): number {
4949

5050
export function calcDurationGaps(taskTime: ITimeRangeModel[]): number {
5151
let result = 0;
52-
mapPrevCurrent(taskTime, (prev, cur) => {
52+
iterPrevCurrent(taskTime, (prev, cur) => {
5353
if (prev?.end) {
5454
result += cur.start.getTime() - prev.end.getTime();
5555
}
5656
});
57+
58+
const lastTask = taskTime[taskTime.length - 1];
59+
if (lastTask && lastTask.end) {
60+
result += new Date().getTime() - lastTask.end.getTime();
61+
}
62+
5763
return result;
5864
}
5965

src/hooks/TaskHooks.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function useTaskDuration(model: TaskModel | undefined) {
3434

3535
export function useTimeItemsDuration(taskTime: TaskTimeItemModel[]) {
3636
const [durationMs, setDurationMs] = useState<number>(0);
37-
const [gapsMs, setGapsMs] = useState<number>(0);
37+
const [restMs, setRestMs] = useState<number>(0);
3838
const intervalRef = useRef<NodeJS.Timeout>();
3939

4040
const calcTaskDuration = useCallback(
@@ -49,18 +49,15 @@ export function useTimeItemsDuration(taskTime: TaskTimeItemModel[]) {
4949

5050
const setTimes = useCallback(() => {
5151
setDurationMs(calcTaskDuration());
52-
setGapsMs(calcTaskGapsDuration());
52+
setRestMs(calcTaskGapsDuration());
5353
}, [calcTaskDuration, calcTaskGapsDuration]);
5454

5555
useEffect(() => {
5656
setTimes();
5757

58-
const haveActiveTime = taskTime.some((t) => !t.time.end);
59-
if (haveActiveTime) {
60-
intervalRef.current = setInterval(() => {
61-
setTimes();
62-
}, 1000);
63-
}
58+
intervalRef.current = setInterval(() => {
59+
setTimes();
60+
}, 1000);
6461

6562
return () => {
6663
if (intervalRef.current) {
@@ -71,7 +68,7 @@ export function useTimeItemsDuration(taskTime: TaskTimeItemModel[]) {
7168

7269
return {
7370
durationMs,
74-
gapsMs,
71+
restMs,
7572
};
7673
}
7774

src/screens/hours/HoursScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import TaskTimeItemModel from '../../models/TaskTimeItemModel';
1212
import { Undefined } from '../../types/CommonTypes';
1313
import TotalHours from './components/TotalHours/TotalHours';
1414
import { createUseStyles } from 'react-jss';
15-
import { mapCurrentNext } from '../../helpers/MapPrevCurrent';
15+
import { mapCurrentNext } from '../../helpers/ArrayHelper';
1616
import { ITimeRangeModel } from '../../models/TaskModel';
1717
import { msToTime } from '../../helpers/DateTime';
1818

src/screens/hours/components/TotalHours/TotalHours.tsx

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import {
1010
getTime,
1111
msToTime,
1212
} from '../../../../helpers/DateTime';
13-
import { createUseStyles } from 'react-jss';
14-
import clsx from 'clsx';
1513
import LabelWithTooltip, { ILabelWithTooltipProps } from './LabelWithTooltip';
1614

1715
interface TotalHoursProps {
@@ -20,13 +18,12 @@ interface TotalHoursProps {
2018

2119
const TotalHours = observer((props: TotalHoursProps) => {
2220
const { timeItems } = props;
23-
const classes = useStyle();
2421

25-
const { durationMs, gapsMs } = TaskHooks.useTimeItemsDuration(timeItems);
22+
const { durationMs, restMs } = TaskHooks.useTimeItemsDuration(timeItems);
2623
const startWorkingTime = TaskHooks.useStartWorkingTime(timeItems);
2724
const estimatedWorkingTimeEnd = estimateWorkingTimeEnd(
2825
startWorkingTime,
29-
gapsMs
26+
restMs
3027
);
3128
const restHoursMs = EIGHT_HOURS - durationMs;
3229

@@ -46,7 +43,7 @@ const TotalHours = observer((props: TotalHoursProps) => {
4643
},
4744
{
4845
icon: 'mi-local-cafe',
49-
label: msToTime(gapsMs, false),
46+
label: msToTime(restMs, false),
5047
tooltip: 'Rest hours',
5148
},
5249
{
@@ -69,16 +66,4 @@ const TotalHours = observer((props: TotalHoursProps) => {
6966
);
7067
});
7168

72-
const useStyle = createUseStyles({
73-
iconAndLabel: {
74-
display: 'flex',
75-
alignItems: 'center',
76-
},
77-
icon: {
78-
fontSize: 18,
79-
color: '#5f6368',
80-
marginRight: 4,
81-
},
82-
});
83-
8469
export default TotalHours;

src/screens/projects/components/HoursByTask/HoursByTask.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { observer } from 'mobx-react';
77
import { createUseStyles } from 'react-jss';
88

99
import TaskModel, { ITimeRangeModel } from '../../../../models/TaskModel';
10-
import { mapPrevCurrent } from '../../../../helpers/MapPrevCurrent';
10+
import { arrayHelpers } from '../../../../helpers/ArrayHelper';
1111
import HoursItem from './components/HoursItem';
1212
import IconTile from '../../../../components/IconTile/IconTile';
1313
import { calcDuration, msToTime } from '../../../../helpers/DateTime';
@@ -40,7 +40,7 @@ export default observer(function HoursByTask({
4040
<BellFilled style={{ color: 'white' }} />
4141
</IconTile>
4242
{task?.time.length === 0 && <div>No billed hours</div>}
43-
{mapPrevCurrent(task?.time || [], (prev, range, index) => {
43+
{arrayHelpers(task?.time || [], (prev, range, index) => {
4444
const hoursItem = (
4545
<HoursItem
4646
range={range}

0 commit comments

Comments
 (0)