chore(ui): prevent loading orphaned documents when viewing root collection folders (#13684)

Root level collection folders should not display items, only folders. 


---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
  - https://app.asana.com/0/0/1210821658736793
This commit is contained in:
Jarrod Flesch
2025-09-05 18:22:18 -04:00
committed by GitHub
parent f288cf6a8f
commit 9f0573d714
7 changed files with 22 additions and 27 deletions

View File

@@ -178,7 +178,9 @@ export const buildCollectionFolderView = async (
permissions?.collections?.[config.folders.slug]?.create permissions?.collections?.[config.folders.slug]?.create
? config.folders.slug ? config.folders.slug
: null, : null,
permissions?.collections?.[collectionSlug]?.create ? collectionSlug : null, resolvedFolderID && permissions?.collections?.[collectionSlug]?.create
? collectionSlug
: null,
].filter(Boolean), ].filter(Boolean),
baseFolderPath: `/collections/${collectionSlug}/${config.folders.slug}`, baseFolderPath: `/collections/${collectionSlug}/${config.folders.slug}`,
breadcrumbs, breadcrumbs,

View File

@@ -79,30 +79,17 @@ export const getFolderData = async ({
subfolders: sortDocs({ docs: result.subfolders, sort }), subfolders: sortDocs({ docs: result.subfolders, sort }),
} }
} else { } else {
// subfolders and documents are queried separately
const subfoldersPromise = getOrphanedDocs({ const subfoldersPromise = getOrphanedDocs({
collectionSlug: payload.config.folders.slug, collectionSlug: payload.config.folders.slug,
folderFieldName: payload.config.folders.fieldName, folderFieldName: payload.config.folders.fieldName,
req, req,
where: folderWhere, where: folderWhere,
}) })
const documentsPromise = collectionSlug const [breadcrumbs, subfolders] = await Promise.all([breadcrumbsPromise, subfoldersPromise])
? getOrphanedDocs({
collectionSlug,
folderFieldName: payload.config.folders.fieldName,
req,
where: documentWhere,
})
: Promise.resolve([])
const [breadcrumbs, subfolders, documents] = await Promise.all([
breadcrumbsPromise,
subfoldersPromise,
documentsPromise,
])
return { return {
breadcrumbs, breadcrumbs,
documents: sortDocs({ docs: documents, sort }), documents: [],
folderAssignedCollections: collectionSlug ? [collectionSlug] : undefined, folderAssignedCollections: collectionSlug ? [collectionSlug] : undefined,
subfolders: sortDocs({ docs: subfolders, sort }), subfolders: sortDocs({ docs: subfolders, sort }),
} }

View File

@@ -264,7 +264,11 @@ function BrowseByFolderViewInContext(props: BrowseByFolderViewInContextProps) {
TitleActions={[ TitleActions={[
allowCreateCollectionSlugs.length && ( allowCreateCollectionSlugs.length && (
<ListCreateNewDocInFolderButton <ListCreateNewDocInFolderButton
buttonLabel={t('general:createNew')} buttonLabel={
allowCreateCollectionSlugs.length > 1
? t('general:createNew')
: `${t('general:create')} ${getTranslation(folderCollectionConfig.labels?.singular, i18n).toLowerCase()}`
}
collectionSlugs={allowCreateCollectionSlugs} collectionSlugs={allowCreateCollectionSlugs}
folderAssignedCollections={Array.isArray(folderType) ? folderType : []} folderAssignedCollections={Array.isArray(folderType) ? folderType : []}
key="create-new-button" key="create-new-button"

View File

@@ -302,7 +302,11 @@ function CollectionFolderViewInContext(props: CollectionFolderViewInContextProps
TitleActions={[ TitleActions={[
allowCreateCollectionSlugs.length && ( allowCreateCollectionSlugs.length && (
<ListCreateNewDocInFolderButton <ListCreateNewDocInFolderButton
buttonLabel={t('general:createNew')} buttonLabel={
allowCreateCollectionSlugs.length > 1
? t('general:createNew')
: `${t('general:create')} ${getTranslation(folderCollectionConfig.labels?.singular, i18n).toLowerCase()}`
}
collectionSlugs={allowCreateCollectionSlugs} collectionSlugs={allowCreateCollectionSlugs}
folderAssignedCollections={ folderAssignedCollections={
Array.isArray(folderType) ? folderType : [collectionSlug] Array.isArray(folderType) ? folderType : [collectionSlug]

View File

@@ -77,7 +77,7 @@ test.describe('Folders', () => {
test('should create new folder from collection view', async () => { test('should create new folder from collection view', async () => {
await page.goto(postURL.byFolder) await page.goto(postURL.byFolder)
await createFolder({ folderName: 'New Folder From Collection', fromDropdown: true, page }) await createFolder({ folderName: 'New Folder From Collection', fromDropdown: false, page })
}) })
test('should create new folder from document view', async () => { test('should create new folder from document view', async () => {
@@ -422,12 +422,10 @@ test.describe('Folders', () => {
test('should create folder from By Folder view', async () => { test('should create folder from By Folder view', async () => {
await page.goto(postURL.byFolder) await page.goto(postURL.byFolder)
const createDropdown = page.locator('.create-new-doc-in-folder__popup-button', { const createButton = page.locator('.create-new-doc-in-folder__button', {
hasText: 'Create', hasText: 'Create folder',
}) })
await createDropdown.click() await createButton.click()
const createFolderButton = page.locator('.popup-button-list__button', { hasText: 'Folder' })
await createFolderButton.click()
await createFolderDoc({ await createFolderDoc({
page, page,
folderName: 'New Folder From Collection', folderName: 'New Folder From Collection',
@@ -485,7 +483,7 @@ test.describe('Folders', () => {
await createFolder({ await createFolder({
folderName, folderName,
page, page,
fromDropdown: true, fromDropdown: false,
folderType: ['Omitted From Browse By', 'Posts'], folderType: ['Omitted From Browse By', 'Posts'],
}) })

View File

@@ -26,7 +26,7 @@ export async function createFolder({
await createFolderButton.click() await createFolderButton.click()
} else { } else {
const createFolderButton = page.locator( const createFolderButton = page.locator(
'.create-new-doc-in-folder__button:has-text("Create New")', '.list-header__title-and-actions .create-new-doc-in-folder__button:has-text("Create folder")',
) )
await createFolderButton.click() await createFolderButton.click()
} }

View File

@@ -7,6 +7,6 @@ type Args = {
export async function expectNoResultsAndCreateFolderButton({ page }: Args): Promise<void> { export async function expectNoResultsAndCreateFolderButton({ page }: Args): Promise<void> {
const noResultsDiv = page.locator('div.no-results') const noResultsDiv = page.locator('div.no-results')
await expect(noResultsDiv).toBeVisible() await expect(noResultsDiv).toBeVisible()
const createFolderButton = page.locator('text=Create Folder') const createFolderButton = noResultsDiv.locator('text=Create Folder')
await expect(createFolderButton).toBeVisible() await expect(createFolderButton).toBeVisible()
} }