fix(richtext-slate): fix issue with richText field cell not being a link when used as a useAsTitle (#8272)
This commit is contained in:
@@ -1,13 +1,48 @@
|
||||
'use client'
|
||||
import type { DefaultCellComponentProps } from 'payload'
|
||||
|
||||
import { useTableCell } from '@payloadcms/ui'
|
||||
import { useConfig, useTableCell } from '@payloadcms/ui'
|
||||
import { formatAdminURL } from '@payloadcms/ui/shared'
|
||||
import LinkImport from 'next/link.js'
|
||||
import React from 'react'
|
||||
|
||||
const Link = (LinkImport.default || LinkImport) as unknown as typeof LinkImport.default
|
||||
|
||||
export const RichTextCell: React.FC<DefaultCellComponentProps<any[]>> = () => {
|
||||
const { cellData } = useTableCell()
|
||||
const { cellData, cellProps, columnIndex, customCellContext, rowData } = useTableCell()
|
||||
const flattenedText = cellData?.map((i) => i?.children?.map((c) => c.text)).join(' ')
|
||||
|
||||
const {
|
||||
config: {
|
||||
routes: { admin: adminRoute },
|
||||
},
|
||||
} = useConfig()
|
||||
|
||||
const { link } = cellProps || {}
|
||||
let WrapElement: React.ComponentType<any> | string = 'span'
|
||||
|
||||
const wrapElementProps: {
|
||||
className?: string
|
||||
href?: string
|
||||
onClick?: () => void
|
||||
type?: 'button'
|
||||
} = {}
|
||||
|
||||
const isLink = link !== undefined ? link : columnIndex === 0
|
||||
|
||||
if (isLink) {
|
||||
WrapElement = Link
|
||||
wrapElementProps.href = customCellContext?.collectionSlug
|
||||
? formatAdminURL({
|
||||
adminRoute,
|
||||
path: `/collections/${customCellContext?.collectionSlug}/${rowData.id}`,
|
||||
})
|
||||
: ''
|
||||
}
|
||||
|
||||
if (isLink) {
|
||||
return <WrapElement {...wrapElementProps}>{flattenedText}</WrapElement>
|
||||
}
|
||||
// Limiting the number of characters shown is done in a CSS rule
|
||||
return <span>{flattenedText}</span>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user