Skip to content

Add Status multiselect filter to the Content Drive toolbar #37067

Closed as not planned
Closed as not planned

Description

@zJaaal

Description

Add a Status filter to the Content Drive toolbar so users can narrow results to Archived, Unpublished or Locked content. This is the frontend half of the Status filter; the backend clauses are a separate ticket and this one is blocked by it.

Design: a multiselect chip filter with three options (Archived, Unpublished, Locked), sitting alongside the existing content type / base type / language / workflow filters. Nothing selected means today's behavior: archived hidden, everything else returned.

Semantics: AND. Unlike the existing multiselects (base type, content type, language), which are OR within the facet, the three statuses are independent boolean flags on the same content row. Selecting several narrows the result set.

Why multiselect rather than a single select: Unpublished + Locked ("drafts currently checked out by someone") is a real question content teams ask, and a single select cannot express it. The legacy Content Search portlet exposes these as a mutually exclusive dropdown (view_contentlets.jsp:695-698), but that was a UI simplification, not a domain constraint: its backend has always ANDed the three flags independently (ContentletAjax.java:1010-1021).

Current state: archived: false is hardcoded in the search request at dot-content-drive.store.ts:135. That pin is removed and driven by the new filter instead.

Two behaviors worth knowing before building the UI:

  1. Archived + Unpublished will always return the same count as Archived alone. Archiving removes the live version (ESContentletAPIImpl.java:3833), so every archived item is already unpublished. The combination is redundant, not broken, and should not look like a bug to the user.
  2. Archived + Locked is reachable but uncommon (it needs a self-lock or a CMS Admin archive), so an empty result there is legitimate.

Folders carry no status. When any status is selected, folders must drop out of the results, consistent with how the store already handles the other narrowing filters (dot-content-drive.store.ts:137-146) and how ContentDriveHelper sets showFolders(false) for the workflow filter.

Acceptance Criteria

  • Status multiselect renders in the Content Drive toolbar with options Archived, Unpublished and Locked
  • Options use i18n keys via DotMessagePipe, following the content-drive.* key convention
  • Selecting one or more statuses sends them on the drive-search request and the results narrow accordingly
  • Unpublished + Locked returns content that is both (the driving use case for a multiselect)
  • Empty selection sends no status and preserves current behavior (archived content stays hidden)
  • archived: false is no longer hardcoded in the request at dot-content-drive.store.ts:135
  • Selections round-trip through the URL like every other filter (encode/decode via the shared filter bag) so a filtered view is shareable and survives reload
  • Selections are cleared by the existing "Clear all" action
  • Folders are excluded from results whenever any status is selected
  • The active selection is reflected as chips, consistent with the other toolbar filters
  • Archived + Unpublished returning the same count as Archived alone does not render as an error or empty state
  • An empty result set (e.g. Archived + Locked with no matches) shows the standard empty state, not an error
  • data-testid on the control and its options; [attr.aria-label] on the control
  • Jest/Spectator tests cover: single selection, multiple selection, clearing, URL round-trip, and folders being excluded when a status is active

Priority

Medium

Additional Context

Blocked by #37066, which adds the Archived / Unpublished / Locked clauses to POST /api/v1/drive/search. The three predicates do not exist on the endpoint today, so this cannot ship first.

Not in scope: the Shared Assets / System Host toggle, tracked separately in #34760.

Reference: the workflow filter (dot-content-drive-workflow-filter.component.ts) is the closest existing toolbar filter for chip rendering, URL encoding and the folder-exclusion pattern.

Activity

  1. added theissue type on Aug 14, 2026
  2. moved this from New to Current Sprint Backlog in dotCMS - Product Planningon Aug 14, 2026
  3. changed the title [-]Add Status multiselect filter to the Content Drive toolbar[/-] [+]Add Status filter to the Content Drive toolbar[/+] on Aug 14, 2026
  4. changed the title [-]Add Status filter to the Content Drive toolbar[/-] [+]Add Status multiselect filter to the Content Drive toolbar[/+] on Aug 14, 2026
  5. zJaaal commented on Aug 24, 2026

    @zJaaal
    MemberAuthor

    Merged into #37066, which now carries both the backend clauses and this toolbar multiselect as one vertical slice.

    Rationale: the two tickets were one capability split across layers, and each restated the same contract independently (AND rather than OR semantics, the Archived + Unpublished redundancy, folders dropping out when a status is active). Duplicated contract text across two tickets is where drift starts. Under the spec-driven flow it also meant two spec approvals and two planning cycles for a filter whose backend plumbing is ~65 lines by the beaf846d51 precedent.

    Every acceptance criterion from this ticket is carried over verbatim under the Frontend heading on #37066. Nothing was dropped.

    Closing as merged, not as rejected.

    Analysis and edit by Claude (Claude Code), posted from @zJaaal's account.

  6. moved this from Current Sprint Backlog to Done in dotCMS - Product Planningon Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions