mean-guide-frontend
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.
117 lines (110 loc) • 3.26 kB
text/typescript
import { Component, Output, OnInit, OnDestroy } from '@angular/core';
import { NgForm, FormGroup, FormControl, Validators } from '@angular/forms';
import { PostsService } from '../posts.service';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { Post } from '../post.model';
import { mimeType } from './mime-type.validator';
import { Subscription } from 'rxjs';
import { AuthService } from 'src/app/auth/auth.service';
export class PostCreateComponent implements OnInit, OnDestroy {
enteredContent = '';
enteredTitle = '';
post: Post = null;
isLoading = false;
form: FormGroup;
imagePreview: string;
private authStatusSub: Subscription;
private mode = 'create';
private postId: string = null;
constructor(
public postsService: PostsService,
public route: ActivatedRoute,
private authService: AuthService
) {}
ngOnDestroy(): void {
this.authStatusSub.unsubscribe()
}
ngOnInit(): void {
this.authStatusSub = this.authService
.getAuthStatusListener()
.subscribe((authStatus) => (this.isLoading = false));
this.form = new FormGroup({
title: new FormControl(null, {
validators: [Validators.required, Validators.minLength(3)],
}),
content: new FormControl(null, {
validators: [Validators.required],
}),
image: new FormControl(null, {
validators: [Validators.required],
asyncValidators: [mimeType],
}),
});
this.route.paramMap.subscribe((paramMap: ParamMap) => {
if (paramMap.has('postId')) {
this.mode = 'edit';
this.postId = paramMap.get('postId');
this.isLoading = true;
this.postsService.getPost(this.postId).subscribe((postData) => {
this.isLoading = false;
this.post = {
id: postData._id,
...postData,
};
this.form.setValue({
title: this.post.title,
content: this.post.content,
image: this.post.imagePath,
});
});
} else {
this.mode = 'create';
this.postId = null;
this.post = null;
}
});
}
onSavePost() {
if (this.form.invalid) {
console.log('form invalid');
return;
}
this.isLoading = true;
if (this.mode == 'create') {
this.postsService.addPost(
this.form.value.title,
this.form.value.content,
this.form.value.image
);
} else {
this.postsService.updatePost(
{
id: this.postId,
title: this.form.value.title,
content: this.form.value.content,
imagePath: null,
creator: null,
},
this.form.value.image
);
}
this.form.reset();
}
onImagePicked(event: Event) {
const file = (event.target as HTMLInputElement).files[0];
this.form.patchValue({
image: file,
});
this.form.get('image').updateValueAndValidity();
const reader = new FileReader();
reader.onload = () => {
this.imagePreview = reader.result as string;
};
reader.readAsDataURL(file);
}
}