From efcafa81b274839a22a46a8e35901a60563f2646 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Thu, 14 Aug 2025 22:18:39 -0700 Subject: [PATCH 1/6] Update todo --- ToDo.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ToDo.yaml b/ToDo.yaml index 148fba8..40346d4 100755 --- a/ToDo.yaml +++ b/ToDo.yaml @@ -25,7 +25,7 @@ Server: Find a way to keep all the libraries up to date DbDriver: - Make getConnection() -> Based on a connection pool so that more than a specific number of connections cannot be made + Make getConnection() -> Based on a connection pool so that more than a specific number of connections cannot be made [ 30 connections max -> else wait for connection to open ] Client: jobs/editor: -- 2.52.0 From 3e1752fda06213b7ffee52cdf3f4c11c9a12270d Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Fri, 15 Aug 2025 16:14:55 -0700 Subject: [PATCH 2/6] Start work on Resume Editor UI --- ToDo.yaml | 3 - .../pages/resumes/editor/editor.component.css | 34 +++ .../resumes/editor/editor.component.html | 247 +++++++++--------- .../pages/resumes/editor/editor.component.ts | 16 ++ 4 files changed, 178 insertions(+), 122 deletions(-) diff --git a/ToDo.yaml b/ToDo.yaml index 40346d4..c4a3165 100755 --- a/ToDo.yaml +++ b/ToDo.yaml @@ -24,9 +24,6 @@ Server: Server.csproj: Find a way to keep all the libraries up to date - DbDriver: - Make getConnection() -> Based on a connection pool so that more than a specific number of connections cannot be made [ 30 connections max -> else wait for connection to open ] - Client: jobs/editor: Job Listing Skills exists but isn't implimented in the UI diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.css b/src/Client/src/app/pages/resumes/editor/editor.component.css index 0daf73e..7230e75 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.css +++ b/src/Client/src/app/pages/resumes/editor/editor.component.css @@ -1,4 +1,38 @@ +input, textarea { + border: none; + background-color: transparent; +} + +h1 { + margin: 0; + font-size: 15px; +} + +.paper { + width: 70vw; + aspect-ratio: 1 / 1.294; + background: white; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + margin: auto; + margin-top: 50px; + border: 1px solid #ddd; +} + +.columns { + columns: 2; +} + +.resume-header { + width: 70vw; + background: white; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + margin: auto; + margin-top: 50px; + border: 1px solid #ddd; +} + .resume-section { + break-inside: avoid; background-color: #DDDDDD; margin: 10px; } diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.html b/src/Client/src/app/pages/resumes/editor/editor.component.html index 15c06d1..954a35a 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.html +++ b/src/Client/src/app/pages/resumes/editor/editor.component.html @@ -1,140 +1,149 @@
- - -
- - - - - - - - - +
+
+ +

Public:

+

Is Veteran:

+
- -
- - @for(experience of resume.experiences; track experience.trackUUID ){ -
- - - - - - - - - @if(!experience.stillEmployed){ - - } - - @for(bullet of experience.experienceBullets; track bullet.trackUUID){ -
- - +
+ +
+ + + + + + + + +
+ +
+ +
+ + @for(experience of resume.experiences; track experience.trackUUID ){ +
+ + + + + + + + + + @if(!experience.stillEmployed){ + + } + + @for(bullet of experience.experienceBullets; track bullet.trackUUID){ +
+ + +
+ }
} -
- } -
- -
-

Is Veteran:

- @if(resume.military !== null){ - - - -

Still Serving:

- @if (!resume.military.stillServing){ - - } - - @for(military of resume.military.militaryBullets; track military.trackUUID ){ -
- - - + + @if(resume.military !== null){ +
+ + +

Still Serving:

+ + @if (!resume.military.stillServing){ + + } + + @for(military of resume.military.militaryBullets; track military.trackUUID ){ +
+ + + +
+ }
} - } -
- - -
- - @for(education of resume.educations; track education.trackUUID){ -
- - - - - - - - - - @if (!education.stillStudying){ - + + +
+ + @for(education of resume.educations; track education.trackUUID){ +
+ + + + + + + + + + + @if (!education.stillStudying){ + + } +
} -
- } -
- - -
- - @for(skill of resume.skills; track skill.trackUUID){ -
- - - + + +
+ + @for(skill of resume.skills; track skill.trackUUID){ +
+ + + +
+ }
- } -
- -
- - @for(language of resume.languages; track language.trackUUID){ -
- - - + +
+ + @for(language of resume.languages; track language.trackUUID){ +
+ + + +
+ }
- } -
- + - -
- - @for(cert of resume.certifications; track cert.trackUUID){ -
- - - - + +
+ + @for(cert of resume.certifications; track cert.trackUUID){ +
+ + + + +
+ }
- } -
- - -
- - @for(proj of resume.projects; track proj.trackUUID){ -
- - - - + + +
+ + @for(proj of resume.projects; track proj.trackUUID){ +
+ + + + +
+ }
- } +
@if (isNewResume){ diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.ts b/src/Client/src/app/pages/resumes/editor/editor.component.ts index 925131e..9b276d3 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.ts +++ b/src/Client/src/app/pages/resumes/editor/editor.component.ts @@ -56,6 +56,22 @@ export class ResumesEditorComponent { }); } + PrintResume(){ + const divToPrint = document.getElementsByClassName("paper")[0]; + + const printContents = divToPrint.innerHTML; + const originalContents = document.body.innerHTML; // Store original body content + + // Temporarily replace the body content with the div's content + document.body.innerHTML = printContents; + + // Trigger the print dialog + window.print(); + + // Restore the original body content + document.body.innerHTML = originalContents; + } + addExperience(){ this.resume.experiences.push( new ResumeExperience ); } -- 2.52.0 From 50aafc17ee86c593d27e52854fdb25b010a30280 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Mon, 18 Aug 2025 20:34:23 -0700 Subject: [PATCH 3/6] Rework Auth for better stability --- src/Client/src/app/app.config.ts | 11 +++++--- src/Client/src/app/app.ts | 26 ++++++------------- src/Client/src/app/services/Authentication.ts | 21 +++++++-------- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/Client/src/app/app.config.ts b/src/Client/src/app/app.config.ts index 055fd32..7440153 100644 --- a/src/Client/src/app/app.config.ts +++ b/src/Client/src/app/app.config.ts @@ -1,13 +1,18 @@ -import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core'; +import { ApplicationConfig, inject, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; +import { Authentication } from './services/Authentication'; export const appConfig: ApplicationConfig = { providers: [ provideBrowserGlobalErrorListeners(), provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), - provideHttpClient(withInterceptorsFromDi()) + provideHttpClient(withInterceptorsFromDi()), + provideAppInitializer(async () => { + const auth = inject(Authentication); + return auth.loadLoginState(); + }) ] -}; +}; \ No newline at end of file diff --git a/src/Client/src/app/app.ts b/src/Client/src/app/app.ts index f070416..6d4ec07 100644 --- a/src/Client/src/app/app.ts +++ b/src/Client/src/app/app.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, ViewChild } from '@angular/core'; +import { Component } from '@angular/core'; import { Router, RouterModule, RouterOutlet, ActivatedRoute } from '@angular/router'; import { Authentication } from './services/Authentication'; import { CommonModule, Location } from '@angular/common'; @@ -14,32 +14,22 @@ import { isDevMode } from '@angular/core'; export class App { devMode: boolean = false; + loginToken: string | null = null; constructor( private http: HttpClient, public auth: Authentication, private router: Router, private route: ActivatedRoute, private location: Location){ - this.devMode = isDevMode(); - this.route.queryParams.subscribe(params => { - const loginToken = params['LoginToken']; - console.log("LoginToken : " + loginToken); - if (loginToken){ - this.http.post( "api/account/loginticket", JSON.stringify(loginToken), { headers: {'Content-Type': 'application/json'} } ).subscribe({ - next: data => { - auth.getLoginState(); - const pathWithoutQuery = this.location.path().split('?')[0]; - this.location.replaceState(pathWithoutQuery); - }, - error: err => { - auth.getLoginState(); + this.loginToken = params['LoginToken']; + console.log("LoginToken : " + this.loginToken); + if (this.loginToken){ + this.http.post( "api/account/loginticket", JSON.stringify(this.loginToken), { headers: {'Content-Type': 'application/json'} } ).subscribe({ + next: async() => { + await this.auth.loadLoginState(); const pathWithoutQuery = this.location.path().split('?')[0]; this.location.replaceState(pathWithoutQuery); } }) - }else{ - auth.getLoginState(); } }); - } - } diff --git a/src/Client/src/app/services/Authentication.ts b/src/Client/src/app/services/Authentication.ts index ed676de..f41bf32 100644 --- a/src/Client/src/app/services/Authentication.ts +++ b/src/Client/src/app/services/Authentication.ts @@ -1,7 +1,7 @@ import { Injectable } from "@angular/core"; import { Account } from "../models/Account"; -import { BehaviorSubject, Observable } from "rxjs"; -import { HttpClient } from "@angular/common/http"; +import { BehaviorSubject, firstValueFrom } from "rxjs"; +import { HttpClient, HttpErrorResponse } from "@angular/common/http"; @Injectable({ providedIn: 'root' }) export class Authentication{ @@ -11,17 +11,14 @@ export class Authentication{ constructor( private http: HttpClient){ } - getLoginState(): Observable { - let sub = this.http.post( "api/account/loginState", {}, {} ); - sub.subscribe({ - next: data => { - this._user.next(data); - }, - error: err => { - console.log("No login state found: ", err.error); + async loadLoginState(): Promise { + try { + this._user.next( await firstValueFrom(this.http.post( "api/account/loginState", {}, {} )) ); + } catch (err: unknown){ + if (err instanceof HttpErrorResponse) { + console.error( err.error ); } - }); - return sub; + } } Logout(){ -- 2.52.0 From 5fa8b37d50e101e9dcebff33b0d6dd2bdb9eb903 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Mon, 18 Aug 2025 20:34:36 -0700 Subject: [PATCH 4/6] Work more on resume editor --- .../pages/resumes/editor/editor.component.css | 72 ++++- .../resumes/editor/editor.component.html | 261 ++++++++++-------- .../pages/resumes/editor/editor.component.ts | 18 +- 3 files changed, 220 insertions(+), 131 deletions(-) diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.css b/src/Client/src/app/pages/resumes/editor/editor.component.css index 7230e75..ec41f96 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.css +++ b/src/Client/src/app/pages/resumes/editor/editor.component.css @@ -1,16 +1,20 @@ input, textarea { - border: none; + border: 1px solid #444; background-color: transparent; } +textarea { + resize: vertical; +} + h1 { margin: 0; font-size: 15px; } .paper { - width: 70vw; - aspect-ratio: 1 / 1.294; + width: 800px; + aspect-ratio: 17 / 22; background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); margin: auto; @@ -18,8 +22,18 @@ h1 { border: 1px solid #ddd; } +.spacer { + margin: 0 10px; +} + +.spacer-title { + display: flex; + margin: 10px 0; +} + .columns { columns: 2; + column-gap: 10px; } .resume-header { @@ -34,11 +48,59 @@ h1 { .resume-section { break-inside: avoid; background-color: #DDDDDD; - margin: 10px; + margin-bottom: 10px; } .resume-sub-section { border: 1px solid #666666; - margin: 5px; padding: 10px; +} + +.title-text { + margin: 0; + height: 20px; +} + +.header-left { + width: 50%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; +} + +.header-right { + width: 50%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-end; +} + +.header-location input{ + width: 80px; +} + +.Add { + position: relative; + float: right; + width: 20px; + height: 20px; + background-color: #0F0; + border: none; + bottom: 20px; +} + +.Del { + position: relative; + float: right; + width: 20px; + height: 20px; + background-color: #F00; + border: none; +} + +.flex-two-row { + display: flex; + flex: 1; } \ No newline at end of file diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.html b/src/Client/src/app/pages/resumes/editor/editor.component.html index 954a35a..452ec4b 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.html +++ b/src/Client/src/app/pages/resumes/editor/editor.component.html @@ -9,139 +9,160 @@
- -
- - - - - - - - -
+
+ +
+
+ + +
+ + + + +
+
+
+ + +
+
-
- -
- - @for(experience of resume.experiences; track experience.trackUUID ){ -
- - - - - - - - - - @if(!experience.stillEmployed){ - +
+ +
+

Experience

+ @for(experience of resume.experiences; track experience.trackUUID ){ + +
+ + + + + + + + + @if(!experience.stillEmployed){ + + } + + @for(bullet of experience.experienceBullets; track bullet.trackUUID){ +
+ + +
+ } +
+ } + +
+ + + @if(resume.military !== null){ +
+

Military

+ + +

Still Serving:

+ + @if (!resume.military.stillServing){ + } - - @for(bullet of experience.experienceBullets; track bullet.trackUUID){ -
- - + + @for(military of resume.military.militaryBullets; track military.trackUUID ){ +
+ + +
}
} -
- - - @if(resume.military !== null){ + +
- - -

Still Serving:

- - @if (!resume.military.stillServing){ - - } - - @for(military of resume.military.militaryBullets; track military.trackUUID ){ +

Education

+ @for(education of resume.educations; track education.trackUUID){ +
- - - + + + + + + + + + + @if (!education.stillStudying){ + + }
} + +
+ + +
+

Skills

+ @for(skill of resume.skills; track skill.trackUUID){ + +
+
+ +
+ +
+ } +
- } - - -
- - @for(education of resume.educations; track education.trackUUID){ -
- - - - - - - - - - - @if (!education.stillStudying){ - - } -
- } -
- - -
- - @for(skill of resume.skills; track skill.trackUUID){ -
- - - -
- } -
- -
- - @for(language of resume.languages; track language.trackUUID){ -
- - - -
- } -
- + +
+

Languages

+ @for(language of resume.languages; track language.trackUUID){ + +
+ + +
+ } + +
+ - -
- - @for(cert of resume.certifications; track cert.trackUUID){ -
- - - - -
- } -
- - -
- - @for(proj of resume.projects; track proj.trackUUID){ -
- - - - -
- } + +
+

Certifications

+ @for(cert of resume.certifications; track cert.trackUUID){ + +
+
+ + +
+ +
+ } + +
+ + +
+

Projects

+ @for(proj of resume.projects; track proj.trackUUID){ + +
+
+ + +
+ +
+ } + +
diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.ts b/src/Client/src/app/pages/resumes/editor/editor.component.ts index 9b276d3..8a0cf7f 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.ts +++ b/src/Client/src/app/pages/resumes/editor/editor.component.ts @@ -6,7 +6,6 @@ import { Title } from '@angular/platform-browser'; import { CommonModule } from '@angular/common'; import { Resume, ResumeCertification, ResumeEducation, ResumeExperience, ResumeExperienceBullet, ResumeLanguage, ResumeMilitary, ResumeMilitaryBullet, ResumeProject, ResumeSkill } from 'app/models/Resume'; import { Authentication } from 'app/services/Authentication'; -import { HomeComponent } from "app/pages/home/home.component"; @Component({ selector: 'main-resume-editor', @@ -21,13 +20,9 @@ export class ResumesEditorComponent { public ErrorMsg: string = ""; - constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { + constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Resume - Editor | BoredCareers"); - if (!auth.isLoggedIn){ - router.navigate(["/"]); - } this.route.queryParams.subscribe(params => { - const ResumeID = params['ResumeID'] ? +params['ResumeID'] : null; if (ResumeID !== null){ this.http.get("api/resume?ResumeID=" + ResumeID).subscribe({ @@ -44,6 +39,17 @@ export class ResumesEditorComponent { }); }; + async ngOnInit(){ + if (!this.auth.isLoggedIn){ + this.router.navigate(["/"]); + } + } + + // Pagnation // + //////////////////////////////// + + //////////////////////////////// + SubmitForm(resume: Resume){ resume.accountID = this.auth.loggedInUser.id; this.http.post("api/resume", resume).subscribe({ -- 2.52.0 From 967069acd47c974d020c1d472c7e05ea41bc98a9 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Mon, 18 Aug 2025 20:57:26 -0700 Subject: [PATCH 5/6] Seperate page init from construct --- .../src/app/pages/company/company.component.ts | 7 ++++--- .../src/app/pages/company/editor/editor.component.ts | 5 +++-- .../src/app/pages/jobs/editor/jobeditor.component.ts | 3 ++- src/Client/src/app/pages/jobs/jobs.component.ts | 11 ++++------- .../src/app/pages/jobs/viewer/jobviewer.component.ts | 7 ++++--- .../src/app/pages/resumes/editor/editor.component.ts | 12 ++++++------ .../src/app/pages/resumes/resumes.component.ts | 5 +++-- 7 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/Client/src/app/pages/company/company.component.ts b/src/Client/src/app/pages/company/company.component.ts index 45ce872..57b55cc 100644 --- a/src/Client/src/app/pages/company/company.component.ts +++ b/src/Client/src/app/pages/company/company.component.ts @@ -28,12 +28,13 @@ export class CompanyComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Companies | BoredCareers"); - if (!auth.isLoggedIn){ router.navigate(["/"]); } + }; - http.get("api/employee/").subscribe({ + ngOnInit(){ + this.http.get("api/employee/").subscribe({ next: data => { this.Employers = data; if (data[0] != null){ @@ -46,7 +47,7 @@ export class CompanyComponent { this.ErrorMsg = err.error; } }); - }; + } changeSelectedCompany(companyID: number){ this.http.get("api/company?CompanyID=" + companyID).subscribe({ diff --git a/src/Client/src/app/pages/company/editor/editor.component.ts b/src/Client/src/app/pages/company/editor/editor.component.ts index 9a89e66..5ae8f2b 100644 --- a/src/Client/src/app/pages/company/editor/editor.component.ts +++ b/src/Client/src/app/pages/company/editor/editor.component.ts @@ -24,14 +24,15 @@ export class CompanyEditorComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Company - Editor | BoredCareers"); - if (!auth.isLoggedIn){ router.navigate(["/"]); } + }; + ngOnInit(){ // Query param CompanyID -> Edit // Query param null -> New - }; + } ngAfterViewInit(){ this.formSteps.changes.subscribe(() => { diff --git a/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts b/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts index a02bd83..941e2b4 100644 --- a/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts +++ b/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts @@ -26,11 +26,12 @@ export class JobEditorComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Jobs - Editor | BoredCareers"); - if (!auth.isLoggedIn){ router.navigate(["/"]); } + } + ngOnInit(){ this.route.queryParams.subscribe(params => { const CompanyID = params['CompanyID'] ? +params['CompanyID'] : null; const JobID = params['JobID'] ? +params['JobID'] : null; diff --git a/src/Client/src/app/pages/jobs/jobs.component.ts b/src/Client/src/app/pages/jobs/jobs.component.ts index ac6d208..827bd86 100644 --- a/src/Client/src/app/pages/jobs/jobs.component.ts +++ b/src/Client/src/app/pages/jobs/jobs.component.ts @@ -23,12 +23,10 @@ export class JobsComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Jobs | BoredCareers"); + }; - if (this.Page == 1){ - - } - - http.get("api/joblisting?PageQuantity=" + 10 + "&Page=" + 1).subscribe({ + ngOnInit(){ + this.http.get("api/joblisting?PageQuantity=" + 10 + "&Page=" + 1).subscribe({ next: data => { this.JobListingPage = data; }, @@ -36,7 +34,6 @@ export class JobsComponent { this.ErrorMsg = err.error; } }); - - }; + } } \ No newline at end of file diff --git a/src/Client/src/app/pages/jobs/viewer/jobviewer.component.ts b/src/Client/src/app/pages/jobs/viewer/jobviewer.component.ts index 1c922e5..e22ae7f 100644 --- a/src/Client/src/app/pages/jobs/viewer/jobviewer.component.ts +++ b/src/Client/src/app/pages/jobs/viewer/jobviewer.component.ts @@ -22,7 +22,9 @@ export class JobViewerComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Jobs - Viewer | BoredCareers"); + }; + ngOnInit(){ this.route.queryParams.subscribe(params => { const JobID = params['JobID']; if (JobID){ @@ -43,13 +45,12 @@ export class JobViewerComponent { } }) }else{ - router.navigate(["/"]); + this.router.navigate(["/"]); } if (this.selectedJob != null){ } }); - - }; + } } \ No newline at end of file diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.ts b/src/Client/src/app/pages/resumes/editor/editor.component.ts index 8a0cf7f..af58090 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.ts +++ b/src/Client/src/app/pages/resumes/editor/editor.component.ts @@ -22,6 +22,12 @@ export class ResumesEditorComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Resume - Editor | BoredCareers"); + if (!this.auth.isLoggedIn){ + this.router.navigate(["/"]); + } + }; + + ngOnInit(){ this.route.queryParams.subscribe(params => { const ResumeID = params['ResumeID'] ? +params['ResumeID'] : null; if (ResumeID !== null){ @@ -37,12 +43,6 @@ export class ResumesEditorComponent { }); } }); - }; - - async ngOnInit(){ - if (!this.auth.isLoggedIn){ - this.router.navigate(["/"]); - } } // Pagnation // diff --git a/src/Client/src/app/pages/resumes/resumes.component.ts b/src/Client/src/app/pages/resumes/resumes.component.ts index 63f24e5..53aaf24 100644 --- a/src/Client/src/app/pages/resumes/resumes.component.ts +++ b/src/Client/src/app/pages/resumes/resumes.component.ts @@ -20,11 +20,12 @@ export class ResumesComponent { constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { this.title.setTitle("Resumes | BoredCareers"); - if (!auth.isLoggedIn){ router.navigate(["/"]); } + }; + ngOnInit(){ this.http.get("api/resume").subscribe({ next: data => { this.myResumes = data; @@ -33,7 +34,7 @@ export class ResumesComponent { console.log("Error fetching resumes: " + err.error); } }); - }; + } changeSelectedResume(ResumeID: number){ this.http.get("api/resume?ResumeID=" + ResumeID).subscribe({ -- 2.52.0 From 680189c3baa7e57d77616c7d9b404d09a22e02ee Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Mon, 18 Aug 2025 20:57:39 -0700 Subject: [PATCH 6/6] Setup Resume Editor --- src/Client/src/app/pages/resumes/editor/editor.component.html | 2 +- src/Client/src/app/pages/resumes/resumes.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.html b/src/Client/src/app/pages/resumes/editor/editor.component.html index 452ec4b..26833a1 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.html +++ b/src/Client/src/app/pages/resumes/editor/editor.component.html @@ -4,7 +4,7 @@

Public:

-

Is Veteran:

+

Is Veteran:

diff --git a/src/Client/src/app/pages/resumes/resumes.component.html b/src/Client/src/app/pages/resumes/resumes.component.html index 260a897..2371a8a 100644 --- a/src/Client/src/app/pages/resumes/resumes.component.html +++ b/src/Client/src/app/pages/resumes/resumes.component.html @@ -1,7 +1,7 @@
@for(resume of myResumes; track myResumes.length){ @if (resume.id != null){ - + } } -- 2.52.0