This is inspired from TUI packages like bubbleTea
gleam add gleam_tui
import gtui
fn main(){
let state = State(...)
let appl = gtui.new_application(state, render, update, events)
gtui.run(appl)
}
type State{
State(...)
}
State is the information stored in the application, It can be store any type as needed
type Message{
MessageA,
MessageB(Int)
}
These are all possible messages that the application needs to handle
fn render(state: State) -> String{
...
}
render function takes the state of the application and returns the String that will be shown on the screen,
The package takes care of replacing the previous render
fn update(state: State, message: Message) -> #(State, Bool){
...
}
The function takes in a state and a message and returns the new state of the application and Bool denoting whether the Application keeps running or not
Events are a list of functions that return a Subject from the gloom_erlang
library and a clean up function
fn event() -> #(process.Subject(Message), fn() -> Nil){
...
}
let Events = [event]
An Event is a function that will return a process.Subject
, The intended use of this is to create a seperate process that will push messages onto the returned Subject,
the package will poll the event and on recieving a message update the state of the application
We will also return a cleanup function which will be run before the application closes to run any code to clean up the events
Basic Examples of a infinite spinner and a list is available in the examples
folder
Further documentation can be found at https://hexdocs.pm/tui.