blob: b74c11904ced499000b3d34b9fbbaf6b86d2772a [file] [log] [blame]
Emily Markovafaecfe12023-07-01 12:40:03 -07001import {Component} from '@angular/core';
2import {Builder, ByteBuffer} from 'flatbuffers';
3import {ErrorResponse} from '../../webserver/requests/messages/error_response_generated';
4import {SubmitPitImage} from '../../webserver/requests/messages/submit_pit_image_generated';
5
6type Section = 'TeamSelection' | 'Data';
7
8interface Input {
9 teamNumber: number;
10 pitImage: HTMLImageElement;
11}
12
13@Component({
14 selector: 'app-pit-scouting',
15 templateUrl: './pit_scouting.ng.html',
16 styleUrls: ['../app/common.css', './pit_scouting.component.css'],
17})
18export class PitScoutingComponent {
19 section: Section = 'Data';
20
21 errorMessage = '';
22 teamNumber: number = 971;
23 pitImage: string = '';
24
25 async readFile(file): Promise<ArrayBuffer> {
26 return new Promise((resolve, reject) => {
27 let reader = new FileReader();
28 reader.addEventListener('loadend', (e) =>
29 resolve(e.target.result as ArrayBuffer)
30 );
31 reader.addEventListener('error', reject);
32 reader.readAsArrayBuffer(file);
33 });
34 }
35
36 async getImageData() {
37 const selectedFile = (<HTMLInputElement>document.getElementById('pitImage'))
38 .files[0];
39 return new Uint8Array(await this.readFile(selectedFile));
40 }
41
42 async submitData() {
43 const builder = new Builder();
44 const teamNumber = builder.createString(this.teamNumber.toString());
45 const pitImage = builder.createString(this.pitImage.toString());
46 const imageData = SubmitPitImage.createImageDataVector(
47 builder,
48 await this.getImageData()
49 );
50 builder.finish(
51 SubmitPitImage.createSubmitPitImage(
52 builder,
53 teamNumber,
54 pitImage,
55 imageData
56 )
57 );
58
59 const buffer = builder.asUint8Array();
60 const res = await fetch('/requests/submit/submit_pit_image', {
61 method: 'POST',
62 body: buffer,
63 });
64 if (!res.ok) {
65 const resBuffer = await res.arrayBuffer();
66 const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
67 const parsedResponse = ErrorResponse.getRootAsErrorResponse(fbBuffer);
68
69 const errorMessage = parsedResponse.errorMessage();
70 this.errorMessage = `Received ${res.status} ${res.statusText}: "${errorMessage}"`;
71 }
72 this.section = 'TeamSelection';
73 this.pitImage = '';
74 }
75}