& {
fieldTypes: FieldTypes
forceRender?: boolean
+ forceRenderAllFields?: boolean
indexPath: string
path?: string
permissions: FieldPermissions
diff --git a/packages/payload/src/admin/components/forms/field-types/Row/index.tsx b/packages/payload/src/admin/components/forms/field-types/Row/index.tsx
index 69ec9fdfed..3b39e999d8 100644
--- a/packages/payload/src/admin/components/forms/field-types/Row/index.tsx
+++ b/packages/payload/src/admin/components/forms/field-types/Row/index.tsx
@@ -16,12 +16,15 @@ const Row: React.FC
= (props) => {
admin: { className, readOnly },
fieldTypes,
fields,
- forceRender = false,
+ forceRender: forceRenderFromProps = false,
+ forceRenderAllFields,
indexPath,
path,
permissions,
} = props
+ const forceRender = forceRenderFromProps || forceRenderAllFields
+
return (
diff --git a/packages/payload/src/admin/components/forms/field-types/Row/types.ts b/packages/payload/src/admin/components/forms/field-types/Row/types.ts
index 9a2c05396b..b44eb36ded 100644
--- a/packages/payload/src/admin/components/forms/field-types/Row/types.ts
+++ b/packages/payload/src/admin/components/forms/field-types/Row/types.ts
@@ -5,6 +5,7 @@ import type { RowField } from '../../../../../fields/config/types'
export type Props = Omit
& {
fieldTypes: FieldTypes
forceRender?: boolean
+ forceRenderAllFields?: boolean
indexPath: string
path?: string
permissions: FieldPermissions
diff --git a/packages/payload/src/admin/components/forms/field-types/Tabs/index.tsx b/packages/payload/src/admin/components/forms/field-types/Tabs/index.tsx
index 362fa6fece..036786b7a7 100644
--- a/packages/payload/src/admin/components/forms/field-types/Tabs/index.tsx
+++ b/packages/payload/src/admin/components/forms/field-types/Tabs/index.tsx
@@ -72,7 +72,8 @@ const TabsField: React.FC = (props) => {
const {
admin: { className, readOnly },
fieldTypes,
- forceRender = false,
+ forceRender: forceRenderFromProps = false,
+ forceRenderAllFields,
indexPath,
path,
permissions,
@@ -86,6 +87,7 @@ const TabsField: React.FC = (props) => {
const { withinCollapsible } = useCollapsible()
const [activeTabIndex, setActiveTabIndex] = useState(0)
const tabsPrefKey = `tabs-${indexPath}`
+ const forceRender = forceRenderFromProps || forceRenderAllFields
useEffect(() => {
if (preferencesKey) {
diff --git a/packages/payload/src/admin/components/forms/field-types/Tabs/types.ts b/packages/payload/src/admin/components/forms/field-types/Tabs/types.ts
index 243541b9db..10444c1659 100644
--- a/packages/payload/src/admin/components/forms/field-types/Tabs/types.ts
+++ b/packages/payload/src/admin/components/forms/field-types/Tabs/types.ts
@@ -5,6 +5,7 @@ import type { TabsField } from '../../../../../fields/config/types'
export type Props = Omit & {
fieldTypes: FieldTypes
forceRender?: boolean
+ forceRenderAllFields?: boolean
indexPath: string
path?: string
permissions: FieldPermissions
diff --git a/packages/payload/src/admin/components/utilities/Config/index.tsx b/packages/payload/src/admin/components/utilities/Config/index.tsx
index 2ed9c6cce3..8eb297aed6 100644
--- a/packages/payload/src/admin/components/utilities/Config/index.tsx
+++ b/packages/payload/src/admin/components/utilities/Config/index.tsx
@@ -19,7 +19,7 @@ export const ConfigProvider: React.FC<{ children: React.ReactNode; config: Sanit
const resolvedConfig = await incomingConfig
setConfig(resolvedConfig)
}
- awaitConfig()
+ void awaitConfig()
}
}, [incomingConfig])
diff --git a/packages/payload/src/admin/components/views/Global/Default/index.tsx b/packages/payload/src/admin/components/views/Global/Default/index.tsx
index 0cefc90df7..50b227d973 100644
--- a/packages/payload/src/admin/components/views/Global/Default/index.tsx
+++ b/packages/payload/src/admin/components/views/Global/Default/index.tsx
@@ -19,7 +19,7 @@ export const DefaultGlobalEdit: React.FC<
const { apiURL, data, fieldTypes, global, permissions } = props
const { i18n } = useTranslation()
- const { admin: { description } = {}, fields, label } = global
+ const { admin: { description, forceRenderAllFields } = {}, fields, label } = global
const hasSavePermission = permissions?.update?.permission
@@ -44,6 +44,7 @@ export const DefaultGlobalEdit: React.FC<
description={description}
fieldTypes={fieldTypes}
fields={fields}
+ forceRenderAllFields={forceRenderAllFields}
hasSavePermission={hasSavePermission}
permissions={permissions}
/>
diff --git a/packages/payload/src/admin/components/views/LivePreview/index.tsx b/packages/payload/src/admin/components/views/LivePreview/index.tsx
index 290fcf1dc1..05b2662206 100644
--- a/packages/payload/src/admin/components/views/LivePreview/index.tsx
+++ b/packages/payload/src/admin/components/views/LivePreview/index.tsx
@@ -122,6 +122,11 @@ const PreviewView: React.FC<
description={description}
fieldTypes={fieldTypes}
fields={fields}
+ forceRenderAllFields={
+ collection?.admin?.forceRenderAllFields ??
+ global?.admin?.forceRenderAllFields ??
+ false
+ }
forceSidebarWrap
hasSavePermission={hasSavePermission}
permissions={permissions}
diff --git a/packages/payload/src/admin/components/views/collections/Edit/Default/index.tsx b/packages/payload/src/admin/components/views/collections/Edit/Default/index.tsx
index d38b2ba1b9..8250dc84b3 100644
--- a/packages/payload/src/admin/components/views/collections/Edit/Default/index.tsx
+++ b/packages/payload/src/admin/components/views/collections/Edit/Default/index.tsx
@@ -39,7 +39,7 @@ export const DefaultCollectionEdit: React.FC<
permissions,
} = props
- const { auth, upload } = collection
+ const { admin: { forceRenderAllFields } = {}, auth, upload } = collection
const [fields] = useState(() => formatFields(collection, isEditing))
@@ -92,6 +92,7 @@ export const DefaultCollectionEdit: React.FC<
}
fieldTypes={fieldTypes}
fields={fields}
+ forceRenderAllFields={forceRenderAllFields}
hasSavePermission={hasSavePermission}
permissions={permissions}
/>
diff --git a/packages/payload/src/collections/config/schema.ts b/packages/payload/src/collections/config/schema.ts
index 719e1df7ba..6df595ed00 100644
--- a/packages/payload/src/collections/config/schema.ts
+++ b/packages/payload/src/collections/config/schema.ts
@@ -62,6 +62,7 @@ const collectionSchema = joi.object().keys({
disableDuplicate: joi.bool(),
enableRichTextLink: joi.boolean(),
enableRichTextRelationship: joi.boolean(),
+ forceRenderAllFields: joi.boolean(),
group: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
hidden: joi.alternatives().try(joi.boolean(), joi.func()),
hideAPIURL: joi.bool(),
diff --git a/packages/payload/src/collections/config/types.ts b/packages/payload/src/collections/config/types.ts
index d3ce40a0eb..61ccdf45fd 100644
--- a/packages/payload/src/collections/config/types.ts
+++ b/packages/payload/src/collections/config/types.ts
@@ -317,6 +317,11 @@ export type CollectionAdminOptions = {
disableDuplicate?: boolean
enableRichTextLink?: boolean
enableRichTextRelationship?: boolean
+ /**
+ * Forces all fields in the Edit view to render immediately, regardless of scroll position
+ * @default false
+ */
+ forceRenderAllFields?: boolean
/**
* Place collections into a navigational group
* */
diff --git a/packages/payload/src/globals/config/schema.ts b/packages/payload/src/globals/config/schema.ts
index f337a89fb8..049723869c 100644
--- a/packages/payload/src/globals/config/schema.ts
+++ b/packages/payload/src/globals/config/schema.ts
@@ -40,6 +40,7 @@ const globalSchema = joi
}),
}),
description: joi.alternatives().try(joi.string(), componentSchema),
+ forceRenderAllFields: joi.boolean(),
group: joi
.alternatives()
.try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),
diff --git a/packages/payload/src/globals/config/types.ts b/packages/payload/src/globals/config/types.ts
index af41c11575..47537dcc3e 100644
--- a/packages/payload/src/globals/config/types.ts
+++ b/packages/payload/src/globals/config/types.ts
@@ -138,6 +138,11 @@ export type GlobalAdminOptions = {
* Custom description for collection
*/
description?: EntityDescription
+ /**
+ * Forces all fields in the Edit view to render immediately, regardless of scroll position
+ * @default false
+ */
+ forceRenderAllFields?: boolean
/**
* Place globals into a navigational group
* */