Add a Works page
continuous-integration/drone/push Build is passing Details

pull/15/head
Colin FRIZOT 11 months ago
parent a86a40e845
commit 3bd2c44bad

@ -7,11 +7,13 @@ import { DocumentationComponent } from './components/documentation/documentation
import { FormComponent } from './components/form/form.component'; import { FormComponent } from './components/form/form.component';
import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component'; import { TermsOfServiceComponent } from './components/terms-of-service/terms-of-service.component';
import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component'; import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component';
import { WorksListComponent } from './components/works-list/works-list.component';
// Toutes les routes de l'application sont définies ici // Toutes les routes de l'application sont définies ici
const routes: Routes = [ const routes: Routes = [
{ path: '', component: LandingPageComponent }, { path: '', component: LandingPageComponent },
{ path: 'work/:id', component: WorkComponent }, { path: 'work/:id', component: WorkComponent },
{ path: 'works', component: WorksListComponent },
{ path: 'editor', component: EditorComponent }, { path: 'editor', component: EditorComponent },
{ path: 'documentation', component: DocumentationComponent }, { path: 'documentation', component: DocumentationComponent },
{ path: 'contact', component: FormComponent }, { path: 'contact', component: FormComponent },

@ -28,7 +28,7 @@
<nav class="right_part--menu"> <nav class="right_part--menu">
<a <a
[routerLink]="linkLastWork" routerLink="/works"
routerLinkActive="active" routerLinkActive="active"
[routerLinkActiveOptions]="{ exact: true }" [routerLinkActiveOptions]="{ exact: true }"
>{{ 'HeaderPage.Work' | translate }}</a >{{ 'HeaderPage.Work' | translate }}</a

@ -1,19 +1,10 @@
import { import { Component, ElementRef, Input, ViewChild } from '@angular/core';
Component,
ElementRef,
HostListener,
Input,
ViewChild,
} from '@angular/core';
import { TranslationService } from '../../services/translation.service'; import { TranslationService } from '../../services/translation.service';
import { ThemeService } from '../../services/theme.service'; import { ThemeService } from '../../services/theme.service';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { Router, RouterLink, RouterLinkActive } from '@angular/router'; import { Router, RouterLink, RouterLinkActive } from '@angular/router';
import { NgClass, NgOptimizedImage } from '@angular/common'; import { NgClass, NgOptimizedImage } from '@angular/common';
import { WorkService } from '../../services/work.service';
import { Observable } from 'rxjs';
import { Work } from '../../models/work.model';
@Component({ @Component({
selector: 'app-header', selector: 'app-header',
@ -43,13 +34,8 @@ export class HeaderComponent {
// Instanciation du service pour les actions de traduction // Instanciation du service pour les actions de traduction
constructor( constructor(
private router: Router, private router: Router,
private translationService: TranslationService, private translationService: TranslationService
private workService: WorkService ) {}
) {
this.workService.getLastWorkByUserId('5').subscribe((response: Work) => {
this.linkLastWork = 'work/' + response.link;
});
}
// Méthode pour changer la langue // Méthode pour changer la langue
onLanguageChange(event: Event) { onLanguageChange(event: Event) {

@ -0,0 +1,5 @@
<div>
<h4>{{ work.id_work }} - {{ work.title }}</h4>
<span> WORK CONTENT : {{ work.content }}</span>
<a [routerLink]="['/work/', work.id_work]">Edit Code</a>
</div>

@ -0,0 +1,22 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { WorkListDetailComponent } from './work-list-detail.component';
describe('WorkListDetailComponent', () => {
let component: WorkListDetailComponent;
let fixture: ComponentFixture<WorkListDetailComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [WorkListDetailComponent],
}).compileComponents();
fixture = TestBed.createComponent(WorkListDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,14 @@
import { Component, Input } from '@angular/core';
import { Work } from '../../models/work.model';
import { RouterLink } from '@angular/router';
@Component({
selector: 'app-work-list-detail',
standalone: true,
imports: [RouterLink],
templateUrl: './work-list-detail.component.html',
styleUrl: './work-list-detail.component.css',
})
export class WorkListDetailComponent {
@Input() work!: Work;
}

@ -1,37 +1,6 @@
<div> <div *ngIf="work">
<h2>Works</h2> <h2>Works</h2>
<h3>CURRENT WORK ID - {{ work.id_work }}</h3>
<ul> <!-- <app-editor></app-editor>-->
<li *ngFor="let work of works">
{{ work.id_work }} - {{ work.link }} - {{ work.content }}
</li>
</ul>
<form #addBookForm="ngForm" (ngSubmit)="onSubmit(addBookForm)">
<div class="form-group">
<label for="link">Link</label>
<input
type="text"
class="form-control"
id="link"
name="link"
ngModel
required />
</div>
<div class="form-group">
<label for="content">Content</label>
<input
type="text"
class="form-control"
id="content"
name="content"
ngModel
required />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<!--<app-editor></app-editor>-->
</div> </div>

@ -1,34 +1,44 @@
import { Component, OnInit } from '@angular/core'; import {Component, OnInit} from '@angular/core';
import { RouterLink, ActivatedRoute } from '@angular/router'; import {RouterLink, ActivatedRoute} from '@angular/router';
import { ThemeService } from '../../services/theme.service'; import {ThemeService} from '../../services/theme.service';
import { NgClass } from '@angular/common'; import {NgClass, NgIf} from '@angular/common';
import { TranslateModule } from '@ngx-translate/core'; import {TranslateModule} from '@ngx-translate/core';
import { Work } from '../../models/work.model'; import {Work} from '../../models/work.model';
import { WorkService } from '../../services/work.service'; import {WorkService} from '../../services/work.service';
import { NgForOf } from '@angular/common'; import {NgForOf} from '@angular/common';
import { FormsModule, NgForm } from '@angular/forms'; import {FormsModule, NgForm} from '@angular/forms';
import { Observable } from 'rxjs'; import {EditorComponent} from '../editor/editor.component';
import {WorkListDetailComponent} from '../work-list-detail/work-list-detail.component';
@Component({ @Component({
selector: 'app-work', selector: 'app-work',
templateUrl: './work.component.html', templateUrl: './work.component.html',
styleUrl: './work.component.scss', styleUrl: './work.component.scss',
standalone: true, standalone: true,
imports: [NgClass, TranslateModule, RouterLink, NgForOf, FormsModule], imports: [
NgClass,
TranslateModule,
RouterLink,
NgForOf,
FormsModule,
EditorComponent,
WorkListDetailComponent,
NgIf,
],
}) })
export class WorkComponent implements OnInit { export class WorkComponent implements OnInit {
// à retirer quand les boutons seront dans editor.component // à retirer quand les boutons seront dans editor.component
isLoaded: boolean = false; // Pour vérifier si le chargement est terminé isLoaded: boolean = false; // Pour vérifier si le chargement est terminé
themeClass!: string; themeClass!: string;
works: Work[] = []; work!: Work;
workEnCours: Observable<Work> = new Observable();
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private themeService: ThemeService, private themeService: ThemeService,
protected workService: WorkService protected workService: WorkService
) {} ) {
}
ngOnInit() { ngOnInit() {
this.themeService.isDarkTheme.subscribe((value) => { this.themeService.isDarkTheme.subscribe((value) => {
@ -36,13 +46,12 @@ export class WorkComponent implements OnInit {
? (this.themeClass = 'dark-theme') ? (this.themeClass = 'dark-theme')
: (this.themeClass = 'light-theme'); : (this.themeClass = 'light-theme');
}); });
this.workService
.getWorks() const work_id = String(this.route.snapshot.paramMap.get('id'));
.subscribe((response: Work[]) => (this.works = response));
const link = String(this.route.snapshot.paramMap.get('link')); this.workService.getWorkById(work_id).subscribe((response: Work) => {
if (link) { this.work = response as Work;
// this.workEnCours = this.workService.getWorkByLink(link); });
}
} }
onSubmit(form: NgForm) { onSubmit(form: NgForm) {

@ -1,33 +1,13 @@
<h2>Works</h2> <h2>Works</h2>
<h3>Last Work</h3>
<div *ngFor="let work of works | slice: -1">
<app-work-list-detail [work]="work"></app-work-list-detail>
</div>
<h3>All Works</h3>
<ul> <ul>
<li *ngFor="let work of works"> <li *ngFor="let work of works">
{{ work.id_work }} - {{ work.link }} - {{ work.content }} <app-work-list-detail [work]="work"></app-work-list-detail>
</li> </li>
</ul> </ul>
<form #addBookForm="ngForm" (ngSubmit)="onSubmit(addBookForm)">
<div class="form-group">
<label for="link">Link</label>
<input
type="text"
class="form-control"
id="link"
name="link"
ngModel
required />
</div>
<div class="form-group">
<label for="content">Content</label>
<input
type="text"
class="form-control"
id="content"
name="content"
ngModel
required />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>

@ -1,25 +1,33 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Work } from '../../models/work.model'; import { Work } from '../../models/work.model';
import { WorkService } from '../../services/work.service'; import { WorkService } from '../../services/work.service';
import { NgForOf } from '@angular/common'; import { NgForOf, SlicePipe } from '@angular/common';
import { FormsModule, NgForm } from '@angular/forms'; import { FormsModule, NgForm } from '@angular/forms';
import { WorkListDetailComponent } from '../work-list-detail/work-list-detail.component';
@Component({ @Component({
selector: 'app-works-list', selector: 'app-works-list',
standalone: true, standalone: true,
imports: [NgForOf, FormsModule], imports: [NgForOf, FormsModule, SlicePipe, WorkListDetailComponent],
templateUrl: './works-list.component.html', templateUrl: './works-list.component.html',
styleUrl: './works-list.component.css', styleUrl: './works-list.component.css',
}) })
export class WorksListComponent { export class WorksListComponent {
works: Work[] = []; works: Work[] = [];
// TODO - REMOVE WHEN USER MANAGEMENT DONE
FAKE_USER_ID = 1;
constructor(protected workService: WorkService) {} constructor(protected workService: WorkService) {}
ngOnInit() { ngOnInit() {
this.workService this.workService.getWorks().subscribe((works: Work[]) => {
.getWorks() works.map((work: Work) => {
.subscribe((response: Work[]) => (this.works = response)); if (work.user_id === this.FAKE_USER_ID) {
this.works.push(work);
}
});
});
} }
onSubmit(form: NgForm) { onSubmit(form: NgForm) {

@ -3,5 +3,6 @@ export interface Work {
link: string; link: string;
user_id: number; user_id: number;
language_id: number; language_id: number;
title: string;
content: string; content: string;
} }

@ -18,6 +18,10 @@ export class WorkService {
return this.http.get(`${this.API_URL}/works`); return this.http.get(`${this.API_URL}/works`);
} }
getWorkById(id: string): Observable<any> {
return this.http.get(`${this.API_URL}/works/${id}`);
}
//je veux return les works d'un user id //je veux return les works d'un user id
getWorksByUserId(user_id: string): Observable<any> { getWorksByUserId(user_id: string): Observable<any> {
return this.http.get(`${this.API_URL}/works/${user_id}`); return this.http.get(`${this.API_URL}/works/${user_id}`);
@ -42,10 +46,13 @@ export class WorkService {
postWorkCode(code: string): void { postWorkCode(code: string): void {
let body = { let body = {
link: crypto.randomUUID(), link: crypto.randomUUID(),
user_id: 1, id_user: 1,
id_language: 1, id_language: 1,
code: code, code: code,
title: 'Basic JS',
date: '2024-06-14T13:35:24.756Z',
}; };
this.http.post<any>(`${this.API_URL}/works`, body).subscribe(); this.http.post<any>(`${this.API_URL}/works`, body).subscribe();
} }
} }

Loading…
Cancel
Save