Skip to content

Instantly share code, notes, and snippets.

@monomadic
Created September 15, 2018 13:35
Show Gist options
  • Save monomadic/fc9b0517b3f04bb8716907441199204e to your computer and use it in GitHub Desktop.
Save monomadic/fc9b0517b3f04bb8716907441199204e to your computer and use it in GitHub Desktop.
elm - sortable-table example
module Main exposing (Model, Msg(..), Person, config, init, main, presidents, update, view)
import Browser
import Html exposing (Html, div, h1, input, text)
import Html.Attributes exposing (placeholder)
import Html.Events exposing (onInput)
import Table
main =
Browser.element
{ init = \() -> init presidents
, update = update
, view = view
, subscriptions = \_ -> Sub.none
}
-- MODEL
type alias Model =
{ people : List Person
, tableState : Table.State
, query : String
}
init : List Person -> ( Model, Cmd Msg )
init people =
let
model =
{ people = people
, tableState = Table.initialSort "Year"
, query = ""
}
in
( model, Cmd.none )
-- UPDATE
type Msg
= SetQuery String
| SetTableState Table.State
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SetQuery newQuery ->
( { model | query = newQuery }
, Cmd.none
)
SetTableState newState ->
( { model | tableState = newState }
, Cmd.none
)
-- VIEW
view : Model -> Html Msg
view { people, tableState, query } =
let
lowerQuery =
String.toLower query
acceptablePeople =
List.filter (String.contains lowerQuery << String.toLower << .name) people
in
div []
[ h1 [] [ text "Birthplaces of U.S. Presidents" ]
, input [ placeholder "Search by Name", onInput SetQuery ] []
, Table.view config tableState acceptablePeople
]
config : Table.Config Person Msg
config =
Table.config
{ toId = .name
, toMsg = SetTableState
, columns =
[ Table.stringColumn "Name" .name
, Table.intColumn "Year" .year
, Table.stringColumn "City" .city
, Table.stringColumn "State" .state
]
}
-- PEOPLE
type alias Person =
{ name : String
, year : Int
, city : String
, state : String
}
presidents : List Person
presidents =
[ Person "George Washington" 1732 "Westmoreland County" "Virginia"
, Person "John Adams" 1735 "Braintree" "Massachusetts"
, Person "Thomas Jefferson" 1743 "Shadwell" "Virginia"
, Person "James Madison" 1751 "Port Conway" "Virginia"
, Person "James Monroe" 1758 "Monroe Hall" "Virginia"
, Person "Andrew Jackson" 1767 "Waxhaws Region" "South/North Carolina"
, Person "John Quincy Adams" 1767 "Braintree" "Massachusetts"
, Person "William Henry Harrison" 1773 "Charles City County" "Virginia"
, Person "Martin Van Buren" 1782 "Kinderhook" "New York"
, Person "Zachary Taylor" 1784 "Barboursville" "Virginia"
, Person "John Tyler" 1790 "Charles City County" "Virginia"
, Person "James Buchanan" 1791 "Cove Gap" "Pennsylvania"
, Person "James K. Polk" 1795 "Pineville" "North Carolina"
, Person "Millard Fillmore" 1800 "Summerhill" "New York"
, Person "Franklin Pierce" 1804 "Hillsborough" "New Hampshire"
, Person "Andrew Johnson" 1808 "Raleigh" "North Carolina"
, Person "Abraham Lincoln" 1809 "Sinking spring" "Kentucky"
, Person "Ulysses S. Grant" 1822 "Point Pleasant" "Ohio"
, Person "Rutherford B. Hayes" 1822 "Delaware" "Ohio"
, Person "Chester A. Arthur" 1829 "Fairfield" "Vermont"
, Person "James A. Garfield" 1831 "Moreland Hills" "Ohio"
, Person "Benjamin Harrison" 1833 "North Bend" "Ohio"
, Person "Grover Cleveland" 1837 "Caldwell" "New Jersey"
, Person "William McKinley" 1843 "Niles" "Ohio"
, Person "Woodrow Wilson" 1856 "Staunton" "Virginia"
, Person "William Howard Taft" 1857 "Cincinnati" "Ohio"
, Person "Theodore Roosevelt" 1858 "New York City" "New York"
, Person "Warren G. Harding" 1865 "Blooming Grove" "Ohio"
, Person "Calvin Coolidge" 1872 "Plymouth" "Vermont"
, Person "Herbert Hoover" 1874 "West Branch" "Iowa"
, Person "Franklin D. Roosevelt" 1882 "Hyde Park" "New York"
, Person "Harry S. Truman" 1884 "Lamar" "Missouri"
, Person "Dwight D. Eisenhower" 1890 "Denison" "Texas"
, Person "Lyndon B. Johnson" 1908 "Stonewall" "Texas"
, Person "Ronald Reagan" 1911 "Tampico" "Illinois"
, Person "Richard M. Nixon" 1913 "Yorba Linda" "California"
, Person "Gerald R. Ford" 1913 "Omaha" "Nebraska"
, Person "John F. Kennedy" 1917 "Brookline" "Massachusetts"
, Person "George H. W. Bush" 1924 "Milton" "Massachusetts"
, Person "Jimmy Carter" 1924 "Plains" "Georgia"
, Person "George W. Bush" 1946 "New Haven" "Connecticut"
, Person "Bill Clinton" 1946 "Hope" "Arkansas"
, Person "Barack Obama" 1961 "Honolulu" "Hawaii"
, Person "Donald Trump" 1946 "New York City" "New York"
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment