Course dashboard

A React block (a whole screen) in Beamline's Education app.

A course's staff view: its identity (draft or published, who may join, how it runs, its lessons) with Publish through your app, Preview as a learner and an export request said apart from a finished file; figures counted over an enrollment scope you name, a learner whose records can't be read said instead of counted as zero; then Learners (a row opens their lessons by section, done or not in icon and word, with lessons added after they started named so the changed total is never a mystery), Comments (the learner, the words and the lesson they came from, a reply in place that keeps the comment chosen, a removed lesson and a comment you can't see said) and Results (each learner's answers as a strip with waiting-for-a-grade and not-graded apart from wrong, a waiting answer scored in place, means by question or by concept over graded answers only, an out-of-date report and grades not sent on said with their own action). The figures lead as one picture of the cohort: the average progress (not known for unreadable learners, said), enrolled, started and finished in one line, and for each lesson in order how many have finished it. A learner's bar is green when finished and amber when they've gone quiet (a week without activity against the cohort's latest, or never started); the rest ink.

Use it for

  • The instructor's or training team's page for one course: is it published, who is enrolled, how far each learner is, which comments wait for an answer and how the last quiz went.
  • Any programme people work through lesson by lesson (onboarding, certification, coaching) where staff need publishing state, progress and results together.

Not for

Anatomy

  • head: cover or initials tile, title, Draft or Published, how it runs, who may join, lesson count; Edit lessons, Publish (draft only), a menu with Preview as a learner and Export learners; a refused publish and an export requested or refused said under the title
  • figures: the scope sentence, then Enrolled, Started, Completed and Average progress; learners whose records can't be read are left out of the average and counted in its context
  • Learners: search, a row per learner (avatar, name, progress bar in ink with done of total, last active); a row opens the progress sheet
  • progress sheet: the learner, enrolled date, Not started / In progress / Complete / Progress unavailable, done of total, the sentence naming lessons added after they started, lessons by section with a done or open circle and the word
  • Comments: a row per comment (author, excerpt, lesson or Lesson removed, New or Replied, date); a hidden comment is listed with a lock and why; a chosen comment opens its words, a reply field, Open the lesson and Send reply
  • Results: the quiz, finished or still running, when the report was made, By learner / Question / Concept; out of date with Refresh; grades not sent on with Send again; Accuracy, Finished, Waiting for a grade, Questions; the key of answer marks; by learner each learner's strip and points of graded max with waiting count, opening to the answers where a waiting one is scored; by question and by concept a mean bar over graded answers with graded of total

States

  • draft course
  • published
  • publishing
  • publish refused
  • no enrollments
  • loading engagement
  • restricted access (invite only, restricted to groups)
  • export requested
  • export refused
  • not started
  • in progress
  • complete
  • curriculum changed (lessons added after the learner started)
  • progress unavailable
  • no comments
  • new question
  • replied
  • deleted lesson
  • comment hidden
  • comments blocked
  • sending a reply
  • reply refused
  • results: running, finished, waiting for a grade, not graded, not answered, part marks
  • scoring refused
  • report out of date
  • grades not sent on
  • no results

Keyboard

  • Tab through the head, the tabs (arrow keys between them) and each row
  • a learner row: Enter opens the progress sheet; Escape closes it and focus returns to the row
  • a comment row: Enter opens it in place; the reply field, Open the lesson and Send reply follow in order
  • Results: the view switch by arrow keys; a learner row's Enter opens their answers; a waiting answer's points field takes ↑/↓ in half points

Motion

Progress bars ease to a new value on the motion tokens; the sheet slides in from the side (from the bottom on a phone); a row opens in place. Nothing moves at rest.

Props

PropTypeDefaultDescription
course (required)CourseInfo—
curriculum (required)CurriculumSection[]—
learners (required)CourseLearner[] | null—Everyone counted in the figures; null while loading.
scope (required)string—Who the figures count, in words: "active learners of the Autumn cohort".
commentsCourseComment[]—
commentsBlockedstring | null—Why this person can't see comments; omit when they can.
resultsCourseResults | null—
tabCourseTab—
defaultTabCourseTab—
onTabChange((tab: CourseTab) => void)—
openLearnerstring | null—The learner whose progress is open.
defaultOpenLearnerstring | null—
onOpenLearnerChange((id: string | null) => void)—
onPublish(() => void | Promise<unknown>)—Publishes the draft; resolve once published (the app passes status "published"), reject with the reason.
onEditLessons(() => void)—
onPreview(() => void)—Opens the course as a learner would see it; the app marks that view as a preview.
onExport(() => void | Promise<unknown>)—Requests the learners' export; resolve when requested (the file arrives later), reject with the reason.
onOpenLesson((lessonId: string) => void)—
onReply((commentId: string, text: string) => void | Promise<unknown>)—Sends a reply; resolve once sent (the app marks the comment replied), reject with the reason.
onScore((score: { learnerId: string; questionId: string; points: number; }) => void | Promise<…—Saves a person's score of a waiting answer; resolve once saved (the app updates results), reject with why.
onRefreshResults(() => void | Promise<unknown>)—
onRetrySync(() => void)—
classNamestring—Classes on the documented visual root; no override by default.
styleCSSProperties—Inline styles on the documented visual root; no overrides by default.
refRef<HTMLDivElement>—Receives the documented native target or imperative handle; omitted by default.

Built from

Dependencies

lucide-react

Import

import { CourseDashboard } from "@beamline/course-dashboard";

Get it

Course dashboard is part of Beamline UI. Install the parts you need in your React app as compiled packages or editable source. Get Beamline · Connect your agent

More in Education

  • Course builder: Setting a course up. The learning path as ordered sets, each with its release rule in place (at once, a delay after the set before drawn as a bar you…
  • Program modules: A wellness or coaching program's modules as a practitioner builds them. The modules down the side with where each stands (draft, published at a revision…
  • Question builder: Questions built beside their material. A reading passage (imported, with an import pending or failed said with Try again, or pasted) whose words become…
  • Grading desk: Grading a quiz or an assignment. The submissions down the side, not graded first, the open one beside its grade. A quiz attempt shows each question's…
  • Course home: A learner's course, week by week, in the cohort's time zone: each lesson done or not, a project's draft or submission, a reflection answered or not, a…
  • Volunteer rota: Several plans side by side for the people who staff them: plans as columns, teams and their positions as rows, each cell the people scheduled with their…
  • Gift desk: A gift or tickets taken in person, on a phone at an event or at a desk: the gift entered large in its currency, once or monthly (monthly said as an…
  • Gift batches: Gift batches between counting and the books: batches a counting team enters, each with the day the gifts were received (apart from when they were entered…

Part of Beamline UI: polished, editable React components and complete screens for custom applications. Build your own style from any look; tokens, fonts, radii, motion; not only colours.