@payloadcms/ui 3.32.0-internal.f2e77bd → 3.33.0-internal.d1efdd8
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/RelationshipTable/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/index.js +3 -1
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/SortHeader/index.d.ts +8 -0
- package/dist/elements/SortHeader/index.d.ts.map +1 -0
- package/dist/elements/SortHeader/index.js +135 -0
- package/dist/elements/SortHeader/index.js.map +1 -0
- package/dist/elements/SortHeader/index.scss +52 -0
- package/dist/elements/SortRow/index.d.ts +4 -0
- package/dist/elements/SortRow/index.d.ts.map +1 -0
- package/dist/elements/SortRow/index.js +35 -0
- package/dist/elements/SortRow/index.js.map +1 -0
- package/dist/elements/SortRow/index.scss +22 -0
- package/dist/elements/Table/OrderableTable.d.ts +11 -0
- package/dist/elements/Table/OrderableTable.d.ts.map +1 -0
- package/dist/elements/Table/OrderableTable.js +162 -0
- package/dist/elements/Table/OrderableTable.js.map +1 -0
- package/dist/exports/client/index.js +11 -11
- package/dist/exports/client/index.js.map +3 -3
- package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
- package/dist/forms/Form/fieldReducer.js +10 -40
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +4 -13
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/icons/Sort/index.d.ts +9 -0
- package/dist/icons/Sort/index.d.ts.map +1 -0
- package/dist/icons/Sort/index.js +38 -0
- package/dist/icons/Sort/index.js.map +1 -0
- package/dist/icons/Sort/index.scss +14 -0
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +3 -1
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/ListQuery/types.d.ts +2 -0
- package/dist/providers/ListQuery/types.d.ts.map +1 -1
- package/dist/providers/ListQuery/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/buildTableState.d.ts +0 -1
- package/dist/utilities/buildTableState.d.ts.map +1 -1
- package/dist/utilities/buildTableState.js +3 -1
- package/dist/utilities/buildTableState.js.map +1 -1
- package/dist/utilities/getClientConfig.d.ts.map +1 -1
- package/dist/utilities/getClientConfig.js +10 -8
- package/dist/utilities/getClientConfig.js.map +1 -1
- package/dist/utilities/renderTable.d.ts +3 -1
- package/dist/utilities/renderTable.d.ts.map +1 -1
- package/dist/utilities/renderTable.js +30 -1
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/views/List/index.scss +6 -0
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAqD,MAAM,OAAO,CAAA;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAoBrE,OAAO,cAAc,CAAA;AAIrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAqD,MAAM,OAAO,CAAA;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAoBrE,OAAO,cAAc,CAAA;AAIrB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAgUvE,CAAA"}
|
|
@@ -103,6 +103,7 @@ export const RelationshipTable = props => {
|
|
|
103
103
|
columns: transformColumnsToPreferences(query?.columns) || defaultColumns,
|
|
104
104
|
docs,
|
|
105
105
|
enableRowSelections: false,
|
|
106
|
+
orderableFieldName: !field.orderable || Array.isArray(field.collection) ? undefined : `_${field.collection}_${field.name}_order`,
|
|
106
107
|
parent,
|
|
107
108
|
query: newQuery,
|
|
108
109
|
renderRowTypes: true,
|
|
@@ -112,7 +113,7 @@ export const RelationshipTable = props => {
|
|
|
112
113
|
setTable(NewTable);
|
|
113
114
|
setColumnState(newColumnState);
|
|
114
115
|
setIsLoadingTable(false);
|
|
115
|
-
}, [field.defaultLimit, field.defaultSort, collectionConfig?.admin?.pagination?.defaultLimit, collectionConfig?.defaultSort, query, filterOptions, getTableState, relationTo, parent]);
|
|
116
|
+
}, [field.defaultLimit, field.defaultSort, field.admin.defaultColumns, field.collection, field.name, field.orderable, collectionConfig?.admin?.pagination?.defaultLimit, collectionConfig?.defaultSort, query, filterOptions, getTableState, relationTo, parent]);
|
|
116
117
|
const handleTableRender = useEffectEvent((query, disableTable) => {
|
|
117
118
|
if (!disableTable && (!Table || query)) {
|
|
118
119
|
void renderTable();
|
|
@@ -231,6 +232,7 @@ export const RelationshipTable = props => {
|
|
|
231
232
|
defaultLimit: field.defaultLimit ?? collectionConfig?.admin?.pagination?.defaultLimit,
|
|
232
233
|
modifySearchParams: false,
|
|
233
234
|
onQueryChange: setQuery,
|
|
235
|
+
orderableFieldName: !field.orderable || Array.isArray(field.collection) ? undefined : `_${field.collection}_${field.name}_order`,
|
|
234
236
|
children: /*#__PURE__*/_jsxs(TableColumnsProvider, {
|
|
235
237
|
collectionSlug: Array.isArray(relationTo) ? relationTo[0] : relationTo,
|
|
236
238
|
columnState: columnState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getTranslation","hoistQueryParamsToAnd","transformColumnsToPreferences","React","Fragment","useCallback","useEffect","useState","Button","Pill","useEffectEvent","ChevronIcon","PlusIcon","useAuth","useConfig","ListQueryProvider","useServerFunctions","TableColumnsProvider","useTranslation","AnimateHeight","ColumnSelector","useDocumentDrawer","Popup","PopupList","RelationshipProvider","DrawerLink","RelationshipTablePagination","baseClass","RelationshipTable","props","AfterInput","allowCreate","BeforeInput","disableTable","field","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","selectedCollection","setSelectedCollection","undefined","isLoadingTable","setIsLoadingTable","data","setData","columnState","setColumnState","getTableState","renderTable","newQuery","limit","String","defaultLimit","admin","pagination","sort","defaultSort","where","defaultColumns","map","accessor","active","newData","state","newColumnState","NewTable","columns","enableRowSelections","renderRowTypes","tableAppearance","handleTableRender","DocumentDrawer","DocumentDrawerToggler","closeDrawer","isDrawerOpen","openDrawer","onDrawerSave","args","foundDocIndex","findIndex","withNewOrUpdatedDoc","newDocs","onDrawerCreate","onDrawerDelete","filter","canCreate","collections","create","_jsxs","className","_jsx","button","buttonStyle","buttonType","horizontalAlign","render","close","closePopup","ButtonGroup","relatedCollection","onClick","find","each","slug","labels","singular","size","icon","direction","pillStyle","length","label","plural","modifySearchParams","onQueryChange","LinkedCellOverride","height","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 { Button } from '../../elements/Button/index.js'\nimport { Pill } from '../../elements/Pill/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { PlusIcon } from '../../icons/Plus/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 { Popup, PopupList } from '../Popup/index.js'\nimport { RelationshipProvider } from '../Table/RelationshipProvider/index.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 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 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 [selectedCollection, setSelectedCollection] = useState(\n Array.isArray(relationTo) ? 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 (docs?: PaginatedDocs['docs']) => {\n const newQuery: ListQuery = {\n limit: String(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 ListPreferences['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 docs,\n enableRowSelections: false,\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 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, DocumentDrawerToggler, { closeDrawer, isDrawerOpen, openDrawer }] =\n 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 let withNewOrUpdatedDoc: PaginatedDocs['docs'] = undefined\n\n if (foundDocIndex !== -1) {\n const newDocs = [...data.docs]\n newDocs[foundDocIndex] = args.doc\n withNewOrUpdatedDoc = newDocs\n } else {\n withNewOrUpdatedDoc = [args.doc, ...data.docs]\n }\n\n void renderTable(withNewOrUpdatedDoc)\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 void renderTable(newDocs)\n },\n [data?.docs, renderTable],\n )\n\n const canCreate =\n allowCreate !== false &&\n permissions?.collections?.[Array.isArray(relationTo) ? relationTo[0] : relationTo]?.create\n\n useEffect(() => {\n if (Array.isArray(relationTo) && selectedCollection) {\n openDrawer()\n }\n }, [selectedCollection, openDrawer, relationTo])\n\n useEffect(() => {\n if (Array.isArray(relationTo) && !isDrawerOpen && selectedCollection) {\n setSelectedCollection(undefined)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDrawerOpen])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n {Label}\n <div className={`${baseClass}__actions`}>\n {!Array.isArray(relationTo) && canCreate && (\n <DocumentDrawerToggler className={`${baseClass}__add-new`}>\n {i18n.t('fields:addNew')}\n </DocumentDrawerToggler>\n )}\n\n {Array.isArray(relationTo) && (\n <Fragment>\n <Popup\n button={\n <Button buttonStyle=\"none\" className={`${baseClass}__add-new-polymorphic`}>\n {i18n.t('fields:addNew')}\n <PlusIcon />\n </Button>\n }\n buttonType=\"custom\"\n horizontalAlign=\"center\"\n render={({ close: closePopup }) => (\n <PopupList.ButtonGroup>\n {relationTo.map((relatedCollection) => {\n if (permissions.collections[relatedCollection].create) {\n return (\n <PopupList.Button\n className={`${baseClass}__relation-button--${relatedCollection}`}\n key={relatedCollection}\n onClick={() => {\n closePopup()\n setSelectedCollection(relatedCollection)\n }}\n >\n {getTranslation(\n config.collections.find((each) => each.slug === relatedCollection)\n .labels.singular,\n i18n,\n )}\n </PopupList.Button>\n )\n }\n\n return null\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"medium\"\n />\n </Fragment>\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 >\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: Array.isArray(relationTo)\n ? i18n.t('general:documents')\n : getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n </p>\n {canCreate && (\n <Button onClick={openDrawer}>\n {i18n.t('general:createNewLabel', {\n label: getTranslation(collectionConfig?.labels?.singular, i18n),\n })}\n </Button>\n )}\n </div>\n )}\n {data?.docs && data.docs.length > 0 && (\n <RelationshipProvider>\n <ListQueryProvider\n columns={transformColumnsToPreferences(columnState)}\n data={data}\n defaultLimit={\n field.defaultLimit ?? collectionConfig?.admin?.pagination?.defaultLimit\n }\n modifySearchParams={false}\n onQueryChange={setQuery}\n >\n <TableColumnsProvider\n collectionSlug={Array.isArray(relationTo) ? 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","useState","Button","Pill","useEffectEvent","ChevronIcon","PlusIcon","useAuth","useConfig","ListQueryProvider","useServerFunctions","TableColumnsProvider","useTranslation","AnimateHeight","ColumnSelector","useDocumentDrawer","Popup","PopupList","RelationshipProvider","DrawerLink","RelationshipTablePagination","baseClass","RelationshipTable","props","AfterInput","allowCreate","BeforeInput","disableTable","field","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","selectedCollection","setSelectedCollection","undefined","isLoadingTable","setIsLoadingTable","data","setData","columnState","setColumnState","getTableState","renderTable","newQuery","limit","String","defaultLimit","admin","pagination","sort","defaultSort","where","defaultColumns","map","accessor","active","newData","state","newColumnState","NewTable","columns","enableRowSelections","orderableFieldName","orderable","collection","name","renderRowTypes","tableAppearance","handleTableRender","DocumentDrawer","DocumentDrawerToggler","closeDrawer","isDrawerOpen","openDrawer","onDrawerSave","args","foundDocIndex","findIndex","withNewOrUpdatedDoc","newDocs","onDrawerCreate","onDrawerDelete","filter","canCreate","collections","create","_jsxs","className","_jsx","button","buttonStyle","buttonType","horizontalAlign","render","close","closePopup","ButtonGroup","relatedCollection","onClick","find","each","slug","labels","singular","size","icon","direction","pillStyle","length","label","plural","modifySearchParams","onQueryChange","LinkedCellOverride","height","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 { Button } from '../../elements/Button/index.js'\nimport { Pill } from '../../elements/Pill/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { PlusIcon } from '../../icons/Plus/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 { Popup, PopupList } from '../Popup/index.js'\nimport { RelationshipProvider } from '../Table/RelationshipProvider/index.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 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 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 [selectedCollection, setSelectedCollection] = useState(\n Array.isArray(relationTo) ? 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 (docs?: PaginatedDocs['docs']) => {\n const newQuery: ListQuery = {\n limit: String(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 ListPreferences['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 docs,\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, DocumentDrawerToggler, { closeDrawer, isDrawerOpen, openDrawer }] =\n 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 let withNewOrUpdatedDoc: PaginatedDocs['docs'] = undefined\n\n if (foundDocIndex !== -1) {\n const newDocs = [...data.docs]\n newDocs[foundDocIndex] = args.doc\n withNewOrUpdatedDoc = newDocs\n } else {\n withNewOrUpdatedDoc = [args.doc, ...data.docs]\n }\n\n void renderTable(withNewOrUpdatedDoc)\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 void renderTable(newDocs)\n },\n [data?.docs, renderTable],\n )\n\n const canCreate =\n allowCreate !== false &&\n permissions?.collections?.[Array.isArray(relationTo) ? relationTo[0] : relationTo]?.create\n\n useEffect(() => {\n if (Array.isArray(relationTo) && selectedCollection) {\n openDrawer()\n }\n }, [selectedCollection, openDrawer, relationTo])\n\n useEffect(() => {\n if (Array.isArray(relationTo) && !isDrawerOpen && selectedCollection) {\n setSelectedCollection(undefined)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDrawerOpen])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n {Label}\n <div className={`${baseClass}__actions`}>\n {!Array.isArray(relationTo) && canCreate && (\n <DocumentDrawerToggler className={`${baseClass}__add-new`}>\n {i18n.t('fields:addNew')}\n </DocumentDrawerToggler>\n )}\n\n {Array.isArray(relationTo) && (\n <Fragment>\n <Popup\n button={\n <Button buttonStyle=\"none\" className={`${baseClass}__add-new-polymorphic`}>\n {i18n.t('fields:addNew')}\n <PlusIcon />\n </Button>\n }\n buttonType=\"custom\"\n horizontalAlign=\"center\"\n render={({ close: closePopup }) => (\n <PopupList.ButtonGroup>\n {relationTo.map((relatedCollection) => {\n if (permissions.collections[relatedCollection].create) {\n return (\n <PopupList.Button\n className={`${baseClass}__relation-button--${relatedCollection}`}\n key={relatedCollection}\n onClick={() => {\n closePopup()\n setSelectedCollection(relatedCollection)\n }}\n >\n {getTranslation(\n config.collections.find((each) => each.slug === relatedCollection)\n .labels.singular,\n i18n,\n )}\n </PopupList.Button>\n )\n }\n\n return null\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"medium\"\n />\n </Fragment>\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 >\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: Array.isArray(relationTo)\n ? i18n.t('general:documents')\n : getTranslation(collectionConfig?.labels?.plural, i18n),\n })}\n </p>\n {canCreate && (\n <Button onClick={openDrawer}>\n {i18n.t('general:createNewLabel', {\n label: getTranslation(collectionConfig?.labels?.singular, i18n),\n })}\n </Button>\n )}\n </div>\n )}\n {data?.docs && data.docs.length > 0 && (\n <RelationshipProvider>\n <ListQueryProvider\n columns={transformColumnsToPreferences(columnState)}\n data={data}\n defaultLimit={\n field.defaultLimit ?? collectionConfig?.admin?.pagination?.defaultLimit\n }\n modifySearchParams={false}\n onQueryChange={setQuery}\n orderableFieldName={\n !field.orderable || Array.isArray(field.collection)\n ? undefined\n : `_${field.collection}_${field.name}_order`\n }\n >\n <TableColumnsProvider\n collectionSlug={Array.isArray(relationTo) ? 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":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
export type SortHeaderProps = {
|
|
4
|
+
readonly appearance?: 'condensed' | 'default';
|
|
5
|
+
readonly disable?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const SortHeader: React.FC<SortHeaderProps>;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortHeader/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAIhD,OAAO,cAAc,CAAA;AAGrB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAkCD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAwChD,CAAA"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
import React, { useEffect, useRef } from 'react';
|
|
6
|
+
import { SortDownIcon, SortUpIcon } from '../../icons/Sort/index.js';
|
|
7
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
8
|
+
import './index.scss';
|
|
9
|
+
import { useTranslation } from '../../providers/Translation/index.js';
|
|
10
|
+
const baseClass = 'sort-header';
|
|
11
|
+
function useSort() {
|
|
12
|
+
const $ = _c(12);
|
|
13
|
+
const {
|
|
14
|
+
handleSortChange,
|
|
15
|
+
orderableFieldName,
|
|
16
|
+
query
|
|
17
|
+
} = useListQuery();
|
|
18
|
+
const querySort = Array.isArray(query.sort) ? query.sort[0] : query.sort;
|
|
19
|
+
const sort = useRef(querySort === `-${orderableFieldName}` ? "desc" : "asc");
|
|
20
|
+
const isActive = querySort === `-${orderableFieldName}` || querySort === orderableFieldName;
|
|
21
|
+
let t0;
|
|
22
|
+
let t1;
|
|
23
|
+
if ($[0] !== isActive || $[1] !== orderableFieldName || $[2] !== querySort) {
|
|
24
|
+
t0 = () => {
|
|
25
|
+
if (!isActive) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
sort.current = querySort === `-${orderableFieldName}` ? "desc" : "asc";
|
|
29
|
+
};
|
|
30
|
+
t1 = [orderableFieldName, querySort, isActive];
|
|
31
|
+
$[0] = isActive;
|
|
32
|
+
$[1] = orderableFieldName;
|
|
33
|
+
$[2] = querySort;
|
|
34
|
+
$[3] = t0;
|
|
35
|
+
$[4] = t1;
|
|
36
|
+
} else {
|
|
37
|
+
t0 = $[3];
|
|
38
|
+
t1 = $[4];
|
|
39
|
+
}
|
|
40
|
+
useEffect(t0, t1);
|
|
41
|
+
let t2;
|
|
42
|
+
if ($[5] !== handleSortChange || $[6] !== isActive || $[7] !== orderableFieldName) {
|
|
43
|
+
t2 = () => {
|
|
44
|
+
if (isActive) {
|
|
45
|
+
handleSortChange(sort.current === "asc" ? `-${orderableFieldName}` : orderableFieldName);
|
|
46
|
+
sort.current = sort.current === "asc" ? "desc" : "asc";
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
handleSortChange(sort.current === "asc" ? orderableFieldName : `-${orderableFieldName}`);
|
|
50
|
+
};
|
|
51
|
+
$[5] = handleSortChange;
|
|
52
|
+
$[6] = isActive;
|
|
53
|
+
$[7] = orderableFieldName;
|
|
54
|
+
$[8] = t2;
|
|
55
|
+
} else {
|
|
56
|
+
t2 = $[8];
|
|
57
|
+
}
|
|
58
|
+
const handleSortPress = t2;
|
|
59
|
+
let t3;
|
|
60
|
+
if ($[9] !== handleSortPress || $[10] !== isActive) {
|
|
61
|
+
t3 = {
|
|
62
|
+
handleSortPress,
|
|
63
|
+
isActive,
|
|
64
|
+
sort
|
|
65
|
+
};
|
|
66
|
+
$[9] = handleSortPress;
|
|
67
|
+
$[10] = isActive;
|
|
68
|
+
$[11] = t3;
|
|
69
|
+
} else {
|
|
70
|
+
t3 = $[11];
|
|
71
|
+
}
|
|
72
|
+
return t3;
|
|
73
|
+
}
|
|
74
|
+
export const SortHeader = props => {
|
|
75
|
+
const $ = _c(8);
|
|
76
|
+
const {
|
|
77
|
+
appearance
|
|
78
|
+
} = props;
|
|
79
|
+
const {
|
|
80
|
+
handleSortPress,
|
|
81
|
+
isActive,
|
|
82
|
+
sort
|
|
83
|
+
} = useSort();
|
|
84
|
+
const {
|
|
85
|
+
t
|
|
86
|
+
} = useTranslation();
|
|
87
|
+
const t0 = appearance && `${baseClass}--appearance-${appearance}`;
|
|
88
|
+
let t1;
|
|
89
|
+
if ($[0] !== t0) {
|
|
90
|
+
t1 = [baseClass, t0].filter(Boolean);
|
|
91
|
+
$[0] = t0;
|
|
92
|
+
$[1] = t1;
|
|
93
|
+
} else {
|
|
94
|
+
t1 = $[1];
|
|
95
|
+
}
|
|
96
|
+
const t2 = t1.join(" ");
|
|
97
|
+
let t3;
|
|
98
|
+
if ($[2] !== handleSortPress || $[3] !== isActive || $[4] !== sort.current || $[5] !== t || $[6] !== t2) {
|
|
99
|
+
t3 = _jsx("div", {
|
|
100
|
+
className: t2,
|
|
101
|
+
children: _jsx("div", {
|
|
102
|
+
className: `${baseClass}__buttons`,
|
|
103
|
+
children: sort.current === "desc" ? _jsx("button", {
|
|
104
|
+
"aria-label": t("general:sortByLabelDirection", {
|
|
105
|
+
direction: t("general:ascending"),
|
|
106
|
+
label: "Order"
|
|
107
|
+
}),
|
|
108
|
+
className: `${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ""}`,
|
|
109
|
+
onClick: handleSortPress,
|
|
110
|
+
type: "button",
|
|
111
|
+
children: _jsx(SortDownIcon, {})
|
|
112
|
+
}) : _jsx("button", {
|
|
113
|
+
"aria-label": t("general:sortByLabelDirection", {
|
|
114
|
+
direction: t("general:descending"),
|
|
115
|
+
label: "Order"
|
|
116
|
+
}),
|
|
117
|
+
className: `${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ""}`,
|
|
118
|
+
onClick: handleSortPress,
|
|
119
|
+
type: "button",
|
|
120
|
+
children: _jsx(SortUpIcon, {})
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
$[2] = handleSortPress;
|
|
125
|
+
$[3] = isActive;
|
|
126
|
+
$[4] = sort.current;
|
|
127
|
+
$[5] = t;
|
|
128
|
+
$[6] = t2;
|
|
129
|
+
$[7] = t3;
|
|
130
|
+
} else {
|
|
131
|
+
t3 = $[7];
|
|
132
|
+
}
|
|
133
|
+
return t3;
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","useEffect","useRef","SortDownIcon","SortUpIcon","useListQuery","useTranslation","baseClass","useSort","$","handleSortChange","orderableFieldName","query","querySort","Array","isArray","sort","isActive","t0","t1","current","t2","handleSortPress","t3","SortHeader","props","appearance","t","filter","Boolean","join","_jsx","className","children","direction","label","onClick","type"],"sources":["../../../src/elements/SortHeader/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useEffect, useRef } from 'react'\n\nimport { SortDownIcon, SortUpIcon } from '../../icons/Sort/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport './index.scss'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport type SortHeaderProps = {\n readonly appearance?: 'condensed' | 'default'\n readonly disable?: boolean\n}\n\nconst baseClass = 'sort-header'\n\nfunction useSort() {\n const { handleSortChange, orderableFieldName, query } = useListQuery()\n const querySort = Array.isArray(query.sort) ? query.sort[0] : query.sort\n const sort = useRef<'asc' | 'desc'>(querySort === `-${orderableFieldName}` ? 'desc' : 'asc')\n const isActive = querySort === `-${orderableFieldName}` || querySort === orderableFieldName\n\n // This is necessary if you initialize the page without sort url param\n // but your preferences are to sort by -_order.\n // Since sort isn't updated, the arrow would incorrectly point upward.\n useEffect(() => {\n if (!isActive) {\n return\n }\n sort.current = querySort === `-${orderableFieldName}` ? 'desc' : 'asc'\n }, [orderableFieldName, querySort, isActive])\n\n const handleSortPress = () => {\n // If it's already sorted by the \"_order\" field, toggle between \"asc\" and \"desc\"\n if (isActive) {\n void handleSortChange(sort.current === 'asc' ? `-${orderableFieldName}` : orderableFieldName)\n sort.current = sort.current === 'asc' ? 'desc' : 'asc'\n return\n }\n // If NOT sorted by the \"_order\" field, sort by that field but do not toggle the current value of \"asc\" or \"desc\".\n void handleSortChange(sort.current === 'asc' ? orderableFieldName : `-${orderableFieldName}`)\n }\n\n return { handleSortPress, isActive, sort }\n}\n\nexport const SortHeader: React.FC<SortHeaderProps> = (props) => {\n const { appearance } = props\n const { handleSortPress, isActive, sort } = useSort()\n const { t } = useTranslation()\n\n return (\n <div\n className={[baseClass, appearance && `${baseClass}--appearance-${appearance}`]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__buttons`}>\n {sort.current === 'desc' ? (\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:ascending'),\n label: 'Order',\n })}\n className={`${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ''}`}\n onClick={handleSortPress}\n type=\"button\"\n >\n <SortDownIcon />\n </button>\n ) : (\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:descending'),\n label: 'Order',\n })}\n className={`${baseClass}__button ${baseClass}__${sort.current} ${isActive ? `${baseClass}--active` : ''}`}\n onClick={handleSortPress}\n type=\"button\"\n >\n <SortUpIcon />\n </button>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
@import '../../scss/styles.scss';
|
|
2
|
+
|
|
3
|
+
@layer payload-default {
|
|
4
|
+
.sort-header {
|
|
5
|
+
display: flex;
|
|
6
|
+
gap: calc(var(--base) / 2);
|
|
7
|
+
align-items: center;
|
|
8
|
+
|
|
9
|
+
&__buttons {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: calc(var(--base) / 4);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&__button {
|
|
16
|
+
margin: 0;
|
|
17
|
+
padding: 0 !important;
|
|
18
|
+
opacity: 0.3;
|
|
19
|
+
padding: calc(var(--base) / 4);
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
background: transparent;
|
|
24
|
+
border: none;
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
|
|
27
|
+
&.sort-header--active {
|
|
28
|
+
opacity: 1;
|
|
29
|
+
visibility: visible;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:hover {
|
|
33
|
+
opacity: 0.7;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&:hover {
|
|
38
|
+
.btn {
|
|
39
|
+
opacity: 0.4;
|
|
40
|
+
visibility: visible;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&--appearance-condensed {
|
|
45
|
+
gap: calc(var(--base) / 4);
|
|
46
|
+
|
|
47
|
+
.sort-header__buttons {
|
|
48
|
+
gap: 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortRow/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,OAAO,yBASnB,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { DragHandleIcon } from '../../icons/DragHandle/index.js';
|
|
7
|
+
import './index.scss';
|
|
8
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
9
|
+
const baseClass = 'sort-row';
|
|
10
|
+
export const SortRow = () => {
|
|
11
|
+
const $ = _c(2);
|
|
12
|
+
const {
|
|
13
|
+
orderableFieldName,
|
|
14
|
+
query
|
|
15
|
+
} = useListQuery();
|
|
16
|
+
const isActive = query.sort === orderableFieldName || query.sort === `-${orderableFieldName}`;
|
|
17
|
+
const t0 = `${baseClass} ${isActive ? "active" : ""}`;
|
|
18
|
+
let t1;
|
|
19
|
+
if ($[0] !== t0) {
|
|
20
|
+
t1 = _jsx("div", {
|
|
21
|
+
className: t0,
|
|
22
|
+
role: "button",
|
|
23
|
+
tabIndex: 0,
|
|
24
|
+
children: _jsx(DragHandleIcon, {
|
|
25
|
+
className: `${baseClass}__icon`
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
$[0] = t0;
|
|
29
|
+
$[1] = t1;
|
|
30
|
+
} else {
|
|
31
|
+
t1 = $[1];
|
|
32
|
+
}
|
|
33
|
+
return t1;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","DragHandleIcon","useListQuery","baseClass","SortRow","$","orderableFieldName","query","isActive","sort","t0","t1","_jsx","className","role","tabIndex","children"],"sources":["../../../src/elements/SortRow/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { DragHandleIcon } from '../../icons/DragHandle/index.js'\nimport './index.scss'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\n\nconst baseClass = 'sort-row'\n\nexport const SortRow = () => {\n const { orderableFieldName, query } = useListQuery()\n const isActive = query.sort === orderableFieldName || query.sort === `-${orderableFieldName}`\n\n return (\n <div className={`${baseClass} ${isActive ? 'active' : ''}`} role=\"button\" tabIndex={0}>\n <DragHandleIcon className={`${baseClass}__icon`} />\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,cAAc,QAAQ;AAC/B,OAAO;AACP,SAASC,YAAY,QAAQ;AAE7B,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,OAAA,GAAUA,CAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EACrB;IAAAO,kBAAA;IAAAC;EAAA,IAAsCL,YAAA;EACtC,MAAAM,QAAA,GAAiBD,KAAA,CAAAE,IAAA,KAAeH,kBAAA,IAAsBC,KAAA,CAAAE,IAAA,KAAe,IAAIH,kBAAA,EAAoB;EAG3E,MAAAI,EAAA,MAAAP,SAAA,IAAgBK,QAAA,GAAW,WAAW,IAAI;EAAA,IAAAG,EAAA;EAAA,IAAAN,CAAA,QAAAK,EAAA;IAA1DC,EAAA,GAAAC,IAAA,CAAC;MAAAC,SAAA,EAAeH,EAA0C;MAAAI,IAAA,EAAO;MAAAC,QAAA;MAAAC,QAAA,EAC/DJ,IAAA,CAAAX,cAAA;QAAAY,SAAA,EAA2B,GAAAV,SAAA;MAAoB,C;;;;;;;SADjDQ,E;CAIJ","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@import '../../scss/styles.scss';
|
|
2
|
+
|
|
3
|
+
@layer payload-default {
|
|
4
|
+
.sort-row {
|
|
5
|
+
opacity: 0.3;
|
|
6
|
+
cursor: not-allowed;
|
|
7
|
+
|
|
8
|
+
&.active {
|
|
9
|
+
cursor: grab;
|
|
10
|
+
opacity: 1;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&__icon {
|
|
14
|
+
height: 22px;
|
|
15
|
+
width: 22px;
|
|
16
|
+
margin-left: -2px;
|
|
17
|
+
margin-top: -2px;
|
|
18
|
+
display: block;
|
|
19
|
+
width: min-content;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ClientCollectionConfig, Column } from 'payload';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export type Props = {
|
|
5
|
+
readonly appearance?: 'condensed' | 'default';
|
|
6
|
+
readonly collection: ClientCollectionConfig;
|
|
7
|
+
readonly columns?: Column[];
|
|
8
|
+
readonly data: Record<string, unknown>[];
|
|
9
|
+
};
|
|
10
|
+
export declare const OrderableTable: React.FC<Props>;
|
|
11
|
+
//# sourceMappingURL=OrderableTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderableTable.d.ts","sourceRoot":"","sources":["../../../src/elements/Table/OrderableTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAyB,MAAM,SAAS,CAAA;AAEpF,OAAO,cAAc,CAAA;AAErB,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAA;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+K1C,CAAA"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import './index.scss';
|
|
5
|
+
import React, { useEffect, useState } from 'react';
|
|
6
|
+
import { toast } from 'sonner';
|
|
7
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
8
|
+
import { DraggableSortableItem } from '../DraggableSortable/DraggableSortableItem/index.js';
|
|
9
|
+
import { DraggableSortable } from '../DraggableSortable/index.js';
|
|
10
|
+
const baseClass = 'table';
|
|
11
|
+
export const OrderableTable = ({
|
|
12
|
+
appearance = 'default',
|
|
13
|
+
collection,
|
|
14
|
+
columns,
|
|
15
|
+
data: initialData
|
|
16
|
+
}) => {
|
|
17
|
+
const {
|
|
18
|
+
data: listQueryData,
|
|
19
|
+
handleSortChange,
|
|
20
|
+
orderableFieldName,
|
|
21
|
+
query
|
|
22
|
+
} = useListQuery();
|
|
23
|
+
// Use the data from ListQueryProvider if available, otherwise use the props
|
|
24
|
+
const serverData = listQueryData?.docs || initialData;
|
|
25
|
+
// Local state to track the current order of rows
|
|
26
|
+
const [localData, setLocalData] = useState(serverData);
|
|
27
|
+
// id -> index for each column
|
|
28
|
+
const [cellMap, setCellMap] = useState({});
|
|
29
|
+
// Update local data when server data changes
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
setLocalData(serverData);
|
|
32
|
+
setCellMap(Object.fromEntries(serverData.map((item, index) => [String(item.id ?? item._id), index])));
|
|
33
|
+
}, [serverData]);
|
|
34
|
+
const activeColumns = columns?.filter(col => col?.active);
|
|
35
|
+
if (!activeColumns || activeColumns.filter(col_0 => !['_dragHandle', '_select'].includes(col_0.accessor)).length === 0) {
|
|
36
|
+
return /*#__PURE__*/_jsx("div", {
|
|
37
|
+
children: "No columns selected"
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const handleDragEnd = async ({
|
|
41
|
+
moveFromIndex,
|
|
42
|
+
moveToIndex
|
|
43
|
+
}) => {
|
|
44
|
+
if (query.sort !== orderableFieldName && query.sort !== `-${orderableFieldName}`) {
|
|
45
|
+
toast.warning('To reorder the rows you must first sort them by the "Order" column');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (moveFromIndex === moveToIndex) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const movedId = localData[moveFromIndex].id ?? localData[moveFromIndex]._id;
|
|
52
|
+
const newBeforeRow = moveToIndex > moveFromIndex ? localData[moveToIndex] : localData[moveToIndex - 1];
|
|
53
|
+
const newAfterRow = moveToIndex > moveFromIndex ? localData[moveToIndex + 1] : localData[moveToIndex];
|
|
54
|
+
// Store the original data for rollback
|
|
55
|
+
const previousData = [...localData];
|
|
56
|
+
// Optimisitc update of local state to reorder the rows
|
|
57
|
+
setLocalData(currentData => {
|
|
58
|
+
const newData = [...currentData];
|
|
59
|
+
// Update the rendered cell for the moved row to show "pending"
|
|
60
|
+
newData[moveFromIndex][orderableFieldName] = `pending`;
|
|
61
|
+
// Move the item in the array
|
|
62
|
+
newData.splice(moveToIndex, 0, newData.splice(moveFromIndex, 1)[0]);
|
|
63
|
+
return newData;
|
|
64
|
+
});
|
|
65
|
+
try {
|
|
66
|
+
const target = newBeforeRow ? {
|
|
67
|
+
id: newBeforeRow.id ?? newBeforeRow._id,
|
|
68
|
+
key: newBeforeRow[orderableFieldName]
|
|
69
|
+
} : {
|
|
70
|
+
id: newAfterRow.id ?? newAfterRow._id,
|
|
71
|
+
key: newAfterRow[orderableFieldName]
|
|
72
|
+
};
|
|
73
|
+
const newKeyWillBe = newBeforeRow && query.sort === orderableFieldName || !newBeforeRow && query.sort === `-${orderableFieldName}` ? 'greater' : 'less';
|
|
74
|
+
const jsonBody = {
|
|
75
|
+
collectionSlug: collection.slug,
|
|
76
|
+
docsToMove: [movedId],
|
|
77
|
+
newKeyWillBe,
|
|
78
|
+
orderableFieldName,
|
|
79
|
+
target
|
|
80
|
+
};
|
|
81
|
+
const response = await fetch(`/api/reorder`, {
|
|
82
|
+
body: JSON.stringify(jsonBody),
|
|
83
|
+
headers: {
|
|
84
|
+
'Content-Type': 'application/json'
|
|
85
|
+
},
|
|
86
|
+
method: 'POST'
|
|
87
|
+
});
|
|
88
|
+
if (response.status === 403) {
|
|
89
|
+
throw new Error('You do not have permission to reorder these rows');
|
|
90
|
+
}
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
throw new Error('Failed to reorder. This can happen if you reorder several rows too quickly. Please try again.');
|
|
93
|
+
}
|
|
94
|
+
} catch (err) {
|
|
95
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
96
|
+
// Rollback to previous state if the request fails
|
|
97
|
+
setLocalData(previousData);
|
|
98
|
+
toast.error(error);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const rowIds = localData.map(row => row.id ?? row._id);
|
|
102
|
+
return /*#__PURE__*/_jsx("div", {
|
|
103
|
+
className: [baseClass, appearance && `${baseClass}--appearance-${appearance}`].filter(Boolean).join(' '),
|
|
104
|
+
children: /*#__PURE__*/_jsx(DraggableSortable, {
|
|
105
|
+
ids: rowIds,
|
|
106
|
+
onDragEnd: handleDragEnd,
|
|
107
|
+
children: /*#__PURE__*/_jsxs("table", {
|
|
108
|
+
cellPadding: "0",
|
|
109
|
+
cellSpacing: "0",
|
|
110
|
+
children: [/*#__PURE__*/_jsx("thead", {
|
|
111
|
+
children: /*#__PURE__*/_jsx("tr", {
|
|
112
|
+
children: activeColumns.map((col_1, i) => /*#__PURE__*/_jsx("th", {
|
|
113
|
+
id: `heading-${col_1.accessor}`,
|
|
114
|
+
children: col_1.Heading
|
|
115
|
+
}, i))
|
|
116
|
+
})
|
|
117
|
+
}), /*#__PURE__*/_jsx("tbody", {
|
|
118
|
+
children: localData.map((row_0, rowIndex) => /*#__PURE__*/_jsx(DraggableSortableItem, {
|
|
119
|
+
id: rowIds[rowIndex],
|
|
120
|
+
children: ({
|
|
121
|
+
attributes,
|
|
122
|
+
listeners,
|
|
123
|
+
setNodeRef,
|
|
124
|
+
transform,
|
|
125
|
+
transition
|
|
126
|
+
}) => /*#__PURE__*/_jsx("tr", {
|
|
127
|
+
className: `row-${rowIndex + 1}`,
|
|
128
|
+
ref: setNodeRef,
|
|
129
|
+
style: {
|
|
130
|
+
transform,
|
|
131
|
+
transition
|
|
132
|
+
},
|
|
133
|
+
children: activeColumns.map((col_2, colIndex) => {
|
|
134
|
+
const {
|
|
135
|
+
accessor
|
|
136
|
+
} = col_2;
|
|
137
|
+
// Use the cellMap to find which index in the renderedCells to use
|
|
138
|
+
const cell = col_2.renderedCells[cellMap[row_0.id ?? row_0._id]];
|
|
139
|
+
// For drag handles, wrap in div with drag attributes
|
|
140
|
+
if (accessor === '_dragHandle') {
|
|
141
|
+
return /*#__PURE__*/_jsx("td", {
|
|
142
|
+
className: `cell-${accessor}`,
|
|
143
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
144
|
+
...attributes,
|
|
145
|
+
...listeners,
|
|
146
|
+
children: cell
|
|
147
|
+
})
|
|
148
|
+
}, colIndex);
|
|
149
|
+
}
|
|
150
|
+
return /*#__PURE__*/_jsx("td", {
|
|
151
|
+
className: `cell-${accessor}`,
|
|
152
|
+
children: cell
|
|
153
|
+
}, colIndex);
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
}, rowIds[rowIndex]))
|
|
157
|
+
})]
|
|
158
|
+
})
|
|
159
|
+
})
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=OrderableTable.js.map
|