Skip to content

Commit

Permalink
HotDog tutorial! (DioxusLabs#348)
Browse files Browse the repository at this point in the history
* feat: new hotdog tutorial
  • Loading branch information
jkelleyrtp authored Dec 20, 2024
1 parent 1eca8fd commit 156fe92
Show file tree
Hide file tree
Showing 74 changed files with 8,106 additions and 2,875 deletions.
438 changes: 161 additions & 277 deletions Cargo.lock

Large diffs are not rendered by default.

24 changes: 6 additions & 18 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,20 @@ dioxus-ssr = { version = "0.6.0", optional = true }
dioxus-desktop = { version = "0.6.0", optional = true }
dioxus-liveview = { version = "0.6.0", features = ["axum"], optional = true }

serde = { version = "1.0.163", features = ["derive"] }
serde_json = "1.0.96"
log = "0.4.17"
wasm-bindgen = { version = "0.2.99", features = ["enable-interning"] }
once_cell = "1.17.1"
console_error_panic_hook = "0.1.7"
gloo-history = "0.1.3"
autoexport = "0.1.0"
include_dir = "0.7.3"
anyhow = "1.0.71"

dioxus-material-icons = { git = "https://github.com/jkelleyrtp/dioxus-material-icons", branch = "jk/git-rev" }
syntect-html = { git = "https://github.com/dioxuslabs/include_mdbook", branch = "jk/build-gen" }
mdbook-shared = { git = "https://github.com/dioxuslabs/include_mdbook", branch = "jk/build-gen" }
use-mdbook = { git = "https://github.com/dioxuslabs/include_mdbook", branch = "jk/build-gen" }
dioxus-search = { git = "https://github.com/dioxuslabs/dioxus-search" }

# dioxus-playground = { git = "https://github.com/DioxusLabs/playground", branch = "jk/update-manganis" }

serde = { version = "1.0.163", features = ["derive"] }
serde_json = "1.0.96"
log = "0.4.17"
wasm-bindgen = { version = "0.2.99", features = ["enable-interning"] }
once_cell = "1.17.1"
tokio = { version = "1.29.0", features = ["full"], optional = true }
axum = { version = "0.7", optional = true }
http = { version = "1.0.0", optional = true }
simple_logger = "5.0.0"
reqwest = { version = "0.11.18", features = ["json"] }
gloo-storage = { version = "0.3.0", optional = true }
web-sys = { version = "0.3.64", features = [
Expand All @@ -57,7 +48,6 @@ gloo-timers = { version = "0.3.0", features = ["futures"] }
js-sys = "0.3.64"
form_urlencoded = "1.2.0"
automod = "1.0.13"
fs_extra = { version = "1.3.0", optional = true }
stork-lib = { version = "1.6.0", features = [
"build-v3",
], default-features = false }
Expand All @@ -71,7 +61,6 @@ rand = { version = "0.8.5", optional = true }
[build-dependencies]
mdbook-gen = { git = "https://github.com/dioxuslabs/include_mdbook", branch = "jk/build-gen", features = ["manganis"]}
mdbook-shared = { git = "https://github.com/dioxuslabs/include_mdbook", branch = "jk/build-gen" }
prettyplease = "0.2.20"

[patch.crates-io]
# dioxus = { git = "https://github.com/dioxuslabs/dioxus", rev ="e00ebec8048d8ca934fff918d2d1432bf6ce7640" }
Expand Down Expand Up @@ -128,7 +117,7 @@ prettyplease = "0.2.20"
# dioxus-devtools-types = { path = "../../dioxus/packages/devtools-types" }
# manganis = { path = "../../dioxus/packages/manganis/manganis" }
# manganis-core = { path = "../../dioxus/packages/manganis/manganis-core" }
# manganis-macro = { path = "../../dioxus/packages/manganis/manganis-macro" }a
# manganis-macro = { path = "../../dioxus/packages/manganis/manganis-macro" }

[profile.release]
lto = true
Expand Down Expand Up @@ -165,7 +154,6 @@ server = [
"dioxus/ssr",
"tokio",
"axum",
"fs_extra",
]
doc_test = [
"tokio",
Expand Down
Binary file added assets/06_docs/android-dogapp.mp4
Binary file not shown.
Binary file added assets/06_docs/default_dioxus_app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/deploy_screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/diffing_diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/dog-app-ios.mp4
Binary file not shown.
Binary file added assets/06_docs/dog-asset-hotreload.mp4
Binary file not shown.
Binary file added assets/06_docs/dog-save-serverfn.mp4
Binary file not shown.
Binary file added assets/06_docs/dog_app_hotreload.mp4
Binary file not shown.
Binary file added assets/06_docs/dog_app_styled.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/dx_new_06.mp4
Binary file not shown.
Binary file added assets/06_docs/dx_serve_06.mp4
Binary file not shown.
Binary file added assets/06_docs/ebou-following.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/fetch-dog.mp4
Binary file not shown.
Binary file added assets/06_docs/fly-deployed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/fly_deploy.mp4
Binary file not shown.
Binary file added assets/06_docs/fly_launch.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/full-crossplatform.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/hotdog-db-view.mp4
Binary file not shown.
Binary file added assets/06_docs/hotdog-desktop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/hotdog-interactivity.mp4
Binary file not shown.
Binary file added assets/06_docs/hotdog_loading.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/hotdogfull.mp4
Binary file not shown.
Binary file added assets/06_docs/no_navbar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/routeroutlet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/serve_with_fullstack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/server_split.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/serving_server.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/06_docs/unstyled_dog_app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions assets/githubmarkdown.css
Original file line number Diff line number Diff line change
Expand Up @@ -214,14 +214,14 @@

.markdown-body img {
border-style: none;
max-width: 85%;
max-width: 95%;
margin: auto;
box-sizing: content-box;
background-color: var(--color-canvas-default);
}

.markdown-body video {
max-width: 85%;
max-width: 95%;
margin: auto;
box-sizing: content-box;
background-color: var(--color-canvas-default);
Expand Down Expand Up @@ -377,7 +377,7 @@
.markdown-body h2 {
font-weight: 600;
font-size: 1.5em;
padding-top: 0.25rem;
padding-top: 0.75rem;
/* border-bottom: 1px solid var(--color-border-muted) */
}

Expand Down
File renamed without changes.
21 changes: 16 additions & 5 deletions docs-src/0.6/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,23 @@
---

- [Tutorial](guide/index.md)
- [Your First Component](guide/your_first_component.md)
- [State](guide/state.md)
- [Data Fetching](guide/data_fetching.md)
- [Full Code](guide/full_code.md)
- [Tooling Setup](guide/tooling.md)
- [Creating a new app](guide/new_app.md)
- [Your First Component](guide/component.md)
- [Creating UI with RSX](guide/rsx.md)
- [Styling and Assets](guide/assets.md)
- [Adding State](guide/state.md)
- [Fetching Data](guide/data_fetching.md)
- [Add a Backend](guide/backend.md)
- [Working with Databases](guide/databases.md)
- [Routing and Structure](guide/routing.md)
- [Bundling](guide/bundle.md)
- [Deploying](guide/deploy.md)
- [Next Steps](guide/next_steps.md)

---

- [Essential Concepts](essentials/index.md)
- [Core Concepts](essentials/index.md)
- [Building UIs with RSX](essentials/rsx/index.md)
- [Component Lifecycle](essentials/lifecycle/index.md)
- [Managing State](essentials/state/index.md)
Expand Down Expand Up @@ -59,13 +68,15 @@
- [State Management](cookbook/state/index.md)
- [External State](cookbook/state/external/index.md)
- [Custom Hooks](cookbook/state/custom_hooks/index.md)
- [Bundle Config](cookbook/bundling.md)
- [Testing](cookbook/testing.md)
- [Tailwind](cookbook/tailwind.md)
- [Optimizing](cookbook/optimizing.md)
- [Migrating to v0.6](migration/index.md)

---
- [Reference](reference/index.md)
- [Hot-Reload](reference/hotreload.md)
- [RSX](reference/rsx.md)
- [Components](reference/components.md)
- [Props](reference/component_props.md)
Expand Down
224 changes: 224 additions & 0 deletions docs-src/0.6/src/cookbook/bundling.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
### Bundling config

The `[bundle]` section of our Dioxus.toml can take a variety of options.

Here are the options, in the form of Rust structs.

```rust
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub(crate) struct BundleConfig {
/// eg. com.dioxuslabs
pub(crate) identifier: Option<String>,
/// eg. DioxusLabs
pub(crate) publisher: Option<String>,
/// eg. assets/icon.png
pub(crate) icon: Option<Vec<String>>,
/// eg. Extra assets like "img.png"
pub(crate) resources: Option<Vec<String>>,
/// eg. DioxusLabs
pub(crate) copyright: Option<String>,
/// eg. "Social Media"
pub(crate) category: Option<String>,
/// eg. "A great social media app"
pub(crate) short_description: Option<String>,
/// eg. "A social media app that makes people love app development"
pub(crate) long_description: Option<String>,
/// eg. extra binaries (like tools) to include in the final app
pub(crate) external_bin: Option<Vec<String>>,
/// Additional debian-only settings (see below)
pub(crate) deb: Option<DebianSettings>,
/// Additional macos settings (see below)
pub(crate) macos: Option<MacOsSettings>,
/// Additional windows settings (see below)
pub(crate) windows: Option<WindowsSettings>,
}

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub(crate) struct DebianSettings {
// OS-specific settings:
/// the list of debian dependencies.
pub depends: Option<Vec<String>>,
/// the list of dependencies the package provides.
pub provides: Option<Vec<String>>,
/// the list of package conflicts.
pub conflicts: Option<Vec<String>>,
/// the list of package replaces.
pub replaces: Option<Vec<String>>,
/// List of custom files to add to the deb package.
/// Maps the path on the debian package to the path of the file to include (relative to the current working directory).
pub files: HashMap<PathBuf, PathBuf>,
/// Path to a custom desktop file Handlebars template.
///
/// Available variables: `categories`, `comment` (optional), `exec`, `icon` and `name`.
pub desktop_template: Option<PathBuf>,
/// Define the section in Debian Control file. See : <https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections>
pub section: Option<String>,
/// Change the priority of the Debian Package. By default, it is set to `optional`.
/// Recognized Priorities as of now are : `required`, `important`, `standard`, `optional`, `extra`
pub priority: Option<String>,
/// Path of the uncompressed Changelog file, to be stored at /usr/share/doc/package-name/changelog.gz. See
/// <https://www.debian.org/doc/debian-policy/ch-docs.html#changelog-files-and-release-notes>
pub changelog: Option<PathBuf>,
/// Path to script that will be executed before the package is unpacked. See
/// <https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html>
pub pre_install_script: Option<PathBuf>,
/// Path to script that will be executed after the package is unpacked. See
/// <https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html>
pub post_install_script: Option<PathBuf>,
/// Path to script that will be executed before the package is removed. See
/// <https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html>
pub pre_remove_script: Option<PathBuf>,
/// Path to script that will be executed after the package is removed. See
/// <https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html>
pub post_remove_script: Option<PathBuf>,
}

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub(crate) struct WixSettings {
pub(crate) language: Vec<(String, Option<PathBuf>)>,
pub(crate) template: Option<PathBuf>,
pub(crate) fragment_paths: Vec<PathBuf>,
pub(crate) component_group_refs: Vec<String>,
pub(crate) component_refs: Vec<String>,
pub(crate) feature_group_refs: Vec<String>,
pub(crate) feature_refs: Vec<String>,
pub(crate) merge_refs: Vec<String>,
pub(crate) skip_webview_install: bool,
pub(crate) license: Option<PathBuf>,
pub(crate) enable_elevated_update_task: bool,
pub(crate) banner_path: Option<PathBuf>,
pub(crate) dialog_image_path: Option<PathBuf>,
pub(crate) fips_compliant: bool,
/// MSI installer version in the format `major.minor.patch.build` (build is optional).
///
/// Because a valid version is required for MSI installer, it will be derived from [`PackageSettings::version`] if this field is not set.
///
/// The first field is the major version and has a maximum value of 255. The second field is the minor version and has a maximum value of 255.
/// The third and fourth fields have a maximum value of 65,535.
///
/// See <https://learn.microsoft.com/en-us/windows/win32/msi/productversion> for more info.
pub version: Option<String>,
/// A GUID upgrade code for MSI installer. This code **_must stay the same across all of your updates_**,
/// otherwise, Windows will treat your update as a different app and your users will have duplicate versions of your app.
///
/// By default, tauri generates this code by generating a Uuid v5 using the string `<productName>.exe.app.x64` in the DNS namespace.
/// You can use Tauri's CLI to generate and print this code for you by running `tauri inspect wix-upgrade-code`.
///
/// It is recommended that you set this value in your tauri config file to avoid accidental changes in your upgrade code
/// whenever you want to change your product name.
pub upgrade_code: Option<uuid::Uuid>,
}

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub(crate) struct MacOsSettings {
pub(crate) frameworks: Option<Vec<String>>,
pub(crate) minimum_system_version: Option<String>,
pub(crate) license: Option<String>,
pub(crate) exception_domain: Option<String>,
pub(crate) signing_identity: Option<String>,
pub(crate) provider_short_name: Option<String>,
pub(crate) entitlements: Option<String>,
pub(crate) info_plist_path: Option<PathBuf>,
/// List of custom files to add to the application bundle.
/// Maps the path in the Contents directory in the app to the path of the file to include (relative to the current working directory).
pub files: HashMap<PathBuf, PathBuf>,
/// Preserve the hardened runtime version flag, see <https://developer.apple.com/documentation/security/hardened_runtime>
///
/// Settings this to `false` is useful when using an ad-hoc signature, making it less strict.
pub hardened_runtime: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct WindowsSettings {
pub(crate) digest_algorithm: Option<String>,
pub(crate) certificate_thumbprint: Option<String>,
pub(crate) timestamp_url: Option<String>,
pub(crate) tsp: bool,
pub(crate) wix: Option<WixSettings>,
pub(crate) icon_path: Option<PathBuf>,
pub(crate) webview_install_mode: WebviewInstallMode,
pub(crate) webview_fixed_runtime_path: Option<PathBuf>,
pub(crate) allow_downgrades: bool,
pub(crate) nsis: Option<NsisSettings>,
/// Specify a custom command to sign the binaries.
/// This command needs to have a `%1` in it which is just a placeholder for the binary path,
/// which we will detect and replace before calling the command.
///
/// Example:
/// ```text
/// sign-cli --arg1 --arg2 %1
/// ```
///
/// By Default we use `signtool.exe` which can be found only on Windows so
/// if you are on another platform and want to cross-compile and sign you will
/// need to use another tool like `osslsigncode`.
pub sign_command: Option<CustomSignCommandSettings>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct NsisSettings {
pub(crate) template: Option<PathBuf>,
pub(crate) license: Option<PathBuf>,
pub(crate) header_image: Option<PathBuf>,
pub(crate) sidebar_image: Option<PathBuf>,
pub(crate) installer_icon: Option<PathBuf>,
pub(crate) install_mode: NSISInstallerMode,
pub(crate) languages: Option<Vec<String>>,
pub(crate) custom_language_files: Option<HashMap<String, PathBuf>>,
pub(crate) display_language_selector: bool,
pub(crate) start_menu_folder: Option<String>,
pub(crate) installer_hooks: Option<PathBuf>,
/// Try to ensure that the WebView2 version is equal to or newer than this version,
/// if the user's WebView2 is older than this version,
/// the installer will try to trigger a WebView2 update.
pub minimum_webview2_version: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) enum NSISInstallerMode {
CurrentUser,
PerMachine,
Both,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) enum WebviewInstallMode {
Skip,
DownloadBootstrapper { silent: bool },
EmbedBootstrapper { silent: bool },
OfflineInstaller { silent: bool },
FixedRuntime { path: PathBuf },
}


#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomSignCommandSettings {
/// The command to run to sign the binary.
pub cmd: String,
/// The arguments to pass to the command.
///
/// "%1" will be replaced with the path to the binary to be signed.
pub args: Vec<String>,
}

#[derive(Clone, Copy, Debug)]
pub(crate) enum PackageType {
/// "macos"
MacOsBundle,
/// "ios"
IosBundle,
/// "msi"
WindowsMsi,
/// "nsis"
Nsis,
/// "deb"
Deb,
/// "rpm"
Rpm,
/// "appimage"
AppImage,
/// "dmg"
Dmg,
/// "updater"
Updater,
}
2 changes: 1 addition & 1 deletion docs-src/0.6/src/cookbook/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ When building application or libraries with Dioxus, you may want to include some

## Component Testing

You can use a combination of [pretty-assertions](https://docs.rs/pretty_assertions/latest/pretty_assertions/) and [dioxus-ssr]() to check that two snippets of rsx are equal:
You can use a combination of [pretty-assertions](https://docs.rs/pretty_assertions/latest/pretty_assertions/) and [dioxus-ssr](http://crates.io/crates/dioxus-ssr) to check that two snippets of rsx are equal:

```rust
{{#include src/doc_examples/component_test.rs}}
Expand Down
4 changes: 3 additions & 1 deletion docs-src/0.6/src/essentials/index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
The essentials section will guide you through key concepts in Dioxus:
# Core Topics

This section will guide you through key concepts in Dioxus:

- [Building UIs with RSX](rsx/index.md) will teach you how to define html inside your Dioxus app with rsx.

Expand Down
Loading

0 comments on commit 156fe92

Please sign in to comment.