Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Changelog Task List Block for React Aria

A per-task audit trail where eight tasks open to their history, a filter narrows it by status, priority or assignee, and changing a priority or a checkbox logs a new event.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Keep an honest record of what happened to each task, with this changelog to-do list block for React with React Aria. Eight tasks each open to a history of events, newest first: who created it, who it was assigned to, every priority change and when it was completed, each with a kind label and a time element. A row of Button filters narrows every history to All, Status, Priority or Assignee and carries the counts. Doing something appends an event: every task has a priority Native Select and a Checkbox, and changing either logs "You changed priority from Medium to High" at the top of its history, stamped one minute after the last from a fixed 09:30. The task list sits in a fixed-height scroll region, so opening histories never moves the foot, and Guides rule the bands. For audit trails, task detail pages and any list where people ask who changed what.

FAQ

What counts as an event?

Three kinds: status (created, completed, reopened), priority (a change from one level to another) and assignee. Each event has a typed kind, so the filter counts and the history agree without any parsing of the text.

What gets logged when I act?

Changing a task's priority logs one priority event, and ticking or unticking its checkbox logs a status event ("You marked it done", "You reopened it"). Choosing the same priority again logs nothing. The status line announces the new event with its time.

Where do the times come from?

Typed events carry local at strings, and new ones use minuteOf, which counts minutes after 09:30 on the fixed AS_OF date. Nothing reads the visitor's clock, so the labels are the same on the server and in every browser.

What does the filter change?

It narrows the events shown in every open history and the "2 of 4 events" count on each row; tasks are never hidden. Pressing the active filter again returns to All.

What stays local, and how do I make it real?

New events live in React state and vanish on reload. A real audit trail is written on the server, with the signed-in user and a trusted timestamp, and the client only reads it: replace log with a request and render what comes back.