Make the scouting web page actually submit data scouting data
This patch makes the web page send requests to
/requests/submit/data_scouting. Right now that request is not
implemented so we just get a 501, but that's okay. A future patch will
deal with that.
Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: Id58edb92e879ed4450fee76d5a1640196a125ef8
diff --git a/scouting/www/entry/BUILD b/scouting/www/entry/BUILD
index 0d0e7f6..55b6937 100644
--- a/scouting/www/entry/BUILD
+++ b/scouting/www/entry/BUILD
@@ -14,6 +14,10 @@
use_angular_plugin = True,
visibility = ["//visibility:public"],
deps = [
+ "//scouting/webserver/requests/messages:error_response_ts_fbs",
+ "//scouting/webserver/requests/messages:submit_data_scouting_response_ts_fbs",
+ "//scouting/webserver/requests/messages:submit_data_scouting_ts_fbs",
+ "@com_github_google_flatbuffers//ts:flatbuffers_ts",
"@npm//@angular/common",
"@npm//@angular/core",
"@npm//@angular/forms",
diff --git a/scouting/www/entry/entry.component.css b/scouting/www/entry/entry.component.css
index cec2a47..2cb500f 100644
--- a/scouting/www/entry/entry.component.css
+++ b/scouting/www/entry/entry.component.css
@@ -18,3 +18,7 @@
width: 300px;
height: 150px;
}
+
+.error_message {
+ color: red;
+}
diff --git a/scouting/www/entry/entry.component.ts b/scouting/www/entry/entry.component.ts
index 0e7223b..ddc31df 100644
--- a/scouting/www/entry/entry.component.ts
+++ b/scouting/www/entry/entry.component.ts
@@ -1,5 +1,14 @@
import { Component, OnInit } from '@angular/core';
+import * as flatbuffer_builder from 'org_frc971/external/com_github_google_flatbuffers/ts/builder';
+import {ByteBuffer} from 'org_frc971/external/com_github_google_flatbuffers/ts/byte-buffer';
+import * as error_response from 'org_frc971/scouting/webserver/requests/messages/error_response_generated';
+import * as submit_data_scouting_response from 'org_frc971/scouting/webserver/requests/messages/submit_data_scouting_response_generated';
+import * as submit_data_scouting from 'org_frc971/scouting/webserver/requests/messages/submit_data_scouting_generated';
+import SubmitDataScouting = submit_data_scouting.scouting.webserver.requests.SubmitDataScouting;
+import SubmitDataScoutingResponse = submit_data_scouting_response.scouting.webserver.requests.SubmitDataScoutingResponse;
+import ErrorResponse = error_response.scouting.webserver.requests.ErrorResponse;
+
type Section = 'Team Selection'|'Auto'|'TeleOp'|'Climb'|'Defense'|'Review and Submit'|'Home'
type Level = 'Low'|'Medium'|'High'|'Transversal'
@@ -23,6 +32,7 @@
level: Level;
proper: boolean = false;
climbed: boolean = false;
+ errorMessage: string = '';
toggleProper() {
this.proper = !this.proper;
@@ -72,7 +82,7 @@
} else if (this.section === 'Defense') {
this.section = 'Review and Submit';
} else if (this.section === 'Review and Submit') {
- this.section = 'Home';
+ this.submitDataScouting();
}
}
@@ -113,4 +123,39 @@
adjustTeleMissed(by: number) {
this.teleShotsMissed = Math.max(0, this.teleShotsMissed + by);
}
+
+ async submitDataScouting() {
+ const builder = new flatbuffer_builder.Builder() as unknown as flatbuffers.Builder;
+ SubmitDataScouting.startSubmitDataScouting(builder);
+ SubmitDataScouting.addTeam(builder, this.teamNumber);
+ SubmitDataScouting.addMatch(builder, this.matchNumber);
+ SubmitDataScouting.addMissedShotsAuto(builder, this.autoShotsMissed);
+ SubmitDataScouting.addUpperGoalAuto(builder, this.autoUpperShotsMade);
+ SubmitDataScouting.addLowerGoalAuto(builder, this.autoLowerShotsMade);
+ SubmitDataScouting.addMissedShotsTele(builder, this.teleShotsMissed);
+ SubmitDataScouting.addUpperGoalTele(builder, this.teleUpperShotsMade);
+ SubmitDataScouting.addLowerGoalTele(builder, this.teleLowerShotsMade);
+ SubmitDataScouting.addDefenseRating(builder, this.defensePlayedScore);
+ // TODO(phil): Add support for defensePlayedOnScore.
+ // TODO(phil): Fix the Climbing score.
+ SubmitDataScouting.addClimbing(builder, 1);
+ builder.finish(SubmitDataScouting.endSubmitDataScouting(builder));
+
+ const buffer = builder.asUint8Array();
+ const res = await fetch(
+ '/requests/submit/data_scouting', {method: 'POST', body: buffer});
+
+ if (res.ok) {
+ // We successfully submitted the data. Go back to Home.
+ this.section = 'Home';
+ } else {
+ const resBuffer = await res.arrayBuffer();
+ const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
+ const parsedResponse = ErrorResponse.getRootAsErrorResponse(
+ fbBuffer as unknown as flatbuffers.ByteBuffer);
+
+ const errorMessage = parsedResponse.errorMessage();
+ this.errorMessage = `Received ${res.status} ${res.statusText}: "${errorMessage}"`;
+ }
+ }
}
diff --git a/scouting/www/entry/entry.ng.html b/scouting/www/entry/entry.ng.html
index a1c248c..e52e6bc 100644
--- a/scouting/www/entry/entry.ng.html
+++ b/scouting/www/entry/entry.ng.html
@@ -209,6 +209,8 @@
<li>Defense Played Raing: {{defensePlayedScore}}</li>
</ul>
+ <div class="error_message">{{ errorMessage }}</div>
+
<div class="buttons">
<button class="btn btn-primary" (click)="prevSection()">Back</button>
<button class="btn btn-primary" (click)="nextSection()">Submit</button>