Multi-Select Without Checkboxes — Bulk Editing and Per-Filter Columns in the Table View
We added a way to pick several rows in the desktop Table view and change them at once. There are no checkboxes, and the date buttons went in and came out twice. Saved filters now remember not just their conditions but which columns you see and in what order.
Multi-Select Without Checkboxes — Bulk Editing and Per-Filter Columns in the Table View
The Table view in Fecit desktop treats your tasks as a Jira-style grid. Click a cell to edit it in place, sort and filter from the headers, and pin the conditions you use often as saved-filter chips. We had six candidate improvements lined up for this screen. Today we built two of them: multi-row selection with bulk editing, and per-saved-filter column layouts.
1. We decided against checkboxes
The textbook way to pick multiple rows is a checkbox column on the far left. But the Table view already pins the star and title columns to the left edge, and a permanent checkbox column would push the whole grid one slot to the right. A column you don’t use most of the time, always taking up room. The decision: no checkboxes.
Instead we use the grammar the desktop already has. Shift+click selects a range from the anchor, ⌘ (Ctrl)+click toggles a single row, and a plain click or Esc clears the selection. While rows are selected, a plain click only clears; it doesn’t open the detail. Opening a detail by accident and losing a twenty-row selection feels bad. Selected rows get a light blue tint.
There was one trap. The cell popover was swallowing clicks, so Shift+clicking on a cell never reached the row. Clicks with a modifier key now bypass the cell and go to the row, and we suppress the browser’s blue text selection on Shift+click.
2. The floating bar — and the date buttons we removed twice
When rows are selected, a bar with a blue border floats at the bottom center of the grid. It shows “N selected” alongside buttons for point color, state, priority, project, milestone, assignee, and labels. Milestone and assignee appear only when every selected row belongs to the same project; you can’t attach a milestone from a different project.
Start date and due date went into the bar at first. Then they came out. They went back in, and came out again. The final call was “too many.” With nine buttons in one bar, the ones you use daily and the ones you use rarely all carry the same weight. Dates take a different path, described next.
3. Editing a cell on a selected row applies to the whole selection
The bar is not the only entrance to bulk editing. With several rows selected, clicking a cell on one of them and changing it applies that change to every selected row. The same menu as a normal cell edit opens; pick a value and they all change. Dates go through here too. Confirm the draft panel and the whole selection updates at once. The date buttons didn’t disappear from the product; they moved.
Project and milestone stay careful here as well. They apply only to selected rows in the same project as the row you clicked, and project changes skip subtasks. Labels toggle sensibly: if every selected row already has the label, it’s removed from all; otherwise it’s added to the rows missing it. Pick a “create project” or “create milestone” row and the newly created one is set on the whole selection.
Bulk mutations are optimistic. Everything changes first, only the rows that fail roll back, and a single toast reports how many failed. One failure out of twenty doesn’t undo the other nineteen.
4. Saved filters remember columns
The second feature is quiet. When you save or update a saved filter, the columns currently visible and their order are stored with the conditions. Focus that filter and the column layout comes with it; any column changes while focused live only in a working copy. Unfocus and you’re back to your personal layout. It’s the same grammar condition edits already followed.
So a “due this week” filter can lead with due date and priority, while a “Project A” filter leads with assignee and milestone. Each filter gets its own table. Column widths stay personal, and share links don’t carry columns. Someone opening a filter you shared has no reason to be locked into your widths and your columns. Older filters with no column data leave your columns alone.
The iPad Table view on mobile got column saving as well, mirrored. Multi-select didn’t make it there. Reproducing the same grammar on a screen without modifier keys means going back to checkboxes, and that’s a decision we didn’t make today.
What’s left
Four of the six candidates remain: keyboard navigation, grouping, inline row creation, and CSV export. Bulk delete and bulk star color were left out on purpose. Deleting is allowed to be slow. Today’s two features haven’t been run hard at runtime yet. We’ll use them for a few days and write again.