Html overview
A specialization of Program
with the capability of mapping Model
to View
and rendering it into a DOM node.
Html
is a base abstraction in order to work with any library that renders html.
Added in v0.5.0
Table of contents
Functor
map
Maps a view which carries a message of type A
into a view which carries a message of type B
.
Signature
export declare function map<Dom, A, Msg>(f: (a: A) => Msg): (ha: Html<Dom, A>) => Html<Dom, Msg>
Added in v0.5.0
combinators
withStop
Stops the program
when signal
Observable emits a value.
Signature
export declare function withStop(
signal: Observable<unknown>
): <Model, Msg, Dom>(program: Program<Model, Msg, Dom>) => Program<Model, Msg, Dom>
Added in v0.5.4
constructors
program
Returns a Program
specialized for Html
.
It needs a view()
function that maps Model
to Html
.
Underneath it uses Platform.program()
.
Signature
export declare function program<Model, Msg, Dom>(
init: [Model, Cmd<Msg>],
update: (msg: Msg, model: Model) => [Model, Cmd<Msg>],
view: (model: Model) => Html<Dom, Msg>,
subscriptions: (model: Model) => Sub<Msg> = () => none
): Program<Model, Msg, Dom>
Added in v0.5.0
programWithFlags
Same as program()
but with Flags
that can be passed when the Program
is created in order to manage initial values.
Signature
export declare function programWithFlags<Flags, Model, Msg, Dom>(
init: (flags: Flags) => [Model, Cmd<Msg>],
update: (msg: Msg, model: Model) => [Model, Cmd<Msg>],
view: (model: Model) => Html<Dom, Msg>,
subscriptions?: (model: Model) => Sub<Msg>
): (flags: Flags) => Program<Model, Msg, Dom>
Added in v0.5.0
model
Html (interface)
It is defined as a function that takes a dispatch()
function as input and returns a Dom
as output, with DOM and messages types constrained.
Signature
export interface Html<Dom, Msg> {
(dispatch: platform.Dispatch<Msg>): Dom
}
Added in v0.5.0
Program (interface)
The Program
interface is extended with a html$
stream (an Observable
of views) and a Dom
type constraint.
Signature
export interface Program<Model, Msg, Dom> extends platform.Program<Model, Msg> {
html$: Observable<Html<Dom, Msg>>
}
Added in v0.5.0
Renderer (interface)
Defines the generalized Renderer
as a function that takes a Dom
as input and returns a void
.
It suggests an effectful computation.
Signature
export interface Renderer<Dom> {
(dom: Dom): void
}
Added in v0.5.0
utils
run
Runs the Program
.
Underneath it uses Platform.run()
.
It subscribes to the views stream (html$
) and runs Renderer
for each new value.
Signature
export declare function run<Model, Msg, Dom>(
program: Program<Model, Msg, Dom>,
renderer: Renderer<Dom>
): Observable<Model>
Added in v0.5.0