datastar/ds_sse
This module provides functions to work with Datastar server sent events.
See reference here https://data-star.dev/reference/sse_events.
Types
SSE Events that can be send to the client.
Like datastar-merge-fragments
.
pub opaque type Event
pub opaque type ExecuteScriptConfig
pub opaque type ExecuteScriptOptions
pub opaque type MergeFragmentConfig
pub opaque type MergeFragmentOptions
The merge mode used by merge fragments
pub type MergeMode {
Morph
Inner
Outer
Prepend
Append
Before
After
UpsertAttributes
}
Constructors
-
Morph
-
Inner
-
Outer
-
Prepend
-
Append
-
Before
-
After
-
UpsertAttributes
pub opaque type MergeSignalsConfig
pub opaque type MergeSignalsOptions
pub opaque type RemoveFragmentsConfig
pub opaque type RemoveFragmentsOptions
pub opaque type RemoveSignalsConfig
pub opaque type RemoveSignalsOptions
Functions
pub fn event_to_string(event: Event) -> String
Takes an Event
and generates a string to send back to the client
remove_fragments("#target")
|> remove_fragments_end
|> event_to_string
Generates:
event: datastar-remove-fragments
data: selector #target
pub fn events_to_string(events events: List(Event)) -> String
Takes a list of Event
and generates the string to send to the client
[
merge_fragments("<span>Hello</span>")
|> merge_fragments_end,
remove_fragments("#target")
|> remove_fragments_end,
]
|> events_to_string
Generates:
event: datastar-merge-fragments
data: fragments <span>Hello</span>
event: datastar-remove-fragments
data: selector #target
pub fn execute_script(script: String) -> ExecuteScriptConfig
Generate a datastar-execute-script
event
execute_script("window.location = \"https://data-star.dev\"")
|> execute_script_event_id("123")
|> execute_script_end
Generates
event: datastar-execute-script
id: 123
data: script window.location = \"https://data-star.dev\"
pub fn execute_script_attributes(
config: ExecuteScriptConfig,
value: List(#(String, String)),
) -> ExecuteScriptConfig
|> execute_script_attributes([#("type", "text/javascript")]),
Generates:
data: attributes type text/javascript
pub fn execute_script_auto_remove(
config: ExecuteScriptConfig,
value: Bool,
) -> ExecuteScriptConfig
|> execute_script_auto_remove(False),
Generates:
data: autoRemove false
pub fn execute_script_end(config: ExecuteScriptConfig) -> Event
pub fn execute_script_event_id(
config: ExecuteScriptConfig,
value: String,
) -> ExecuteScriptConfig
...
|> execute_script_event_id("123")
Generates:
id: 123
pub fn execute_script_retry(
config: ExecuteScriptConfig,
value: Int,
) -> ExecuteScriptConfig
|> execute_script_retry(3000),
Generates:
retry: 3000
pub fn merge_fragments(
fragments fragments: String,
) -> MergeFragmentConfig
Event to send new fragments to the client
merge_fragments("<span>1</span>")
|> merge_fragments_selector("#feed")
|> merge_fragments_end
Generates:
event: datastar-merge-fragments
data: selector #feed
data: fragments <span>1</span>
pub fn merge_fragments_end(config: MergeFragmentConfig) -> Event
pub fn merge_fragments_event_id(
config: MergeFragmentConfig,
value: String,
) -> MergeFragmentConfig
|> merge_fragments_event_id("123"),
Generates:
id: 123
pub fn merge_fragments_merge_mode(
config: MergeFragmentConfig,
value: MergeMode,
) -> MergeFragmentConfig
|> merge_fragments_merge_mode(MergeMode.Inner),
Generates:
data: mergeMode inner
pub fn merge_fragments_retry(
config: MergeFragmentConfig,
value: Int,
) -> MergeFragmentConfig
|> merge_fragments_retry(3000),
Generates:
retry: 3000
pub fn merge_fragments_selector(
config: MergeFragmentConfig,
value: String,
) -> MergeFragmentConfig
|> merge_fragments_selector("#feed"),
Generates:
data: selector #feed
pub fn merge_fragments_settle_duration(
config: MergeFragmentConfig,
value: Int,
) -> MergeFragmentConfig
pub fn merge_fragments_view_transition(
config: MergeFragmentConfig,
value: Bool,
) -> MergeFragmentConfig
pub fn merge_signals(signals: Json) -> MergeSignalsConfig
Generate a datastar-merge-signals
event
let json = json.object([
#("name", json.string("sam"))
])
merge_signals(json)
|> merge_signals_end
Generates:
event: datastar-merge-signals
data: signals {\"name\":\"Sam\"}
pub fn merge_signals_end(config: MergeSignalsConfig) -> Event
pub fn merge_signals_event_id(
config: MergeSignalsConfig,
value: String,
) -> MergeSignalsConfig
...
|> merge_signals_event_id("123")
Generates:
id: 123
pub fn merge_signals_only_if_missing(
config: MergeSignalsConfig,
value: Bool,
) -> MergeSignalsConfig
|> merge_signals_only_if_missing(True),
Generates:
data: onlyIfMissing true
pub fn merge_signals_retry(
config: MergeSignalsConfig,
value: Int,
) -> MergeSignalsConfig
|> merge_signals_retry(3000),
Generates:
retry: 3000
pub fn remove_fragments(
selector: String,
) -> RemoveFragmentsConfig
Event to remove fragments on the client
remove_fragments("#feed")
|> remove_fragments_end
Generates:
event: datastar-remove-fragments
data: selector #feed
pub fn remove_fragments_end(
config: RemoveFragmentsConfig,
) -> Event
pub fn remove_fragments_event_id(
config: RemoveFragmentsConfig,
value: String,
) -> RemoveFragmentsConfig
|> remove_fragments_event_id("123"),
Generates:
id: 123
pub fn remove_fragments_retry(
config: RemoveFragmentsConfig,
value: Int,
) -> RemoveFragmentsConfig
|> remove_fragments_retry(3000),
Generates:
retry: 3000
pub fn remove_fragments_settle_duration(
config: RemoveFragmentsConfig,
value: Int,
) -> RemoveFragmentsConfig
pub fn remove_fragments_view_transition(
config: RemoveFragmentsConfig,
value: Bool,
) -> RemoveFragmentsConfig
pub fn remove_signals(
signals: List(String),
) -> RemoveSignalsConfig
Generate a datastar-remove-signals
event
remove_signals(["user.name", "user.email"])
|> remove_signals_end
Generates:
event: datastar-remove-signals
data: paths user.name
data: paths user.email
pub fn remove_signals_end(config: RemoveSignalsConfig) -> Event
pub fn remove_signals_event_id(
config: RemoveSignalsConfig,
value: String,
) -> RemoveSignalsConfig
...
|> remove_signals_event_id("123")
Generates:
id: 123
pub fn remove_signals_retry(
config: RemoveSignalsConfig,
value: Int,
) -> RemoveSignalsConfig
|> remove_signals_retry(3000),
Generates:
retry: 3000