11import { action , computed , makeObservable , observable } from 'mobx' ;
2- import isSameDay from 'date-fns/isSameDay ' ;
2+ import { isSameDay , startOfDay } from 'date-fns' ;
33
44import AbstractModel from '../../../base/AbstractModel' ;
55import { ITreeItem } from '../../../types/ITreeItem' ;
6- import { startOfDay } from 'date-fns' ;
76
87export interface IJsonTimeRangeModel {
98 start : string ;
@@ -24,47 +23,55 @@ interface IJsonTaskModel extends ITreeItem<IJsonTaskModel> {
2423 expanded : boolean ;
2524 time : string [ ] [ ] | IJsonTimeRangeModel [ ] ;
2625 datesInProgress : string [ ] ;
27- children : IJsonTaskModel [ ] ;
2826 details : string [ ] ;
2927}
3028
29+ const parseTimeRageItems = (
30+ timeItems : ( string [ ] | IJsonTimeRangeModel | ITimeRangeModel ) [ ]
31+ ) => {
32+ return timeItems . map (
33+ ( range : string [ ] | IJsonTimeRangeModel | ITimeRangeModel ) => {
34+ if ( Array . isArray ( range ) ) {
35+ return {
36+ start : new Date ( range [ 0 ] ) ,
37+ end : range [ 1 ] ? new Date ( range [ 1 ] ) : undefined ,
38+ description : undefined ,
39+ } ;
40+ } else {
41+ return {
42+ start : new Date ( range . start ) ,
43+ end : range . end ? new Date ( range . end ) : undefined ,
44+ description : range . description ,
45+ } ;
46+ }
47+ }
48+ ) ;
49+ } ;
50+
3151export default class TaskModel extends AbstractModel {
3252 key : string = '' ;
3353 title : string = '' ;
3454 children : TaskModel [ ] = [ ] ;
55+ parent : TaskModel | null = null ;
3556 projectId : string = '' ;
3657 checked : boolean = false ;
37- expanded : boolean = true ;
3858 active : boolean = false ;
59+ expanded : boolean = true ;
3960 time : ITimeRangeModel [ ] = [ ] ;
4061 datesInProgress : Date [ ] = [ ] ;
4162 details : string = '' ;
4263
43- constructor ( props : IJsonTaskModel ) {
64+ constructor ( props : IJsonTaskModel | TaskModel ) {
4465 super ( ) ;
45- this . load ( props ) ;
46- this . children = props . children ?. map ( ( json ) => new TaskModel ( json ) ) || [ ] ;
47- this . time =
48- // @ts -ignore
49- props . time ?. map < ITimeRangeModel > (
50- ( range : string [ ] | IJsonTimeRangeModel ) => {
51- if ( Array . isArray ( range ) ) {
52- return {
53- start : new Date ( range [ 0 ] ) ,
54- end : range [ 1 ] ? new Date ( range [ 1 ] ) : undefined ,
55- description : undefined ,
56- } ;
57- } else {
58- return {
59- start : new Date ( range . start ) ,
60- end : range . end ? new Date ( range . end ) : undefined ,
61- description : range . description ,
62- } ;
63- }
64- }
65- ) || [ ] ;
66- this . datesInProgress =
67- props . datesInProgress ?. map ( ( date ) => new Date ( date ) ) || [ ] ;
66+ const newProps = {
67+ ...props ,
68+ children : props . children ?. map ( ( json ) => new TaskModel ( json ) ) || [ ] ,
69+ time : props . time ? parseTimeRageItems ( props . time ) : [ ] ,
70+ datesInProgress :
71+ props . datesInProgress ?. map ( ( date ) => new Date ( date ) ) || [ ] ,
72+ } ;
73+
74+ this . load ( newProps ) ;
6875
6976 makeObservable ( this , {
7077 key : observable ,
@@ -117,9 +124,10 @@ export default class TaskModel extends AbstractModel {
117124
118125 start ( ) {
119126 this . active = true ;
120- this . addDateWhenWasInProgress ( new Date ( ) ) ;
127+ const dateNow = new Date ( ) ;
128+ this . addDateWhenWasInProgress ( dateNow ) ;
121129 this . time . push ( {
122- start : new Date ( ) ,
130+ start : dateNow ,
123131 end : undefined ,
124132 description : undefined ,
125133 } ) ;
0 commit comments