@ -4,7 +4,7 @@
//! input. Once the admin code is verified against the API, the full admin
//! controls are revealed with two tabs:
//!
//! - **Settings** — submission lock/unlock and auth code reset .
//! - **Settings** — submission lock/unlock .
//! - **Moderation** — paginated list of reported quotes with a detail modal.
//!
//! Refreshing the page resets to the locked state.
@ -50,12 +50,6 @@ pub fn admin_page() -> Html {
// --- Admin controls state (only used when unlocked) ---
// Active tab (settings or moderation).
let active_tab = use_state ( | | AdminTab ::Settings ) ;
// Optional new passphrase for the reset section.
let new_passphrase = use_state ( String ::new ) ;
// Newly returned auth code after a successful reset.
let reset_result : UseStateHandle < Option < String > > = use_state ( | | None ) ;
// Error message for the reset section.
let reset_error : UseStateHandle < Option < String > > = use_state ( | | None ) ;
// Current submissions lock state, fetched after unlock.
let submissions_locked : UseStateHandle < Option < bool > > = use_state ( | | None ) ;
// Error message for the lock/unlock section.
@ -125,51 +119,6 @@ pub fn admin_page() -> Html {
} )
} ;
// --- Reset auth code handler ---
let on_reset = {
let admin_code = admin_code . clone ( ) ;
let new_passphrase = new_passphrase . clone ( ) ;
let reset_result = reset_result . clone ( ) ;
let reset_error = reset_error . clone ( ) ;
let loading = loading . clone ( ) ;
Callback ::from ( move | e : MouseEvent | {
e . prevent_default ( ) ;
if * loading {
return ;
}
let code = ( * admin_code ) . clone ( ) ;
let passphrase = ( * new_passphrase ) . clone ( ) ;
let reset_result = reset_result . clone ( ) ;
let reset_error = reset_error . clone ( ) ;
let loading = loading . clone ( ) ;
loading . set ( true ) ;
reset_result . set ( None ) ;
reset_error . set ( None ) ;
spawn_local ( async move {
let new_code_opt = if passphrase . is_empty ( ) {
None
} else {
Some ( passphrase . as_str ( ) )
} ;
match api ::admin_reset_auth_code ( new_code_opt , & code ) . await {
Ok ( new_code ) = > {
reset_result . set ( Some ( new_code ) ) ;
reset_error . set ( None ) ;
}
Err ( ApiError ::Forbidden ) = > {
reset_error . set ( Some ( "Wrong admin code." . to_string ( ) ) ) ;
}
Err ( e ) = > {
reset_error . set ( Some ( format! ( "Error: {e}" ) ) ) ;
}
}
loading . set ( false ) ;
} ) ;
} )
} ;
// --- Lock submissions handler ---
let on_lock = {
let admin_code = admin_code . clone ( ) ;
@ -324,49 +273,6 @@ pub fn admin_page() -> Html {
if * active_tab = = AdminTab ::Settings {
< hr class = "admin-divider" / >
< div class = "admin-section" >
< h2 class = "admin-section__heading" > { "Reset auth code" } < / h2 >
< div class = "admin-section__field" >
< label class = "admin-section__label" for = "new_passphrase" >
{ "New passphrase (optional):" }
< / label >
< input
id = "new_passphrase"
class = "admin-section__input"
type = "text"
placeholder = "leave blank to auto-generate"
value = { ( * new_passphrase ) . clone ( ) }
oninput = { {
let new_passphrase = new_passphrase . clone ( ) ;
Callback ::from ( move | e : InputEvent | {
let input : HtmlInputElement = e . target_unchecked_into ( ) ;
new_passphrase . set ( input . value ( ) ) ;
} )
} }
/ >
< / div >
< div class = "admin-section__actions" >
< button
class = "btn btn--primary"
disabled = { * loading }
onclick = { on_reset }
>
{ "Reset" }
< / button >
< / div >
if let Some ( new_code ) = ( * reset_result ) . clone ( ) {
< p class = "admin-section__success" >
{ "New code: " }
< code > { new_code } < / code >
< / p >
}
if let Some ( err ) = ( * reset_error ) . clone ( ) {
< p class = "admin-section__error" > { err } < / p >
}
< / div >
< hr class = "admin-divider" / >
< div class = "admin-section" >
< h2 class = "admin-section__heading" > { "Submissions" } < / h2 >
{