You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.0 KiB

import { Component } from '@angular/core';
import { gotoPage, getEmail } from '../Helper/Helpers';
import { Router } from '@angular/router';
import { ModifyContestService } from '../modify-contest/modify-contest.service';
import { Image } from '../models/image.model';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
@Component({
selector: 'app-add-flag',
imports: [CommonModule, FormsModule],
templateUrl: './add-flag.component.html',
styleUrl: './add-flag.component.css'
})
export class AddFlagComponent {
allImages: Image[] = [];
selectedImage: string = "Select an Image";
constructor(private router: Router, private modifyContestService: ModifyContestService){}
ngOnInit(): void {
this.getImages();
}
// add a flag to a contest
async AddFlag(){
// get contestId from URL
const contestId = parseInt(sessionStorage.getItem('selectedContestID') || '', 10);
// get all the values in the form
const flagName = document.getElementById("Name") as HTMLInputElement;
const description = document.getElementById("Description") as HTMLInputElement;
let Hint1 = document.getElementById("Hint1") as HTMLInputElement;
let Hint2 = document.getElementById("Hint2") as HTMLInputElement;
let Hint3 = document.getElementById("Hint3") as HTMLInputElement;
const image = document.getElementById('Images') as HTMLInputElement;
const path = document.getElementById('Path') as HTMLInputElement;
// required fields
if(!flagName.value){
alert("Enter a flag name.");
return;
}
if(contestId === null || contestId === undefined){
alert("Please select a contest first.");
return;
}
// add the flag
const data = {name: flagName.value, desc: description.value, contest: contestId, image: image.value, path: path.value, hint1: Hint1.value || '', hint2: Hint2.value || '', hint3: Hint3.value || ''};
try{
const response = await fetch('api/flags/AddFlag', {
method: 'POST',
headers: {'Content-Type': 'application/json',},
body: JSON.stringify(data)
});
if(response.ok){
console.log("Flag added");
// reload the parent window when this window closes
window.opener.postMessage({ type: 'FLAG_ADDED', contestId: contestId }, window.origin);
window.close();
}
else{
alert("Failed to add flag.");
}
} catch(error){
console.error("Error adding flag:", error);
alert("An error occurred while adding flag.");
}
}
async getImages(): Promise<void>{
const email = this.getEmail();
try{
const imageData = await this.modifyContestService.getImages(email);
this.allImages = imageData || [];
}catch(error){
console.error('Error loading images');
}
}
navtoPageCI(){
gotoPage(this.router, '/create-image');
}
getEmail(): string{
return getEmail();
}
}