Skip to content

Commit f0909f1

Browse files
committed
EditableTimeItemsView.tsx
1 parent 103a834 commit f0909f1

File tree

2 files changed

+83
-49
lines changed

2 files changed

+83
-49
lines changed

src/screens/hours/HoursScreen.tsx

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,16 @@ import { observer } from 'mobx-react';
44
import { createUseStyles } from 'react-jss';
55

66
import rootStore from '../../modules/RootStore';
7-
import HoursCard from './components/HoursCard/HoursCard';
87
import { getTimeItems } from '../../helpers/TaskHelper';
9-
import TimeRangeModal from '../../components/TimeRangeModal/TimeRangeModal';
10-
import TaskTimeItemModel from '../../modules/tasks/models/TaskTimeItemModel';
11-
import { Undefined } from '../../types/CommonTypes';
128
import TotalHours from './components/TotalHours/TotalHours';
13-
import { mapCurrentNext } from '../../helpers/ArrayHelper';
14-
import { ITimeRangeModel } from '../../modules/tasks/models/TaskModel';
15-
import { msToTime } from '../../helpers/DateTime';
169
import Header from './components/Header';
10+
import EditableTimeItemsView from './components/EditableTimeItemsView';
1711

1812
const { tasksStore } = rootStore;
1913

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-
3114
export default observer(function HoursScreen() {
3215
const classes = useStyles();
3316
const [date, setDate] = useState<Date>(new Date());
34-
const [currentTaskTime, setCurrentTaskTime] = useState<
35-
Undefined<TaskTimeItemModel>
36-
>();
3717

3818
const tasks = useMemo(() => tasksStore.getTasksByDate(date), [
3919
tasksStore.tasks,
@@ -46,25 +26,8 @@ export default observer(function HoursScreen() {
4626
<Space direction="vertical">
4727
<Header date={date} setDate={setDate} />
4828
<TotalHours timeItems={timeItems} />
49-
<div className={classes.cards}>
50-
{mapCurrentNext(timeItems, (item, next, index) => (
51-
<div key={index}>
52-
<HoursCard
53-
taskTime={item}
54-
onClick={(taskTime) => setCurrentTaskTime(taskTime)}
55-
/>
56-
<div className={classes.breakTime}>
57-
{getDiff(item.time, next?.time)}
58-
</div>
59-
</div>
60-
))}
61-
</div>
29+
<EditableTimeItemsView date={date} />
6230
</Space>
63-
<TimeRangeModal
64-
visible={!!currentTaskTime}
65-
onClose={() => setCurrentTaskTime(undefined)}
66-
taskTime={currentTaskTime}
67-
/>
6831
</Layout>
6932
);
7033
});
@@ -83,14 +46,4 @@ const useStyles = createUseStyles({
8346
padding: 8,
8447
},
8548
},
86-
cards: {
87-
display: 'flex',
88-
flexWrap: 'wrap',
89-
},
90-
breakTime: {
91-
display: 'flex',
92-
justifyContent: 'flex-end',
93-
margin: '0 13px',
94-
fontSize: 11,
95-
},
9649
});
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import React, { FC, useMemo, useState } from 'react';
2+
import { observer } from 'mobx-react';
3+
import { createUseStyles } from 'react-jss';
4+
5+
import HoursCard from './HoursCard/HoursCard';
6+
import TimeRangeModal from '../../../components/TimeRangeModal/TimeRangeModal';
7+
import { mapCurrentNext } from '../../../helpers/ArrayHelper';
8+
import { msToTime } from '../../../helpers/DateTime';
9+
import { getTimeItems } from '../../../helpers/TaskHelper';
10+
import rootStore from '../../../modules/RootStore';
11+
import { ITimeRangeModel } from '../../../modules/tasks/models/TaskModel';
12+
import TaskTimeItemModel from '../../../modules/tasks/models/TaskTimeItemModel';
13+
import { Undefined } from '../../../types/CommonTypes';
14+
15+
const { tasksStore } = rootStore;
16+
17+
function getDiff(
18+
prev: ITimeRangeModel | undefined,
19+
next: ITimeRangeModel | undefined
20+
) {
21+
if (prev?.end && next?.start) {
22+
return msToTime(next.start.getTime() - prev.end.getTime());
23+
}
24+
25+
return '';
26+
}
27+
28+
type Props = {
29+
date: Date;
30+
};
31+
32+
const EditableTimeItemsView: FC<Props> = ({ date }: Props) => {
33+
const classes = useStyles();
34+
35+
const [currentTaskTime, setCurrentTaskTime] = useState<
36+
Undefined<TaskTimeItemModel>
37+
>();
38+
39+
const timeItems = useMemo(() => {
40+
const tasks = tasksStore.getTasksByDate(date);
41+
return getTimeItems(tasks, date);
42+
}, [tasksStore.tasks, date]);
43+
44+
return (
45+
<>
46+
<div className={classes.cards}>
47+
{mapCurrentNext(timeItems, (item, next, index) => (
48+
<div key={index}>
49+
<HoursCard
50+
taskTime={item}
51+
onClick={(taskTime) => setCurrentTaskTime(taskTime)}
52+
/>
53+
<div className={classes.breakTime}>
54+
{getDiff(item.time, next?.time)}
55+
</div>
56+
</div>
57+
))}
58+
</div>
59+
<TimeRangeModal
60+
visible={!!currentTaskTime}
61+
onClose={() => setCurrentTaskTime(undefined)}
62+
taskTime={currentTaskTime}
63+
/>
64+
</>
65+
);
66+
};
67+
68+
export default observer(EditableTimeItemsView);
69+
70+
const useStyles = createUseStyles({
71+
cards: {
72+
display: 'flex',
73+
flexWrap: 'wrap',
74+
},
75+
breakTime: {
76+
display: 'flex',
77+
justifyContent: 'flex-end',
78+
margin: '0 13px',
79+
fontSize: 11,
80+
},
81+
});

0 commit comments

Comments
 (0)