Skip to content

Commit 4e182ab

Browse files
PatrikKozakkendelljoseph
authored andcommitted
fix(ui): filters out upload specific fields for bulk editing (#10726)
### What This PR adds a filtering mechanism to exclude certain reserved fields from being displayed in the `Edit Many` drawer for bulk uploads. This ensures that only relevant fields are available for bulk editing. ### Why Fields like `filename`, `mimeType`, and `filesize` are not intended to be edited in bulk. Filtering these fields streamlines the interface and focuses on fields that are meaningful for bulk operations. ### How - Introduced a `filterOutUploadFields` utility to exclude reserved fields from the field selection in bulk uploads. - Applied this filter to the `Edit Many` drawer, ensuring a more relevant and user-friendly experience. - Reserved fields include properties like `file`, `mimeType`, `url`, `width`, `height`, and others that are not applicable for bulk editing.
1 parent 2950055 commit 4e182ab

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

packages/ui/src/elements/BulkUpload/EditMany/DrawerContent.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { RenderFields } from '../../../forms/RenderFields/index.js'
1515
import { XIcon } from '../../../icons/X/index.js'
1616
import { useAuth } from '../../../providers/Auth/index.js'
1717
import { useTranslation } from '../../../providers/Translation/index.js'
18+
import { filterOutUploadFields } from '../../../utilities/filterOutUploadFields.js'
1819
import { FieldSelect } from '../../FieldSelect/index.js'
1920
import { useFormsManager } from '../FormsManager/index.js'
2021
import { baseClass, type EditManyBulkUploadsProps } from './index.js'
@@ -36,6 +37,7 @@ export const EditManyBulkUploadsDrawerContent: React.FC<
3637

3738
const [selectedFields, setSelectedFields] = useState<FieldWithPathClient[]>([])
3839
const collectionPermissions = permissions?.collections?.[slug]
40+
const filteredFields = filterOutUploadFields(fields)
3941

4042
const handleSubmit: FormProps['onSubmit'] = useCallback(
4143
(formState) => {
@@ -72,7 +74,7 @@ export const EditManyBulkUploadsDrawerContent: React.FC<
7274
</button>
7375
</div>
7476
<Form className={`${baseClass}__form`} initialState={{}} onSubmit={handleSubmit}>
75-
<FieldSelect fields={fields} setSelected={setSelectedFields} />
77+
<FieldSelect fields={filteredFields} setSelected={setSelectedFields} />
7678
{selectedFields.length === 0 ? null : (
7779
<RenderFields
7880
fields={selectedFields}

packages/ui/src/elements/EditMany/DrawerContent.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ import { SelectAllStatus, useSelection } from '../../providers/Selection/index.j
2424
import { useServerFunctions } from '../../providers/ServerFunctions/index.js'
2525
import { useTranslation } from '../../providers/Translation/index.js'
2626
import { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'
27+
import { filterOutUploadFields } from '../../utilities/filterOutUploadFields.js'
2728
import { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js'
2829
import { parseSearchParams } from '../../utilities/parseSearchParams.js'
29-
import './index.scss'
3030
import { FieldSelect } from '../FieldSelect/index.js'
3131
import { baseClass, type EditManyProps } from './index.js'
32+
import './index.scss'
3233

3334
const sanitizeUnselectedFields = (formState: FormState, selected: FieldWithPathClient[]) => {
3435
const filteredData = selected.reduce((acc, field) => {
@@ -169,6 +170,8 @@ export const EditManyDrawerContent: React.FC<
169170
const collectionPermissions = permissions?.collections?.[slug]
170171
const searchParams = useSearchParams()
171172

173+
const filteredFields = filterOutUploadFields(fields)
174+
172175
React.useEffect(() => {
173176
const controller = new AbortController()
174177

@@ -284,7 +287,7 @@ export const EditManyDrawerContent: React.FC<
284287
onChange={[onChange]}
285288
onSuccess={onSuccess}
286289
>
287-
<FieldSelect fields={fields} setSelected={setSelected} />
290+
<FieldSelect fields={filteredFields} setSelected={setSelected} />
288291
{selected.length === 0 ? null : (
289292
<RenderFields
290293
fields={selected}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { FieldWithPathClient } from 'payload'
2+
3+
export const filterOutUploadFields = (fields: FieldWithPathClient[]): FieldWithPathClient[] => {
4+
// List of reserved upload field names
5+
const baseUploadFieldNames = [
6+
'file',
7+
'mimeType',
8+
'thumbnailURL',
9+
'width',
10+
'height',
11+
'filesize',
12+
'filename',
13+
'url',
14+
'focalX',
15+
'focalY',
16+
'sizes',
17+
]
18+
19+
return fields.filter((field) => !baseUploadFieldNames.includes('name' in field && field.name))
20+
}

0 commit comments

Comments
 (0)