@payloadcms/next 3.80.0-internal.0311fce → 3.80.0-internal.37a8509

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.
Files changed (105) hide show
  1. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  2. package/dist/elements/Nav/getNavPrefs.js +2 -36
  3. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  4. package/dist/elements/Nav/index.client.d.ts.map +1 -1
  5. package/dist/elements/Nav/index.client.js +44 -27
  6. package/dist/elements/Nav/index.client.js.map +1 -1
  7. package/dist/elements/Nav/index.d.ts.map +1 -1
  8. package/dist/elements/Nav/index.js +7 -34
  9. package/dist/elements/Nav/index.js.map +1 -1
  10. package/dist/exports/client.d.ts +1 -2
  11. package/dist/exports/client.d.ts.map +1 -1
  12. package/dist/exports/client.js +1 -2
  13. package/dist/exports/client.js.map +1 -1
  14. package/dist/exports/rsc.d.ts +1 -2
  15. package/dist/exports/rsc.d.ts.map +1 -1
  16. package/dist/exports/rsc.js +1 -2
  17. package/dist/exports/rsc.js.map +1 -1
  18. package/dist/exports/utilities.d.ts +0 -2
  19. package/dist/exports/utilities.d.ts.map +1 -1
  20. package/dist/exports/utilities.js +0 -1
  21. package/dist/exports/utilities.js.map +1 -1
  22. package/dist/prod/styles.css +1 -1
  23. package/dist/utilities/handleServerFunctions.js +2 -2
  24. package/dist/utilities/handleServerFunctions.js.map +1 -1
  25. package/dist/views/BrowseByFolder/buildView.d.ts +13 -0
  26. package/dist/views/BrowseByFolder/buildView.d.ts.map +1 -0
  27. package/dist/views/BrowseByFolder/buildView.js +170 -0
  28. package/dist/views/BrowseByFolder/buildView.js.map +1 -0
  29. package/dist/views/BrowseByFolder/index.d.ts +4 -0
  30. package/dist/views/BrowseByFolder/index.d.ts.map +1 -0
  31. package/dist/views/BrowseByFolder/index.js +20 -0
  32. package/dist/views/BrowseByFolder/index.js.map +1 -0
  33. package/dist/views/BrowseByFolder/metadata.d.ts +4 -0
  34. package/dist/views/BrowseByFolder/metadata.d.ts.map +1 -0
  35. package/dist/views/BrowseByFolder/metadata.js +18 -0
  36. package/dist/views/BrowseByFolder/metadata.js.map +1 -0
  37. package/dist/views/CollectionFolders/buildView.d.ts +15 -0
  38. package/dist/views/CollectionFolders/buildView.d.ts.map +1 -0
  39. package/dist/views/CollectionFolders/buildView.js +156 -0
  40. package/dist/views/CollectionFolders/buildView.js.map +1 -0
  41. package/dist/views/CollectionFolders/index.d.ts +4 -0
  42. package/dist/views/CollectionFolders/index.d.ts.map +1 -0
  43. package/dist/views/CollectionFolders/index.js +20 -0
  44. package/dist/views/CollectionFolders/index.js.map +1 -0
  45. package/dist/views/CollectionFolders/metadata.d.ts +7 -0
  46. package/dist/views/CollectionFolders/metadata.d.ts.map +1 -0
  47. package/dist/views/CollectionFolders/metadata.js +25 -0
  48. package/dist/views/CollectionFolders/metadata.js.map +1 -0
  49. package/dist/views/CollectionFolders/renderFolderViewSlots.d.ts +11 -0
  50. package/dist/views/CollectionFolders/renderFolderViewSlots.d.ts.map +1 -0
  51. package/dist/views/CollectionFolders/renderFolderViewSlots.js +64 -0
  52. package/dist/views/CollectionFolders/renderFolderViewSlots.js.map +1 -0
  53. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  54. package/dist/views/Document/renderDocumentSlots.js +0 -8
  55. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  56. package/dist/views/List/index.d.ts.map +1 -1
  57. package/dist/views/List/index.js +28 -81
  58. package/dist/views/List/index.js.map +1 -1
  59. package/dist/views/Root/getRouteData.d.ts +4 -1
  60. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  61. package/dist/views/Root/getRouteData.js +91 -27
  62. package/dist/views/Root/getRouteData.js.map +1 -1
  63. package/dist/views/Root/index.d.ts.map +1 -1
  64. package/dist/views/Root/index.js +11 -5
  65. package/dist/views/Root/index.js.map +1 -1
  66. package/dist/views/Root/metadata.d.ts.map +1 -1
  67. package/dist/views/Root/metadata.js +37 -1
  68. package/dist/views/Root/metadata.js.map +1 -1
  69. package/package.json +6 -6
  70. package/dist/elements/HierarchyTypeField/index.d.ts +0 -9
  71. package/dist/elements/HierarchyTypeField/index.d.ts.map +0 -1
  72. package/dist/elements/HierarchyTypeField/index.js +0 -114
  73. package/dist/elements/HierarchyTypeField/index.js.map +0 -1
  74. package/dist/elements/HierarchyTypeField/index.server.d.ts +0 -9
  75. package/dist/elements/HierarchyTypeField/index.server.d.ts.map +0 -1
  76. package/dist/elements/HierarchyTypeField/index.server.js +0 -32
  77. package/dist/elements/HierarchyTypeField/index.server.js.map +0 -1
  78. package/dist/elements/Nav/SidebarTabs/TabError/index.d.ts +0 -8
  79. package/dist/elements/Nav/SidebarTabs/TabError/index.d.ts.map +0 -1
  80. package/dist/elements/Nav/SidebarTabs/TabError/index.js +0 -42
  81. package/dist/elements/Nav/SidebarTabs/TabError/index.js.map +0 -1
  82. package/dist/elements/Nav/SidebarTabs/constants.d.ts +0 -2
  83. package/dist/elements/Nav/SidebarTabs/constants.d.ts.map +0 -1
  84. package/dist/elements/Nav/SidebarTabs/constants.js +0 -2
  85. package/dist/elements/Nav/SidebarTabs/constants.js.map +0 -1
  86. package/dist/elements/Nav/SidebarTabs/index.client.d.ts +0 -20
  87. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +0 -1
  88. package/dist/elements/Nav/SidebarTabs/index.client.js +0 -155
  89. package/dist/elements/Nav/SidebarTabs/index.client.js.map +0 -1
  90. package/dist/elements/Nav/SidebarTabs/index.d.ts +0 -17
  91. package/dist/elements/Nav/SidebarTabs/index.d.ts.map +0 -1
  92. package/dist/elements/Nav/SidebarTabs/index.js +0 -80
  93. package/dist/elements/Nav/SidebarTabs/index.js.map +0 -1
  94. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +0 -10
  95. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +0 -1
  96. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +0 -53
  97. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +0 -1
  98. package/dist/utilities/getHierarchyAncestry.d.ts +0 -24
  99. package/dist/utilities/getHierarchyAncestry.d.ts.map +0 -1
  100. package/dist/utilities/getHierarchyAncestry.js +0 -103
  101. package/dist/utilities/getHierarchyAncestry.js.map +0 -1
  102. package/dist/views/List/handleHierarchy.d.ts +0 -17
  103. package/dist/views/List/handleHierarchy.d.ts.map +0 -1
  104. package/dist/views/List/handleHierarchy.js +0 -243
  105. package/dist/views/List/handleHierarchy.js.map +0 -1
@@ -1,10 +0,0 @@
1
- import type { ServerFunction } from 'payload';
2
- import type React from 'react';
3
- export type RenderTabServerFnArgs = {
4
- tabSlug: string;
5
- };
6
- export type RenderTabServerFnReturnType = {
7
- component: React.ReactNode;
8
- };
9
- export declare const renderTabHandler: ServerFunction<RenderTabServerFnArgs, RenderTabServerFnReturnType>;
10
- //# sourceMappingURL=renderTabServerFn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderTabServerFn.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAC3C,qBAAqB,EACrB,2BAA2B,CA4C5B,CAAA"}
@@ -1,53 +0,0 @@
1
- import { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';
2
- export const renderTabHandler = ({
3
- req,
4
- tabSlug
5
- }) => {
6
- if (!req.user) {
7
- throw new Error('Unauthorized');
8
- }
9
- const {
10
- importMap
11
- } = req.payload;
12
- const {
13
- tabs
14
- } = req.payload.config.admin.components?.sidebar || {};
15
- if (!tabs) {
16
- return {
17
- component: null
18
- };
19
- }
20
- const tabConfig = tabs.find(tab => tab.slug === tabSlug);
21
- if (!tabConfig) {
22
- return {
23
- component: null
24
- };
25
- }
26
- try {
27
- const component = RenderServerComponent({
28
- Component: tabConfig.components.Content,
29
- importMap,
30
- serverProps: {
31
- i18n: req.i18n,
32
- locale: req.locale,
33
- params: req.routeParams,
34
- payload: req.payload,
35
- searchParams: req.query,
36
- user: req.user
37
- }
38
- });
39
- return {
40
- component
41
- };
42
- } catch (error) {
43
- const errorMessage = error instanceof Error ? error.message : String(error);
44
- req.payload.logger.error({
45
- err: error,
46
- msg: `Error rendering tab "${tabSlug}": ${errorMessage}`
47
- });
48
- return {
49
- component: null
50
- };
51
- }
52
- };
53
- //# sourceMappingURL=renderTabServerFn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderTabServerFn.js","names":["RenderServerComponent","renderTabHandler","req","tabSlug","user","Error","importMap","payload","tabs","config","admin","components","sidebar","component","tabConfig","find","tab","slug","Component","Content","serverProps","i18n","locale","params","routeParams","searchParams","query","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\nimport type React from 'react'\n\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent'\n\nexport type RenderTabServerFnArgs = {\n tabSlug: string\n}\n\nexport type RenderTabServerFnReturnType = {\n component: React.ReactNode\n}\n\nexport const renderTabHandler: ServerFunction<\n RenderTabServerFnArgs,\n RenderTabServerFnReturnType\n> = ({ req, tabSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { importMap } = req.payload\n const { tabs } = req.payload.config.admin.components?.sidebar || {}\n\n if (!tabs) {\n return { component: null }\n }\n\n const tabConfig = tabs.find((tab) => tab.slug === tabSlug)\n\n if (!tabConfig) {\n return { component: null }\n }\n\n try {\n const component = RenderServerComponent({\n Component: tabConfig.components.Content,\n importMap,\n serverProps: {\n i18n: req.i18n,\n locale: req.locale,\n params: req.routeParams,\n payload: req.payload,\n searchParams: req.query,\n user: req.user,\n },\n })\n\n return { component }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n req.payload.logger.error({\n err: error,\n msg: `Error rendering tab \"${tabSlug}\": ${errorMessage}`,\n })\n\n return { component: null }\n }\n}\n"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ;AAUtC,OAAO,MAAMC,gBAAA,GAGTA,CAAC;EAAEC,GAAG;EAAEC;AAAO,CAAE;EACnB,IAAI,CAACD,GAAA,CAAIE,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAS,CAAE,GAAGJ,GAAA,CAAIK,OAAO;EACjC,MAAM;IAAEC;EAAI,CAAE,GAAGN,GAAA,CAAIK,OAAO,CAACE,MAAM,CAACC,KAAK,CAACC,UAAU,EAAEC,OAAA,IAAW,CAAC;EAElE,IAAI,CAACJ,IAAA,EAAM;IACT,OAAO;MAAEK,SAAA,EAAW;IAAK;EAC3B;EAEA,MAAMC,SAAA,GAAYN,IAAA,CAAKO,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI,KAAKd,OAAA;EAElD,IAAI,CAACW,SAAA,EAAW;IACd,OAAO;MAAED,SAAA,EAAW;IAAK;EAC3B;EAEA,IAAI;IACF,MAAMA,SAAA,GAAYb,qBAAA,CAAsB;MACtCkB,SAAA,EAAWJ,SAAA,CAAUH,UAAU,CAACQ,OAAO;MACvCb,SAAA;MACAc,WAAA,EAAa;QACXC,IAAA,EAAMnB,GAAA,CAAImB,IAAI;QACdC,MAAA,EAAQpB,GAAA,CAAIoB,MAAM;QAClBC,MAAA,EAAQrB,GAAA,CAAIsB,WAAW;QACvBjB,OAAA,EAASL,GAAA,CAAIK,OAAO;QACpBkB,YAAA,EAAcvB,GAAA,CAAIwB,KAAK;QACvBtB,IAAA,EAAMF,GAAA,CAAIE;MACZ;IACF;IAEA,OAAO;MAAES;IAAU;EACrB,EAAE,OAAOc,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBtB,KAAA,GAAQsB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErEzB,GAAA,CAAIK,OAAO,CAACwB,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,wBAAwB9B,OAAA,MAAayB,YAAA;IAC5C;IAEA,OAAO;MAAEf,SAAA,EAAW;IAAK;EAC3B;AACF","ignoreList":[]}
@@ -1,24 +0,0 @@
1
- import type { Payload, PayloadRequest } from 'payload';
2
- export type HierarchyAncestryItem = {
3
- id: number | string;
4
- path: Array<{
5
- id: number | string;
6
- title: string;
7
- }>;
8
- title: string;
9
- };
10
- export type HierarchyAncestryResult = {
11
- items: HierarchyAncestryItem[];
12
- };
13
- export type GetHierarchyAncestryArgs = {
14
- hierarchySlug: string;
15
- ids: (number | string)[];
16
- payload: Payload;
17
- user?: PayloadRequest['user'];
18
- };
19
- /**
20
- * Returns full ancestry paths for hierarchy items.
21
- * Each item includes its own title and the path from root to self.
22
- */
23
- export declare function getHierarchyAncestry({ hierarchySlug, ids, payload, user, }: GetHierarchyAncestryArgs): Promise<HierarchyAncestryResult>;
24
- //# sourceMappingURL=getHierarchyAncestry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getHierarchyAncestry.d.ts","sourceRoot":"","sources":["../../src/utilities/getHierarchyAncestry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAEtD,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnD,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,qBAAqB,EAAE,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC9B,CAAA;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,aAAa,EACb,GAAG,EACH,OAAO,EACP,IAAI,GACL,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAyH7D"}
@@ -1,103 +0,0 @@
1
- /**
2
- * Returns full ancestry paths for hierarchy items.
3
- * Each item includes its own title and the path from root to self.
4
- */export async function getHierarchyAncestry({
5
- hierarchySlug,
6
- ids,
7
- payload,
8
- user
9
- }) {
10
- if (ids.length === 0) {
11
- return {
12
- items: []
13
- };
14
- }
15
- const collectionConfig = payload.collections[hierarchySlug]?.config;
16
- const hierarchyConfig = collectionConfig?.hierarchy && typeof collectionConfig.hierarchy === 'object' ? collectionConfig.hierarchy : undefined;
17
- if (!hierarchyConfig) {
18
- throw new Error(`Collection "${hierarchySlug}" is not a hierarchy`);
19
- }
20
- const parentFieldName = hierarchyConfig.parentFieldName;
21
- const useAsTitle = collectionConfig.admin?.useAsTitle || 'id';
22
- // Cache for already-fetched items to avoid redundant queries
23
- const itemCache = new Map();
24
- const fetchItem = async id => {
25
- const cached = itemCache.get(id);
26
- if (cached) {
27
- return cached;
28
- }
29
- try {
30
- const item = await payload.findByID({
31
- id,
32
- collection: hierarchySlug,
33
- depth: 0,
34
- overrideAccess: false,
35
- user
36
- });
37
- if (item) {
38
- itemCache.set(id, item);
39
- }
40
- return item;
41
- } catch {
42
- return null;
43
- }
44
- };
45
- const getTitle = (item, id) => {
46
- const rawTitle = item[useAsTitle] || item.id || id;
47
- if (rawTitle && typeof rawTitle === 'object') {
48
- return JSON.stringify(rawTitle);
49
- }
50
- if (typeof rawTitle === 'string') {
51
- return rawTitle;
52
- }
53
- if (typeof rawTitle === 'number') {
54
- return String(rawTitle);
55
- }
56
- return String(id);
57
- };
58
- const getParentId = item => {
59
- const parentValue = item[parentFieldName];
60
- if (!parentValue) {
61
- return null;
62
- }
63
- if (typeof parentValue === 'object' && parentValue !== null && 'id' in parentValue) {
64
- return parentValue.id;
65
- }
66
- return parentValue;
67
- };
68
- const buildPath = async (startItem, startId) => {
69
- const path = [];
70
- let currentItem = startItem;
71
- let currentId = startId;
72
- while (currentItem && currentId !== null) {
73
- path.unshift({
74
- id: currentId,
75
- title: getTitle(currentItem, currentId)
76
- });
77
- const nextParentId = getParentId(currentItem);
78
- if (!nextParentId) {
79
- break;
80
- }
81
- currentItem = await fetchItem(nextParentId);
82
- currentId = nextParentId;
83
- }
84
- return path;
85
- };
86
- const items = [];
87
- for (const id of ids) {
88
- const item = await fetchItem(id);
89
- if (!item) {
90
- continue;
91
- }
92
- const path = await buildPath(item, id);
93
- items.push({
94
- id,
95
- path,
96
- title: getTitle(item, id)
97
- });
98
- }
99
- return {
100
- items
101
- };
102
- }
103
- //# sourceMappingURL=getHierarchyAncestry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getHierarchyAncestry.js","names":["getHierarchyAncestry","hierarchySlug","ids","payload","user","length","items","collectionConfig","collections","config","hierarchyConfig","hierarchy","undefined","Error","parentFieldName","useAsTitle","admin","itemCache","Map","fetchItem","id","cached","get","item","findByID","collection","depth","overrideAccess","set","getTitle","rawTitle","JSON","stringify","String","getParentId","parentValue","buildPath","startItem","startId","path","currentItem","currentId","unshift","title","nextParentId","push"],"sources":["../../src/utilities/getHierarchyAncestry.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\n\nexport type HierarchyAncestryItem = {\n id: number | string\n path: Array<{ id: number | string; title: string }>\n title: string\n}\n\nexport type HierarchyAncestryResult = {\n items: HierarchyAncestryItem[]\n}\n\nexport type GetHierarchyAncestryArgs = {\n hierarchySlug: string\n ids: (number | string)[]\n payload: Payload\n user?: PayloadRequest['user']\n}\n\n/**\n * Returns full ancestry paths for hierarchy items.\n * Each item includes its own title and the path from root to self.\n */\nexport async function getHierarchyAncestry({\n hierarchySlug,\n ids,\n payload,\n user,\n}: GetHierarchyAncestryArgs): Promise<HierarchyAncestryResult> {\n if (ids.length === 0) {\n return { items: [] }\n }\n\n const collectionConfig = payload.collections[hierarchySlug]?.config\n const hierarchyConfig =\n collectionConfig?.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n\n if (!hierarchyConfig) {\n throw new Error(`Collection \"${hierarchySlug}\" is not a hierarchy`)\n }\n\n const parentFieldName = hierarchyConfig.parentFieldName\n const useAsTitle = collectionConfig.admin?.useAsTitle || 'id'\n\n // Cache for already-fetched items to avoid redundant queries\n const itemCache = new Map<number | string, Record<string, unknown>>()\n\n const fetchItem = async (id: number | string): Promise<null | Record<string, unknown>> => {\n const cached = itemCache.get(id)\n if (cached) {\n return cached\n }\n\n try {\n const item = await payload.findByID({\n id,\n collection: hierarchySlug,\n depth: 0,\n overrideAccess: false,\n user,\n })\n\n if (item) {\n itemCache.set(id, item)\n }\n\n return item\n } catch {\n return null\n }\n }\n\n const getTitle = (item: Record<string, unknown>, id: number | string): string => {\n const rawTitle = item[useAsTitle] || item.id || id\n\n if (rawTitle && typeof rawTitle === 'object') {\n return JSON.stringify(rawTitle)\n }\n\n if (typeof rawTitle === 'string') {\n return rawTitle\n }\n\n if (typeof rawTitle === 'number') {\n return String(rawTitle)\n }\n\n return String(id)\n }\n\n const getParentId = (item: Record<string, unknown>): null | number | string => {\n const parentValue = item[parentFieldName]\n\n if (!parentValue) {\n return null\n }\n\n if (typeof parentValue === 'object' && parentValue !== null && 'id' in parentValue) {\n return (parentValue as { id: number | string }).id\n }\n\n return parentValue as number | string\n }\n\n const buildPath = async (\n startItem: Record<string, unknown>,\n startId: number | string,\n ): Promise<Array<{ id: number | string; title: string }>> => {\n const path: Array<{ id: number | string; title: string }> = []\n let currentItem: null | Record<string, unknown> = startItem\n let currentId: null | number | string = startId\n\n while (currentItem && currentId !== null) {\n path.unshift({\n id: currentId,\n title: getTitle(currentItem, currentId),\n })\n\n const nextParentId = getParentId(currentItem)\n if (!nextParentId) {\n break\n }\n\n currentItem = await fetchItem(nextParentId)\n currentId = nextParentId\n }\n\n return path\n }\n\n const items: HierarchyAncestryItem[] = []\n\n for (const id of ids) {\n const item = await fetchItem(id)\n if (!item) {\n continue\n }\n\n const path = await buildPath(item, id)\n items.push({\n id,\n path,\n title: getTitle(item, id),\n })\n }\n\n return { items }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,17 +0,0 @@
1
- import type { HierarchyViewData, PayloadRequest, SanitizedCollectionConfig, SanitizedPermissions } from 'payload';
2
- /**
3
- * Fetches hierarchy data for a collection with a selected parent.
4
- * Returns data that can be rendered client-side by HierarchyTable.
5
- */
6
- export declare const handleHierarchy: ({ collectionConfig, collectionSlug, parentId, permissions, req, search, typeFilter, user, }: {
7
- collectionConfig: SanitizedCollectionConfig;
8
- collectionSlug: string;
9
- parentId: null | number | string;
10
- permissions?: SanitizedPermissions;
11
- req: PayloadRequest;
12
- search?: string;
13
- /** Filter hierarchy items by their collectionSpecific type field */
14
- typeFilter?: string[];
15
- user: PayloadRequest["user"];
16
- }) => Promise<HierarchyViewData>;
17
- //# sourceMappingURL=handleHierarchy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handleHierarchy.d.ts","sourceRoot":"","sources":["../../../src/views/List/handleHierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EAEd,yBAAyB,EACzB,oBAAoB,EAErB,MAAM,SAAS,CAAA;AAMhB;;;GAGG;AACH,eAAO,MAAM,eAAe,gGASzB;IACD,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,OAAO,CAAC,iBAAiB,CA+N5B,CAAA"}
@@ -1,243 +0,0 @@
1
- import { getTranslation } from '@payloadcms/translations';
2
- import { getAncestors } from 'payload';
3
- import { DEFAULT_HIERARCHY_LIST_LIMIT } from 'payload/shared';
4
- /**
5
- * Fetches hierarchy data for a collection with a selected parent.
6
- * Returns data that can be rendered client-side by HierarchyTable.
7
- */
8
- export const handleHierarchy = async ({
9
- collectionConfig,
10
- collectionSlug,
11
- parentId,
12
- permissions,
13
- req,
14
- search,
15
- typeFilter,
16
- user
17
- }) => {
18
- const hierarchyConfig = collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object' ? collectionConfig.hierarchy : undefined;
19
- if (!hierarchyConfig) {
20
- throw new Error('Collection is not a hierarchy');
21
- }
22
- const parentFieldName = hierarchyConfig.parentFieldName;
23
- const useAsTitle = collectionConfig.admin?.useAsTitle || 'id';
24
- // Fetch the parent item and breadcrumbs (skip for root level)
25
- let parent = null;
26
- let breadcrumbs = [];
27
- if (parentId !== null) {
28
- try {
29
- const [item, ancestors] = await Promise.all([req.payload.findByID({
30
- id: parentId,
31
- collection: collectionSlug,
32
- depth: 0,
33
- overrideAccess: false,
34
- req,
35
- user
36
- }), getAncestors({
37
- id: parentId,
38
- collectionSlug,
39
- req
40
- })]);
41
- parent = item;
42
- breadcrumbs = ancestors;
43
- } catch (_error) {
44
- req.payload.logger.warn({
45
- msg: `Hierarchy item not found: ${parentId}`
46
- });
47
- }
48
- }
49
- // Build children where clause
50
- // For root level (parentId is null), find items without a parent
51
- // For nested level, find items with this specific parent
52
- const parentCondition = parentId === null ? {
53
- or: [{
54
- [parentFieldName]: {
55
- exists: false
56
- }
57
- }, {
58
- [parentFieldName]: {
59
- equals: null
60
- }
61
- }]
62
- } : {
63
- [parentFieldName]: {
64
- equals: parentId
65
- }
66
- };
67
- // Build type filter condition if typeFilter is provided and collectionSpecific is configured
68
- // Filter to folders that allow ANY of the selected types OR are unrestricted
69
- let typeCondition;
70
- if (typeFilter && typeFilter.length > 0 && hierarchyConfig.collectionSpecific && typeof hierarchyConfig.collectionSpecific === 'object') {
71
- const typeFieldName = hierarchyConfig.collectionSpecific.fieldName;
72
- // Exclude the hierarchy collection itself from the filter (folders always show folders)
73
- const filteredTypes = typeFilter.filter(t => t !== collectionSlug);
74
- if (filteredTypes.length > 0) {
75
- typeCondition = {
76
- or: [{
77
- [typeFieldName]: {
78
- in: filteredTypes
79
- }
80
- }, {
81
- [typeFieldName]: {
82
- exists: false
83
- }
84
- }]
85
- };
86
- }
87
- }
88
- // Combine conditions: parent + search + typeFilter
89
- const conditions = [parentCondition];
90
- if (search) {
91
- conditions.push({
92
- [useAsTitle]: {
93
- like: search
94
- }
95
- });
96
- }
97
- if (typeCondition) {
98
- conditions.push(typeCondition);
99
- }
100
- const childrenWhere = conditions.length > 1 ? {
101
- and: conditions
102
- } : parentCondition;
103
- // Fetch children (hierarchy items with this parent, or root items if parentId is null)
104
- const childrenData = await req.payload.find({
105
- collection: collectionSlug,
106
- depth: 0,
107
- draft: true,
108
- fallbackLocale: false,
109
- includeLockStatus: true,
110
- limit: DEFAULT_HIERARCHY_LIST_LIMIT,
111
- locale: req.locale,
112
- overrideAccess: false,
113
- page: 1,
114
- req,
115
- user,
116
- where: childrenWhere
117
- });
118
- // Fetch related documents from other collections
119
- // At root level: show unassigned documents (where hierarchy field doesn't exist)
120
- // At nested level: show documents assigned to the selected hierarchy item
121
- const relatedDocumentsByCollection = {};
122
- // Use pre-computed relatedCollections from sanitized hierarchy config
123
- const relatedCollectionsConfig = hierarchyConfig.relatedCollections || {};
124
- for (const [relatedSlug, fieldInfo] of Object.entries(relatedCollectionsConfig)) {
125
- if (relatedSlug === collectionSlug) {
126
- continue;
127
- }
128
- const relatedCollectionConfig = req.payload.collections[relatedSlug]?.config;
129
- if (!relatedCollectionConfig) {
130
- continue;
131
- }
132
- // Check if user has read permission for this collection
133
- if (!permissions?.collections?.[relatedSlug]?.read) {
134
- continue;
135
- }
136
- const {
137
- fieldName,
138
- hasMany
139
- } = fieldInfo;
140
- // Build where clause based on whether we're at root or nested level
141
- let relationshipWhere;
142
- if (parentId === null) {
143
- // Root level: find documents where hierarchy field doesn't exist, is null, or is empty array
144
- const conditions = [{
145
- [fieldName]: {
146
- exists: false
147
- }
148
- }, {
149
- [fieldName]: {
150
- equals: null
151
- }
152
- }];
153
- if (hasMany) {
154
- // hasMany fields store cleared values as empty arrays
155
- conditions.push({
156
- [fieldName]: {
157
- equals: []
158
- }
159
- });
160
- }
161
- relationshipWhere = {
162
- or: conditions
163
- };
164
- } else {
165
- // Nested level: find documents assigned to this hierarchy item
166
- // "in" operator works for both hasMany and single relationship fields
167
- relationshipWhere = {
168
- [fieldName]: {
169
- in: [parentId]
170
- }
171
- };
172
- }
173
- // Add search filter if provided
174
- const relatedUseAsTitle = relatedCollectionConfig.admin?.useAsTitle || 'id';
175
- const where = search ? {
176
- and: [relationshipWhere, {
177
- [relatedUseAsTitle]: {
178
- like: search
179
- }
180
- }]
181
- } : relationshipWhere;
182
- try {
183
- const data = await req.payload.find({
184
- collection: relatedSlug,
185
- depth: 0,
186
- draft: true,
187
- fallbackLocale: false,
188
- includeLockStatus: true,
189
- limit: DEFAULT_HIERARCHY_LIST_LIMIT,
190
- locale: req.locale,
191
- overrideAccess: false,
192
- page: 1,
193
- req,
194
- user,
195
- where
196
- });
197
- if (data.totalDocs > 0) {
198
- relatedDocumentsByCollection[relatedSlug] = {
199
- hasMany,
200
- label: getTranslation(relatedCollectionConfig.labels?.plural, req.i18n),
201
- result: data
202
- };
203
- }
204
- } catch (error) {
205
- req.payload.logger.warn({
206
- err: error,
207
- msg: `Failed to query related collection ${relatedSlug}`
208
- });
209
- }
210
- }
211
- // Extract allowed collections from parent's collectionSpecific field
212
- // - undefined: collectionSpecific not configured, no filtering needed
213
- // - []: parent folder accepts everything, can only move to unrestricted destinations
214
- // - [{ slug, label }, ...]: parent folder has restrictions
215
- let allowedCollections;
216
- if (hierarchyConfig.collectionSpecific && parent) {
217
- const typeFieldName = hierarchyConfig.collectionSpecific.fieldName;
218
- const typeValues = parent[typeFieldName];
219
- if (typeValues && typeValues.length > 0) {
220
- allowedCollections = typeValues.map(slug => {
221
- const config = req.payload.collections[slug]?.config;
222
- const label = config ? getTranslation(config.labels?.plural, req.i18n) : slug;
223
- return {
224
- slug,
225
- label
226
- };
227
- });
228
- } else {
229
- // Parent folder accepts everything (type is null or empty)
230
- allowedCollections = [];
231
- }
232
- }
233
- return {
234
- allowedCollections,
235
- breadcrumbs,
236
- childrenData,
237
- parent,
238
- parentFieldName,
239
- parentId,
240
- relatedDocumentsByCollection
241
- };
242
- };
243
- //# sourceMappingURL=handleHierarchy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handleHierarchy.js","names":["getTranslation","getAncestors","DEFAULT_HIERARCHY_LIST_LIMIT","handleHierarchy","collectionConfig","collectionSlug","parentId","permissions","req","search","typeFilter","user","hierarchyConfig","hierarchy","undefined","Error","parentFieldName","useAsTitle","admin","parent","breadcrumbs","item","ancestors","Promise","all","payload","findByID","id","collection","depth","overrideAccess","_error","logger","warn","msg","parentCondition","or","exists","equals","typeCondition","length","collectionSpecific","typeFieldName","fieldName","filteredTypes","filter","t","in","conditions","push","like","childrenWhere","and","childrenData","find","draft","fallbackLocale","includeLockStatus","limit","locale","page","where","relatedDocumentsByCollection","relatedCollectionsConfig","relatedCollections","relatedSlug","fieldInfo","Object","entries","relatedCollectionConfig","collections","config","read","hasMany","relationshipWhere","relatedUseAsTitle","data","totalDocs","label","labels","plural","i18n","result","error","err","allowedCollections","typeValues","map","slug"],"sources":["../../../src/views/List/handleHierarchy.ts"],"sourcesContent":["import type {\n HierarchyViewData,\n PayloadRequest,\n RelatedDocumentsGrouped,\n SanitizedCollectionConfig,\n SanitizedPermissions,\n TypeWithID,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getAncestors } from 'payload'\nimport { DEFAULT_HIERARCHY_LIST_LIMIT } from 'payload/shared'\n\n/**\n * Fetches hierarchy data for a collection with a selected parent.\n * Returns data that can be rendered client-side by HierarchyTable.\n */\nexport const handleHierarchy = async ({\n collectionConfig,\n collectionSlug,\n parentId,\n permissions,\n req,\n search,\n typeFilter,\n user,\n}: {\n collectionConfig: SanitizedCollectionConfig\n collectionSlug: string\n parentId: null | number | string\n permissions?: SanitizedPermissions\n req: PayloadRequest\n search?: string\n /** Filter hierarchy items by their collectionSpecific type field */\n typeFilter?: string[]\n user: PayloadRequest['user']\n}): Promise<HierarchyViewData> => {\n const hierarchyConfig =\n collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n\n if (!hierarchyConfig) {\n throw new Error('Collection is not a hierarchy')\n }\n\n const parentFieldName = hierarchyConfig.parentFieldName\n\n const useAsTitle = collectionConfig.admin?.useAsTitle || 'id'\n\n // Fetch the parent item and breadcrumbs (skip for root level)\n let parent: null | (Record<string, unknown> & TypeWithID) = null\n let breadcrumbs: Array<{ id: number | string; title: string }> = []\n\n if (parentId !== null) {\n try {\n const [item, ancestors] = await Promise.all([\n req.payload.findByID({\n id: parentId,\n collection: collectionSlug,\n depth: 0,\n overrideAccess: false,\n req,\n user,\n }),\n getAncestors({\n id: parentId,\n collectionSlug,\n req,\n }),\n ])\n\n parent = item\n breadcrumbs = ancestors\n } catch (_error) {\n req.payload.logger.warn({\n msg: `Hierarchy item not found: ${parentId}`,\n })\n }\n }\n\n // Build children where clause\n // For root level (parentId is null), find items without a parent\n // For nested level, find items with this specific parent\n const parentCondition =\n parentId === null\n ? {\n or: [{ [parentFieldName]: { exists: false } }, { [parentFieldName]: { equals: null } }],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build type filter condition if typeFilter is provided and collectionSpecific is configured\n // Filter to folders that allow ANY of the selected types OR are unrestricted\n let typeCondition: Record<string, unknown> | undefined\n\n if (\n typeFilter &&\n typeFilter.length > 0 &&\n hierarchyConfig.collectionSpecific &&\n typeof hierarchyConfig.collectionSpecific === 'object'\n ) {\n const typeFieldName = hierarchyConfig.collectionSpecific.fieldName\n // Exclude the hierarchy collection itself from the filter (folders always show folders)\n const filteredTypes = typeFilter.filter((t) => t !== collectionSlug)\n\n if (filteredTypes.length > 0) {\n typeCondition = {\n or: [\n { [typeFieldName]: { in: filteredTypes } },\n { [typeFieldName]: { exists: false } }, // Include unrestricted folders\n ],\n }\n }\n }\n\n // Combine conditions: parent + search + typeFilter\n const conditions: Record<string, unknown>[] = [parentCondition]\n\n if (search) {\n conditions.push({ [useAsTitle]: { like: search } })\n }\n\n if (typeCondition) {\n conditions.push(typeCondition)\n }\n\n const childrenWhere = conditions.length > 1 ? { and: conditions } : parentCondition\n\n // Fetch children (hierarchy items with this parent, or root items if parentId is null)\n const childrenData = await req.payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n includeLockStatus: true,\n limit: DEFAULT_HIERARCHY_LIST_LIMIT,\n locale: req.locale,\n overrideAccess: false,\n page: 1,\n req,\n user,\n where: childrenWhere,\n })\n\n // Fetch related documents from other collections\n // At root level: show unassigned documents (where hierarchy field doesn't exist)\n // At nested level: show documents assigned to the selected hierarchy item\n const relatedDocumentsByCollection: RelatedDocumentsGrouped = {}\n\n // Use pre-computed relatedCollections from sanitized hierarchy config\n const relatedCollectionsConfig = hierarchyConfig.relatedCollections || {}\n\n for (const [relatedSlug, fieldInfo] of Object.entries(relatedCollectionsConfig)) {\n if (relatedSlug === collectionSlug) {\n continue\n }\n\n const relatedCollectionConfig = req.payload.collections[relatedSlug]?.config\n if (!relatedCollectionConfig) {\n continue\n }\n\n // Check if user has read permission for this collection\n if (!permissions?.collections?.[relatedSlug]?.read) {\n continue\n }\n\n const { fieldName, hasMany } = fieldInfo\n\n // Build where clause based on whether we're at root or nested level\n let relationshipWhere: Record<string, unknown>\n\n if (parentId === null) {\n // Root level: find documents where hierarchy field doesn't exist, is null, or is empty array\n const conditions: Record<string, unknown>[] = [\n { [fieldName]: { exists: false } },\n { [fieldName]: { equals: null } },\n ]\n if (hasMany) {\n // hasMany fields store cleared values as empty arrays\n conditions.push({ [fieldName]: { equals: [] } })\n }\n relationshipWhere = { or: conditions }\n } else {\n // Nested level: find documents assigned to this hierarchy item\n // \"in\" operator works for both hasMany and single relationship fields\n relationshipWhere = {\n [fieldName]: { in: [parentId] },\n }\n }\n\n // Add search filter if provided\n const relatedUseAsTitle = relatedCollectionConfig.admin?.useAsTitle || 'id'\n const where = search\n ? { and: [relationshipWhere, { [relatedUseAsTitle]: { like: search } }] }\n : relationshipWhere\n\n try {\n const data = await req.payload.find({\n collection: relatedSlug,\n depth: 0,\n draft: true,\n fallbackLocale: false,\n includeLockStatus: true,\n limit: DEFAULT_HIERARCHY_LIST_LIMIT,\n locale: req.locale,\n overrideAccess: false,\n page: 1,\n req,\n user,\n where,\n })\n\n if (data.totalDocs > 0) {\n relatedDocumentsByCollection[relatedSlug] = {\n hasMany,\n label: getTranslation(relatedCollectionConfig.labels?.plural, req.i18n),\n result: data,\n }\n }\n } catch (error) {\n req.payload.logger.warn({\n err: error,\n msg: `Failed to query related collection ${relatedSlug}`,\n })\n }\n }\n\n // Extract allowed collections from parent's collectionSpecific field\n // - undefined: collectionSpecific not configured, no filtering needed\n // - []: parent folder accepts everything, can only move to unrestricted destinations\n // - [{ slug, label }, ...]: parent folder has restrictions\n let allowedCollections: Array<{ label: string; slug: string }> | undefined\n\n if (hierarchyConfig.collectionSpecific && parent) {\n const typeFieldName = hierarchyConfig.collectionSpecific.fieldName\n const typeValues = parent[typeFieldName] as null | string[] | undefined\n\n if (typeValues && typeValues.length > 0) {\n allowedCollections = typeValues.map((slug) => {\n const config = req.payload.collections[slug]?.config\n const label = config ? getTranslation(config.labels?.plural, req.i18n) : slug\n return { slug, label }\n })\n } else {\n // Parent folder accepts everything (type is null or empty)\n allowedCollections = []\n }\n }\n\n return {\n allowedCollections,\n breadcrumbs,\n childrenData,\n parent,\n parentFieldName,\n parentId,\n relatedDocumentsByCollection,\n }\n}\n"],"mappings":"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","ignoreList":[]}