Skip to content

Commit 0cc88de

Browse files
authored
Merge pull request #554 from ioet/revert-552-233_addTimeInOption
Revert "feat: ✨ Edit start time in Time Clock #233"
2 parents 1c406e5 + 7be234b commit 0cc88de

File tree

3 files changed

+28
-142
lines changed

3 files changed

+28
-142
lines changed

src/app/modules/time-clock/components/entry-fields/entry-fields.component.html

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,6 @@
2323
/>
2424
</div>
2525

26-
<div class="form-group">
27-
<label>Time in</label>
28-
<input
29-
[clearIfNotMatch]="true"
30-
[showMaskTyped]="true"
31-
[dropSpecialCharacters]="false"
32-
matInput
33-
mask="Hh:m0:s0"
34-
(blur)="onUpdateStartHour()"
35-
formControlName="start_hour"
36-
id="start_hour"
37-
type="text"
38-
class="form-control"
39-
aria-label="Small"
40-
[class.is-invalid]="start_hour.invalid && start_hour.touched"
41-
required
42-
/>
43-
</div>
44-
4526
<app-technologies
4627
(technologyAdded)="onTechnologyAdded($event)"
4728
(technologyRemoved)="onTechnologyRemoved($event)"

src/app/modules/time-clock/components/entry-fields/entry-fields.component.spec.ts

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import {EntryFieldsComponent} from './entry-fields.component';
1010
import {ProjectState} from '../../../customer-management/components/projects/components/store/project.reducer';
1111
import {getCustomerProjects} from '../../../customer-management/components/projects/components/store/project.selectors';
1212
import { ActionsSubject } from '@ngrx/store';
13-
import { IndividualConfig, ToastrService } from 'ngx-toastr';
14-
import { formatDate } from '@angular/common';
15-
import * as moment from 'moment';
1613

1714
describe('EntryFieldsComponent', () => {
1815
type Merged = TechnologyState & ProjectState;
@@ -23,10 +20,6 @@ describe('EntryFieldsComponent', () => {
2320
let mockProjectsSelector;
2421
let entryForm;
2522
const actionSub: ActionsSubject = new ActionsSubject();
26-
const toastrServiceStub = {
27-
error: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { },
28-
warning: (message?: string, title?: string, override?: Partial<IndividualConfig>) => { }
29-
};
3023

3124
const state = {
3225
projects: {
@@ -66,18 +59,12 @@ describe('EntryFieldsComponent', () => {
6659
project_id: 'project-id-15',
6760
description: 'description for active entry',
6861
uri: 'abc',
69-
start_date : moment().format('YYYY-MM-DD'),
70-
start_hour : moment().format('HH:mm:ss'),
7162
};
7263

7364
beforeEach(async(() => {
7465
TestBed.configureTestingModule({
7566
declarations: [EntryFieldsComponent],
76-
providers: [
77-
provideMockStore({initialState: state}),
78-
{ provide: ActionsSubject, useValue: actionSub },
79-
{ provide: ToastrService, useValue: toastrServiceStub }
80-
],
67+
providers: [provideMockStore({initialState: state}), { provide: ActionsSubject, useValue: actionSub }],
8168
imports: [FormsModule, ReactiveFormsModule],
8269
}).compileComponents();
8370
store = TestBed.inject(MockStore);
@@ -110,56 +97,10 @@ describe('EntryFieldsComponent', () => {
11097

11198
expect(component.entryForm.patchValue).toHaveBeenCalledTimes(1);
11299
expect(component.entryForm.patchValue).toHaveBeenCalledWith(
113-
{
114-
description: entryDataForm.description,
115-
uri: entryDataForm.uri,
116-
activity_id: entryDataForm.activity_id,
117-
start_hour: formatDate(entry.start_date, 'HH:mm:ss', 'en')
118-
}
119-
);
100+
{ description: entryDataForm.description, uri: entryDataForm.uri, activity_id: entryDataForm.activity_id });
120101
expect(component.selectedTechnologies).toEqual([]);
121102
});
122103

123-
it('displays error message when the date selected is in the future', () => {
124-
component.newData = entry;
125-
component.activeEntry = entry ;
126-
component.setDataToUpdate(entry);
127-
spyOn(toastrServiceStub, 'error');
128-
129-
const hourInTheFuture = moment().add(1, 'hours').format('HH:mm:ss');
130-
component.entryForm.patchValue({ start_hour : hourInTheFuture});
131-
component.onUpdateStartHour();
132-
133-
expect(toastrServiceStub.error).toHaveBeenCalled();
134-
});
135-
136-
it('If start hour is in the future, reset to initial start_date in form', () => {
137-
component.newData = entry;
138-
component.activeEntry = entry ;
139-
component.setDataToUpdate(entry);
140-
141-
const hourInTheFuture = moment().add(1, 'hours').format('HH:mm:ss');
142-
component.entryForm.patchValue({ start_hour : hourInTheFuture});
143-
144-
spyOn(component.entryForm, 'patchValue');
145-
component.onUpdateStartHour();
146-
147-
expect(component.entryForm.patchValue).toHaveBeenCalledWith(
148-
{
149-
start_hour: component.newData.start_hour
150-
}
151-
);
152-
});
153-
154-
it('when a start hour is updated, then dispatch UpdateActiveEntry', () => {
155-
component.activeEntry = entry ;
156-
component.setDataToUpdate(entry);
157-
spyOn(store, 'dispatch');
158-
159-
component.onUpdateStartHour();
160-
expect(store.dispatch).toHaveBeenCalled();
161-
});
162-
163104
it('when a technology is added, then dispatch UpdateActiveEntry', () => {
164105
const addedTechnologies = ['react'];
165106
spyOn(store, 'dispatch');

src/app/modules/time-clock/components/entry-fields/entry-fields.component.ts

Lines changed: 26 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ import { ActivityState, LoadActivities } from '../../../activities-management/st
1212

1313
import * as entryActions from '../../store/entry.actions';
1414

15-
import * as moment from 'moment';
16-
import { ToastrService } from 'ngx-toastr';
17-
import { formatDate } from '@angular/common';
18-
1915
type Merged = TechnologyState & ProjectState & ActivityState;
2016

2117
@Component({
@@ -30,75 +26,56 @@ export class EntryFieldsComponent implements OnInit {
3026
activeEntry;
3127
newData;
3228

33-
constructor(
34-
private formBuilder: FormBuilder,
35-
private store: Store<Merged>,
36-
private actionsSubject$: ActionsSubject,
37-
private toastrService: ToastrService
38-
) {
29+
constructor(private formBuilder: FormBuilder, private store: Store<Merged>, private actionsSubject$: ActionsSubject) {
3930
this.entryForm = this.formBuilder.group({
4031
description: '',
4132
uri: '',
4233
activity_id: '',
43-
start_hour: '',
44-
start_date: '',
4534
});
4635
}
4736

4837
ngOnInit(): void {
4938
this.store.dispatch(new LoadActivities());
5039

51-
this.actionsSubject$
52-
.pipe(filter((action: any) => action.type === ActivityManagementActionTypes.LOAD_ACTIVITIES_SUCCESS))
53-
.subscribe((action) => {
54-
this.activities = action.payload;
55-
this.store.dispatch(new LoadActiveEntry());
56-
});
40+
this.actionsSubject$.pipe(
41+
filter((action: any) => (action.type === ActivityManagementActionTypes.LOAD_ACTIVITIES_SUCCESS))
42+
).subscribe((action) => {
43+
this.activities = action.payload;
44+
this.store.dispatch(new LoadActiveEntry());
45+
});
5746

58-
this.actionsSubject$
59-
.pipe(
60-
filter((action: any) => (
61-
action.type === EntryActionTypes.CREATE_ENTRY_SUCCESS ||
62-
action.type === EntryActionTypes.UPDATE_ENTRY_SUCCESS
63-
))
64-
).subscribe((action) => {
65-
if (!action.payload.end_date) {
66-
this.store.dispatch(new LoadActiveEntry());
67-
this.store.dispatch(new entryActions.LoadEntriesSummary());
68-
}
69-
});
47+
this.actionsSubject$.pipe(
48+
filter((action: any) => (action.type === EntryActionTypes.CREATE_ENTRY_SUCCESS))
49+
).subscribe((action) => {
50+
if (!action.payload.end_date) {
51+
this.store.dispatch(new LoadActiveEntry());
52+
}
53+
});
7054

71-
this.actionsSubject$
72-
.pipe(filter((action: any) => action.type === EntryActionTypes.LOAD_ACTIVE_ENTRY_SUCCESS))
73-
.subscribe((action) => {
74-
this.activeEntry = action.payload;
75-
this.setDataToUpdate(this.activeEntry);
76-
this.newData = {
77-
id: this.activeEntry.id,
78-
project_id: this.activeEntry.project_id,
79-
uri: this.activeEntry.uri,
80-
activity_id: this.activeEntry.activity_id,
81-
start_date: this.activeEntry.start_date,
82-
start_hour: formatDate(this.activeEntry.start_date, 'HH:mm:ss', 'en'),
83-
};
84-
});
55+
this.actionsSubject$.pipe(
56+
filter((action: any) => ( action.type === EntryActionTypes.LOAD_ACTIVE_ENTRY_SUCCESS ))
57+
).subscribe((action) => {
58+
this.activeEntry = action.payload;
59+
this.setDataToUpdate(this.activeEntry);
60+
this.newData = {
61+
id: this.activeEntry.id,
62+
project_id: this.activeEntry.project_id,
63+
uri: this.activeEntry.uri,
64+
activity_id: this.activeEntry.activity_id,
65+
};
66+
});
8567
}
8668

8769
get activity_id() {
8870
return this.entryForm.get('activity_id');
8971
}
9072

91-
get start_hour() {
92-
return this.entryForm.get('start_hour');
93-
}
94-
9573
setDataToUpdate(entryData: NewEntry) {
9674
if (entryData) {
9775
this.entryForm.patchValue({
9876
description: entryData.description,
9977
uri: entryData.uri,
10078
activity_id: entryData.activity_id,
101-
start_hour: formatDate(entryData.start_date, 'HH:mm:ss', 'en'),
10279
});
10380
if (entryData.technologies) {
10481
this.selectedTechnologies = entryData.technologies;
@@ -116,19 +93,6 @@ export class EntryFieldsComponent implements OnInit {
11693
this.store.dispatch(new entryActions.UpdateEntryRunning({ ...this.newData, ...this.entryForm.value }));
11794
}
11895

119-
onUpdateStartHour() {
120-
const startDate = formatDate(this.activeEntry.start_date, 'yyyy-MM-dd', 'en');
121-
const newHourEntered = new Date(`${startDate}T${this.entryForm.value.start_hour.trim()}`).toISOString();
122-
const isEntryDateInTheFuture = moment(newHourEntered).isAfter(moment());
123-
if (isEntryDateInTheFuture) {
124-
this.toastrService.error('You cannot start a time-entry in the future');
125-
this.entryForm.patchValue({ start_hour: this.newData.start_hour });
126-
return;
127-
}
128-
this.entryForm.patchValue({ start_date: newHourEntered });
129-
this.store.dispatch(new entryActions.UpdateEntryRunning({ ...this.newData, ...this.entryForm.value }));
130-
}
131-
13296
onTechnologyAdded($event: string[]) {
13397
this.store.dispatch(new entryActions.UpdateEntryRunning({ ...this.newData, technologies: $event }));
13498
}

0 commit comments

Comments
 (0)