forked from technologycl/test-fullstack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest-angular.ts
176 lines (152 loc) · 4.69 KB
/
test-angular.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { Injectable } from '@angular/core';
import { BehaviorSubject, catchError, map, of, tap, retry } from 'rxjs';
/**
* -- Primer Problema: / First Problem:
*
* Mostrar el contenido de los observables disponibles en el servicio ContentService
* en el template del componente AppComponent. Adicionalmente:
* Title debe estar todo en mayúsculas
* Body debe estar todo en minúsculas
* Footer debe estar capitalizado
* /
* "Show the content of the observables available in the ContentService
* service in the AppComponent component template. Additionally:"
* Title must be all uppercase
* Body must be all lowercase
* Footer must be capitalized
*
* -- Segundo Problema: / Second Problem
*
* Se necesita que cuando el usuario haga click en el botón "Change Title", asociado al componente ChangeContentComponent,
* actualize el titulo ("title") que se ve en el componente AppComponent
* /
* "When the user clicks on the "Change Title" button, associated to the ChangeContentComponent, it is required to,
* update the title ("title") seen in the AppComponent."
*
*
* -- Tercer Problema / Third Problem
*
* Se necesita que cuando el usuario haga click en el botón "Call Api" asociado al componente ChangeContentComponent
* haga el llamado a la api manejada por el servicio GetContentService. En caso de que la conexión sea exitosa debe
* mostrarse el mensaje "Connection to API Success", caso contrario debe mostrarse el mensaje "Connection to API Failed"
* en el template asociado al componente ChangeContentComponent
* /
* "* When the user clicks on the "Call Api" button associated to the ChangeContentComponent , it is necessary to call
* the api operated by the GetContentService. In case the connection is successful the message "Connection to API Success"
* should be displayed, otherwise the message "Connection to API Failed" should be displayed in the template associated
* to the ChangeContentComponent."
*/
// Archivo: ./app.component.css
.card-title {
text-transform: uppercase;
}
.card-body {
text-transform: lowecase;
}
.card-footer {
text-transform: capitalize;
}
// Angular
@Component({
selector: 'app-root',
template: `
<div class="container">
<section>
<div class="card">
<div class="card-title">{{ title }}</div>
<br />
<hr />
<br />
<div class="card-body">{{ body }}</div>
<br />
<hr />
<br />
<div class="card-footer">{{ footer }}</div>
</div>
</section>
<change-content></change-content>
</div>
`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
title: any;
body: any;
footer: any;
constructor() {}
}
@Injectable({
providedIn: 'root',
})
export class ContentService {
private title: BehaviorSubject<string> = new BehaviorSubject(
'Este es el titulo'
);
private body: BehaviorSubject<string> = new BehaviorSubject(
'Este es el contenido principal de la pagina'
);
private footer: BehaviorSubject<string> = new BehaviorSubject(
'Este es el footer '
);
private title$ = this.title.asObservable();
private body$ = this.body.asObservable();
private footer$ = this.footer.asObservable();
constructor() {}
getTitle() {
return this.title$;
}
getBody() {
return this.body$;
}
getFooter() {
return this.footer$;
}
changeTitle() {
// Desarrollar el cuerpo del método / Develop the method body
}
}
@Component({
selector: 'change-content',
template: `
<section>
<div class="card">
<button> Change Title </button>
<button> Call Api </button>
<section> Connection to API Success </section>
<section> Connection to API Failed </section>
</div>
</section>
`,
})
export class ChangeContentComponent {
newTitle = 'Este es el titulo modificado por otro componente';
hasError = false;
hasContent = false;
constructor( private service: GetContentService) {}
changeTitle() {
// Desarrollar el cuerpo del método / Develop the method body
}
callApi(){
// Desarrollar el cuerpo del método / Develop the method body
}
}
@Injectable({
providedIn: 'root',
})
export class GetContentService {
constructor(
private http: HttpClient
) {}
getContent(){
const url = 'https://sitenotexist.com/content/0';
return this.http.get(url).pipe(
retry(2),
map( () => 'Respuesta modificada por el servicio'),
catchError( (error) => of(error)),
tap((value) => console.log('check for value', value)),
map( () => ['Respuesta modificada por el servicio nuevamente']),
);
}
}