pub enum Trigger<'a> {
Show 17 variants
PageLoads,
Appears,
Disappears,
RouteChanges,
Online,
Offline,
Selector {
selector: &'a Expr<'a>,
event: Symbol,
key: Option<Symbol>,
},
Key {
key: Symbol,
},
FieldChanges {
store: Option<Symbol>,
field: Symbol,
},
Every {
seconds: &'a Expr<'a>,
name: Option<Symbol>,
},
After {
seconds: &'a Expr<'a>,
name: Option<Symbol>,
},
Message {
topic: &'a Expr<'a>,
param: (Symbol, &'a TypeExpr<'a>),
},
ActionFails {
param: Symbol,
},
FetchFails {
url: Symbol,
error: Symbol,
},
WindowResizes,
ScrollsToBottom {
selector: Option<&'a Expr<'a>>,
},
FileDropped {
selector: &'a Expr<'a>,
param: (Symbol, &'a TypeExpr<'a>),
},
}Expand description
What an English When …: sentence in Actions: waits for.
Variants§
PageLoads
When the page loads:
Appears
When this component appears:
Disappears
When this component disappears:
RouteChanges
When the route changes:
Online
When the app comes back online:
Offline
When the app goes offline:
Selector
When "#add" is submitted: / When "#draft" changes: / When the user types in "#q": /
When the user presses Escape in "#draft": (key set) / When "#x" is focused: …
Key
When the user presses Escape: — a key anywhere on the page.
FieldChanges
When todos change: / When Session's name changes:
Every
Every 60 seconds: — repeating. Every 60 seconds as refresh: names it, and a named
timer is the only kind Stop the timer … can reach.
After
After 5 seconds: — one-shot, optionally named so it can be cancelled before it fires.
Message
When a message arrives on "topic" (m: T):
ActionFails
When an action fails (error: Text):
FetchFails
When a fetch fails (url: Text) and (error: Text):
WindowResizes
When the window resizes:
ScrollsToBottom
When the user scrolls to the bottom [of "#list"]:
FileDropped
When a file is dropped on "#zone" (file: File): or (name: Text) — the declared type
decides what binds: File the whole record, Text just the name, same as [Trigger:: Message]’s own (Symbol, &TypeExpr) shape keeps its payload’s declared type.
Implementations§
Source§impl<'a> Trigger<'a>
impl<'a> Trigger<'a>
Sourcepub fn undeliverable(&self) -> Option<(&'static str, &'static str)>
pub fn undeliverable(&self) -> Option<(&'static str, &'static str)>
★ THE TRIGGERS NO TIER DELIVERS — one table, read by every tier that has to say so.
Some((sentence, needs)) when nothing anywhere can fire this trigger yet; None when some
tier delivers it.
The distinction is not pedantic, and getting it wrong produced a false statement in a
compiler message: the browser-tier mount refusal ended “The tree-walker renders it; the
bytecode tier cannot yet”, which is true of Every … seconds: and false of
When the window resizes: — nothing renders that one. An author would have been told
their page works on the tree-walker and sent looking for a tier to run it on.
It lives here because every tier has to agree about which sentences exist at all, and a second copy of a list is how they stop agreeing.
Source§impl<'a> Trigger<'a>
impl<'a> Trigger<'a>
Sourcepub fn form(&self) -> &'static str
pub fn form(&self) -> &'static str
The English FORM this trigger is written in — the words an author would search their own file for.
★ DELIBERATELY WITHOUT THE VALUES, and that is the difference from Self::shape. shape is a
stable debug rendering for snapshot tests, and it prints what the AST holds: a duration comes
out as every 60000000000ms, which is true and is not what anybody typed. A refusal is read
by the person who wrote the sentence, so it names the FORM (Every … seconds:) and lets them
find the line. Two renderings because there are two audiences; kept adjacent so neither can
be changed without seeing the other.