Skip to content

Commit

Permalink
feat(fe/qr): Export file name
Browse files Browse the repository at this point in the history
  • Loading branch information
MendyBerger committed Mar 25, 2024
1 parent 4cd054d commit 5f457a5
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 30 deletions.
25 changes: 24 additions & 1 deletion frontend/apps/crates/components/src/qr_dialog/state.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
use std::rc::Rc;

use qrcode_generator::QrCodeEcc;
use utils::{routes::Route, unwrap::UnwrapJiExt};
use shared::domain::jig::codes::JigCode;
use utils::{
routes::{KidsRoute, Route},
unwrap::UnwrapJiExt,
};
use wasm_bindgen::JsValue;

use super::QrDialogCallbacks;
Expand All @@ -21,6 +25,25 @@ impl QrDialog {
callbacks,
})
}

pub fn new_jig_code(
code: JigCode,
jig_name: String,
code_name: Option<String>,
callbacks: QrDialogCallbacks,
) -> Rc<Self> {
let jig_name = jig_name.replace(" ", "-");
let code_name = code_name.map(|n| n.replace(" ", "-"));
let mut file_label = format!("{}_{}", code.to_string(), jig_name);
if let Some(code_name) = code_name {
file_label = format!("{}_{}", code_name, file_label);
}
QrDialog::new(
Route::Kids(KidsRoute::StudentCode(Some(code.to_string()))),
file_label,
callbacks,
)
}
}

fn file_to_object_url(filetype: &str, data: &str) -> String {
Expand Down
14 changes: 5 additions & 9 deletions frontend/apps/crates/components/src/share_asset/actions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl ShareAsset {

let res = jig::codes::Create::api_with_auth(JigPlayerSessionCreatePath(), Some(req)).await.toast_on_err();
let res = bail_on_err!(res);
state.student_code.set(Some(res.index.to_string()));
state.student_code.set(Some(res.index));
}));
}

Expand All @@ -48,14 +48,10 @@ impl ShareAsset {

pub fn show_qr_code(self: &Rc<Self>) {
let state = self;
let code = self
.student_code
.get_cloned()
.unwrap_or_default()
.to_string();
let qr_dialog = QrDialog::new(
Route::Kids(KidsRoute::StudentCode(Some(code.clone()))),
code,
let qr_dialog = QrDialog::new_jig_code(
state.student_code.get().unwrap_ji(),
state.asset.unwrap_jig().jig_data.display_name.clone(),
state.code_name.get_cloned(),
QrDialogCallbacks::new(clone!(state => move || {
state.qr_dialog.set(None);
})),
Expand Down
8 changes: 4 additions & 4 deletions frontend/apps/crates/components/src/share_asset/dom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,14 +276,14 @@ impl ShareAsset {
None => None,
Some(student_code) => {
let url = SETTINGS.get().unwrap_ji().remote_target.pages_url();
Some(url + &Route::Kids(KidsRoute::StudentCode(Some(student_code))).to_string())
Some(url + &Route::Kids(KidsRoute::StudentCode(Some(student_code.to_string()))).to_string())
},
}
}))
.prop_signal("code", state.student_code.signal_cloned().map(|student_code| {
match student_code {
None => String::new(),
Some(student_code) => student_code,
Some(student_code) => student_code.to_string(),
}
}))
.prop_signal("secondsToExpire", state.student_code.signal_cloned().map(|student_code| {
Expand Down Expand Up @@ -335,7 +335,7 @@ impl ShareAsset {
.event(clone!(state => move |_: events::Click| {
if let Some(student_code) = &*state.student_code.lock_ref() {
let url = SETTINGS.get().unwrap_ji().remote_target.pages_url_iframe();
let url = url + &Route::Kids(KidsRoute::StudentCode(Some(student_code.clone()))).to_string();
let url = url + &Route::Kids(KidsRoute::StudentCode(Some(student_code.to_string()))).to_string();
clipboard::write_text(&url);
ShareAsset::set_copied_mutable(state.copied_student_url.clone());
};
Expand All @@ -351,7 +351,7 @@ impl ShareAsset {
}))
.event(clone!(state => move|_: events::Click| {
let student_code = state.student_code.get_cloned().unwrap_ji();
clipboard::write_text(&student_code);
clipboard::write_text(&student_code.to_string());
ShareAsset::set_copied_mutable(state.copied_student_code.clone());
}))
}),
Expand Down
3 changes: 2 additions & 1 deletion frontend/apps/crates/components/src/share_asset/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::rc::Rc;
use awsm_web::loaders::helpers::AsyncLoader;
use futures_signals::signal::Mutable;
use shared::domain::asset::Asset;
use shared::domain::jig::codes::JigCode;
use shared::domain::jig::TextDirection;
use utils::asset::{
CoursePlayerOptions, JigPlayerOptions, PlaylistPlayerOptions, ResourceContentExt,
Expand All @@ -15,7 +16,7 @@ use crate::qr_dialog::QrDialog;

pub struct ShareAsset {
pub active_popup: Mutable<Option<ActivePopup>>,
pub student_code: Mutable<Option<String>>,
pub student_code: Mutable<Option<JigCode>>,
pub loader: AsyncLoader,
pub asset: Asset,
pub copied_embed: Mutable<bool>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,8 @@ use shared::{
},
};
use utils::{
bail_on_err, date_formatters,
error_ext::ErrorExt,
js_wrappers::download_url,
prelude::ApiEndpointExt,
routes::{KidsRoute, Route},
unwrap::UnwrapJiExt,
bail_on_err, date_formatters, error_ext::ErrorExt, js_wrappers::download_url,
prelude::ApiEndpointExt, unwrap::UnwrapJiExt,
};
use wasm_bindgen::JsValue;
use wasm_bindgen_futures::spawn_local;
Expand Down Expand Up @@ -86,14 +82,25 @@ impl CodeSessions {

pub fn show_qr_code(self: &Rc<Self>) {
let state = self;
let qr_dialog = QrDialog::new(
Route::Kids(KidsRoute::StudentCode(Some(self.code.to_string()))),
self.code.to_string(),
QrDialogCallbacks::new(clone!(state => move || {
state.qr_dialog.set(None);
})),
);
self.qr_dialog.set(Some(qr_dialog));
if let Some(code_response) = state.code_response.lock_ref().as_ref() {
let qr_dialog = QrDialog::new_jig_code(
code_response.index,
state
.jig
.lock_ref()
.as_ref()
.unwrap()
.jig
.jig_data
.display_name
.clone(),
code_response.name.clone(),
QrDialogCallbacks::new(clone!(state => move || {
state.qr_dialog.set(None);
})),
);
self.qr_dialog.set(Some(qr_dialog));
}
}

fn generate_csv_string(&self) -> String {
Expand Down
2 changes: 1 addition & 1 deletion shared/rust/src/domain/jig/codes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::{api::endpoints::PathPart, domain::module::StableModuleId};
use super::{JigId, JigPlayerSettings};

/// Four-digit code identifying a Jig player session
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PathPart)]
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PathPart, PartialEq, Eq)]
#[cfg_attr(feature = "backend", derive(sqlx::Type))]
#[cfg_attr(feature = "backend", sqlx(transparent))]
pub struct JigCode(pub i32);
Expand Down

0 comments on commit 5f457a5

Please sign in to comment.