Skip to content

Commit 3d81650

Browse files
committed
Revert "Revert "update CLI and web""
This reverts commit f80dd97.
1 parent 4f08eaa commit 3d81650

8 files changed

Lines changed: 292 additions & 320 deletions

File tree

Cargo.lock

Lines changed: 165 additions & 200 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ g-code = "0.3"
1515
codespan-reporting = "0.11"
1616
structopt = "0.3"
1717
roxmltree = "0.19"
18-
svgtypes = "0.12"
18+
svgtypes = "0.13"
1919
serde_json = "1"
2020

2121
[[bin]]

lib/src/converter/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,10 @@ impl<'a, T: Turtle> visit::XmlVisitor for ConversionVisitor<'a, T> {
236236
self.terrarium.line(true, x, y);
237237
}
238238
} else {
239-
warn!("There is a polyline node containing no actual path: {:?}", node);
239+
warn!(
240+
"There is a polyline node containing no actual path: {:?}",
241+
node
242+
);
240243
}
241244
}
242245

lib/src/turtle/g_code.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,8 @@ impl<'input> Turtle for GCodeTurtle<'input> {
8989

9090
fn move_to(&mut self, to: Point<f64>) {
9191
self.tool_off();
92-
self.program.append(
93-
&mut command!(RapidPositioning {
94-
X: to.x,
95-
Y: to.y,
96-
})
97-
.into_token_vec(),
98-
);
92+
self.program
93+
.append(&mut command!(RapidPositioning { X: to.x, Y: to.y, }).into_token_vec());
9994
}
10095

10196
fn line_to(&mut self, to: Point<f64>) {

web/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ codespan = "0.11"
1818
serde = "1"
1919
paste = "1"
2020
log = "0.4"
21-
svgtypes = "0.12"
21+
svgtypes = "0.13"
2222
serde_json = "1"
2323
thiserror = "1.0"
2424
zip = { version = "0.6", default-features = false }
2525

2626
yew = { version ="0.21", features = ["csr"] }
27-
yewdux = "0.9.4"
27+
yewdux = "0.10"
2828
web-sys = { version = "0.3", features = [] }
2929
wasm-logger = "0.2"
3030
gloo-file = { version = "0.3", features = ["futures"] }

web/src/forms/mod.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use wasm_bindgen::JsCast;
1010
use wasm_bindgen_futures::JsFuture;
1111
use web_sys::{window, Event, FileList, HtmlElement, HtmlInputElement, Response};
1212
use yew::prelude::*;
13-
use yewdux::{functional::use_store, prelude::Dispatch};
13+
use yewdux::{functional::use_store, use_dispatch};
1414

1515
use crate::{
1616
state::{AppState, FormState, Svg},
@@ -28,7 +28,7 @@ use inputs::*;
2828

2929
#[function_component(SettingsForm)]
3030
pub fn settings_form() -> Html {
31-
let app_dispatch = Dispatch::<AppState>::new();
31+
let app_dispatch = use_dispatch::<AppState>();
3232
let (form_state, form_dispatch) = use_store::<FormState>();
3333

3434
let disabled = form_state.tolerance.is_err()
@@ -205,8 +205,8 @@ pub fn settings_form() -> Html {
205205

206206
#[function_component(ImportExportModal)]
207207
pub fn import_export_modal() -> Html {
208-
let app_dispatch = Dispatch::<AppState>::new();
209-
let form_dispatch = Dispatch::<FormState>::new();
208+
let app_dispatch = use_dispatch::<AppState>();
209+
let form_dispatch = use_dispatch::<FormState>();
210210

211211
let import_state = use_state(|| Option::<Result<Settings, String>>::None);
212212

@@ -349,12 +349,12 @@ pub fn import_export_modal() -> Html {
349349

350350
#[function_component(SvgForm)]
351351
pub fn svg_form() -> Html {
352-
let app_dispatch = Dispatch::<AppState>::new();
352+
let app_dispatch = use_dispatch::<AppState>();
353353

354354
let file_upload_state = use_mut_ref(Vec::default);
355355
let file_upload_state_cloned = file_upload_state.clone();
356356
let file_upload_onchange =
357-
app_dispatch.reduce_mut_future_callback_with(move |app, file_list: FileList| {
357+
app_dispatch.future_callback_with(move |app, file_list: FileList| {
358358
let file_upload_state_cloned = file_upload_state_cloned.clone();
359359
Box::pin(async move {
360360
let mut results = Vec::with_capacity(file_list.length() as usize);
@@ -384,7 +384,9 @@ pub fn svg_form() -> Html {
384384
.borrow_mut()
385385
.push(result.clone().map(|_| ()));
386386
}
387-
app.svgs.extend(results.drain(..).filter_map(Result::ok));
387+
app.reduce_mut(|app| {
388+
app.svgs.extend(results.drain(..).filter_map(Result::ok));
389+
});
388390
})
389391
});
390392

@@ -420,7 +422,7 @@ pub fn svg_form() -> Html {
420422
let url_input_parsed = url_input_parsed.clone();
421423
let url_add_loading = url_add_loading.clone();
422424

423-
app_dispatch.reduce_mut_future_callback_with(move |app, _| {
425+
app_dispatch.future_callback_with(move |app, _| {
424426
let url_input_state = url_input_state.clone();
425427
let url_input_parsed = url_input_parsed.clone();
426428
let url_add_loading = url_add_loading.clone();
@@ -447,10 +449,12 @@ pub fn svg_form() -> Html {
447449
&response_url, err
448450
))));
449451
} else {
450-
app.svgs.push(Svg {
451-
content: text,
452-
filename: response_url,
453-
dimensions: [None; 2],
452+
app.reduce_mut(|app| {
453+
app.svgs.push(Svg {
454+
content: text,
455+
filename: response_url,
456+
dimensions: [None; 2],
457+
});
454458
});
455459
};
456460
}

web/src/main.rs

Lines changed: 101 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ use forms::*;
2323
use state::*;
2424
use ui::*;
2525
use util::*;
26-
use yewdux::prelude::{use_store, Dispatch};
26+
use yewdux::{prelude::use_store, use_dispatch, YewduxRoot};
2727
use zip::{write::FileOptions, CompressionMethod, ZipWriter};
2828

2929
#[function_component]
3030
fn App(_props: &()) -> Html {
3131
let generating = use_state_eq(|| false);
3232
let generating_setter = generating.setter();
3333

34-
let form_dispatch = Dispatch::<FormState>::new();
34+
let form_dispatch = use_dispatch::<FormState>();
3535
let (app_store, app_dispatch) = use_store::<AppState>();
3636

3737
// TODO: come up with a less awkward way to do this.
@@ -54,7 +54,7 @@ fn App(_props: &()) -> Html {
5454
let opts = FileOptions::default().compression_method(CompressionMethod::Stored);
5555

5656
if app_store.svgs.len() > 1 {
57-
zip.add_directory("svg2gcode_output", opts.clone()).unwrap();
57+
zip.add_directory("svg2gcode_output", opts).unwrap();
5858
}
5959

6060
for svg in app_store.svgs.iter() {
@@ -109,36 +109,39 @@ fn App(_props: &()) -> Html {
109109
Path::new(svg.filename.as_str()).with_extension("gcode")
110110
};
111111

112-
if app_store.svgs.len() > 1 {
113-
zip.start_file(filepath.to_string_lossy(), opts.clone())
114-
.unwrap();
112+
match app_store.svgs.len() {
113+
0 => unreachable!(),
114+
1 => {
115+
let gcode = {
116+
let mut acc = String::new();
117+
format_gcode_fmt(
118+
&program,
119+
FormatOptions {
120+
checksums: app_store.settings.postprocess.checksums,
121+
line_numbers: app_store.settings.postprocess.line_numbers,
122+
..Default::default()
123+
},
124+
&mut acc,
125+
)
126+
.unwrap();
127+
acc
128+
};
129+
prompt_download(filepath, gcode.as_bytes());
130+
}
131+
_multiple => {
132+
zip.start_file(filepath.to_string_lossy(), opts).unwrap();
115133

116-
format_gcode_io(
117-
&program,
118-
FormatOptions {
119-
checksums: app_store.settings.postprocess.checksums,
120-
line_numbers: app_store.settings.postprocess.line_numbers,
121-
..Default::default()
122-
},
123-
&mut zip,
124-
)
125-
.unwrap();
126-
} else if app_store.svgs.len() == 1 {
127-
let gcode = {
128-
let mut acc = String::new();
129-
format_gcode_fmt(
134+
format_gcode_io(
130135
&program,
131136
FormatOptions {
132137
checksums: app_store.settings.postprocess.checksums,
133138
line_numbers: app_store.settings.postprocess.line_numbers,
134139
..Default::default()
135140
},
136-
&mut acc,
141+
&mut zip,
137142
)
138143
.unwrap();
139-
acc
140-
};
141-
prompt_download(filepath, gcode.as_bytes());
144+
}
142145
}
143146
}
144147

@@ -160,81 +163,83 @@ fn App(_props: &()) -> Html {
160163
};
161164

162165
html! {
163-
<div class="container">
164-
<div class={classes!("column")}>
165-
<h1>
166-
{ "svg2gcode" }
167-
</h1>
168-
<p>
169-
{ env!("CARGO_PKG_DESCRIPTION") }
170-
</p>
171-
<SvgForm/>
172-
<ButtonGroup>
173-
<Button
174-
title="Generate G-Code"
175-
style={ButtonStyle::Primary}
176-
loading={*generating}
177-
icon={
178-
html_nested! (
179-
<Icon name={IconName::Download} />
180-
)
181-
}
182-
disabled={generate_disabled}
183-
onclick={generate_onclick}
184-
/>
185-
<HyperlinkButton
186-
title="Settings"
187-
style={ButtonStyle::Default}
188-
icon={IconName::Edit}
189-
href="#settings"
190-
/>
191-
</ButtonGroup>
192-
<div class={classes!("card-container", "columns")}>
193-
{
194-
for app_store.svgs.iter().enumerate().map(|(i, svg)| {
195-
let svg_base64 = base64::engine::general_purpose::STANDARD_NO_PAD.encode(svg.content.as_bytes());
196-
let remove_svg_onclick = app_dispatch.reduce_mut_callback(move |app| {
197-
app.svgs.remove(i);
198-
});
199-
let footer = html!{
200-
<Button
201-
title="Remove"
202-
style={ButtonStyle::Primary}
203-
icon={
204-
html_nested!(
205-
<Icon name={IconName::Delete} />
206-
)
207-
}
208-
onclick={remove_svg_onclick}
209-
/>
210-
};
211-
html!{
212-
<div class={classes!("column", "col-6", "col-xs-12")}>
213-
<Card
214-
title={svg.filename.clone()}
215-
img={html_nested!(
216-
<img class="img-responsive" src={format!("data:image/svg+xml;base64,{}", svg_base64)} alt={svg.filename.clone()} />
217-
)}
218-
footer={footer}
219-
/>
220-
</div>
166+
<YewduxRoot>
167+
<div class="container">
168+
<div class={classes!("column")}>
169+
<h1>
170+
{ "svg2gcode" }
171+
</h1>
172+
<p>
173+
{ env!("CARGO_PKG_DESCRIPTION") }
174+
</p>
175+
<SvgForm/>
176+
<ButtonGroup>
177+
<Button
178+
title="Generate G-Code"
179+
style={ButtonStyle::Primary}
180+
loading={*generating}
181+
icon={
182+
html_nested! (
183+
<Icon name={IconName::Download} />
184+
)
221185
}
222-
})
223-
}
186+
disabled={generate_disabled}
187+
onclick={generate_onclick}
188+
/>
189+
<HyperlinkButton
190+
title="Settings"
191+
style={ButtonStyle::Default}
192+
icon={IconName::Edit}
193+
href="#settings"
194+
/>
195+
</ButtonGroup>
196+
<div class={classes!("card-container", "columns")}>
197+
{
198+
for app_store.svgs.iter().enumerate().map(|(i, svg)| {
199+
let svg_base64 = base64::engine::general_purpose::STANDARD_NO_PAD.encode(svg.content.as_bytes());
200+
let remove_svg_onclick = app_dispatch.reduce_mut_callback(move |app| {
201+
app.svgs.remove(i);
202+
});
203+
let footer = html!{
204+
<Button
205+
title="Remove"
206+
style={ButtonStyle::Primary}
207+
icon={
208+
html_nested!(
209+
<Icon name={IconName::Delete} />
210+
)
211+
}
212+
onclick={remove_svg_onclick}
213+
/>
214+
};
215+
html!{
216+
<div class={classes!("column", "col-6", "col-xs-12")}>
217+
<Card
218+
title={svg.filename.clone()}
219+
img={html_nested!(
220+
<img class="img-responsive" src={format!("data:image/svg+xml;base64,{}", svg_base64)} alt={svg.filename.clone()} />
221+
)}
222+
footer={footer}
223+
/>
224+
</div>
225+
}
226+
})
227+
}
228+
</div>
229+
<SettingsForm/>
230+
<ImportExportModal/>
231+
</div>
232+
<div class={classes!("text-right", "column")}>
233+
<p>
234+
{ "See the project " }
235+
<a href={env!("CARGO_PKG_REPOSITORY")}>
236+
{ "on GitHub" }
237+
</a>
238+
{" for support" }
239+
</p>
224240
</div>
225-
<SettingsForm/>
226-
<ImportExportModal/>
227-
</div>
228-
<div class={classes!("text-right", "column")}>
229-
<p>
230-
{ "See the project " }
231-
<a href={env!("CARGO_PKG_REPOSITORY")}>
232-
{ "on GitHub" }
233-
</a>
234-
{" for support" }
235-
</p>
236241
</div>
237-
</div>
242+
</YewduxRoot>
238243
}
239244
}
240245

web/src/ui/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ where
361361
props.default.as_ref(),
362362
node_ref.cast::<HtmlInputElement>(),
363363
) {
364-
input_element.set_value(&default.to_string());
364+
input_element.set_value(default.as_ref());
365365
applied_default_value.set(true);
366366
}
367367

0 commit comments

Comments
 (0)