feat!: re-order DefaultCellComponentProps generics (#9207)
### What? Changes the order of the `DefaultCellComponentProps` generic type, allowing us to infer the type of cellData when a ClientField type is passed as the first generic argument. You can override the cellData type by passing the second generic. Previously: ```ts type DefaultCellComponentProps<TCellData = any, TField extends ClientField = ClientField> ``` New: ```ts type DefaultCellComponentProps<TField extends ClientField = ClientField, TCellData = undefined> ``` ### Why? Changing the ClientField type to be the first argument allows us to infer the cellData value type based on the type of field. I could have kept the same signature but the usage would look like: ```ts // Not very DX friendly const MyCellComponent<DefaultCellComponentProps<,ClientField>> = () => null ``` ### How? The changes made [here](https://github.com/payloadcms/payload/compare/chore/beta/simplify-DefaultCellComponentProps?expand=1#diff-24f3c92e546c2be3fed0bab305236bba83001309a7239c20a3e3dbd6f5f71dc6R29-R73) allow this. You can override the type by passing in the second argument to the generic.
This commit is contained in:
@@ -6,8 +6,7 @@ import React from 'react'
|
||||
|
||||
import { useTranslation } from '../../../../../providers/Translation/index.js'
|
||||
|
||||
export interface ArrayCellProps
|
||||
extends DefaultCellComponentProps<Record<string, unknown>[], ArrayFieldClient> {}
|
||||
export interface ArrayCellProps extends DefaultCellComponentProps<ArrayFieldClient> {}
|
||||
|
||||
export const ArrayCell: React.FC<ArrayCellProps> = ({ cellData, field: { labels } }) => {
|
||||
const { i18n } = useTranslation()
|
||||
|
||||
@@ -6,7 +6,7 @@ import React from 'react'
|
||||
|
||||
import { useTranslation } from '../../../../../providers/Translation/index.js'
|
||||
|
||||
export interface BlocksCellProps extends DefaultCellComponentProps<any, BlocksFieldClient> {}
|
||||
export interface BlocksCellProps extends DefaultCellComponentProps<BlocksFieldClient> {}
|
||||
|
||||
export const BlocksCell: React.FC<BlocksCellProps> = ({ cellData, field: { blocks, labels } }) => {
|
||||
const { i18n } = useTranslation()
|
||||
|
||||
@@ -6,7 +6,7 @@ import React from 'react'
|
||||
import { useTranslation } from '../../../../../providers/Translation/index.js'
|
||||
import './index.scss'
|
||||
|
||||
export const CheckboxCell: React.FC<DefaultCellComponentProps<boolean, CheckboxFieldClient>> = ({
|
||||
export const CheckboxCell: React.FC<DefaultCellComponentProps<CheckboxFieldClient>> = ({
|
||||
cellData,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
@@ -5,7 +5,7 @@ import React from 'react'
|
||||
|
||||
import './index.scss'
|
||||
|
||||
export interface CodeCellProps extends DefaultCellComponentProps<string, CodeFieldClient> {
|
||||
export interface CodeCellProps extends DefaultCellComponentProps<CodeFieldClient> {
|
||||
readonly nowrap?: boolean
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,10 @@ import { useConfig } from '../../../../../providers/Config/index.js'
|
||||
import { useTranslation } from '../../../../../providers/Translation/index.js'
|
||||
import { formatDate } from '../../../../../utilities/formatDate.js'
|
||||
|
||||
export const DateCell: React.FC<
|
||||
DefaultCellComponentProps<Date | number | string, DateFieldClient>
|
||||
> = ({ cellData, field: { admin: { date } = {} } }) => {
|
||||
export const DateCell: React.FC<DefaultCellComponentProps<DateFieldClient>> = ({
|
||||
cellData,
|
||||
field: { admin: { date } = {} },
|
||||
}) => {
|
||||
const {
|
||||
config: {
|
||||
admin: { dateFormat: dateFormatFromRoot },
|
||||
|
||||
@@ -9,7 +9,7 @@ import './index.scss'
|
||||
const baseClass = 'file'
|
||||
|
||||
export interface FileCellProps
|
||||
extends DefaultCellComponentProps<any, TextFieldClient | UploadFieldClient> {}
|
||||
extends DefaultCellComponentProps<TextFieldClient | UploadFieldClient> {}
|
||||
|
||||
export const FileCell: React.FC<FileCellProps> = ({
|
||||
cellData: filename,
|
||||
|
||||
@@ -5,9 +5,7 @@ import React from 'react'
|
||||
|
||||
import './index.scss'
|
||||
|
||||
export const JSONCell: React.FC<DefaultCellComponentProps<string, JSONFieldClient>> = ({
|
||||
cellData,
|
||||
}) => {
|
||||
export const JSONCell: React.FC<DefaultCellComponentProps<JSONFieldClient>> = ({ cellData }) => {
|
||||
const textToShow = cellData?.length > 100 ? `${cellData.substring(0, 100)}\u2026` : cellData
|
||||
|
||||
return (
|
||||
|
||||
@@ -24,7 +24,6 @@ const baseClass = 'relationship-cell'
|
||||
const totalToShow = 3
|
||||
|
||||
export type RelationshipCellProps = DefaultCellComponentProps<
|
||||
any,
|
||||
JoinFieldClient | RelationshipFieldClient | UploadFieldClient
|
||||
>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import React from 'react'
|
||||
|
||||
import { useTranslation } from '../../../../../providers/Translation/index.js'
|
||||
|
||||
export interface SelectCellProps extends DefaultCellComponentProps<any, SelectFieldClient> {}
|
||||
export interface SelectCellProps extends DefaultCellComponentProps<SelectFieldClient> {}
|
||||
|
||||
export const SelectCell: React.FC<SelectCellProps> = ({ cellData, field: { options } }) => {
|
||||
const { i18n } = useTranslation()
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { DefaultCellComponentProps, TextareaFieldClient } from 'payload'
|
||||
|
||||
import React from 'react'
|
||||
|
||||
export const TextareaCell: React.FC<DefaultCellComponentProps<string, TextareaFieldClient>> = ({
|
||||
export const TextareaCell: React.FC<DefaultCellComponentProps<TextareaFieldClient>> = ({
|
||||
cellData,
|
||||
}) => {
|
||||
const textToShow = cellData?.length > 100 ? `${cellData.substring(0, 100)}\u2026` : cellData
|
||||
|
||||
Reference in New Issue
Block a user