elm-sortable-table/examples/1-presidents.elm

158 lines
4.3 KiB
Elm

import Html exposing (Html, div, h1, input, text)
import Html.App as App
import Html.Attributes exposing (placeholder, value)
import Html.Events exposing (onInput)
import String
import Table
main =
App.program
{ 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
= UpdateQuery String
| UpdateTableState Table.State
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
UpdateQuery newQuery ->
( { model | query = String.toLower newQuery }
, Cmd.none
)
UpdateTableState newState ->
( { model | tableState = newState }
, Cmd.none
)
-- VIEW
view : Model -> Html Msg
view { people, tableState, query } =
let
acceptablePeople =
List.filter (String.contains query << String.toLower << .name) people
in
div []
[ h1 [] [ text "Birthplaces of U.S. Presidents" ]
, input
[ value query
, placeholder "Search by Name"
, onInput UpdateQuery
]
[]
, Table.view config tableState acceptablePeople
]
config : Table.Config Person Msg
config =
Table.config
{ toId = .name
, toMsg = UpdateTableState
, 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"
]