Skip to content

Commit e9cda1e

Browse files
fix(ui): index based ids without useAsTitle breaks folders (#12519)
1 parent 842d184 commit e9cda1e

File tree

5 files changed

+35
-62
lines changed

5 files changed

+35
-62
lines changed

packages/payload/src/folders/utils/formatFolderOrDocumentItem.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export function formatFolderOrDocumentItem({
2020
}: Args): FolderOrDocument {
2121
const itemValue: FolderOrDocument['value'] = {
2222
id: value?.id,
23-
_folderOrDocumentTitle: (useAsTitle && value?.[useAsTitle]) || value['id'],
23+
_folderOrDocumentTitle: String((useAsTitle && value?.[useAsTitle]) || value['id']),
2424
createdAt: value?.createdAt,
2525
folderID: value?.[folderFieldName],
2626
updatedAt: value?.updatedAt,

packages/ui/src/elements/FolderView/Drawers/MoveToFolder/index.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {
1010

1111
import { useModal } from '@faceless-ui/modal'
1212
import { getTranslation } from '@payloadcms/translations'
13+
import { formatFolderOrDocumentItem } from 'payload/shared'
1314
import React from 'react'
1415

1516
import { useConfig } from '../../../../providers/Config/index.js'
@@ -162,6 +163,7 @@ function Content({
162163
setFolderID,
163164
subfolders,
164165
} = useFolder()
166+
const { getEntityConfig } = useConfig()
165167

166168
const getSelectedFolder = React.useCallback((): {
167169
id: null | number | string
@@ -187,23 +189,18 @@ function Content({
187189

188190
const onCreateSuccess = React.useCallback(
189191
({ collectionSlug, doc }: { collectionSlug: CollectionSlug; doc: Document }) => {
190-
const itemValue: FolderOrDocument['value'] = {
191-
id: doc?.id,
192-
_folderOrDocumentTitle: doc?.[folderCollectionConfig.admin.useAsTitle ?? 'id'],
193-
createdAt: doc?.createdAt,
194-
folderID: doc?.[folderFieldName],
195-
updatedAt: doc?.updatedAt,
196-
}
197-
192+
const collectionConfig = getEntityConfig({ collectionSlug })
198193
void addItems([
199-
{
200-
itemKey: `${collectionSlug}-${doc.id}`,
194+
formatFolderOrDocumentItem({
195+
folderFieldName,
196+
isUpload: Boolean(collectionConfig?.upload),
201197
relationTo: collectionSlug,
202-
value: itemValue,
203-
},
198+
useAsTitle: collectionConfig.admin.useAsTitle,
199+
value: doc,
200+
}),
204201
])
205202
},
206-
[addItems, folderCollectionConfig.admin.useAsTitle],
203+
[addItems, folderFieldName, getEntityConfig],
207204
)
208205

209206
const onConfirmMove = React.useCallback(() => {

packages/ui/src/providers/Folders/index.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,15 +1070,13 @@ export function FolderProvider({
10701070
breadcrumbs,
10711071
clearSelections,
10721072
currentFolder: breadcrumbs?.[0]?.id
1073-
? {
1074-
itemKey: `${folderCollectionSlug}-${activeFolderID}`,
1073+
? formatFolderOrDocumentItem({
1074+
folderFieldName,
1075+
isUpload: false,
10751076
relationTo: folderCollectionSlug,
1076-
value: {
1077-
id: activeFolderID,
1078-
_folderOrDocumentTitle: breadcrumbs[breadcrumbs.length - 1]?.name,
1079-
folderID: breadcrumbs[breadcrumbs.length - 2]?.id || null,
1080-
},
1081-
}
1077+
useAsTitle: folderCollectionConfig.admin.useAsTitle,
1078+
value: breadcrumbs[breadcrumbs.length - 1],
1079+
})
10821080
: null,
10831081
documents,
10841082
filterItems,

packages/ui/src/views/BrowseByFolder/index.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
import type { DragEndEvent } from '@dnd-kit/core'
44
import type { CollectionSlug, Document, FolderListViewClientProps } from 'payload'
5-
import type { FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'
5+
import type { FolderDocumentItemKey } from 'payload/shared'
66

77
import { useDndMonitor } from '@dnd-kit/core'
88
import { getTranslation } from '@payloadcms/translations'
9+
import { formatFolderOrDocumentItem } from 'payload/shared'
910
import React, { Fragment } from 'react'
1011

1112
import { DroppableBreadcrumb } from '../../elements/FolderView/Breadcrumbs/index.js'
@@ -130,29 +131,17 @@ export function DefaultBrowseByFolderView(
130131
const onCreateSuccess = React.useCallback(
131132
({ collectionSlug, doc }: { collectionSlug: CollectionSlug; doc: Document }) => {
132133
const collectionConfig = getEntityConfig({ collectionSlug })
133-
const itemValue: FolderOrDocument['value'] = {
134-
id: doc?.id,
135-
_folderOrDocumentTitle: doc?.[collectionConfig.admin.useAsTitle ?? 'id'],
136-
createdAt: doc?.createdAt,
137-
folderID: doc?.[config.folders.fieldName],
138-
updatedAt: doc?.updatedAt,
139-
}
140-
141-
if (collectionConfig.upload) {
142-
itemValue.filename = doc?.filename
143-
itemValue.mimeType = doc?.mimeType
144-
itemValue.url = doc?.url
145-
}
146-
147134
void addItems([
148-
{
149-
itemKey: `${collectionSlug}-${doc.id}`,
135+
formatFolderOrDocumentItem({
136+
folderFieldName: config.folders.fieldName,
137+
isUpload: Boolean(collectionConfig?.upload),
150138
relationTo: collectionSlug,
151-
value: itemValue,
152-
},
139+
useAsTitle: collectionConfig.admin.useAsTitle,
140+
value: doc,
141+
}),
153142
])
154143
},
155-
[getEntityConfig, addItems],
144+
[getEntityConfig, addItems, config.folders.fieldName],
156145
)
157146

158147
const selectedItemKeys = React.useMemo(() => {

packages/ui/src/views/CollectionFolder/index.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
import type { DragEndEvent } from '@dnd-kit/core'
44
import type { CollectionSlug, Document, FolderListViewClientProps } from 'payload'
5-
import type { FolderDocumentItemKey, FolderOrDocument } from 'payload/shared'
5+
import type { FolderDocumentItemKey } from 'payload/shared'
66

77
import { useDndMonitor } from '@dnd-kit/core'
88
import { getTranslation } from '@payloadcms/translations'
9+
import { formatFolderOrDocumentItem } from 'payload/shared'
910
import React, { Fragment } from 'react'
1011

1112
import { DroppableBreadcrumb } from '../../elements/FolderView/Breadcrumbs/index.js'
@@ -107,29 +108,17 @@ export function DefaultCollectionFolderView(props: FolderListViewClientProps) {
107108
const onCreateSuccess = React.useCallback(
108109
({ collectionSlug, doc }: { collectionSlug: CollectionSlug; doc: Document }) => {
109110
const collectionConfig = getEntityConfig({ collectionSlug })
110-
const itemValue: FolderOrDocument['value'] = {
111-
id: doc?.id,
112-
_folderOrDocumentTitle: doc?.[collectionConfig.admin.useAsTitle ?? 'id'],
113-
createdAt: doc?.createdAt,
114-
folderID: doc?.[config.folders.fieldName],
115-
updatedAt: doc?.updatedAt,
116-
}
117-
118-
if (collectionConfig.upload) {
119-
itemValue.filename = doc?.filename
120-
itemValue.mimeType = doc?.mimeType
121-
itemValue.url = doc?.url
122-
}
123-
124111
void addItems([
125-
{
126-
itemKey: `${collectionSlug}-${doc.id}`,
112+
formatFolderOrDocumentItem({
113+
folderFieldName: config.folders.fieldName,
114+
isUpload: Boolean(collectionConfig?.upload),
127115
relationTo: collectionSlug,
128-
value: itemValue,
129-
},
116+
useAsTitle: collectionConfig.admin.useAsTitle,
117+
value: doc,
118+
}),
130119
])
131120
},
132-
[getEntityConfig, addItems],
121+
[getEntityConfig, addItems, config.folders.fieldName],
133122
)
134123

135124
const selectedItemKeys = React.useMemo(() => {

0 commit comments

Comments
 (0)