Convert use_eval to use send/recv system (#1080)
* progress: reworked don't run this, it'll kill your web browser * feat: use_eval but with comms * revision: async recv & recv_sync * revision: use_eval * revision: standard eval interface * revision: use serde_json::Value instead of JsValue * revision: docs * revision: error message * create: desktop eval (wip) * fix: desktop eval * revision: wrap use_eval in Rc<RefCell<_>> * fix: fmt, clippy * fix: desktop tests * revision: change to channel system - fixes clippy errors - fixes playwright tests * fix: tests * fix: eval example * fix: fmt * fix: tests, desktop stuff * fix: tests * feat: drop handler * fix: tests * fix: rustfmt * revision: web promise/callback system * fix: recv error * revision: IntoFuture, functionation * fix: ci * revision: playwright web * remove: unescessary code * remove dioxus-html from public examples * prototype-patch * fix web eval * fix: rustfmt * fix: CI * make use_eval more efficient * implement eval for liveview as well * fix playwright tests * fix clippy * more clippy fixes * fix clippy * fix stack overflow * fix desktop mock * fix clippy --------- Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
This commit is contained in:
1 parent
b36a7a3993
commit
6210c6fefe
31 files changed
+1025
-410
No files matched your search
@@ -0,0 +1,41 @@
|
||||
export class Dioxus {
|
||||
constructor(sendCallback, returnCallback) {
|
||||
this.sendCallback = sendCallback;
|
||||
this.returnCallback = returnCallback;
|
||||
this.promiseResolve = null;
|
||||
this.received = [];
|
||||
}
|
||||
|
||||
// Receive message from Rust
|
||||
recv() {
|
||||
return new Promise((resolve, _reject) => {
|
||||
// If data already exists, resolve immediately
|
||||
let data = this.received.shift();
|
||||
if (data) {
|
||||
resolve(data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise set a resolve callback
|
||||
this.promiseResolve = resolve;
|
||||
});
|
||||
}
|
||||
|
||||
// Send message to rust.
|
||||
send(data) {
|
||||
this.sendCallback(data);
|
||||
}
|
||||
|
||||
// Internal rust send
|
||||
rustSend(data) {
|
||||
// If a promise is waiting for data, resolve it, and clear the resolve callback
|
||||
if (this.promiseResolve) {
|
||||
this.promiseResolve(data);
|
||||
this.promiseResolve = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise add the data to a queue
|
||||
this.received.push(data);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user