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
? config.folders.slug
: null,
permissions?.collections?.[collectionSlug]?.create ? collectionSlug : null,
resolvedFolderID && permissions?.collections?.[collectionSlug]?.create
? collectionSlug
: null,
].filter(Boolean),
baseFolderPath: `/collections/${collectionSlug}/${config.folders.slug}`,
breadcrumbs,

View File

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

View File

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

View File

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

View File

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

View File

@@ -26,7 +26,7 @@ export async function createFolder({
await createFolderButton.click()
} else {
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()
}

View File

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