diff --git a/apps/yaak-client/components/Onboarding.tsx b/apps/yaak-client/components/Onboarding.tsx index d6c970aa..c5574dc3 100644 --- a/apps/yaak-client/components/Onboarding.tsx +++ b/apps/yaak-client/components/Onboarding.tsx @@ -21,6 +21,9 @@ import { Button } from "./core/Button"; /** Shown instead of a workspace when there are none. */ export function Onboarding() { const settings = useAtomValue(settingsAtom); + const { capabilities } = platform; + const canImport = capabilities.plugins; + const showAlreadyUsing = capabilities.localFiles || capabilities.git || canImport; const [busy, setBusy] = useState(null); const choose = (choice: OnboardingChoice, run: () => Promise | void) => async () => { @@ -55,20 +58,24 @@ export function Onboarding() {
How would you like to get started?

- Bring over existing work, try a real API, or start fresh. + {canImport + ? "Bring over existing work, try a real API, or start fresh." + : "Try a real API, or start fresh."}

- importData.mutateAsync())} - /> + {canImport && ( + importData.mutateAsync())} + /> + )}
-
- Already using Yaak? -
- - - + {showAlreadyUsing && ( +
+ Already using Yaak? +
+ {capabilities.localFiles && ( + + )} + {capabilities.git && ( + + )} + {canImport && ( + + )} +
-
+ )}
diff --git a/apps/yaak-client/components/RedirectToLatestWorkspace.tsx b/apps/yaak-client/components/RedirectToLatestWorkspace.tsx index 4e5261a6..0d21fe5e 100644 --- a/apps/yaak-client/components/RedirectToLatestWorkspace.tsx +++ b/apps/yaak-client/components/RedirectToLatestWorkspace.tsx @@ -31,6 +31,10 @@ export function RedirectToLatestWorkspace() { request_id: requestId, }; + // Whatever created the first workspace may have already navigated into it + const currentId = router.history.location.pathname.match(/^\/workspaces\/([^/]+)/)?.[1]; + if (workspaces.some((w) => w.id === currentId)) return; + console.log("Redirecting to workspace", params, search); await router.navigate({ to: "/workspaces/$workspaceId", params, search }); })(), diff --git a/crates/yaak-commands/src/data.rs b/crates/yaak-commands/src/data.rs index 5f3943eb..ac38c9cf 100644 --- a/crates/yaak-commands/src/data.rs +++ b/crates/yaak-commands/src/data.rs @@ -2,7 +2,7 @@ use crate::error::Result; use crate::host::Host; -use yaak::example::create_example_workspace; +use yaak_models::example::create_example_workspace; use yaak_models::export::{self, ExportDataParams}; use yaak_models::util::BatchUpsertResult; use yaak_rpc_schema::*; diff --git a/crates/yaak/src/example.rs b/crates/yaak-models/src/example.rs similarity index 93% rename from crates/yaak/src/example.rs rename to crates/yaak-models/src/example.rs index 55ceed09..63f8042f 100644 --- a/crates/yaak/src/example.rs +++ b/crates/yaak-models/src/example.rs @@ -4,10 +4,10 @@ //! other (the chaining example names another request by id). Every placeholder //! gets a fresh id per creation, so the example can be created more than once. -use crate::Result; -use yaak_models::models::{Environment, Folder, HttpRequest, UpsertModelInfo, Workspace}; -use yaak_models::query_manager::QueryManager; -use yaak_models::util::{BatchUpsertResult, UpdateSource}; +use crate::error::Result; +use crate::models::{Environment, Folder, HttpRequest, UpsertModelInfo, Workspace}; +use crate::query_manager::QueryManager; +use crate::util::{BatchUpsertResult, UpdateSource}; const EXAMPLE_JSON: &str = include_str!("example_workspace.json"); @@ -67,7 +67,7 @@ fn example_resources() -> Result { #[cfg(test)] mod tests { use super::*; - use yaak_models::init_in_memory; + use crate::init_in_memory; #[test] fn every_placeholder_is_mapped() { diff --git a/crates/yaak/src/example_workspace.json b/crates/yaak-models/src/example_workspace.json similarity index 100% rename from crates/yaak/src/example_workspace.json rename to crates/yaak-models/src/example_workspace.json diff --git a/crates/yaak-models/src/lib.rs b/crates/yaak-models/src/lib.rs index 256def4c..60eab2e3 100644 --- a/crates/yaak-models/src/lib.rs +++ b/crates/yaak-models/src/lib.rs @@ -13,6 +13,7 @@ pub mod client_db; mod connection_or_tx; pub mod cookies; pub mod error; +pub mod example; pub mod export; pub mod migrate; pub mod models; diff --git a/crates/yaak-wasm/pkg/yaak_wasm_bg.js b/crates/yaak-wasm/pkg/yaak_wasm_bg.js index 243c46d4..8403e512 100644 --- a/crates/yaak-wasm/pkg/yaak_wasm_bg.js +++ b/crates/yaak-wasm/pkg/yaak_wasm_bg.js @@ -512,7 +512,7 @@ export function __wbg_new_typed_c072c4ce9a2a0cdf(arg0, arg1) { const a = state0.a; state0.a = 0; try { - return wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined_______true_(a, state0.b, arg0, arg1); + return wasm_bindgen__convert__closures_____invoke__h7cced28f7815df81(a, state0.b, arg0, arg1); } finally { state0.a = a; } @@ -697,23 +697,23 @@ export function __wbg_warn_b6f36cac66fc96a4(arg0, arg1) { console.warn(arg0, arg1); } export function __wbindgen_cast_0000000000000001(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1116, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___wasm_bindgen_9b5275515258a0f8___JsValue__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsError___true_); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1131, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h2c4f0a20127a8a23); return ret; } export function __wbindgen_cast_0000000000000002(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 206, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_Event__Event______true_); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 214, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h54297d6cc284a2e5); return ret; } export function __wbindgen_cast_0000000000000003(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("IDBVersionChangeEvent")], shim_idx: 113, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_IdbVersionChangeEvent__IdbVersionChangeEvent__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsValue___true_); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("IDBVersionChangeEvent")], shim_idx: 177, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h804afe9d352bd562); return ret; } export function __wbindgen_cast_0000000000000004(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 208, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke_______true_); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 216, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h5977a2970909c8b8); return ret; } export function __wbindgen_cast_0000000000000005(arg0) { @@ -750,30 +750,30 @@ export function __wbindgen_init_externref_table() { table.set(offset + 2, true); table.set(offset + 3, false); } -function wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke_______true_(arg0, arg1) { - wasm.wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke_______true_(arg0, arg1); +function wasm_bindgen__convert__closures_____invoke__h5977a2970909c8b8(arg0, arg1) { + wasm.wasm_bindgen__convert__closures_____invoke__h5977a2970909c8b8(arg0, arg1); } -function wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_Event__Event______true_(arg0, arg1, arg2) { - wasm.wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_Event__Event______true_(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__h54297d6cc284a2e5(arg0, arg1, arg2) { + wasm.wasm_bindgen__convert__closures_____invoke__h54297d6cc284a2e5(arg0, arg1, arg2); } -function wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___wasm_bindgen_9b5275515258a0f8___JsValue__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsError___true_(arg0, arg1, arg2) { - const ret = wasm.wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___wasm_bindgen_9b5275515258a0f8___JsValue__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsError___true_(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__h2c4f0a20127a8a23(arg0, arg1, arg2) { + const ret = wasm.wasm_bindgen__convert__closures_____invoke__h2c4f0a20127a8a23(arg0, arg1, arg2); if (ret[1]) { throw takeFromExternrefTable0(ret[0]); } } -function wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_IdbVersionChangeEvent__IdbVersionChangeEvent__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsValue___true_(arg0, arg1, arg2) { - const ret = wasm.wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_IdbVersionChangeEvent__IdbVersionChangeEvent__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsValue___true_(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__h804afe9d352bd562(arg0, arg1, arg2) { + const ret = wasm.wasm_bindgen__convert__closures_____invoke__h804afe9d352bd562(arg0, arg1, arg2); if (ret[1]) { throw takeFromExternrefTable0(ret[0]); } } -function wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined_______true_(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined_______true_(arg0, arg1, arg2, arg3); +function wasm_bindgen__convert__closures_____invoke__h7cced28f7815df81(arg0, arg1, arg2, arg3) { + wasm.wasm_bindgen__convert__closures_____invoke__h7cced28f7815df81(arg0, arg1, arg2, arg3); } diff --git a/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm b/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm index a969f533..6e4a4b99 100644 Binary files a/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm and b/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm differ diff --git a/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm.d.ts b/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm.d.ts index c480672a..a68858df 100644 --- a/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm.d.ts +++ b/crates/yaak-wasm/pkg/yaak_wasm_bg.wasm.d.ts @@ -17,11 +17,11 @@ export const rust_sqlite_wasm_malloc: (a: number) => number; export const rust_sqlite_wasm_realloc: (a: number, b: number) => number; export const sqlite3_os_end: () => number; export const sqlite3_os_init: () => number; -export const wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___wasm_bindgen_9b5275515258a0f8___JsValue__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsError___true_: (a: number, b: number, c: any) => [number, number]; -export const wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_IdbVersionChangeEvent__IdbVersionChangeEvent__core_f0fd674eaa06beef___result__Result_____wasm_bindgen_9b5275515258a0f8___JsValue___true_: (a: number, b: number, c: any) => [number, number]; -export const wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined___js_sys_434c4d6d72aa7d1b___Function_fn_wasm_bindgen_9b5275515258a0f8___JsValue_____wasm_bindgen_9b5275515258a0f8___sys__Undefined_______true_: (a: number, b: number, c: any, d: any) => void; -export const wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke___web_sys_e1a11cd1518a8b4d___features__gen_Event__Event______true_: (a: number, b: number, c: any) => void; -export const wasm_bindgen_9b5275515258a0f8___convert__closures_____invoke_______true_: (a: number, b: number) => void; +export const wasm_bindgen__convert__closures_____invoke__h2c4f0a20127a8a23: (a: number, b: number, c: any) => [number, number]; +export const wasm_bindgen__convert__closures_____invoke__h804afe9d352bd562: (a: number, b: number, c: any) => [number, number]; +export const wasm_bindgen__convert__closures_____invoke__h7cced28f7815df81: (a: number, b: number, c: any, d: any) => void; +export const wasm_bindgen__convert__closures_____invoke__h54297d6cc284a2e5: (a: number, b: number, c: any) => void; +export const wasm_bindgen__convert__closures_____invoke__h5977a2970909c8b8: (a: number, b: number) => void; export const __wbindgen_malloc: (a: number, b: number) => number; export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; export const __wbindgen_exn_store: (a: number) => void; diff --git a/crates/yaak-wasm/src/lib.rs b/crates/yaak-wasm/src/lib.rs index 1c539e8b..aeae781c 100644 --- a/crates/yaak-wasm/src/lib.rs +++ b/crates/yaak-wasm/src/lib.rs @@ -432,6 +432,11 @@ fn dispatch( ) } + "cmd_create_example_workspace" => to_json( + yaak_models::example::create_example_workspace(&host.queries, source) + .map_err(js_error)?, + ), + "cmd_get_workspace_meta" => { let req: WorkspaceIdReq = from_js(payload)?; let workspace = diff --git a/crates/yaak/src/lib.rs b/crates/yaak/src/lib.rs index 1c94b443..6d8aedfa 100644 --- a/crates/yaak/src/lib.rs +++ b/crates/yaak/src/lib.rs @@ -1,5 +1,4 @@ pub mod error; -pub mod example; pub mod import; pub mod plugin_events; pub mod response_body; diff --git a/packages/platform/src/web/commands.ts b/packages/platform/src/web/commands.ts index d23a6e3a..8218faf4 100644 --- a/packages/platform/src/web/commands.ts +++ b/packages/platform/src/web/commands.ts @@ -231,6 +231,9 @@ const HANDLERS: Partial> = { // which is the one thing each host answers differently. cmd_export_data: (payload, db) => db.rpc("cmd_export_data", payload), + // The same example the desktop creates, built by the model layer in the worker. + cmd_create_example_workspace: (payload, db) => db.rpc("cmd_create_example_workspace", payload), + async cmd_get_sse_events() { return []; }, @@ -289,7 +292,6 @@ const DECLINED: Partial