intrepidshape/elm-web3-ui/3.0.0

NOTE: the latest version is 4.0.0

Web3.Ui.PaginatedLogs

Block-range windowed eth_getLogs paging -- newest window first, walking back toward genesis without overlaps or gaps.

-- start: latest window
( pager, range ) =
    PaginatedLogs.init { latest = 21688204, window = 5000 }
-- fire getLogs for range.fromBlock..range.toBlock, then:
pager2 = PaginatedLogs.onLoaded (List.length logs) pager


-- "Load older" click:
case PaginatedLogs.next pager2 of
    Just ( pager3, olderRange ) -> fire the next query
    Nothing -> at genesis; nothing older exists

Ranges tile exactly: [latest-window+1 .. latest], then [latest-2w+1 .. latest-w], ... clamped at 0.

CSS classes: web3-pagedlogs__more.

type Pager

Opaque paging state.

type alias Range =
{ fromBlock : Int
, toBlock : Int
}

An inclusive block range for one getLogs query.

{ latest : Int
, window : Int
}
-> ( Pager, Range )

The newest window. window is clamped to >= 1.

onLoaded : Int -> Pager -> Pager

Record how many logs a window returned (display/telemetry).

exhausted : Pager -> Bool

True once the walk reached genesis.

Total logs recorded via onLoaded.

{ onLoadMore : msg
, label : String
}
-> Pager
-> Html msg

A load-more button that disappears at genesis.