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

Commit 2a60ff1

Browse files
committed
Added time gaps between working hours items
1 parent aab9dd0 commit 2a60ff1

File tree

5 files changed

+73
-24
lines changed

5 files changed

+73
-24
lines changed

src/helpers/IterateLastCurrent.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/helpers/MapPrevCurrent.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
type CallbackPrev<T, R> = (prev: T | undefined, cur: T, index: number) => R;
2+
3+
export function mapPrevCurrent<T, R = any>(
4+
items: T[],
5+
callback: CallbackPrev<T, R>
6+
): R[] {
7+
const result: R[] = [];
8+
for (let i = 0; i < items.length; i++) {
9+
if (i === 0) {
10+
result.push(callback(undefined, items[i], i));
11+
} else {
12+
result.push(callback(items[i - 1], items[i], i));
13+
}
14+
}
15+
return result;
16+
}
17+
18+
type CallbackNext<T, R> = (cur: T, next: T | undefined, index: number) => R;
19+
20+
export function mapCurrentNext<T, R = any>(
21+
items: T[],
22+
callback: CallbackNext<T, R>
23+
): R[] {
24+
const result: R[] = [];
25+
for (let i = 0; i < items.length; i++) {
26+
if (i === items.length - 1) {
27+
result.push(callback(items[i], undefined, i));
28+
} else {
29+
result.push(callback(items[i], items[i + 1], i));
30+
}
31+
}
32+
return result;
33+
}

src/screens/hours/HoursView.tsx

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,23 @@ import TaskTimeItemModel from '../../models/TaskTimeItemModel';
1111
import { Undefined } from '../../types/CommonTypes';
1212
import TotalHours from './components/TotalHours/TotalHours';
1313
import { createUseStyles } from 'react-jss';
14+
import { mapCurrentNext } from '../../helpers/MapPrevCurrent';
15+
import { ITimeRangeModel } from '../../models/TaskModel';
16+
import { msToTime } from '../../helpers/DateTime';
1417

1518
const { tasksStore } = rootStore;
1619

20+
function getDiff(
21+
prev: ITimeRangeModel | undefined,
22+
next: ITimeRangeModel | undefined
23+
) {
24+
if (prev?.end && next?.start) {
25+
return msToTime(next.start.getTime() - prev.end.getTime());
26+
}
27+
28+
return '';
29+
}
30+
1731
export default observer(function HoursView() {
1832
const classes = useStyles();
1933
const [date, setDate] = useState<Date>(new Date());
@@ -29,13 +43,20 @@ export default observer(function HoursView() {
2943
<Space direction="vertical">
3044
<SelectDate date={date} onChange={setDate} />
3145
<TotalHours timeItems={timeItems} />
32-
{timeItems.map((taskTime, index) => (
33-
<HoursCard
34-
key={index}
35-
taskTime={taskTime}
36-
onClick={(taskTime) => setCurrentTaskTime(taskTime)}
37-
/>
38-
))}
46+
<div className={classes.cards}>
47+
{mapCurrentNext(timeItems, (item, next, index) => (
48+
<div>
49+
<HoursCard
50+
key={index}
51+
taskTime={item}
52+
onClick={(taskTime) => setCurrentTaskTime(taskTime)}
53+
/>
54+
<div className={classes.breakTime}>
55+
{getDiff(item.time, next?.time)}
56+
</div>
57+
</div>
58+
))}
59+
</div>
3960
</Space>
4061
<TimeRangeModal
4162
visible={!!currentTaskTime}
@@ -60,4 +81,14 @@ const useStyles = createUseStyles({
6081
padding: 8,
6182
},
6283
},
84+
cards: {
85+
display: 'flex',
86+
flexWrap: 'wrap',
87+
},
88+
breakTime: {
89+
display: 'flex',
90+
justifyContent: 'flex-end',
91+
margin: '0 13px',
92+
fontSize: 11,
93+
},
6394
});

src/screens/hours/components/HoursCard/HoursCard.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export default observer(function HoursCard({
6262
const useStyle = createUseStyles({
6363
root: {
6464
width: 300,
65+
margin: 4,
6566

6667
'& .ant-card-body': {
6768
display: 'flex',

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

Lines changed: 1 addition & 1 deletion
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/IterateLastCurrent';
10+
import { mapPrevCurrent } from '../../../../helpers/MapPrevCurrent';
1111
import HoursItem from './components/HoursItem';
1212
import IconTile from '../../../../components/IconTile/IconTile';
1313
import { calcDuration, msToTime } from '../../../../helpers/DateTime';

0 commit comments

Comments
 (0)