UNPKG

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
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'; @Component({ selector: 'app-post-create', templateUrl: './post-create.component.html', styleUrls: ['./post-create.component.css'], }) 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); } }