@payloadcms/ui 3.49.0 → 3.49.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
- package/dist/elements/AddNewRelation/index.js +1 -1
- package/dist/elements/AddNewRelation/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.d.ts +1 -1
- package/dist/elements/DocumentDrawer/Provider.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentDrawer/index.d.ts +19 -0
- package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/index.js +28 -9
- package/dist/elements/DocumentDrawer/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +25 -12
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts +3 -3
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.js +19 -70
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.js.map +1 -1
- package/dist/elements/RelationshipTable/cells/DrawerLink/index.scss +10 -0
- package/dist/elements/RelationshipTable/index.d.ts +1 -0
- package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/index.js +61 -40
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +2 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
- package/dist/elements/Toasts/fieldErrors.js +4 -1
- package/dist/elements/Toasts/fieldErrors.js.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/fields/Relationship/Input.d.ts.map +1 -1
- package/dist/fields/Relationship/Input.js.map +1 -1
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +8 -8
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/{elements/AddNewRelation → hooks}/useRelatedCollections.d.ts +3 -0
- package/dist/hooks/useRelatedCollections.d.ts.map +1 -0
- package/dist/{elements/AddNewRelation → hooks}/useRelatedCollections.js +4 -1
- package/dist/hooks/useRelatedCollections.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/utilities/getDisplayedFieldValue.d.ts.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +2 -2
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/hasOptionLabelJSXElement.js +2 -2
- package/dist/utilities/hasOptionLabelJSXElement.js.map +1 -1
- package/dist/utilities/isValidReactElement.d.ts +7 -0
- package/dist/utilities/isValidReactElement.d.ts.map +1 -0
- package/dist/utilities/isValidReactElement.js +10 -0
- package/dist/utilities/isValidReactElement.js.map +1 -0
- package/dist/utilities/renderTable.d.ts +1 -1
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +11 -11
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +0 -4
- package/dist/views/List/index.js.map +1 -1
- package/package.json +6 -6
- package/dist/elements/AddNewRelation/useRelatedCollections.d.ts.map +0 -1
- package/dist/elements/AddNewRelation/useRelatedCollections.js.map +0 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
4
|
import { getTranslation } from '@payloadcms/translations';
|
|
5
5
|
import { hoistQueryParamsToAnd, transformColumnsToPreferences } from 'payload/shared';
|
|
6
|
-
import React, { Fragment, useCallback, useEffect, useState } from 'react';
|
|
6
|
+
import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react';
|
|
7
7
|
import { Pill } from '../../elements/Pill/index.js';
|
|
8
8
|
import { useEffectEvent } from '../../hooks/useEffectEvent.js';
|
|
9
9
|
import { ChevronIcon } from '../../icons/Chevron/index.js';
|
|
@@ -19,8 +19,8 @@ import { useDocumentDrawer } from '../DocumentDrawer/index.js';
|
|
|
19
19
|
import { RelationshipProvider } from '../Table/RelationshipProvider/index.js';
|
|
20
20
|
import { AddNewButton } from './AddNewButton.js';
|
|
21
21
|
import { DrawerLink } from './cells/DrawerLink/index.js';
|
|
22
|
-
import './index.scss';
|
|
23
22
|
import { RelationshipTablePagination } from './Pagination.js';
|
|
23
|
+
import './index.scss';
|
|
24
24
|
const baseClass = 'relationship-table';
|
|
25
25
|
export const RelationshipTable = props => {
|
|
26
26
|
const {
|
|
@@ -42,24 +42,6 @@ export const RelationshipTable = props => {
|
|
|
42
42
|
config,
|
|
43
43
|
getEntityConfig
|
|
44
44
|
} = useConfig();
|
|
45
|
-
const {
|
|
46
|
-
permissions
|
|
47
|
-
} = useAuth();
|
|
48
|
-
const [initialData] = useState(() => {
|
|
49
|
-
if (initialDataFromProps) {
|
|
50
|
-
return {
|
|
51
|
-
...initialDataFromProps,
|
|
52
|
-
docs: Array.isArray(initialDataFromProps.docs) ? initialDataFromProps.docs.reduce((acc, doc) => {
|
|
53
|
-
if (typeof doc === 'string') {
|
|
54
|
-
return [...acc, {
|
|
55
|
-
id: doc
|
|
56
|
-
}];
|
|
57
|
-
}
|
|
58
|
-
return [...acc, doc];
|
|
59
|
-
}, []) : []
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
45
|
const {
|
|
64
46
|
i18n,
|
|
65
47
|
t
|
|
@@ -71,8 +53,31 @@ export const RelationshipTable = props => {
|
|
|
71
53
|
}));
|
|
72
54
|
const isPolymorphic = Array.isArray(relationTo);
|
|
73
55
|
const [selectedCollection, setSelectedCollection] = useState(isPolymorphic ? undefined : relationTo);
|
|
56
|
+
const {
|
|
57
|
+
permissions
|
|
58
|
+
} = useAuth();
|
|
59
|
+
const openDrawerWhenRelationChanges = useRef(false);
|
|
60
|
+
const [currentDrawerID, setCurrentDrawerID] = useState(undefined);
|
|
61
|
+
const [DocumentDrawer,, {
|
|
62
|
+
closeDrawer,
|
|
63
|
+
isDrawerOpen,
|
|
64
|
+
openDrawer
|
|
65
|
+
}] = useDocumentDrawer({
|
|
66
|
+
id: currentDrawerID,
|
|
67
|
+
collectionSlug: selectedCollection
|
|
68
|
+
});
|
|
74
69
|
const [isLoadingTable, setIsLoadingTable] = useState(!disableTable);
|
|
75
|
-
const [data, setData] = useState(
|
|
70
|
+
const [data, setData] = useState(() => initialDataFromProps ? {
|
|
71
|
+
...initialDataFromProps,
|
|
72
|
+
docs: Array.isArray(initialDataFromProps.docs) ? initialDataFromProps.docs.reduce((acc, doc) => {
|
|
73
|
+
if (typeof doc === 'string' || typeof doc === 'number') {
|
|
74
|
+
return [...acc, {
|
|
75
|
+
id: doc
|
|
76
|
+
}];
|
|
77
|
+
}
|
|
78
|
+
return [...acc, doc];
|
|
79
|
+
}, []) : []
|
|
80
|
+
} : undefined);
|
|
76
81
|
const [columnState, setColumnState] = useState();
|
|
77
82
|
const {
|
|
78
83
|
getTableState
|
|
@@ -122,38 +127,53 @@ export const RelationshipTable = props => {
|
|
|
122
127
|
useEffect(() => {
|
|
123
128
|
handleTableRender(query, disableTable);
|
|
124
129
|
}, [query, disableTable]);
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const foundDocIndex = data?.docs?.findIndex(doc => doc.id === args.doc.id);
|
|
130
|
+
const onDrawerSave = useCallback(({
|
|
131
|
+
doc,
|
|
132
|
+
operation
|
|
133
|
+
}) => {
|
|
134
|
+
if (operation === 'create') {
|
|
135
|
+
closeDrawer();
|
|
136
|
+
}
|
|
137
|
+
const foundDocIndex = data?.docs?.findIndex(d => d.id === doc.id);
|
|
134
138
|
const withNewOrUpdatedData = {
|
|
135
139
|
docs: []
|
|
136
140
|
};
|
|
137
141
|
if (foundDocIndex !== -1) {
|
|
138
142
|
const newDocs = [...data.docs];
|
|
139
|
-
newDocs[foundDocIndex] =
|
|
143
|
+
newDocs[foundDocIndex] = doc;
|
|
140
144
|
withNewOrUpdatedData.docs = newDocs;
|
|
141
145
|
} else {
|
|
142
|
-
withNewOrUpdatedData.docs = [
|
|
146
|
+
withNewOrUpdatedData.docs = [doc, ...data.docs];
|
|
143
147
|
}
|
|
144
148
|
void renderTable(withNewOrUpdatedData);
|
|
145
|
-
}, [data?.docs, renderTable]);
|
|
146
|
-
const onDrawerCreate = useCallback(args => {
|
|
147
|
-
closeDrawer();
|
|
148
|
-
void onDrawerSave(args);
|
|
149
|
-
}, [closeDrawer, onDrawerSave]);
|
|
149
|
+
}, [data?.docs, renderTable, closeDrawer]);
|
|
150
150
|
const onDrawerDelete = useCallback(args => {
|
|
151
151
|
const newDocs = data.docs.filter(doc => doc.id !== args.id);
|
|
152
152
|
void renderTable({
|
|
153
153
|
...data,
|
|
154
154
|
docs: newDocs
|
|
155
155
|
});
|
|
156
|
+
setCurrentDrawerID(undefined);
|
|
156
157
|
}, [data, renderTable]);
|
|
158
|
+
const onDrawerOpen = useCallback(id => {
|
|
159
|
+
openDrawerWhenRelationChanges.current = true;
|
|
160
|
+
if (id) {
|
|
161
|
+
setCurrentDrawerID(id);
|
|
162
|
+
} else {
|
|
163
|
+
setCurrentDrawerID(undefined);
|
|
164
|
+
}
|
|
165
|
+
}, []);
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
if (openDrawerWhenRelationChanges.current) {
|
|
168
|
+
openDrawerWhenRelationChanges.current = false;
|
|
169
|
+
openDrawer();
|
|
170
|
+
}
|
|
171
|
+
}, [openDrawer]);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
if (!isDrawerOpen) {
|
|
174
|
+
setCurrentDrawerID(undefined);
|
|
175
|
+
}
|
|
176
|
+
}, [isDrawerOpen]);
|
|
157
177
|
const canCreate = allowCreate !== false && permissions?.collections?.[isPolymorphic ? relationTo[0] : relationTo]?.create;
|
|
158
178
|
useEffect(() => {
|
|
159
179
|
if (isPolymorphic && selectedCollection) {
|
|
@@ -237,8 +257,8 @@ export const RelationshipTable = props => {
|
|
|
237
257
|
collectionSlug: isPolymorphic ? relationTo[0] : relationTo,
|
|
238
258
|
columnState: columnState,
|
|
239
259
|
LinkedCellOverride: /*#__PURE__*/_jsx(DrawerLink, {
|
|
240
|
-
|
|
241
|
-
|
|
260
|
+
currentDrawerID: currentDrawerID,
|
|
261
|
+
onDrawerOpen: onDrawerOpen
|
|
242
262
|
}),
|
|
243
263
|
children: [/*#__PURE__*/_jsx(AnimateHeight, {
|
|
244
264
|
className: `${baseClass}__columns`,
|
|
@@ -256,7 +276,8 @@ export const RelationshipTable = props => {
|
|
|
256
276
|
})]
|
|
257
277
|
}), AfterInput, /*#__PURE__*/_jsx(DocumentDrawer, {
|
|
258
278
|
initialData: initialDrawerData,
|
|
259
|
-
|
|
279
|
+
onDelete: onDrawerDelete,
|
|
280
|
+
onSave: onDrawerSave
|
|
260
281
|
})]
|
|
261
282
|
});
|
|
262
283
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getTranslation","hoistQueryParamsToAnd","transformColumnsToPreferences","React","Fragment","useCallback","useEffect","useState","Pill","useEffectEvent","ChevronIcon","useAuth","useConfig","ListQueryProvider","useServerFunctions","TableColumnsProvider","useTranslation","AnimateHeight","ColumnSelector","useDocumentDrawer","RelationshipProvider","AddNewButton","DrawerLink","RelationshipTablePagination","baseClass","RelationshipTable","props","AfterInput","allowCreate","BeforeInput","disableTable","field","fieldPath","filterOptions","initialData","initialDataFromProps","initialDrawerData","Label","parent","relationTo","Table","setTable","config","getEntityConfig","permissions","docs","Array","isArray","reduce","acc","doc","id","i18n","t","query","setQuery","openColumnSelector","setOpenColumnSelector","collectionConfig","collectionSlug","isPolymorphic","selectedCollection","setSelectedCollection","undefined","isLoadingTable","setIsLoadingTable","data","setData","columnState","setColumnState","getTableState","renderTable","newQuery","limit","defaultLimit","admin","pagination","sort","defaultSort","where","defaultColumns","map","accessor","active","newData","state","newColumnState","NewTable","columns","enableRowSelections","orderableFieldName","orderable","collection","name","renderRowTypes","tableAppearance","handleTableRender","DocumentDrawer","closeDrawer","isDrawerOpen","openDrawer","onDrawerSave","args","foundDocIndex","findIndex","withNewOrUpdatedData","newDocs","onDrawerCreate","onDrawerDelete","filter","canCreate","collections","create","memoizedListQuery","useMemo","_jsxs","className","_jsx","buttonStyle","icon","label","onClick","direction","pillStyle","size","length","labels","plural","singular","modifySearchParams","onQueryChange","replaceAll","LinkedCellOverride","height","slug","onSave"],"sources":["../../../src/elements/RelationshipTable/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n type CollectionSlug,\n type Column,\n type JoinFieldClient,\n type ListQuery,\n type PaginatedDocs,\n type Where,\n} from 'payload'\nimport { hoistQueryParamsToAnd, transformColumnsToPreferences } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../DocumentDrawer/types.js'\n\nimport { Pill } from '../../elements/Pill/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { ListQueryProvider } from '../../providers/ListQuery/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { TableColumnsProvider } from '../../providers/TableColumns/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { RelationshipProvider } from '../Table/RelationshipProvider/index.js'\nimport { AddNewButton } from './AddNewButton.js'\nimport { DrawerLink } from './cells/DrawerLink/index.js'\nimport './index.scss'\nimport { RelationshipTablePagination } from './Pagination.js'\n\nconst baseClass = 'relationship-table'\n\ntype RelationshipTableComponentProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n readonly BeforeInput?: React.ReactNode\n readonly disableTable?: boolean\n readonly field: JoinFieldClient\n readonly fieldPath?: string\n readonly filterOptions?: Where\n readonly initialData?: PaginatedDocs\n readonly initialDrawerData?: DocumentDrawerProps['initialData']\n readonly Label?: React.ReactNode\n readonly parent?: {\n collectionSlug: CollectionSlug\n id: number | string\n joinPath: string\n }\n readonly relationTo: string | string[]\n}\n\nexport const RelationshipTable: React.FC<RelationshipTableComponentProps> = (props) => {\n const {\n AfterInput,\n allowCreate = true,\n BeforeInput,\n disableTable = false,\n field,\n fieldPath,\n filterOptions,\n initialData: initialDataFromProps,\n initialDrawerData,\n Label,\n parent,\n relationTo,\n } = props\n const [Table, setTable] = useState<React.ReactNode>(null)\n const { config, getEntityConfig } = useConfig()\n\n const { permissions } = useAuth()\n\n const [initialData] = useState<PaginatedDocs>(() => {\n if (initialDataFromProps) {\n return {\n ...initialDataFromProps,\n docs: Array.isArray(initialDataFromProps.docs)\n ? initialDataFromProps.docs.reduce((acc, doc) => {\n if (typeof doc === 'string') {\n return [\n ...acc,\n {\n id: doc,\n },\n ]\n }\n return [...acc, doc]\n }, [])\n : [],\n }\n }\n })\n\n const { i18n, t } = useTranslation()\n\n const [query, setQuery] = useState<ListQuery>()\n const [openColumnSelector, setOpenColumnSelector] = useState(false)\n\n const [collectionConfig] = useState(() => getEntityConfig({ collectionSlug: relationTo }))\n\n const isPolymorphic = Array.isArray(relationTo)\n\n const [selectedCollection, setSelectedCollection] = useState(\n isPolymorphic ? undefined : relationTo,\n )\n const [isLoadingTable, setIsLoadingTable] = useState(!disableTable)\n const [data, setData] = useState<PaginatedDocs>(initialData)\n const [columnState, setColumnState] = useState<Column[]>()\n\n const { getTableState } = useServerFunctions()\n\n const renderTable = useCallback(\n async (data?: PaginatedDocs) => {\n const newQuery: ListQuery = {\n limit: field?.defaultLimit || collectionConfig?.admin?.pagination?.defaultLimit,\n sort: field.defaultSort || collectionConfig?.defaultSort,\n ...(query || {}),\n where: { ...(query?.where || {}) },\n }\n\n if (filterOptions) {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOptions)\n }\n\n // map columns from string[] to CollectionPreferences['columns']\n const defaultColumns = field.admin.defaultColumns\n ? field.admin.defaultColumns.map((accessor) => ({\n accessor,\n active: true,\n }))\n : undefined\n\n const {\n data: newData,\n state: newColumnState,\n Table: NewTable,\n } = await getTableState({\n collectionSlug: relationTo,\n columns: transformColumnsToPreferences(query?.columns) || defaultColumns,\n data,\n enableRowSelections: false,\n orderableFieldName:\n !field.orderable || Array.isArray(field.collection)\n ? undefined\n : `_${field.collection}_${field.name}_order`,\n parent,\n query: newQuery,\n renderRowTypes: true,\n tableAppearance: 'condensed',\n })\n\n setData(newData)\n setTable(NewTable)\n setColumnState(newColumnState)\n setIsLoadingTable(false)\n },\n [\n field.defaultLimit,\n field.defaultSort,\n field.admin.defaultColumns,\n field.collection,\n field.name,\n field.orderable,\n collectionConfig?.admin?.pagination?.defaultLimit,\n collectionConfig?.defaultSort,\n query,\n filterOptions,\n getTableState,\n relationTo,\n parent,\n ],\n )\n\n const handleTableRender = useEffectEvent((query: ListQuery, disableTable: boolean) => {\n if (!disableTable && (!Table || query)) {\n void renderTable()\n }\n })\n\n useEffect(() => {\n handleTableRender(query, disableTable)\n }, [query, disableTable])\n\n const [DocumentDrawer, , { closeDrawer, isDrawerOpen, openDrawer }] = useDocumentDrawer({\n collectionSlug: selectedCollection,\n })\n\n const onDrawerSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n const foundDocIndex = data?.docs?.findIndex((doc) => doc.id === args.doc.id)\n const withNewOrUpdatedData: PaginatedDocs = { docs: [] } as PaginatedDocs\n\n if (foundDocIndex !== -1) {\n const newDocs = [...data.docs]\n newDocs[foundDocIndex] = args.doc\n withNewOrUpdatedData.docs = newDocs\n } else {\n withNewOrUpdatedData.docs = [args.doc, ...data.docs]\n }\n\n void renderTable(withNewOrUpdatedData)\n },\n [data?.docs, renderTable],\n )\n\n const onDrawerCreate = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n closeDrawer()\n\n void onDrawerSave(args)\n },\n [closeDrawer, onDrawerSave],\n )\n\n const onDrawerDelete = useCallback<DocumentDrawerProps['onDelete']>(\n (args) => {\n const newDocs = data.docs.filter((doc) => doc.id !== args.id)\n\n void renderTable({\n ...data,\n docs: newDocs,\n })\n },\n [data, renderTable],\n )\n\n const canCreate =\n allowCreate !== false &&\n permissions?.collections?.[isPolymorphic ? relationTo[0] : relationTo]?.create\n\n useEffect(() => {\n if (isPolymorphic && selectedCollection) {\n openDrawer()\n }\n }, [selectedCollection, openDrawer, isPolymorphic])\n\n useEffect(() => {\n if (isPolymorphic && !isDrawerOpen && selectedCollection) {\n setSelectedCollection(undefined)\n }\n // eslint-disable-next-line react-compiler/react-compiler -- TODO: fix\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDrawerOpen])\n\n const memoizedListQuery = React.useMemo(\n () => ({\n columns: transformColumnsToPreferences(columnState)?.map(({ accessor }) => accessor),\n limit: field.defaultLimit ?? collectionConfig?.admin?.pagination?.defaultLimit,\n sort: field.defaultSort ?? collectionConfig?.defaultSort,\n }),\n [columnState, field, collectionConfig],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n {Label}\n <div className={`${baseClass}__actions`}>\n <AddNewButton\n allowCreate={allowCreate !== false}\n baseClass={baseClass}\n buttonStyle=\"none\"\n className={`${baseClass}__add-new${isPolymorphic ? '-polymorphic' : ' doc-drawer__toggler'}`}\n collections={config.collections}\n i18n={i18n}\n icon={isPolymorphic ? 'plus' : undefined}\n label={i18n.t('fields:addNew')}\n onClick={isPolymorphic ? setSelectedCollection : openDrawer}\n permissions={permissions}\n relationTo={relationTo}\n />\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={openColumnSelector}\n className={`${baseClass}__toggle-columns ${\n openColumnSelector ? `${baseClass}__buttons-active` : ''\n }`}\n icon={<ChevronIcon direction={openColumnSelector ? 'up' : 'down'} />}\n onClick={() => setOpenColumnSelector(!openColumnSelector)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:columns')}\n </Pill>\n </div>\n </div>\n {BeforeInput}\n {isLoadingTable ? (\n <p>{t('general:loading')}</p>\n ) : (\n <Fragment>\n {data?.docs && data.docs.length === 0 && (\n <div className={`${baseClass}__no-results`}>\n <p>\n {i18n.t('general:noResults', {\n label: isPolymorphic\n ? i18n.t('general:documents')\n : getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n </p>\n <AddNewButton\n allowCreate={canCreate}\n baseClass={baseClass}\n collections={config.collections}\n i18n={i18n}\n label={i18n.t('general:createNewLabel', {\n label: isPolymorphic\n ? i18n.t('general:document')\n : getTranslation(collectionConfig?.labels?.singular, i18n),\n })}\n onClick={isPolymorphic ? setSelectedCollection : openDrawer}\n permissions={permissions}\n relationTo={relationTo}\n />\n </div>\n )}\n {data?.docs && data.docs.length > 0 && (\n <RelationshipProvider>\n <ListQueryProvider\n data={data}\n modifySearchParams={false}\n onQueryChange={setQuery}\n orderableFieldName={\n !field.orderable || Array.isArray(field.collection)\n ? undefined\n : `_${field.collection}_${fieldPath.replaceAll('.', '_')}_order`\n }\n query={memoizedListQuery}\n >\n <TableColumnsProvider\n collectionSlug={isPolymorphic ? relationTo[0] : relationTo}\n columnState={columnState}\n LinkedCellOverride={\n <DrawerLink onDrawerDelete={onDrawerDelete} onDrawerSave={onDrawerSave} />\n }\n >\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={openColumnSelector ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <div className={`${baseClass}__columns-inner`}>\n {collectionConfig && (\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n )}\n </div>\n </AnimateHeight>\n {Table}\n <RelationshipTablePagination />\n </TableColumnsProvider>\n </ListQueryProvider>\n </RelationshipProvider>\n )}\n </Fragment>\n )}\n {AfterInput}\n <DocumentDrawer initialData={initialDrawerData} onSave={onDrawerCreate} />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["getTranslation","hoistQueryParamsToAnd","transformColumnsToPreferences","React","Fragment","useCallback","useEffect","useRef","useState","Pill","useEffectEvent","ChevronIcon","useAuth","useConfig","ListQueryProvider","useServerFunctions","TableColumnsProvider","useTranslation","AnimateHeight","ColumnSelector","useDocumentDrawer","RelationshipProvider","AddNewButton","DrawerLink","RelationshipTablePagination","baseClass","RelationshipTable","props","AfterInput","allowCreate","BeforeInput","disableTable","field","fieldPath","filterOptions","initialData","initialDataFromProps","initialDrawerData","Label","parent","relationTo","Table","setTable","config","getEntityConfig","i18n","t","query","setQuery","openColumnSelector","setOpenColumnSelector","collectionConfig","collectionSlug","isPolymorphic","Array","isArray","selectedCollection","setSelectedCollection","undefined","permissions","openDrawerWhenRelationChanges","currentDrawerID","setCurrentDrawerID","DocumentDrawer","closeDrawer","isDrawerOpen","openDrawer","id","isLoadingTable","setIsLoadingTable","data","setData","docs","reduce","acc","doc","columnState","setColumnState","getTableState","renderTable","newQuery","limit","defaultLimit","admin","pagination","sort","defaultSort","where","defaultColumns","map","accessor","active","newData","state","newColumnState","NewTable","columns","enableRowSelections","orderableFieldName","orderable","collection","name","renderRowTypes","tableAppearance","handleTableRender","onDrawerSave","operation","foundDocIndex","findIndex","d","withNewOrUpdatedData","newDocs","onDrawerDelete","args","filter","onDrawerOpen","current","canCreate","collections","create","memoizedListQuery","useMemo","_jsxs","className","_jsx","buttonStyle","icon","label","onClick","direction","pillStyle","size","length","labels","plural","singular","modifySearchParams","onQueryChange","replaceAll","LinkedCellOverride","height","slug","onDelete","onSave"],"sources":["../../../src/elements/RelationshipTable/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n type CollectionSlug,\n type Column,\n type JoinFieldClient,\n type ListQuery,\n type PaginatedDocs,\n type Where,\n} from 'payload'\nimport { hoistQueryParamsToAnd, transformColumnsToPreferences } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../DocumentDrawer/types.js'\n\nimport { Pill } from '../../elements/Pill/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { ListQueryProvider } from '../../providers/ListQuery/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { TableColumnsProvider } from '../../providers/TableColumns/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { RelationshipProvider } from '../Table/RelationshipProvider/index.js'\nimport { AddNewButton } from './AddNewButton.js'\nimport { DrawerLink } from './cells/DrawerLink/index.js'\nimport { RelationshipTablePagination } from './Pagination.js'\nimport './index.scss'\n\nconst baseClass = 'relationship-table'\n\ntype RelationshipTableComponentProps = {\n readonly AfterInput?: React.ReactNode\n readonly allowCreate?: boolean\n readonly BeforeInput?: React.ReactNode\n readonly disableTable?: boolean\n readonly field: JoinFieldClient\n readonly fieldPath?: string\n readonly filterOptions?: Where\n readonly initialData?: PaginatedDocs\n readonly initialDrawerData?: DocumentDrawerProps['initialData']\n readonly Label?: React.ReactNode\n readonly parent?: {\n collectionSlug: CollectionSlug\n id: number | string\n joinPath: string\n }\n readonly relationTo: string | string[]\n}\n\nexport type OnDrawerOpen = (id?: string) => void\n\nexport const RelationshipTable: React.FC<RelationshipTableComponentProps> = (props) => {\n const {\n AfterInput,\n allowCreate = true,\n BeforeInput,\n disableTable = false,\n field,\n fieldPath,\n filterOptions,\n initialData: initialDataFromProps,\n initialDrawerData,\n Label,\n parent,\n relationTo,\n } = props\n const [Table, setTable] = useState<React.ReactNode>(null)\n const { config, getEntityConfig } = useConfig()\n const { i18n, t } = useTranslation()\n\n const [query, setQuery] = useState<ListQuery>()\n const [openColumnSelector, setOpenColumnSelector] = useState(false)\n\n const [collectionConfig] = useState(() => getEntityConfig({ collectionSlug: relationTo }))\n\n const isPolymorphic = Array.isArray(relationTo)\n\n const [selectedCollection, setSelectedCollection] = useState(\n isPolymorphic ? undefined : relationTo,\n )\n\n const { permissions } = useAuth()\n\n const openDrawerWhenRelationChanges = useRef(false)\n\n const [currentDrawerID, setCurrentDrawerID] = useState<string | undefined>(undefined)\n\n const [DocumentDrawer, , { closeDrawer, isDrawerOpen, openDrawer }] = useDocumentDrawer({\n id: currentDrawerID,\n collectionSlug: selectedCollection,\n })\n\n const [isLoadingTable, setIsLoadingTable] = useState(!disableTable)\n\n const [data, setData] = useState<PaginatedDocs>(() =>\n initialDataFromProps\n ? {\n ...initialDataFromProps,\n docs: Array.isArray(initialDataFromProps.docs)\n ? initialDataFromProps.docs.reduce((acc, doc) => {\n if (typeof doc === 'string' || typeof doc === 'number') {\n return [\n ...acc,\n {\n id: doc,\n },\n ]\n }\n\n return [...acc, doc]\n }, [])\n : [],\n }\n : undefined,\n )\n\n const [columnState, setColumnState] = useState<Column[]>()\n\n const { getTableState } = useServerFunctions()\n\n const renderTable = useCallback(\n async (data?: PaginatedDocs) => {\n const newQuery: ListQuery = {\n limit: field?.defaultLimit || collectionConfig?.admin?.pagination?.defaultLimit,\n sort: field.defaultSort || collectionConfig?.defaultSort,\n ...(query || {}),\n where: { ...(query?.where || {}) },\n }\n\n if (filterOptions) {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOptions)\n }\n\n // map columns from string[] to CollectionPreferences['columns']\n const defaultColumns = field.admin.defaultColumns\n ? field.admin.defaultColumns.map((accessor) => ({\n accessor,\n active: true,\n }))\n : undefined\n\n const {\n data: newData,\n state: newColumnState,\n Table: NewTable,\n } = await getTableState({\n collectionSlug: relationTo,\n columns: transformColumnsToPreferences(query?.columns) || defaultColumns,\n data,\n enableRowSelections: false,\n orderableFieldName:\n !field.orderable || Array.isArray(field.collection)\n ? undefined\n : `_${field.collection}_${field.name}_order`,\n parent,\n query: newQuery,\n renderRowTypes: true,\n tableAppearance: 'condensed',\n })\n\n setData(newData)\n setTable(NewTable)\n setColumnState(newColumnState)\n setIsLoadingTable(false)\n },\n [\n field.defaultLimit,\n field.defaultSort,\n field.admin.defaultColumns,\n field.collection,\n field.name,\n field.orderable,\n collectionConfig?.admin?.pagination?.defaultLimit,\n collectionConfig?.defaultSort,\n query,\n filterOptions,\n getTableState,\n relationTo,\n parent,\n ],\n )\n\n const handleTableRender = useEffectEvent((query: ListQuery, disableTable: boolean) => {\n if (!disableTable && (!Table || query)) {\n void renderTable()\n }\n })\n\n useEffect(() => {\n handleTableRender(query, disableTable)\n }, [query, disableTable])\n\n const onDrawerSave = useCallback<DocumentDrawerProps['onSave']>(\n ({ doc, operation }) => {\n if (operation === 'create') {\n closeDrawer()\n }\n\n const foundDocIndex = data?.docs?.findIndex((d) => d.id === doc.id)\n const withNewOrUpdatedData: PaginatedDocs = { docs: [] } as PaginatedDocs\n\n if (foundDocIndex !== -1) {\n const newDocs = [...data.docs]\n newDocs[foundDocIndex] = doc\n withNewOrUpdatedData.docs = newDocs\n } else {\n withNewOrUpdatedData.docs = [doc, ...data.docs]\n }\n\n void renderTable(withNewOrUpdatedData)\n },\n [data?.docs, renderTable, closeDrawer],\n )\n\n const onDrawerDelete = useCallback<DocumentDrawerProps['onDelete']>(\n (args) => {\n const newDocs = data.docs.filter((doc) => doc.id !== args.id)\n\n void renderTable({\n ...data,\n docs: newDocs,\n })\n\n setCurrentDrawerID(undefined)\n },\n [data, renderTable],\n )\n\n const onDrawerOpen = useCallback<OnDrawerOpen>((id) => {\n openDrawerWhenRelationChanges.current = true\n\n if (id) {\n setCurrentDrawerID(id)\n } else {\n setCurrentDrawerID(undefined)\n }\n }, [])\n\n useEffect(() => {\n if (openDrawerWhenRelationChanges.current) {\n openDrawerWhenRelationChanges.current = false\n openDrawer()\n }\n }, [openDrawer])\n\n useEffect(() => {\n if (!isDrawerOpen) {\n setCurrentDrawerID(undefined)\n }\n }, [isDrawerOpen])\n\n const canCreate =\n allowCreate !== false &&\n permissions?.collections?.[isPolymorphic ? relationTo[0] : relationTo]?.create\n\n useEffect(() => {\n if (isPolymorphic && selectedCollection) {\n openDrawer()\n }\n }, [selectedCollection, openDrawer, isPolymorphic])\n\n useEffect(() => {\n if (isPolymorphic && !isDrawerOpen && selectedCollection) {\n setSelectedCollection(undefined)\n }\n // eslint-disable-next-line react-compiler/react-compiler -- TODO: fix\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDrawerOpen])\n\n const memoizedListQuery = React.useMemo(\n () => ({\n columns: transformColumnsToPreferences(columnState)?.map(({ accessor }) => accessor),\n limit: field.defaultLimit ?? collectionConfig?.admin?.pagination?.defaultLimit,\n sort: field.defaultSort ?? collectionConfig?.defaultSort,\n }),\n [columnState, field, collectionConfig],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n {Label}\n <div className={`${baseClass}__actions`}>\n <AddNewButton\n allowCreate={allowCreate !== false}\n baseClass={baseClass}\n buttonStyle=\"none\"\n className={`${baseClass}__add-new${isPolymorphic ? '-polymorphic' : ' doc-drawer__toggler'}`}\n collections={config.collections}\n i18n={i18n}\n icon={isPolymorphic ? 'plus' : undefined}\n label={i18n.t('fields:addNew')}\n onClick={isPolymorphic ? setSelectedCollection : openDrawer}\n permissions={permissions}\n relationTo={relationTo}\n />\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={openColumnSelector}\n className={`${baseClass}__toggle-columns ${\n openColumnSelector ? `${baseClass}__buttons-active` : ''\n }`}\n icon={<ChevronIcon direction={openColumnSelector ? 'up' : 'down'} />}\n onClick={() => setOpenColumnSelector(!openColumnSelector)}\n pillStyle=\"light\"\n size=\"small\"\n >\n {t('general:columns')}\n </Pill>\n </div>\n </div>\n {BeforeInput}\n {isLoadingTable ? (\n <p>{t('general:loading')}</p>\n ) : (\n <Fragment>\n {data?.docs && data.docs.length === 0 && (\n <div className={`${baseClass}__no-results`}>\n <p>\n {i18n.t('general:noResults', {\n label: isPolymorphic\n ? i18n.t('general:documents')\n : getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n </p>\n <AddNewButton\n allowCreate={canCreate}\n baseClass={baseClass}\n collections={config.collections}\n i18n={i18n}\n label={i18n.t('general:createNewLabel', {\n label: isPolymorphic\n ? i18n.t('general:document')\n : getTranslation(collectionConfig?.labels?.singular, i18n),\n })}\n onClick={isPolymorphic ? setSelectedCollection : openDrawer}\n permissions={permissions}\n relationTo={relationTo}\n />\n </div>\n )}\n {data?.docs && data.docs.length > 0 && (\n <RelationshipProvider>\n <ListQueryProvider\n data={data}\n modifySearchParams={false}\n onQueryChange={setQuery}\n orderableFieldName={\n !field.orderable || Array.isArray(field.collection)\n ? undefined\n : `_${field.collection}_${fieldPath.replaceAll('.', '_')}_order`\n }\n query={memoizedListQuery}\n >\n <TableColumnsProvider\n collectionSlug={isPolymorphic ? relationTo[0] : relationTo}\n columnState={columnState}\n LinkedCellOverride={\n <DrawerLink currentDrawerID={currentDrawerID} onDrawerOpen={onDrawerOpen} />\n }\n >\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={openColumnSelector ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <div className={`${baseClass}__columns-inner`}>\n {collectionConfig && (\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n )}\n </div>\n </AnimateHeight>\n {Table}\n <RelationshipTablePagination />\n </TableColumnsProvider>\n </ListQueryProvider>\n </RelationshipProvider>\n )}\n </Fragment>\n )}\n {AfterInput}\n <DocumentDrawer\n initialData={initialDrawerData}\n onDelete={onDrawerDelete}\n onSave={onDrawerSave}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Table/DefaultCell/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,SAAS,CAAA;AAI3E,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Table/DefaultCell/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,SAAS,CAAA;AAI3E,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAuJ3D,CAAA"}
|
|
@@ -9,6 +9,7 @@ import { useConfig } from '../../../providers/Config/index.js';
|
|
|
9
9
|
import { useTranslation } from '../../../providers/Translation/index.js';
|
|
10
10
|
import { formatAdminURL } from '../../../utilities/formatAdminURL.js';
|
|
11
11
|
import { getDisplayedFieldValue } from '../../../utilities/getDisplayedFieldValue.js';
|
|
12
|
+
import { isValidReactElement } from '../../../utilities/isValidReactElement.js';
|
|
12
13
|
import { Link } from '../../Link/index.js';
|
|
13
14
|
import { CodeCell } from './fields/Code/index.js';
|
|
14
15
|
import { cellComponents } from './fields/index.js';
|
|
@@ -95,7 +96,7 @@ export const DefaultCell = props => {
|
|
|
95
96
|
const displayedValue = getDisplayedFieldValue(cellData, field, i18n);
|
|
96
97
|
const DefaultCellComponent = typeof cellData !== "undefined" && cellComponents[field.type];
|
|
97
98
|
let CellComponent = null;
|
|
98
|
-
if (
|
|
99
|
+
if (isValidReactElement(displayedValue)) {
|
|
99
100
|
CellComponent = displayedValue;
|
|
100
101
|
} else {
|
|
101
102
|
if (DefaultCellComponent) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","getTranslation","fieldAffectsData","fieldIsID","React","useConfig","useTranslation","formatAdminURL","getDisplayedFieldValue","Link","CodeCell","cellComponents","DefaultCell","props","$","cellData","className","classNameFromProps","collectionSlug","field","t0","link","onClick","onClickFromProps","rowData","viewType","admin","i18n","config","t1","getEntityConfig","routes","t2","adminRoute","t3","t4","Symbol","for","collectionConfig","classNameFromConfigContext","undefined","WrapElement","wrapElementProps","prefetch","href","slug","path","encodeURIComponent","id","type","_jsx","children","nowrap","displayedValue","DefaultCellComponent","CellComponent","isValidElement","upload","name","FileCellComponent","File","_jsxs","t","label","JSON","stringify","options","length","classes","Array","isArray","map","_temp","join","className_0","filter","Boolean","value"],"sources":["../../../../src/elements/Table/DefaultCell/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultCellComponentProps, UploadFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldAffectsData, fieldIsID } from 'payload/shared'\nimport React from 'react' // TODO: abstract this out to support all routers\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatAdminURL } from '../../../utilities/formatAdminURL.js'\nimport { getDisplayedFieldValue } from '../../../utilities/getDisplayedFieldValue.js'\nimport { Link } from '../../Link/index.js'\nimport { CodeCell } from './fields/Code/index.js'\nimport { cellComponents } from './fields/index.js'\n\nexport const DefaultCell: React.FC<DefaultCellComponentProps> = (props) => {\n const {\n cellData,\n className: classNameFromProps,\n collectionSlug,\n field,\n field: { admin },\n link,\n onClick: onClickFromProps,\n rowData,\n viewType,\n } = props\n\n const { i18n } = useTranslation()\n\n const {\n config: {\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const classNameFromConfigContext = admin && 'className' in admin ? admin.className : undefined\n\n const className =\n classNameFromProps ||\n (field.admin && 'className' in field.admin ? field.admin.className : null) ||\n classNameFromConfigContext\n\n const onClick = onClickFromProps\n\n let WrapElement: React.ComponentType<any> | string = 'span'\n\n const wrapElementProps: {\n className?: string\n href?: string\n onClick?: () => void\n prefetch?: false\n type?: 'button'\n } = {\n className,\n }\n\n if (link) {\n wrapElementProps.prefetch = false\n WrapElement = Link\n wrapElementProps.href = collectionConfig?.slug\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(rowData.id)}`,\n })\n : ''\n }\n\n if (typeof onClick === 'function') {\n WrapElement = 'button'\n wrapElementProps.type = 'button'\n wrapElementProps.onClick = () => {\n onClick({\n cellData,\n collectionSlug: collectionConfig?.slug,\n rowData,\n })\n }\n }\n\n if (fieldIsID(field)) {\n return (\n <WrapElement {...wrapElementProps}>\n <CodeCell\n cellData={`ID: ${cellData}`}\n collectionConfig={collectionConfig}\n collectionSlug={collectionSlug}\n field={{\n ...field,\n type: 'code',\n }}\n nowrap\n rowData={rowData}\n />\n </WrapElement>\n )\n }\n\n const displayedValue = getDisplayedFieldValue(cellData, field, i18n)\n\n const DefaultCellComponent: React.FC<DefaultCellComponentProps> =\n typeof cellData !== 'undefined' && cellComponents[field.type]\n\n let CellComponent: React.ReactNode = null\n\n // Handle JSX labels before using DefaultCellComponent\n if (React.isValidElement(displayedValue)) {\n CellComponent = displayedValue\n } else if (DefaultCellComponent) {\n CellComponent = <DefaultCellComponent cellData={cellData} rowData={rowData} {...props} />\n } else if (!DefaultCellComponent) {\n // DefaultCellComponent does not exist for certain field types like `text`\n if (\n collectionConfig?.upload &&\n fieldAffectsData(field) &&\n field.name === 'filename' &&\n field.type === 'text'\n ) {\n const FileCellComponent = cellComponents.File\n\n CellComponent = (\n <FileCellComponent\n cellData={cellData}\n rowData={rowData}\n {...(props as DefaultCellComponentProps<UploadFieldClient>)}\n collectionConfig={collectionConfig}\n field={field}\n />\n )\n } else {\n return (\n <WrapElement {...wrapElementProps}>\n {(displayedValue === '' ||\n typeof displayedValue === 'undefined' ||\n displayedValue === null) &&\n i18n.t('general:noLabel', {\n label: getTranslation(('label' in field ? field.label : null) || 'data', i18n),\n })}\n {typeof displayedValue === 'string' && displayedValue}\n {typeof displayedValue === 'number' && displayedValue}\n {typeof displayedValue === 'object' &&\n displayedValue !== null &&\n JSON.stringify(displayedValue)}\n </WrapElement>\n )\n }\n }\n\n if ((field.type === 'select' || field.type === 'radio') && field.options.length && cellData) {\n const classes = Array.isArray(cellData)\n ? cellData.map((value) => `selected--${value}`).join(' ')\n : `selected--${cellData}`\n\n const className = [wrapElementProps.className, classes].filter(Boolean).join(' ')\n\n return (\n <WrapElement {...wrapElementProps} className={className}>\n {CellComponent}\n </WrapElement>\n )\n }\n\n return <WrapElement {...wrapElementProps}>{CellComponent}</WrapElement>\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","getTranslation","fieldAffectsData","fieldIsID","React","useConfig","useTranslation","formatAdminURL","getDisplayedFieldValue","isValidReactElement","Link","CodeCell","cellComponents","DefaultCell","props","$","cellData","className","classNameFromProps","collectionSlug","field","t0","link","onClick","onClickFromProps","rowData","viewType","admin","i18n","config","t1","getEntityConfig","routes","t2","adminRoute","t3","t4","Symbol","for","collectionConfig","classNameFromConfigContext","undefined","WrapElement","wrapElementProps","prefetch","href","slug","path","encodeURIComponent","id","type","_jsx","children","nowrap","displayedValue","DefaultCellComponent","CellComponent","upload","name","FileCellComponent","File","_jsxs","t","label","JSON","stringify","options","length","classes","Array","isArray","map","_temp","join","className_0","filter","Boolean","value"],"sources":["../../../../src/elements/Table/DefaultCell/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultCellComponentProps, UploadFieldClient } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldAffectsData, fieldIsID } from 'payload/shared'\nimport React from 'react' // TODO: abstract this out to support all routers\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatAdminURL } from '../../../utilities/formatAdminURL.js'\nimport { getDisplayedFieldValue } from '../../../utilities/getDisplayedFieldValue.js'\nimport { isValidReactElement } from '../../../utilities/isValidReactElement.js'\nimport { Link } from '../../Link/index.js'\nimport { CodeCell } from './fields/Code/index.js'\nimport { cellComponents } from './fields/index.js'\n\nexport const DefaultCell: React.FC<DefaultCellComponentProps> = (props) => {\n const {\n cellData,\n className: classNameFromProps,\n collectionSlug,\n field,\n field: { admin },\n link,\n onClick: onClickFromProps,\n rowData,\n viewType,\n } = props\n\n const { i18n } = useTranslation()\n\n const {\n config: {\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const classNameFromConfigContext = admin && 'className' in admin ? admin.className : undefined\n\n const className =\n classNameFromProps ||\n (field.admin && 'className' in field.admin ? field.admin.className : null) ||\n classNameFromConfigContext\n\n const onClick = onClickFromProps\n\n let WrapElement: React.ComponentType<any> | string = 'span'\n\n const wrapElementProps: {\n className?: string\n href?: string\n onClick?: () => void\n prefetch?: false\n type?: 'button'\n } = {\n className,\n }\n\n if (link) {\n wrapElementProps.prefetch = false\n WrapElement = Link\n wrapElementProps.href = collectionConfig?.slug\n ? formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}${viewType === 'trash' ? '/trash' : ''}/${encodeURIComponent(rowData.id)}`,\n })\n : ''\n }\n\n if (typeof onClick === 'function') {\n WrapElement = 'button'\n wrapElementProps.type = 'button'\n wrapElementProps.onClick = () => {\n onClick({\n cellData,\n collectionSlug: collectionConfig?.slug,\n rowData,\n })\n }\n }\n\n if (fieldIsID(field)) {\n return (\n <WrapElement {...wrapElementProps}>\n <CodeCell\n cellData={`ID: ${cellData}`}\n collectionConfig={collectionConfig}\n collectionSlug={collectionSlug}\n field={{\n ...field,\n type: 'code',\n }}\n nowrap\n rowData={rowData}\n />\n </WrapElement>\n )\n }\n\n const displayedValue = getDisplayedFieldValue(cellData, field, i18n)\n\n const DefaultCellComponent: React.FC<DefaultCellComponentProps> =\n typeof cellData !== 'undefined' && cellComponents[field.type]\n\n let CellComponent: React.ReactNode = null\n\n // Handle JSX labels before using DefaultCellComponent\n if (isValidReactElement(displayedValue)) {\n CellComponent = displayedValue\n } else if (DefaultCellComponent) {\n CellComponent = <DefaultCellComponent cellData={cellData} rowData={rowData} {...props} />\n } else if (!DefaultCellComponent) {\n // DefaultCellComponent does not exist for certain field types like `text`\n if (\n collectionConfig?.upload &&\n fieldAffectsData(field) &&\n field.name === 'filename' &&\n field.type === 'text'\n ) {\n const FileCellComponent = cellComponents.File\n\n CellComponent = (\n <FileCellComponent\n cellData={cellData}\n rowData={rowData}\n {...(props as DefaultCellComponentProps<UploadFieldClient>)}\n collectionConfig={collectionConfig}\n field={field}\n />\n )\n } else {\n return (\n <WrapElement {...wrapElementProps}>\n {(displayedValue === '' ||\n typeof displayedValue === 'undefined' ||\n displayedValue === null) &&\n i18n.t('general:noLabel', {\n label: getTranslation(('label' in field ? field.label : null) || 'data', i18n),\n })}\n {typeof displayedValue === 'string' && displayedValue}\n {typeof displayedValue === 'number' && displayedValue}\n {typeof displayedValue === 'object' &&\n displayedValue !== null &&\n JSON.stringify(displayedValue)}\n </WrapElement>\n )\n }\n }\n\n if ((field.type === 'select' || field.type === 'radio') && field.options.length && cellData) {\n const classes = Array.isArray(cellData)\n ? cellData.map((value) => `selected--${value}`).join(' ')\n : `selected--${cellData}`\n\n const className = [wrapElementProps.className, classes].filter(Boolean).join(' ')\n\n return (\n <WrapElement {...wrapElementProps} className={className}>\n {CellComponent}\n </WrapElement>\n )\n }\n\n return <WrapElement {...wrapElementProps}>{CellComponent}</WrapElement>\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldErrors.d.ts","sourceRoot":"","sources":["../../../src/elements/Toasts/fieldErrors.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAwDzB,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE;;CAAA,
|
|
1
|
+
{"version":3,"file":"fieldErrors.d.ts","sourceRoot":"","sources":["../../../src/elements/Toasts/fieldErrors.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAwDzB,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE;;CAAA,qBAmBhD"}
|
|
@@ -65,7 +65,10 @@ export function FieldErrorsToast(t0) {
|
|
|
65
65
|
let t3;
|
|
66
66
|
if ($[2] !== errors || $[3] !== message) {
|
|
67
67
|
t3 = _jsxs("div", {
|
|
68
|
-
children: [message, Array.isArray(errors) && errors.length > 0 ? _jsx("
|
|
68
|
+
children: [message, Array.isArray(errors) && errors.length > 0 ? errors.length === 1 ? _jsx("span", {
|
|
69
|
+
"data-testid": "field-error",
|
|
70
|
+
children: errors[0]
|
|
71
|
+
}) : _jsx("ul", {
|
|
69
72
|
"data-testid": "field-errors",
|
|
70
73
|
children: errors.map(_temp)
|
|
71
74
|
}) : null]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldErrors.js","names":["c","_c","React","groupSimilarErrors","items","result","item","parts","split","inserted","i","length","startsWith","splice","push","createErrorsFromMessage","message","intro","errorsString","errors","map","error","replaceAll","trim","FieldErrorsToast","t0","$","errorMessage","t1","t2","useState","t3","_jsxs","children","Array","isArray","_jsx","_temp","index"],"sources":["../../../src/elements/Toasts/fieldErrors.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nfunction groupSimilarErrors(items: string[]): string[] {\n const result: string[] = []\n\n for (const item of items) {\n if (item) {\n const parts = item.split(' → ')\n let inserted = false\n\n // Find a place where a similar path exists\n for (let i = 0; i < result.length; i++) {\n if (result[i].startsWith(parts[0])) {\n result.splice(i + 1, 0, item)\n inserted = true\n break\n }\n }\n\n // If no similar path was found, add to the end\n if (!inserted) {\n result.push(item)\n }\n }\n }\n\n return result\n}\n\nfunction createErrorsFromMessage(message: string): {\n errors?: string[]\n message: string\n} {\n const [intro, errorsString] = message.split(':')\n\n if (!errorsString) {\n return {\n message: intro,\n }\n }\n\n const errors = errorsString.split(',').map((error) => error.replaceAll(' > ', ' → ').trim())\n\n if (errors.length === 1) {\n return {\n errors,\n message: `${intro}:`,\n }\n }\n\n return {\n errors: groupSimilarErrors(errors),\n message: `${intro} (${errors.length}):`,\n }\n}\n\nexport function FieldErrorsToast({ errorMessage }) {\n const [{ errors, message }] = React.useState(() => createErrorsFromMessage(errorMessage))\n\n return (\n <div>\n {message}\n {Array.isArray(errors) && errors.length > 0 ? (\n <ul data-testid=\"field-errors\">\n
|
|
1
|
+
{"version":3,"file":"fieldErrors.js","names":["c","_c","React","groupSimilarErrors","items","result","item","parts","split","inserted","i","length","startsWith","splice","push","createErrorsFromMessage","message","intro","errorsString","errors","map","error","replaceAll","trim","FieldErrorsToast","t0","$","errorMessage","t1","t2","useState","t3","_jsxs","children","Array","isArray","_jsx","_temp","index"],"sources":["../../../src/elements/Toasts/fieldErrors.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nfunction groupSimilarErrors(items: string[]): string[] {\n const result: string[] = []\n\n for (const item of items) {\n if (item) {\n const parts = item.split(' → ')\n let inserted = false\n\n // Find a place where a similar path exists\n for (let i = 0; i < result.length; i++) {\n if (result[i].startsWith(parts[0])) {\n result.splice(i + 1, 0, item)\n inserted = true\n break\n }\n }\n\n // If no similar path was found, add to the end\n if (!inserted) {\n result.push(item)\n }\n }\n }\n\n return result\n}\n\nfunction createErrorsFromMessage(message: string): {\n errors?: string[]\n message: string\n} {\n const [intro, errorsString] = message.split(':')\n\n if (!errorsString) {\n return {\n message: intro,\n }\n }\n\n const errors = errorsString.split(',').map((error) => error.replaceAll(' > ', ' → ').trim())\n\n if (errors.length === 1) {\n return {\n errors,\n message: `${intro}:`,\n }\n }\n\n return {\n errors: groupSimilarErrors(errors),\n message: `${intro} (${errors.length}):`,\n }\n}\n\nexport function FieldErrorsToast({ errorMessage }) {\n const [{ errors, message }] = React.useState(() => createErrorsFromMessage(errorMessage))\n\n return (\n <div>\n {message}\n {Array.isArray(errors) && errors.length > 0 ? (\n errors.length === 1 ? (\n <span data-testid=\"field-error\">{errors[0]}</span>\n ) : (\n <ul data-testid=\"field-errors\">\n {errors.map((error, index) => {\n return <li key={index}>{error}</li>\n })}\n </ul>\n )\n ) : null}\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,mBAAmBC,KAAe;EACzC,MAAMC,MAAA,GAAmB,EAAE;EAE3B,KAAK,MAAMC,IAAA,IAAQF,KAAA,EAAO;IACxB,IAAIE,IAAA,EAAM;MACR,MAAMC,KAAA,GAAQD,IAAA,CAAKE,KAAK,CAAC;MACzB,IAAIC,QAAA,GAAW;MAEf;MACA,KAAK,IAAIC,CAAA,GAAI,GAAGA,CAAA,GAAIL,MAAA,CAAOM,MAAM,EAAED,CAAA,IAAK;QACtC,IAAIL,MAAM,CAACK,CAAA,CAAE,CAACE,UAAU,CAACL,KAAK,CAAC,EAAE,GAAG;UAClCF,MAAA,CAAOQ,MAAM,CAACH,CAAA,GAAI,GAAG,GAAGJ,IAAA;UACxBG,QAAA,GAAW;UACX;QACF;MACF;MAEA;MACA,IAAI,CAACA,QAAA,EAAU;QACbJ,MAAA,CAAOS,IAAI,CAACR,IAAA;MACd;IACF;EACF;EAEA,OAAOD,MAAA;AACT;AAEA,SAASU,wBAAwBC,OAAe;EAI9C,MAAM,CAACC,KAAA,EAAOC,YAAA,CAAa,GAAGF,OAAA,CAAQR,KAAK,CAAC;EAE5C,IAAI,CAACU,YAAA,EAAc;IACjB,OAAO;MACLF,OAAA,EAASC;IACX;EACF;EAEA,MAAME,MAAA,GAASD,YAAA,CAAaV,KAAK,CAAC,KAAKY,GAAG,CAAEC,KAAA,IAAUA,KAAA,CAAMC,UAAU,CAAC,OAAO,OAAOC,IAAI;EAEzF,IAAIJ,MAAA,CAAOR,MAAM,KAAK,GAAG;IACvB,OAAO;MACLQ,MAAA;MACAH,OAAA,EAAS,GAAGC,KAAA;IACd;EACF;EAEA,OAAO;IACLE,MAAA,EAAQhB,kBAAA,CAAmBgB,MAAA;IAC3BH,OAAA,EAAS,GAAGC,KAAA,KAAUE,MAAA,CAAOR,MAAM;EACrC;AACF;AAEA,OAAO,SAAAa,iBAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAzB,EAAA;EAA0B;IAAA0B;EAAA,IAAAF,EAAgB;EAAA,IAAAG,EAAA;EAAA,IAAAF,CAAA,QAAAC,YAAA;IACFC,EAAA,GAAAA,CAAA,KAAMb,uBAAA,CAAwBY,YAAA;IAAAD,CAAA,MAAAC,YAAA;IAAAD,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAA3E,OAAAG,EAAA,IAA8B3B,KAAA,CAAA4B,QAAA,CAAeF,EAA8B;EAApE;IAAAT,MAAA;IAAAH;EAAA,IAAAa,EAAmB;EAAA,IAAAE,EAAA;EAAA,IAAAL,CAAA,QAAAP,MAAA,IAAAO,CAAA,QAAAV,OAAA;IAGxBe,EAAA,GAAAC,KAAA,CAAC;MAAAC,QAAA,GACEjB,OAAA,EACAkB,KAAA,CAAAC,OAAA,CAAchB,MAAA,KAAWA,MAAA,CAAAR,MAAA,IAAgB,GACxCQ,MAAA,CAAAR,MAAA,MAAkB,GAChByB,IAAA,CAAC;QAAA,eAAiB;QAAAH,QAAA,EAAed,MAAM;MAAA,C,IAEvCiB,IAAA,CAAC;QAAA,eAAe;QAAAH,QAAA,EACbd,MAAA,CAAAC,GAAA,CAAAiB,KAED;MAAA,C,QAGF;IAAA,C;;;;;;;SAZNN,E;;AAJG,SAAAM,MAAAhB,KAAA,EAAAiB,KAAA;EAAA,OAYcF,IAAA,CAAC;IAAAH,QAAA,EAAgBZ;EAAA,GAARiB,KAAA;AAAA","ignoreList":[]}
|