feat: optionally exclude collection documents from appearing in browse-by-folder (#12654)

Adds configurations for browse-by-folder document results. This PR
**does NOT** allow for filtering out folders on a per collection basis.
That will be addressed in a future PR 👍

### Disable browse-by-folder all together
```ts
type RootFoldersConfiguration = {
  /**
   * If true, the browse by folder view will be enabled
   *
   * @default true
   */
  browseByFolder?: boolean
  // ...rest of type
}
```

### Remove document types from appearing in the browse by folder view
```ts
type CollectionFoldersConfiguration =
  | boolean
  | {
      /**
       * If true, the collection documents will be included in the browse by folder view
       *
       * @default true
       */
      browseByFolder?: boolean
    }
```

### Misc
Fixes https://github.com/payloadcms/payload/issues/12631 where adding
folders.collectionOverrides was being set on the client config - it
should be omitted.

Fixes an issue where `baseListFilters` were not being respected.
This commit is contained in:
Jarrod Flesch
2025-06-04 13:22:26 -04:00
committed by GitHub
parent 48218bccb5
commit 337f6188da
59 changed files with 1549 additions and 367 deletions

View File

@@ -71,6 +71,7 @@ export interface Config {
media: Media;
drafts: Draft;
autosave: Autosave;
'omitted-from-browse-by': OmittedFromBrowseBy;
users: User;
'payload-folders': FolderInterface;
'payload-locked-documents': PayloadLockedDocument;
@@ -79,7 +80,7 @@ export interface Config {
};
collectionsJoins: {
'payload-folders': {
documentsAndFolders: 'payload-folders' | 'posts' | 'media' | 'drafts' | 'autosave';
documentsAndFolders: 'payload-folders' | 'posts' | 'media' | 'drafts' | 'autosave' | 'omitted-from-browse-by';
};
};
collectionsSelect: {
@@ -87,6 +88,7 @@ export interface Config {
media: MediaSelect<false> | MediaSelect<true>;
drafts: DraftsSelect<false> | DraftsSelect<true>;
autosave: AutosaveSelect<false> | AutosaveSelect<true>;
'omitted-from-browse-by': OmittedFromBrowseBySelect<false> | OmittedFromBrowseBySelect<true>;
users: UsersSelect<false> | UsersSelect<true>;
'payload-folders': PayloadFoldersSelect<false> | PayloadFoldersSelect<true>;
'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>;
@@ -191,6 +193,10 @@ export interface FolderInterface {
relationTo?: 'autosave';
value: string | Autosave;
}
| {
relationTo?: 'omitted-from-browse-by';
value: string | OmittedFromBrowseBy;
}
)[];
hasNextPage?: boolean;
totalDocs?: number;
@@ -222,6 +228,17 @@ export interface Autosave {
createdAt: string;
_status?: ('draft' | 'published') | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "omitted-from-browse-by".
*/
export interface OmittedFromBrowseBy {
id: string;
title?: string | null;
folder?: (string | null) | FolderInterface;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users".
@@ -262,6 +279,10 @@ export interface PayloadLockedDocument {
relationTo: 'autosave';
value: string | Autosave;
} | null)
| ({
relationTo: 'omitted-from-browse-by';
value: string | OmittedFromBrowseBy;
} | null)
| ({
relationTo: 'users';
value: string | User;
@@ -364,6 +385,16 @@ export interface AutosaveSelect<T extends boolean = true> {
createdAt?: T;
_status?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "omitted-from-browse-by_select".
*/
export interface OmittedFromBrowseBySelect<T extends boolean = true> {
title?: T;
folder?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users_select".