blob: 09178f8d7754f2434227901a12f04ab58acca099 [file] [log] [blame]
Alex Perrybb901052022-03-23 19:46:15 -07001import {Component} from '@angular/core';
2import {Builder, ByteBuffer} from 'flatbuffers';
3import {ErrorResponse} from 'org_frc971/scouting/webserver/requests/messages/error_response_generated';
4import {RequestNotesForTeam} from 'org_frc971/scouting/webserver/requests/messages/request_notes_for_team_generated';
5import {Note as NoteFb, RequestNotesForTeamResponse} from 'org_frc971/scouting/webserver/requests/messages/request_notes_for_team_response_generated';
6import {SubmitNotes} from 'org_frc971/scouting/webserver/requests/messages/submit_notes_generated';
7import {SubmitNotesResponse} from 'org_frc971/scouting/webserver/requests/messages/submit_notes_response_generated';
8
9type Section = 'TeamSelection'|'Data';
10
11interface Note {
12 readonly data: string;
13}
14
15@Component({
16 selector: 'frc971-notes',
17 templateUrl: './notes.ng.html',
18 styleUrls: ['../common.css', './notes.component.css']
19})
20export class Notes {
21 section: Section = 'TeamSelection';
22 notes: Note[] = [];
23
24 errorMessage = '';
25
26 teamNumber: number = 971;
27 newData = '';
28
29 async setTeamNumber() {
30 const builder = new Builder();
31 RequestNotesForTeam.startRequestNotesForTeam(builder);
32 RequestNotesForTeam.addTeam(builder, this.teamNumber);
33 builder.finish(RequestNotesForTeam.endRequestNotesForTeam(builder));
34
35 const buffer = builder.asUint8Array();
36 const res = await fetch(
37 '/requests/request/notes_for_team', {method: 'POST', body: buffer});
38
39 const resBuffer = await res.arrayBuffer();
40 const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
41
42 if (res.ok) {
43 this.notes = [];
44 const parsedResponse =
45 RequestNotesForTeamResponse.getRootAsRequestNotesForTeamResponse(
46 fbBuffer);
47 for (let i = 0; i < parsedResponse.notesLength(); i++) {
48 const fbNote = parsedResponse.notes(i);
49 this.notes.push({data: fbNote.data()});
50 }
51 this.section = 'Data';
52 } else {
53 const parsedResponse = ErrorResponse.getRootAsErrorResponse(fbBuffer);
54
55 const errorMessage = parsedResponse.errorMessage();
56 this.errorMessage =
57 `Received ${res.status} ${res.statusText}: "${errorMessage}"`;
58 }
59 }
60
61 changeTeam() {
62 this.section = "TeamSelection";
63 }
64
65 async submitData() {
66 const builder = new Builder();
67 const dataFb = builder.createString(this.newData);
68 builder.finish(
69 SubmitNotes.createSubmitNotes(builder, this.teamNumber, dataFb));
70
71 const buffer = builder.asUint8Array();
72 const res = await fetch(
73 '/requests/submit/submit_notes', {method: 'POST', body: buffer});
74
75 if (res.ok) {
76 this.newData = '';
77 this.errorMessage = '';
78 await this.setTeamNumber();
79 } else {
80 const resBuffer = await res.arrayBuffer();
81 const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
82 const parsedResponse = ErrorResponse.getRootAsErrorResponse(fbBuffer);
83
84 const errorMessage = parsedResponse.errorMessage();
85 this.errorMessage =
86 `Received ${res.status} ${res.statusText}: "${errorMessage}"`;
87 }
88 }
89}
90