Lesson 9 of 10 · 4 min
Bulk Operations: Status, Delivery, and Cross-Page Selection
Efficiently move large numbers of jobs through the pipeline using bulk status updates, cross-page selection, and delivery enablement.
Bulk Operations: Status, Delivery, and Cross-Page Selection
Video coming soon
Lesson Notes
Bulk operations unlock when you check at least one job's checkbox in table view. The bulk action bar appears above the table with four buttons: Assign, Status, Enable Delivery, and Delete. Owners and Admins see the Delete button; it is hidden for Project Managers and below. All four operations work on the current selection, which can span the visible page but also all matching jobs in the database.
The cross-page selection flow starts when you check the header checkbox (selecting all jobs on the current page) while there are more pages. A secondary banner appears: 'All N jobs on this page are selected. Select all X jobs.' Clicking the 'Select all X jobs' link triggers a fetch of every job ID that matches the current filter state — status, search query, technician, editor, PM, customer, package, media types, and date ranges. This uses the /projects/ids endpoint. The selection state then contains every matching ID, not just the visible page, and the banner updates to 'All X jobs are selected.' Any subsequent bulk action applies to the complete set.
Bulk Status Change opens a popover listing six statuses: Pending, Assigned, In Progress, Editing, Delivered, Cancelled. Selecting one calls api.projects.updateStatus in parallel for every selected job ID using Promise.allSettled. Partial failures are reported: '47 jobs updated, 3 failed.' The list re-fetches after completion. A common use case is selecting all Assigned jobs from yesterday and bulk-moving them to In Progress at the start of a shoot day, or mass-marking Delivered at end of day.
Enable Delivery is a separate bulk action because it has a side effect beyond status: it activates the delivery link for each job so the customer can access their media. The button triggers a confirmation dialog ('This will enable delivery for N jobs. Clients will be able to access delivered media.') before proceeding. Delivery enablement calls api.projectDelivery.enable per job. Jobs with delivery already enabled are unaffected. This is the correct workflow to follow after an editor marks jobs as Delivered — the delivery link only becomes accessible after this step.
Bulk Delete is guarded by a confirmation dialog ('This will permanently delete N jobs.') and restricted to Owners and Admins. The backend cascades: cancel → archive → delete. If some selected IDs have already been deleted (removed in another tab, archived, etc.), the backend returns a list of actually deleted IDs; the frontend compares and shows an info toast for the gap ('3 selected jobs were no longer available'). The job cache invalidates and the list re-fetches to reflect the final state.
Key Takeaways
- Bulk actions activate via row checkboxes; the header checkbox selects the current page; cross-page selection fetches all matching IDs.
- Bulk Status Change supports all six statuses and runs in parallel — partial success is reported per-item.
- Enable Delivery is a distinct step from status update — it activates the client-facing delivery link after assets are ready.
- Bulk Delete is Owners/Admins only, requires confirmation, and handles already-deleted IDs gracefully.
- Cross-page selection is bounded by the current filter state — the same filters that scope the visible list scope the bulk operation.