-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.ts
155 lines (138 loc) · 5.02 KB
/
utils.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
@Component({
selector: "app-crear-post",
standalone: true,
imports: [FormsModule, CommonModule],
template: `
<div class="container">
<div class="content">
<img src="assets/images/interior.jpg" alt="Imagen de registro" />
<div class="form-container">
<h2>Crear Publicacion</h2>
<form class="form-group">
<input
type="text"
placeholder="Titulo"
name="titulo"
[(ngModel)]="titulo"
required
/>
<input
type="text"
placeholder="Descripcion"
name="descripcion"
[(ngModel)]="descripcion"
required
/>
<input
type="number"
placeholder="Precio"
name="precio"
[(ngModel)]="precio"
required
/>
<input
type="text"
placeholder="Ubicacion"
name="ubicacion"
[(ngModel)]="ubicacion"
required
/>
<input type="file" name="imagen" (change)="onFileSelected($event)" required />
<button (click)="createPost()">Crear Publicación</button>
</form>
<img *ngIf="previewUrl" [src]="previewUrl" alt="Vista previa" style="max-width: 200px;" />
</div>
</div>
</div>
`,
styleUrl: "./crear-post.component.css",
})
export class CrearPostComponent {
public titulo: string = ""; // Variable que almacena el titulo del post
public descripcion: string = ""; // Variable que almacena la descripcion del post
public precio: string = ""; // Variable que almacena el precio del post
public ubicacion: string = ""; // Variable que almacena la ubicacion del post
// public imagenes: string = ""; // Variable que almacena la imagen del post
public apiResponse: any = ""; // Variable que almacena la respuesta de la API
// Permite seleccionar un archivo, verifica que sea una imagen y lo almacena en la variable selectedFile
public selectedFile: File | null = null; // Variable que almacena el archivo seleccionado
// ArrayBuffer ayuda a convertir la imagen a un formato que se pueda mostrar en la vista
public previewUrl: string | ArrayBuffer | null = null; // Variable que almacena la imagen seleccionada
// Dentro del constructor inyectamos autenticacionService para verificar si el usuario esta autenticado
constructor(
private http: HttpClient,
private router: Router,
private autenticacionService: AutenticacionService
) {}
// Metodo que se ejecuta al iniciar el componente
ngOnInit() {
if (!this.autenticacionService.isAuthenticated()) {
this.router.navigate(["/login"]);
}
}
onFileSelected(event: Event): void {
// Obtener el archivo seleccionado como input
const input = event.target as HTMLInputElement;
// Verificar si se selecciono un archivo
if (input.files && input.files[0]) {
this.selectedFile = input.files[0];
// Crear una vista previa de la imagen
const reader = new FileReader();
reader.onload = () => {
this.previewUrl = reader.result;
};
reader.readAsDataURL(this.selectedFile);
}
}
public createPost() {
const url = "http://localhost:9898/publicaciones";
// Creamos un objeto body que contiene los datos del post
// estos se obtienen de las variables del componente
const body = {
titulo: this.titulo,
descripcion: this.descripcion,
precio: this.precio,
ubicacion: this.ubicacion,
usuario: {
_id: this.autenticacionService.getUser()._id,
nombre: this.autenticacionService.getUser().nombre,
email: this.autenticacionService.getUser().email,
},
};
// Hacemos una validacion para verificar que no haya campos vacios
if (
!this.titulo ||
!this.descripcion ||
!this.precio ||
!this.ubicacion ||
!this.selectedFile
) {
alert("No deben haber campos vacios");
console.log("Faltan datos");
return;
}
const formData = new FormData();
// formData.append("titulo", this.titulo);
// formData.append("descripcion", this.descripcion);
// formData.append("precio", this.precio);
// formData.append("ubicacion", this.ubicacion);
formData.append("imagen", this.selectedFile);
// formData.append("usuario", this.autenticacionService.getUser()._id);
// Si todos los campos estan llenos, se hace la peticion POST a la API
// Se envia el body y los headers de autenticacion
// Si la peticion es exitosa, se redirige al usuario a la pagina de inicio
this.http
.post(url, body, { headers: this.autenticacionService.getAuthHeaders() })
.subscribe({
next: (res) => {
this.apiResponse = res;
console.log(this.apiResponse);
console.log(this.autenticacionService.getUser()._id);
this.router.navigate(["/inicio"]);
},
error: (err) => {
console.log(err);
},
});
}
}