Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.11 KB | None | 0 0
  1. {title: "An error occured", error: {errors: {user: {,…}}, _message: "Guide validation failed",…}}
  2.  
  3. Body.prototype.json = function () {
  4. if (typeof this._body === 'string') {
  5. return JSON.parse(/** @type {?} */ (this._body));
  6. }
  7. if (this._body instanceof ArrayBuffer) {
  8. return JSON.parse(this.text());
  9. }
  10. return this._body;
  11.  
  12. import { GuideService } from '../guide/guide.service';
  13. import { Component, OnInit } from '@angular/core';
  14. import { Guide } from '../guide/guide.model';
  15. import { Form, FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
  16. import { User } from '../auth/user.model';
  17. import { GuideResource } from '../create-guide/guide-resource/guide-resource.model';
  18. import { Observable } from 'rxjs/Rx';
  19.  
  20.  
  21. @Component({
  22. selector: 'app-create-guide',
  23. templateUrl: './create-guide.component.html',
  24. styleUrls: ['./create-guide.component.css']
  25. })
  26. export class CreateGuideComponent implements OnInit {
  27.  
  28. rform: FormGroup;
  29.  
  30. constructor(private fb: FormBuilder, public guideService: GuideService) {
  31. }
  32.  
  33.  
  34.  
  35. save(model: FormGroup) {
  36. const newGuide = new Guide(
  37. model.value.title,
  38. model.value.description,
  39. model.value.prereqs,
  40. model.value.experienceLevel,
  41. model.value.guideResources,
  42. new User('User', 'Meme team', 'user@gmail.com', 'guide')
  43. );
  44. this.guideService.addGuide(newGuide)
  45. .subscribe(
  46. data => console.log(data),
  47. error => console.error(error)
  48. );
  49.  
  50. }
  51.  
  52. initGuideResource() {
  53. return this.fb.group({
  54. resourceTitle: [null, Validators.compose([Validators.required])],
  55. resourceLink: [null, Validators.compose([Validators.required])],
  56. resourceTime: [null, Validators.compose([Validators.required])],
  57. resourceContent: [null, Validators.compose([Validators.required])]
  58. });
  59. }
  60.  
  61. addGuideResource() {
  62. // add guide to the list
  63. const control = <FormArray>this.rform.controls['guideResources'];
  64. control.push(this.initGuideResource());
  65. }
  66.  
  67. removeGuideResource(i: number) {
  68. // remove guide from the list
  69. const control = <FormArray>this.rform.controls['guideResources'];
  70. control.removeAt(i);
  71. }
  72.  
  73. ngOnInit() {
  74. this.rform = this.fb.group({
  75. title : [null, Validators.compose([Validators.required])],
  76. description : [null, Validators.compose([Validators.required])],
  77. prereqs: [null, Validators.compose([Validators.required])],
  78. experienceLevel: [null, Validators.required],
  79. guideResources: this.fb.array([
  80. this.initGuideResource()
  81. ])
  82.  
  83. });
  84. }
  85.  
  86.  
  87.  
  88. }
  89.  
  90. <form [formGroup]="rform" (ngSubmit)="save(rform)">
  91. <div class="container mt-5">
  92. <div class="form-group">
  93. <h1 style="text-align:center">Create a guide</h1>
  94.  
  95. <label class="mt-4">Title</label>
  96. <input type="text" class="form-control" formControlName="title">
  97.  
  98. <label class="mt-4">Description</label>
  99. <textarea id="description" type="text" class="form-control" formControlName="description"></textarea>
  100.  
  101. <label class="mt-4">Required prerequisite knowledge</label>
  102. <textarea id="prereqs" type="text" class="form-control" formControlName="prereqs"></textarea>
  103.  
  104. <label class="mt-4">What should their experience level be before starting this guide? (Beginner, Intermediate, Advanced)</label>
  105. <select class="form-control" formControlName="experienceLevel">
  106. <option value="Beginner">Beginner</option>
  107. <option value="Intermediate">Intermediate</option>
  108. <option value="Advanced">Advanced</option>
  109. </select>
  110.  
  111. <div formArrayName="guideResources">
  112. <div *ngFor="let resource of rform.controls.guideResources.controls; let i=index">
  113. <div class="mt-5">
  114. <span>Resource #{{i+1}}</span>
  115. <span class=""><button class="btn btn-danger btn-sm" (click)="removeGuideResource(i)">Delete Resource</button></span>
  116. </div>
  117. <div [formGroupName]="i">
  118. <app-guide-resource [guideResourceForm]=rform.controls.guideResources.controls[i]></app-guide-resource>
  119. </div>
  120. </div>
  121.  
  122. <div class="mt-3 mb-5">
  123. <button class="btn btn-primary" (click)="addGuideResource()">Add Resource</button>
  124. </div>
  125.  
  126. </div>
  127.  
  128. </div>
  129.  
  130. <button type="submit" class="btn btn-success form-control mb-5" [disabled]="!rform.valid">Submit Guide</button>
  131.  
  132. </div>
  133.  
  134.  
  135. </form>
  136.  
  137. import { NgForm } from '@angular/forms/src/directives';
  138. import { Component, Input, OnInit } from '@angular/core';
  139. import { GuideResource } from './guide-resource.model';
  140. import { FormGroup, ReactiveFormsModule, FormBuilder } from '@angular/forms';
  141.  
  142.  
  143. @Component({
  144. moduleId: module.id,
  145. selector: 'app-guide-resource',
  146. templateUrl: './guide-resource.component.html',
  147. styleUrls: ['./guide-resource.component.css']
  148. })
  149. export class GuideResourceComponent implements OnInit {
  150.  
  151. @Input() guideResourceForm: FormGroup;
  152.  
  153. constructor() { }
  154.  
  155. ngOnInit() {}
  156. }
  157.  
  158. <div [formGroup]="guideResourceForm">
  159. <div class="card">
  160. <div class="card-block">
  161. <div class="form-group col-xs-6">
  162. <label>Name of Resource</label>
  163. <input type="text" class="form-control" formControlName="resourceTitle">
  164. <!-- <small [hidden]="guideResourceForm.controls.resourceTitle.valid" class="text-danger">
  165. Name of Resource is not valid
  166. </small> -->
  167. </div>
  168.  
  169. <div class="form-group col-xs-6 mt-3">
  170. <label>Where is this found? (URL only)</label>
  171. <input type="url" class="form-control" formControlName="resourceLink">
  172. </div>
  173.  
  174. <div class="form-group col-xs-6 mt-3">
  175. <label>How long does it take to complete? (in hours)</label>
  176. <input type="number" class="form-control" formControlName="resourceTime">
  177. <!-- <small [hidden]="guideResourceForm.controls.resourceTime.valid" class="text-danger">
  178. Resource Time is not valid
  179. </small> -->
  180. </div>
  181.  
  182. <div class="form-group col-xs-6 mt-3">
  183. <label>Resource Content (include everything you wish you knew when you started! Including common mistakes, sections to skip, etc.)</label>
  184. <input id="content" type="text" class="form-control" formControlName="resourceContent">
  185. <!-- <small [hidden]="guideResourceForm.controls.resourceContent.valid" class="text-danger">
  186. Name of Resource is not valid
  187. </small> -->
  188. </div>
  189. </div>
  190. </div>
  191.  
  192. </div>
  193.  
  194. import { Guide } from './guide.model';
  195. import { Headers, Http, Response } from '@angular/http';
  196. import {Injectable} from '@angular/core';
  197. import 'rxjs/Rx';
  198. import { Observable } from 'rxjs/Rx';
  199.  
  200. @Injectable()
  201. export class GuideService {
  202. constructor(private http: Http) {}
  203.  
  204. addGuide(guide: Guide) {
  205. const body = JSON.stringify(guide);
  206. const headers = new Headers({'Content-Type': 'application/json'});
  207. const token = localStorage.getItem('token');
  208. return this.http.post('http://localhost:3000/create', body, {headers: headers})
  209. .map((response: Response) => response.json())
  210. .catch((error: Response) => Observable.throw(error.json));
  211. }
  212. }
  213.  
  214. var express = require('express');
  215. var Guide = require('../../models/guide');
  216. var User = require('../../models/user')
  217. var router = express.Router();
  218.  
  219.  
  220. router.post('/create', function(req, res, next) {
  221. var guide = new Guide({
  222. title: req.body.title,
  223. description: req.body.title,
  224. prereqs: req.body.prereqs,
  225. experience: req.body.experience,
  226. guideResources: req.body.guideResources,
  227. dateCreated: Date.now(),
  228. user: new User({
  229. username: "User",
  230. password: "SupaSecret",
  231. email: "email@email.com"
  232. })
  233. });
  234. guide.save();
  235. res.redirect('/');
  236. })
  237.  
  238.  
  239. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement