Skip to content

Pending approval

The content approval grid

The Pending Approval block is a card that contains a grid of posts in pending (or pending review) status. It is the main content-approval surface on the dashboard.

What appears in the grid

The grid shows posts whose status is "pending", "pending review", "pending_review", or any status containing "pending". They load via fetchPendingPosts (with pagination and optional date filters) and are cached (see below).

Columns use the same system as the main Posts grid, with a reduced set (e.g. category can be hidden via customColumns). You see enough to identify the post and take action.

Inline editing (status, author, date, categories, labels, etc.) and row actions (e.g. edit, trash) let you approve, reject, or edit without leaving the dashboard.

Approve All

"Approve All" appears in the Pending Approval card header when there is at least one pending post. Clicking it runs approveAllPendingPosts: posts process in chunks (e.g. 10 at a time with a short delay), each status updates to "publish", and a loading toast shows progress (e.g. "Approving posts: 10/25…").

When finished, a success (or partial failure) toast appears, the pending list refreshes (force refresh to bypass cache), and dashboard KPIs refresh. If the list goes from items to zero, a confetti animation plays near the empty-state illustration.

Clear the queue quickly when you trust all pending items and want to publish them in one go.

Empty state

  • When there are no pending posts, the grid shows an empty state: illustration, title like "You have no pending approval posts." and a short message that new submissions will appear there for quick review.

  • Clear signal that there's nothing left to approve.

Pending approval grid with Approve All

Pending approval grid with Approve All

Caching and refresh

  • Pending posts are cached (e.g. in localStorage) with keys derived from the request (e.g. no filter, date-from, date-to, or range). After approve all (or single status changes that remove a post from "pending"), the pending posts cache is invalidated so the next load shows fresh data.

  • Clear Cache in the header also invalidates the pending posts cache and invalidates React Query for posts, so the pending grid reflects the latest statuses.