mirror of
https://github.com/DioxusLabs/dioxus
synced 2025-02-17 06:08:26 +00:00
* 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>
41 lines
No EOL
947 B
JavaScript
41 lines
No EOL
947 B
JavaScript
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);
|
|
}
|
|
} |