Skip to content

Commit 7261733

Browse files
committed
Move submitter to its own page and prefill fields if possible
1 parent 4f03220 commit 7261733

File tree

13 files changed

+223
-178
lines changed

13 files changed

+223
-178
lines changed

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
temp/
12
**/target/
23
.env
34
.secret
45
.idea
56
.vscode
7+
.DS_Store
68

79
# random stuff I have because of enabling eslint in vscode
810
node_modules
911
eslint.config.mjs
1012
package-lock.json
11-
package.json
13+
package.json
14+
15+
# Local Postgres data and scripts
16+
pg_data/
17+
pg_log

pointercrate-demonlist-api/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ pub fn setup(rocket: Rocket<Build>) -> Rocket<Build> {
9797
pages::nation_stats_viewer,
9898
pages::demon_page,
9999
pages::demon_permalink,
100-
pages::heatmap_css
100+
pages::heatmap_css,
101+
pages::submit_record,
101102
],
102103
)
103104
}

pointercrate-demonlist-api/src/pages.rs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use pointercrate_core_api::{
99
error::Result,
1010
response::{Page, Response2},
1111
};
12-
use pointercrate_demonlist::player::claim::PlayerClaim;
12+
use pointercrate_demonlist::player::{claim::PlayerClaim, DatabasePlayer};
1313
use pointercrate_demonlist::player::{FullPlayer, Player};
1414
use pointercrate_demonlist::{
1515
demon::{audit::audit_log_for_demon, current_list, list_at, FullDemon, MinimalDemon},
@@ -22,6 +22,7 @@ use pointercrate_demonlist_pages::{
2222
demon_page::{DemonMovement, DemonPage},
2323
overview::OverviewPage,
2424
statsviewer::individual::IndividualStatsViewer,
25+
submit_record::SubmitRecordPage,
2526
};
2627
use pointercrate_integrate::gd::GeometryDashConnector;
2728
use pointercrate_user::auth::NonMutating;
@@ -32,10 +33,9 @@ use rocket::{futures::StreamExt, http::CookieJar};
3233
use sqlx::PgConnection;
3334

3435
#[localized]
35-
#[rocket::get("/?<timemachine>&<submitter>")]
36+
#[rocket::get("/?<timemachine>")]
3637
pub async fn overview(
37-
pool: &State<PointercratePool>, timemachine: Option<bool>, submitter: Option<bool>, cookies: &CookieJar<'_>,
38-
auth: Option<Auth<NonMutating>>,
38+
pool: &State<PointercratePool>, timemachine: Option<bool>, cookies: &CookieJar<'_>, auth: Option<Auth<NonMutating>>,
3939
) -> Result<Page> {
4040
// A few months before pointercrate first went live - definitely the oldest data we have
4141
let beginning_of_time = NaiveDate::from_ymd_opt(2017, 1, 4).unwrap().and_hms_opt(0, 0, 0).unwrap();
@@ -44,6 +44,8 @@ pub async fn overview(
4444

4545
let demonlist = current_list(&mut connection).await?;
4646

47+
dbg!(&demonlist);
48+
4749
let mut specified_when = cookies
4850
.get("when")
4951
.and_then(|cookie| DateTime::<FixedOffset>::parse_from_rfc3339(cookie.value()).ok());
@@ -84,7 +86,6 @@ pub async fn overview(
8486
},
8587
demonlist,
8688
time_machine: tardis,
87-
submitter_initially_visible: submitter.unwrap_or(false),
8889
claimed_player: match auth {
8990
Some(auth) => claimed_full_player(auth.user.user(), &mut connection).await,
9091
None => None,
@@ -236,3 +237,22 @@ fn make_css_rule(code: &str, score: f64, highest_score: f64) -> String {
236237
0xe0 as f64 + (0xc6 - 0xe0) as f64 * (score / highest_score),
237238
)
238239
}
240+
241+
#[localized]
242+
#[rocket::get("/submit-record?<demon>")]
243+
pub async fn submit_record(pool: &State<PointercratePool>, demon: Option<usize>, auth: Option<Auth<NonMutating>>) -> Result<Page> {
244+
let mut connection = pool.connection().await?;
245+
246+
let demons = current_list(&mut connection).await?;
247+
248+
let claimed_player = match auth {
249+
Some(auth) => DatabasePlayer::by_user(auth.user.user().id, &mut connection).await.unwrap_or(None),
250+
None => None,
251+
};
252+
253+
Ok(Page::new(SubmitRecordPage {
254+
demons,
255+
initial_demon: demon,
256+
initial_holder: claimed_player,
257+
}))
258+
}

pointercrate-demonlist-pages/src/account/demons.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ fn change_verifier_dialog() -> Markup {
303303
&tr("demon-verifier-dialog.info"),
304304
&tr("demon-verifier-dialog.submit"),
305305
"verifier",
306+
&None,
306307
)
307308
}
308309

@@ -314,6 +315,7 @@ fn change_publisher_dialog() -> Markup {
314315
&tr("demon-publisher-dialog.info"),
315316
&tr("demon-publisher-dialog.submit"),
316317
"publisher",
318+
&None,
317319
)
318320
}
319321

@@ -325,6 +327,7 @@ fn add_creator_dialog() -> Markup {
325327
&tr("demon-creator-dialog.info"),
326328
&tr("demon-creator-dialog.submit"),
327329
"creator",
330+
&None,
328331
)
329332
}
330333

@@ -370,13 +373,13 @@ fn demon_submitter() -> Markup {
370373
span.form-input.flex.col data-type = "dropdown" {
371374
label{(tr("demon-add-form.verifier-field")) }
372375
br;
373-
(player_selection_dropdown("demon-add-verifier", "/api/v1/players/", "name", "verifier"))
376+
(player_selection_dropdown("demon-add-verifier", "/api/v1/players/", "name", "verifier", &None))
374377
p.error {}
375378
}
376379
span.form-input.flex.col data-type = "dropdown" {
377380
label {(tr("demon-add-form.publisher-field")) }
378381
br;
379-
(player_selection_dropdown("demon-add-publisher", "/api/v1/players/", "name", "publisher"))
382+
(player_selection_dropdown("demon-add-publisher", "/api/v1/players/", "name", "publisher", &None))
380383
p.error {}
381384
}
382385
span.form-input.flex.col #demon-add-video {

pointercrate-demonlist-pages/src/account/records.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use crate::components::{
2-
demon_dropdown, player_selection_dialog,
3-
submitter::{submit_panel, RecordSubmitter},
1+
use crate::{
2+
components::{demon_dropdown, player_selection_dialog},
3+
submit_record::submit_record_panel,
44
};
55
use maud::{html, Markup, PreEscaped};
66
use pointercrate_core::{error::PointercrateError, localization::tr, permission::PermissionsManager, trp};
@@ -10,6 +10,7 @@ use pointercrate_core_pages::{
1010
};
1111
use pointercrate_demonlist::{
1212
demon::{current_list, Demon},
13+
player::DatabasePlayer,
1314
LIST_HELPER,
1415
};
1516
use pointercrate_user::auth::{AuthenticatedUser, NonMutating};
@@ -59,7 +60,6 @@ impl AccountPageTab for RecordsPage {
5960

6061
html! {
6162
div.left {
62-
(RecordSubmitter::new(false, &demons[..]))
6363
(record_manager(&demons[..]))
6464
(note_adder())
6565
div.panel.fade #record-notes-container style = "display:none" {
@@ -74,7 +74,7 @@ impl AccountPageTab for RecordsPage {
7474
(status_selector())
7575
(record_selector())
7676
(player_selector())
77-
(submit_panel())
77+
(submit_record_panel(None))
7878
}
7979
(change_progress_dialog())
8080
(change_video_dialog())
@@ -386,6 +386,7 @@ fn change_holder_dialog() -> Markup {
386386
&tr("record-holder-dialog.info"),
387387
&tr("record-holder-dialog.submit"),
388388
"player",
389+
&None,
389390
)
390391
}
391392

@@ -401,7 +402,7 @@ fn change_demon_dialog(demons: &[Demon]) -> Markup {
401402
p {
402403
(tr("record-videolink-dialog.info"))
403404
}
404-
(demon_dropdown("edit-demon-record", demons.iter()))
405+
(demon_dropdown("edit-demon-record", demons, None))
405406
}
406407
}
407408
}

pointercrate-demonlist-pages/src/components/mod.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@ use pointercrate_core::{localization::tr, trp};
55
use pointercrate_demonlist::demon::Demon;
66
use pointercrate_demonlist::player::DatabasePlayer;
77

8-
pub mod submitter;
98
pub mod team;
109
pub mod time_machine;
1110

12-
pub fn demon_dropdown<'a>(dropdown_id: &str, demons: impl Iterator<Item = &'a Demon>) -> Markup {
11+
pub fn demon_dropdown(dropdown_id: &str, demons: &[Demon], initial_demon: Option<usize>) -> Markup {
12+
let initial_demon_name: &str = match initial_demon {
13+
Some(position) => demons.get(position - 1).map_or("", |demon| &demon.base.name),
14+
None => "",
15+
};
16+
1317
html! {
1418
div.dropdown-menu.js-search #(dropdown_id) {
1519
div {
16-
input type = "text" name = "demon" required="" autocomplete="off";
20+
input type = "text" name = "demon" required="" autocomplete="off" value=(initial_demon_name);
1721
}
1822
div.menu {
1923
ul {
@@ -26,11 +30,17 @@ pub fn demon_dropdown<'a>(dropdown_id: &str, demons: impl Iterator<Item = &'a De
2630
}
2731
}
2832

29-
pub fn player_selection_dropdown(dropdown_id: &str, endpoint: &str, field: &str, form_field: &str) -> Markup {
33+
pub fn player_selection_dropdown(
34+
dropdown_id: &str, endpoint: &str, field: &str, form_field: &str, initial_player: &Option<DatabasePlayer>,
35+
) -> Markup {
36+
let initial_player_name: &str = match initial_player {
37+
Some(player) => &player.name,
38+
None => "",
39+
};
3040
html! {
3141
div.dropdown-menu #(dropdown_id) data-endpoint = (endpoint) data-field = (field) {
3242
div {
33-
input type = "text" name = (form_field) required="" autocomplete="off" placeholder = (tr("record-submission.holder-input-placeholder"));
43+
input type = "text" name = (form_field) required="" autocomplete="off" placeholder = (tr("record-submission.holder-input-placeholder")) value = (initial_player_name);
3444
}
3545
div.menu {
3646
// dynamically populated once the user starts typing
@@ -42,6 +52,7 @@ pub fn player_selection_dropdown(dropdown_id: &str, endpoint: &str, field: &str,
4252

4353
pub fn player_selection_dialog(
4454
dialog_id: &str, dropdown_id: &str, headline: &str, description: &str, button_text: &str, form_field: &str,
55+
initial_player: &Option<DatabasePlayer>,
4556
) -> Markup {
4657
html! {
4758
div.overlay.closable {
@@ -55,7 +66,7 @@ pub fn player_selection_dialog(
5566
(description)
5667
}
5768
span.form-input.flex.col data-type = "dropdown" {
58-
(player_selection_dropdown(dropdown_id, "/api/v1/players/", "name", form_field))
69+
(player_selection_dropdown(dropdown_id, "/api/v1/players/", "name", form_field, initial_player))
5970
p.error {}
6071
}
6172
input.button.blue.hover type = "submit" style = "margin: 15px auto 0px;" value = (button_text);

pointercrate-demonlist-pages/src/components/submitter.rs

Lines changed: 0 additions & 133 deletions
This file was deleted.

0 commit comments

Comments
 (0)