 - [x] (0:30?) (1:15) fill in very rough content components (just panels/names)
 - [x] (0:45?) settings: title & description
 - [x] (1:00?) (2:02) add student
-
-- [ ] (1:00?) render student row
-- [ ] (0:45?) search students
+- [x] (1:00?) (0:22) render student row
+
+- [x] (0:45?) (0:30) search students
 - [ ] (0:45?) create student projects
 - [ ] (0:45?) show deleted students (and purge)
 - [ ] (1:00?) add assignment

                    if x.table == 'settings'
                        misc.merge(t.settings, misc.copy_without(x, 'table'))
                    else if x.table == 'students'
                        t.students[x.account_id] = misc.copy_without(x, ['account_id', 'table'])
                    else if x.table == 'assignments'
                        t.assignments[x.assignment_id] = misc.copy_without(x, ['assignment_id', 'table'])
                for k, v of t

    render_students: ->
        if not @props.students? or not @props.user_map?
            return
        # turn map of students into a list
        v = immutable_to_list(@props.students, 'student_id')
        # fill in names, for use in sorting and searching (TODO: caching)
        for x in v
            if x.account_id?
                user = @props.user_map.get(x.account_id)
                x.first_name = user.get('first_name')
                x.last_name  = user.get('last_name')
        v.sort (a,b) ->
            return misc.cmp_array([a.last_name, a.first_name, a.email_address],
                                  [b.last_name, b.first_name, b.email_address])
        if @state.search
            words  = misc.split(@state.search.toLowerCase())
            search = (a) -> ((a.last_name ? '') + (a.first_name ? '') + (a.email_address ? '')).toLowerCase()
            match  = (s) ->
                for word in words
                    if s.indexOf(word) == -1
                        return false
                return true
            v = (x for x in v when match(search(x)))
        for x in v
            <Student key={x.student_id} student={@props.students.get(x.student_id)} user_map={@props.user_map} />

