@payloadcms/ui 3.43.0-canary.7 → 3.43.0-internal.693bd81

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 (111) hide show
  1. package/dist/elements/AddNewRelation/index.js +8 -9
  2. package/dist/elements/AddNewRelation/index.js.map +1 -1
  3. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  4. package/dist/elements/BulkUpload/FileSidebar/index.js +0 -1
  5. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  6. package/dist/elements/Drawer/index.d.ts.map +1 -1
  7. package/dist/elements/Drawer/index.js +67 -51
  8. package/dist/elements/Drawer/index.js.map +1 -1
  9. package/dist/elements/FolderView/CollectionTypePill/index.d.ts.map +1 -1
  10. package/dist/elements/FolderView/CollectionTypePill/index.js +10 -13
  11. package/dist/elements/FolderView/CollectionTypePill/index.js.map +1 -1
  12. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +1 -1
  13. package/dist/elements/FolderView/CurrentFolderActions/index.js +11 -17
  14. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -1
  15. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts +3 -1
  16. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts.map +1 -1
  17. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +4 -7
  18. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +1 -1
  19. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +0 -1
  20. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -1
  21. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +201 -230
  22. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  23. package/dist/elements/FolderView/FolderFileCard/index.d.ts +0 -8
  24. package/dist/elements/FolderView/FolderFileCard/index.d.ts.map +1 -1
  25. package/dist/elements/FolderView/FolderFileCard/index.js +0 -82
  26. package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
  27. package/dist/elements/FolderView/FolderFileTable/index.d.ts +22 -1
  28. package/dist/elements/FolderView/FolderFileTable/index.d.ts.map +1 -1
  29. package/dist/elements/FolderView/FolderFileTable/index.js +163 -245
  30. package/dist/elements/FolderView/FolderFileTable/index.js.map +1 -1
  31. package/dist/elements/FolderView/ItemCardGrid/index.d.ts +8 -2
  32. package/dist/elements/FolderView/ItemCardGrid/index.d.ts.map +1 -1
  33. package/dist/elements/FolderView/ItemCardGrid/index.js +90 -24
  34. package/dist/elements/FolderView/ItemCardGrid/index.js.map +1 -1
  35. package/dist/elements/FolderView/SortByPill/index.d.ts.map +1 -1
  36. package/dist/elements/FolderView/SortByPill/index.js +15 -17
  37. package/dist/elements/FolderView/SortByPill/index.js.map +1 -1
  38. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerCreateNewDocButton.js +0 -1
  39. package/dist/elements/ListHeader/DrawerTitleActions/ListDrawerCreateNewDocButton.js.map +1 -1
  40. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +1 -1
  41. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +10 -8
  42. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +1 -1
  43. package/dist/elements/ListHeader/index.scss +1 -1
  44. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +0 -1
  45. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
  46. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js +0 -1
  47. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js.map +1 -1
  48. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  49. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +0 -1
  50. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  51. package/dist/elements/QueryPresets/fields/WhereField/index.js +0 -1
  52. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  53. package/dist/elements/RelationshipTable/index.d.ts +0 -1
  54. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  55. package/dist/elements/RelationshipTable/index.js +1 -3
  56. package/dist/elements/RelationshipTable/index.js.map +1 -1
  57. package/dist/elements/SelectMany/index.d.ts.map +1 -1
  58. package/dist/elements/SelectMany/index.js +0 -1
  59. package/dist/elements/SelectMany/index.js.map +1 -1
  60. package/dist/elements/Table/index.js +2 -2
  61. package/dist/elements/Table/index.js.map +1 -1
  62. package/dist/exports/client/index.js +22 -22
  63. package/dist/exports/client/index.js.map +4 -4
  64. package/dist/exports/rsc/index.d.ts +0 -1
  65. package/dist/exports/rsc/index.d.ts.map +1 -1
  66. package/dist/exports/rsc/index.js +0 -1
  67. package/dist/exports/rsc/index.js.map +1 -1
  68. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  69. package/dist/fields/FieldLabel/index.js +1 -2
  70. package/dist/fields/FieldLabel/index.js.map +1 -1
  71. package/dist/fields/Join/index.d.ts.map +1 -1
  72. package/dist/fields/Join/index.js +0 -1
  73. package/dist/fields/Join/index.js.map +1 -1
  74. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  75. package/dist/fields/Relationship/Input.js +0 -1
  76. package/dist/fields/Relationship/Input.js.map +1 -1
  77. package/dist/providers/Folders/index.d.ts +46 -59
  78. package/dist/providers/Folders/index.d.ts.map +1 -1
  79. package/dist/providers/Folders/index.js +572 -163
  80. package/dist/providers/Folders/index.js.map +1 -1
  81. package/dist/providers/ServerFunctions/index.d.ts +1 -6
  82. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  83. package/dist/providers/ServerFunctions/index.js +0 -19
  84. package/dist/providers/ServerFunctions/index.js.map +1 -1
  85. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  86. package/dist/providers/TableColumns/buildColumnState/renderCell.js +2 -1
  87. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  88. package/dist/providers/TableColumns/index.js +0 -1
  89. package/dist/providers/TableColumns/index.js.map +1 -1
  90. package/dist/styles.css +1 -1
  91. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  92. package/dist/utilities/generateFieldID.js +1 -4
  93. package/dist/utilities/generateFieldID.js.map +1 -1
  94. package/dist/utilities/renderTable.js +0 -1
  95. package/dist/utilities/renderTable.js.map +1 -1
  96. package/dist/views/BrowseByFolder/index.d.ts +4 -1
  97. package/dist/views/BrowseByFolder/index.d.ts.map +1 -1
  98. package/dist/views/BrowseByFolder/index.js +158 -219
  99. package/dist/views/BrowseByFolder/index.js.map +1 -1
  100. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -1
  101. package/dist/views/CollectionFolder/ListSelection/index.js +50 -25
  102. package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
  103. package/dist/views/CollectionFolder/index.d.ts +1 -1
  104. package/dist/views/CollectionFolder/index.d.ts.map +1 -1
  105. package/dist/views/CollectionFolder/index.js +153 -186
  106. package/dist/views/CollectionFolder/index.js.map +1 -1
  107. package/package.json +5 -5
  108. package/dist/utilities/getFolderResultsComponentAndData.d.ts +0 -29
  109. package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +0 -1
  110. package/dist/utilities/getFolderResultsComponentAndData.js +0 -128
  111. package/dist/utilities/getFolderResultsComponentAndData.js.map +0 -1
@@ -1,68 +1,82 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
- import { useRouter, useSearchParams } from 'next/navigation.js';
4
+ import { useRouter } from 'next/navigation.js';
5
5
  import { extractID, formatAdminURL, formatFolderOrDocumentItem } from 'payload/shared';
6
6
  import * as qs from 'qs-esm';
7
7
  import React from 'react';
8
8
  import { toast } from 'sonner';
9
9
  import { useDrawerDepth } from '../../elements/Drawer/index.js';
10
- import { parseSearchParams } from '../../utilities/parseSearchParams.js';
11
10
  import { useConfig } from '../Config/index.js';
12
11
  import { useRouteTransition } from '../RouteTransition/index.js';
13
12
  import { useTranslation } from '../Translation/index.js';
14
13
  import { getMetaSelection, getShiftSelection, groupItemIDsByRelation } from './selection.js';
15
14
  const Context = /*#__PURE__*/React.createContext({
16
- activeCollectionFolderSlugs: [],
17
- allCollectionFolderSlugs: [],
18
- allowCreateCollectionSlugs: [],
15
+ addItems: () => {},
19
16
  breadcrumbs: [],
20
17
  clearSelections: () => {},
21
18
  currentFolder: null,
22
19
  documents: [],
20
+ filterItems: () => undefined,
23
21
  focusedRowIndex: -1,
24
22
  folderCollectionConfig: null,
25
23
  folderCollectionSlug: '',
24
+ folderCollectionSlugs: [],
26
25
  folderFieldName: 'folder',
27
26
  folderID: undefined,
28
- FolderResultsComponent: null,
29
- getFolderRoute: () => '',
30
27
  getSelectedItems: () => [],
31
28
  isDragging: false,
32
- itemKeysToMove: undefined,
33
29
  lastSelectedIndex: null,
34
30
  moveToFolder: () => Promise.resolve(undefined),
35
31
  onItemClick: () => undefined,
36
32
  onItemKeyPress: () => undefined,
37
- refineFolderData: () => undefined,
33
+ removeItems: () => undefined,
34
+ renameFolder: () => undefined,
38
35
  search: '',
39
- selectedItemKeys: new Set(),
36
+ selectedIndexes: new Set(),
40
37
  setBreadcrumbs: () => {},
41
38
  setFocusedRowIndex: () => -1,
39
+ setFolderID: () => null,
42
40
  setIsDragging: () => false,
43
- sort: '_folderOrDocumentTitle',
44
- subfolders: []
41
+ sortAndUpdateState: () => undefined,
42
+ sortDirection: 'asc',
43
+ sortOn: '_folderOrDocumentTitle',
44
+ subfolders: [],
45
+ visibleCollectionSlugs: []
45
46
  });
47
+ function filterOutItems({
48
+ items,
49
+ relationTo,
50
+ search
51
+ }) {
52
+ if (typeof search !== 'string' && relationTo === undefined) {
53
+ return items;
54
+ }
55
+ const searchLower = (search || '').toLowerCase();
56
+ return items.filter(item => {
57
+ const itemTitle = item.value._folderOrDocumentTitle.toLowerCase();
58
+ const itemRelationTo = item.relationTo;
59
+ return (relationTo ? relationTo.includes(itemRelationTo) : true) && (!searchLower || itemTitle.includes(searchLower));
60
+ });
61
+ }
46
62
  export function FolderProvider({
47
- activeCollectionFolderSlugs: activeCollectionSlugs,
48
- allCollectionFolderSlugs = [],
49
- allowCreateCollectionSlugs,
50
63
  allowMultiSelection = true,
51
- baseFolderPath,
52
64
  breadcrumbs: _breadcrumbsFromProps = [],
53
65
  children,
54
- documents,
66
+ collectionSlug,
67
+ documents: allDocumentsFromProps = [],
68
+ filteredCollectionSlugs,
69
+ folderCollectionSlugs = [],
55
70
  folderFieldName,
56
- folderID,
57
- FolderResultsComponent: InitialFolderResultsComponent,
58
- onItemClick: onItemClickFromProps,
59
- search,
60
- sort = '_folderOrDocumentTitle',
61
- subfolders
71
+ folderID: _folderIDFromProps = undefined,
72
+ search: _searchFromProps,
73
+ sort,
74
+ subfolders: subfoldersFromProps = []
62
75
  }) {
63
76
  const parentFolderContext = useFolder();
64
77
  const {
65
- config
78
+ config,
79
+ getEntityConfig
66
80
  } = useConfig();
67
81
  const {
68
82
  routes,
@@ -76,102 +90,154 @@ export function FolderProvider({
76
90
  const {
77
91
  startRouteTransition
78
92
  } = useRouteTransition();
79
- const [FolderResultsComponent, setFolderResultsComponent] = React.useState(InitialFolderResultsComponent || (() => null));
80
93
  const [folderCollectionConfig] = React.useState(() => config.collections.find(collection => config.folders && collection.slug === config.folders.slug));
81
94
  const folderCollectionSlug = folderCollectionConfig.slug;
82
- const rawSearchParams = useSearchParams();
83
- const searchParams = React.useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams]);
84
- const [currentQuery, setCurrentQuery] = React.useState(searchParams);
85
95
  const [isDragging, setIsDragging] = React.useState(false);
86
- const [selectedItemKeys, setSelectedItemKeys] = React.useState(() => new Set());
96
+ const [selectedIndexes, setSelectedIndexes] = React.useState(() => new Set());
87
97
  const [focusedRowIndex, setFocusedRowIndex] = React.useState(-1);
88
98
  const [lastSelectedIndex, setLastSelectedIndex] = React.useState(null);
99
+ const [visibleCollectionSlugs, setVisibleCollectionSlugs] = React.useState(filteredCollectionSlugs || [...folderCollectionSlugs, folderCollectionSlug]);
100
+ const [activeFolderID, setActiveFolderID] = React.useState(_folderIDFromProps);
89
101
  const [breadcrumbs, setBreadcrumbs] = React.useState(_breadcrumbsFromProps);
102
+ const [allSubfolders, setAllSubfolders] = React.useState(subfoldersFromProps);
103
+ const [subfolders, setSubfolders] = React.useState(() => {
104
+ return filterOutItems({
105
+ items: allSubfolders,
106
+ relationTo: visibleCollectionSlugs.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],
107
+ search: _searchFromProps
108
+ });
109
+ });
110
+ const [allDocuments, setAllDocuments] = React.useState(allDocumentsFromProps);
111
+ const [documents, setDocuments] = React.useState(() => filterOutItems({
112
+ items: allDocuments,
113
+ relationTo: visibleCollectionSlugs,
114
+ search: _searchFromProps
115
+ }));
116
+ const [search, setSearch] = React.useState(_searchFromProps);
117
+ const [baseFolderPath] = React.useState(() => {
118
+ if (collectionSlug) {
119
+ return `/collections/${collectionSlug}/${folderCollectionSlug}`;
120
+ } else {
121
+ return config.admin.routes.browseByFolder;
122
+ }
123
+ });
124
+ const [sortDirection, setSortDirection] = React.useState(() => {
125
+ if (sort) {
126
+ return sort.startsWith('-') ? 'desc' : 'asc';
127
+ }
128
+ return 'asc';
129
+ });
130
+ const [sortOn, setSortOn] = React.useState(() => {
131
+ if (sort) {
132
+ return sort.replace(/^-/, '');
133
+ }
134
+ return '_folderOrDocumentTitle';
135
+ });
90
136
  const lastClickTime = React.useRef(null);
91
137
  const totalCount = subfolders.length + documents.length;
138
+ const formatFolderURL = React.useCallback(args => {
139
+ const newFolderID = 'folderID' in args ? args.folderID : activeFolderID;
140
+ const params = {
141
+ relationTo: 'relationTo' in args ? args.relationTo : collectionSlug ? undefined : visibleCollectionSlugs,
142
+ search: 'search' in args ? args.search : search,
143
+ sortBy: 'sortBy' in args ? args.sortBy : sortOn,
144
+ sortDirection: 'sortDirection' in args ? args.sortDirection : sortDirection
145
+ };
146
+ return formatAdminURL({
147
+ adminRoute: config.routes.admin,
148
+ path: `${baseFolderPath}${newFolderID ? `/${newFolderID}` : ''}${qs.stringify(params, {
149
+ addQueryPrefix: true
150
+ })}`
151
+ });
152
+ }, [activeFolderID, baseFolderPath, collectionSlug, config.routes.admin, search, sortDirection, sortOn, visibleCollectionSlugs]);
92
153
  const clearSelections = React.useCallback(() => {
93
154
  setFocusedRowIndex(-1);
94
- setSelectedItemKeys(new Set());
155
+ setSelectedIndexes(new Set());
95
156
  setLastSelectedIndex(undefined);
96
157
  }, []);
97
- const mergeQuery = React.useCallback((newQuery = {}) => {
98
- let page = 'page' in newQuery ? newQuery.page : currentQuery?.page;
99
- if ('search' in newQuery) {
100
- page = '1';
101
- }
102
- const mergedQuery = {
103
- ...currentQuery,
104
- ...newQuery,
105
- page,
106
- search: 'search' in newQuery ? newQuery.search : currentQuery?.search,
107
- sort: 'sort' in newQuery ? newQuery.sort : currentQuery?.sort ?? undefined
108
- };
109
- return mergedQuery;
110
- }, [currentQuery]);
111
- const refineFolderData = React.useCallback(({
112
- query,
113
- updateURL
158
+ /**
159
+ * Used to populate drawer data.
160
+ *
161
+ * This is used when the user navigates to a folder.
162
+ */
163
+ const getFolderData = React.useCallback(async ({
164
+ folderID,
165
+ search: _search = undefined
114
166
  }) => {
115
- if (updateURL) {
116
- const newQuery_0 = mergeQuery(query);
117
- startRouteTransition(() => router.replace(`${qs.stringify(newQuery_0, {
118
- addQueryPrefix: true
119
- })}`));
120
- setCurrentQuery(newQuery_0);
121
- }
122
- }, [mergeQuery, router, startRouteTransition]);
123
- const getFolderRoute = React.useCallback(toFolderID => {
124
- const newQuery_1 = mergeQuery({
125
- page: '1',
126
- search: ''
167
+ // if folderID is not set, we want to search all documents
168
+ const searchFilter = !folderID ? ((typeof _search === 'string' ? _search : search) || '').trim() : undefined;
169
+ const query = qs.stringify({
170
+ collectionSlug,
171
+ folderID,
172
+ search: searchFilter
173
+ }, {
174
+ addQueryPrefix: true
127
175
  });
128
- return formatAdminURL({
129
- adminRoute: config.routes.admin,
130
- path: `${baseFolderPath}${toFolderID ? `/${toFolderID}` : ''}${qs.stringify(newQuery_1, {
131
- addQueryPrefix: true
132
- })}`,
133
- serverURL: config.serverURL
176
+ const folderDataReq = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/populate-folder-data${query}`, {
177
+ credentials: 'include',
178
+ headers: {
179
+ 'content-type': 'application/json'
180
+ }
134
181
  });
135
- }, [baseFolderPath, config.routes.admin, config.serverURL, mergeQuery]);
136
- const getItem = React.useCallback(itemKey => {
137
- return [...subfolders, ...documents].find(doc => doc.itemKey === itemKey);
138
- }, [documents, subfolders]);
182
+ if (folderDataReq.status === 200) {
183
+ const folderDataRes = await folderDataReq.json();
184
+ setAllSubfolders(folderDataRes.subfolders || []);
185
+ setAllDocuments(folderDataRes.documents || []);
186
+ return folderDataRes;
187
+ } else {
188
+ return {
189
+ breadcrumbs: [],
190
+ documents: [],
191
+ subfolders: []
192
+ };
193
+ }
194
+ }, [folderCollectionSlug, search, routes.api, serverURL, collectionSlug]);
195
+ const setNewActiveFolderID = React.useCallback(async ({
196
+ folderID: toFolderID
197
+ }) => {
198
+ clearSelections();
199
+ if (drawerDepth === 1) {
200
+ // not in a drawer (default is 1)
201
+ startRouteTransition(() => router.push(formatFolderURL({
202
+ folderID: toFolderID
203
+ })));
204
+ } else {
205
+ const folderDataRes_0 = await getFolderData({
206
+ folderID: toFolderID
207
+ });
208
+ setBreadcrumbs(folderDataRes_0?.breadcrumbs || []);
209
+ setSubfolders(folderDataRes_0?.subfolders || []);
210
+ setDocuments(folderDataRes_0?.documents || []);
211
+ setActiveFolderID(toFolderID);
212
+ }
213
+ }, [clearSelections, drawerDepth, startRouteTransition, router, formatFolderURL, getFolderData]);
139
214
  const getSelectedItems = React.useCallback(() => {
140
- return Array.from(selectedItemKeys).reduce((acc, itemKey_0) => {
141
- const item = getItem(itemKey_0);
215
+ return Array.from(selectedIndexes).reduce((acc, index) => {
216
+ const item = [...subfolders, ...documents][index];
142
217
  if (item) {
143
218
  acc.push(item);
144
219
  }
145
220
  return acc;
146
221
  }, []);
147
- }, [selectedItemKeys, getItem]);
148
- const navigateAfterSelection = React.useCallback(({
149
- collectionSlug,
222
+ }, [documents, selectedIndexes, subfolders]);
223
+ const navigateAfterSelection = React.useCallback(async ({
224
+ collectionSlug: collectionSlug_0,
150
225
  docID
151
226
  }) => {
152
- if (drawerDepth === 1) {
153
- // not in a drawer (default is 1)
154
- clearSelections();
155
- if (collectionSlug === folderCollectionSlug) {
156
- // clicked on folder, take the user to the folder view
157
- startRouteTransition(() => router.push(getFolderRoute(docID)));
158
- } else if (collectionSlug) {
159
- // clicked on document, take the user to the documet view
160
- startRouteTransition(() => {
161
- router.push(formatAdminURL({
162
- adminRoute: config.routes.admin,
163
- path: `/collections/${collectionSlug}/${docID}`
164
- }));
165
- });
166
- }
167
- }
168
- if (typeof onItemClickFromProps === 'function') {
169
- onItemClickFromProps(getItem(`${collectionSlug}-${docID}`));
227
+ if (collectionSlug_0 === folderCollectionSlug) {
228
+ await setNewActiveFolderID({
229
+ folderID: docID
230
+ });
231
+ } else if (collectionSlug_0) {
232
+ router.push(formatAdminURL({
233
+ adminRoute: config.routes.admin,
234
+ path: `/collections/${collectionSlug_0}/${docID}`
235
+ }));
170
236
  }
171
- }, [clearSelections, config.routes.admin, drawerDepth, folderCollectionSlug, getFolderRoute, getItem, onItemClickFromProps, router, startRouteTransition]);
172
- const onItemKeyPress = React.useCallback(({
237
+ }, [setNewActiveFolderID, folderCollectionSlug, router, config.routes.admin]);
238
+ const onItemKeyPress = React.useCallback(async ({
173
239
  event,
174
- index,
240
+ index: index_0,
175
241
  item: item_0
176
242
  }) => {
177
243
  const {
@@ -182,12 +248,12 @@ export function FolderProvider({
182
248
  } = event;
183
249
  const isShiftPressed = shiftKey;
184
250
  const isCtrlPressed = ctrlKey || metaKey;
185
- let newSelectedIndexes = undefined;
251
+ let newSelectedIndexes = selectedIndexes;
186
252
  switch (code) {
187
253
  case 'ArrowDown':
188
254
  {
189
255
  event.preventDefault();
190
- const nextIndex_0 = Math.min(index + 1, totalCount - 1);
256
+ const nextIndex_0 = Math.min(index_0 + 1, totalCount - 1);
191
257
  setFocusedRowIndex(nextIndex_0);
192
258
  if (isCtrlPressed) {
193
259
  break;
@@ -206,7 +272,7 @@ export function FolderProvider({
206
272
  case 'ArrowUp':
207
273
  {
208
274
  event.preventDefault();
209
- const prevIndex_0 = Math.max(index - 1, 0);
275
+ const prevIndex_0 = Math.max(index_0 - 1, 0);
210
276
  setFocusedRowIndex(prevIndex_0);
211
277
  if (isCtrlPressed) {
212
278
  break;
@@ -224,7 +290,7 @@ export function FolderProvider({
224
290
  }
225
291
  case 'Enter':
226
292
  {
227
- if (selectedItemKeys.size === 1) {
293
+ if (selectedIndexes.size === 1) {
228
294
  newSelectedIndexes = new Set([]);
229
295
  setFocusedRowIndex(undefined);
230
296
  }
@@ -233,6 +299,7 @@ export function FolderProvider({
233
299
  case 'Escape':
234
300
  {
235
301
  setFocusedRowIndex(undefined);
302
+ setSelectedIndexes(new Set([]));
236
303
  newSelectedIndexes = new Set([]);
237
304
  break;
238
305
  }
@@ -253,57 +320,49 @@ export function FolderProvider({
253
320
  event.preventDefault();
254
321
  newSelectedIndexes = getMetaSelection({
255
322
  currentSelection: newSelectedIndexes,
256
- toggleIndex: index
323
+ toggleIndex: index_0
257
324
  });
258
- setLastSelectedIndex(index);
325
+ setLastSelectedIndex(index_0);
259
326
  } else {
260
327
  event.preventDefault();
261
- newSelectedIndexes = new Set([index]);
262
- setLastSelectedIndex(index);
328
+ newSelectedIndexes = new Set([index_0]);
329
+ setLastSelectedIndex(index_0);
263
330
  }
264
331
  break;
265
332
  }
266
333
  case 'Tab':
267
334
  {
268
335
  if (allowMultiSelection && isShiftPressed) {
269
- const prevIndex = index - 1;
270
- if (prevIndex < 0 && newSelectedIndexes?.size > 0) {
336
+ const prevIndex = index_0 - 1;
337
+ if (prevIndex < 0 && newSelectedIndexes.size > 0) {
271
338
  setFocusedRowIndex(prevIndex);
272
339
  }
273
340
  } else {
274
- const nextIndex = index + 1;
275
- if (nextIndex === totalCount && selectedItemKeys.size > 0) {
341
+ const nextIndex = index_0 + 1;
342
+ if (nextIndex === totalCount && newSelectedIndexes.size > 0) {
276
343
  setFocusedRowIndex(totalCount - 1);
277
344
  }
278
345
  }
279
346
  break;
280
347
  }
281
348
  }
282
- if (!newSelectedIndexes) {
283
- return;
284
- }
285
- setSelectedItemKeys([...subfolders, ...documents].reduce((acc_0, item_1, index_0) => {
286
- if (newSelectedIndexes?.size && newSelectedIndexes.has(index_0)) {
287
- acc_0.add(item_1.itemKey);
288
- }
289
- return acc_0;
290
- }, new Set()));
291
- if (selectedItemKeys.size === 1 && code === 'Enter') {
292
- navigateAfterSelection({
349
+ setSelectedIndexes(newSelectedIndexes);
350
+ if (selectedIndexes.size === 1 && code === 'Enter') {
351
+ await navigateAfterSelection({
293
352
  collectionSlug: item_0.relationTo,
294
353
  docID: extractID(item_0.value)
295
354
  });
296
355
  }
297
- }, [allowMultiSelection, documents, lastSelectedIndex, navigateAfterSelection, subfolders, totalCount, selectedItemKeys]);
298
- const onItemClick = React.useCallback(({
356
+ }, [allowMultiSelection, lastSelectedIndex, navigateAfterSelection, selectedIndexes, totalCount]);
357
+ const onItemClick = React.useCallback(async ({
299
358
  event: event_0,
300
359
  index: index_1,
301
- item: item_2
360
+ item: item_1
302
361
  }) => {
303
362
  let doubleClicked = false;
304
363
  const isCtrlPressed_0 = event_0.ctrlKey || event_0.metaKey;
305
364
  const isShiftPressed_0 = event_0.shiftKey;
306
- let newSelectedIndexes_0 = undefined;
365
+ let newSelectedIndexes_0 = new Set(selectedIndexes);
307
366
  if (allowMultiSelection && isCtrlPressed_0) {
308
367
  newSelectedIndexes_0 = getMetaSelection({
309
368
  currentSelection: newSelectedIndexes_0,
@@ -316,7 +375,7 @@ export function FolderProvider({
316
375
  });
317
376
  } else if (allowMultiSelection && event_0.type === 'pointermove') {
318
377
  // on drag start of an unselected item
319
- if (!selectedItemKeys.has(item_2.itemKey)) {
378
+ if (!selectedIndexes.has(index_1)) {
320
379
  newSelectedIndexes_0 = new Set([index_1]);
321
380
  }
322
381
  setLastSelectedIndex(index_1);
@@ -328,42 +387,277 @@ export function FolderProvider({
328
387
  lastClickTime.current = now;
329
388
  setLastSelectedIndex(index_1);
330
389
  }
331
- if (!newSelectedIndexes_0) {
390
+ if (newSelectedIndexes_0.size === 0) {
332
391
  setFocusedRowIndex(undefined);
333
392
  } else {
334
393
  setFocusedRowIndex(index_1);
335
394
  }
336
- if (newSelectedIndexes_0) {
337
- setSelectedItemKeys([...subfolders, ...documents].reduce((acc_1, item_3, index_2) => {
338
- if (newSelectedIndexes_0.size && newSelectedIndexes_0.has(index_2)) {
339
- acc_1.add(item_3.itemKey);
395
+ setSelectedIndexes(newSelectedIndexes_0);
396
+ if (doubleClicked) {
397
+ await navigateAfterSelection({
398
+ collectionSlug: item_1.relationTo,
399
+ docID: extractID(item_1.value)
400
+ });
401
+ }
402
+ }, [selectedIndexes, lastSelectedIndex, allowMultiSelection, navigateAfterSelection]);
403
+ const filterItems = React.useCallback(async ({
404
+ relationTo: _relationTo,
405
+ search: _search_0
406
+ }) => {
407
+ const relationTo = Array.isArray(_relationTo) ? _relationTo : visibleCollectionSlugs;
408
+ const searchFilter_0 = ((typeof _search_0 === 'string' ? _search_0 : search) || '').trim();
409
+ let filteredDocuments = allDocuments;
410
+ let filteredSubfolders = allSubfolders;
411
+ if (collectionSlug && !activeFolderID && _search_0 !== search) {
412
+ // this allows us to search all documents in the collection when we are not in a folder and in the folder-collection view
413
+ const res = await getFolderData({
414
+ folderID: activeFolderID,
415
+ search: searchFilter_0
416
+ });
417
+ filteredDocuments = filterOutItems({
418
+ items: res.documents,
419
+ relationTo,
420
+ search: searchFilter_0
421
+ });
422
+ filteredSubfolders = filterOutItems({
423
+ items: res.subfolders,
424
+ relationTo: [folderCollectionSlug],
425
+ search: searchFilter_0
426
+ });
427
+ } else {
428
+ filteredDocuments = filterOutItems({
429
+ items: allDocuments,
430
+ relationTo,
431
+ search: searchFilter_0
432
+ });
433
+ filteredSubfolders = filterOutItems({
434
+ items: allSubfolders,
435
+ relationTo: relationTo.includes(folderCollectionSlug) ? [folderCollectionSlug] : [],
436
+ search: searchFilter_0
437
+ });
438
+ }
439
+ setDocuments(filteredDocuments);
440
+ setSubfolders(filteredSubfolders);
441
+ setSearch(searchFilter_0);
442
+ setVisibleCollectionSlugs(relationTo);
443
+ if (drawerDepth === 1) {
444
+ router.replace(formatFolderURL({
445
+ relationTo,
446
+ search: searchFilter_0 || undefined
447
+ }));
448
+ }
449
+ }, [collectionSlug, visibleCollectionSlugs, search, activeFolderID, allDocuments, allSubfolders, folderCollectionSlug, drawerDepth, getFolderData, router, formatFolderURL]);
450
+ const sortItems = React.useCallback(({
451
+ documentsToSort,
452
+ sortDirection: sortDirectionArg,
453
+ sortOn: sortOnArg,
454
+ subfoldersToSort
455
+ }) => {
456
+ let sortedDocuments;
457
+ let sortedSubfolders;
458
+ const sortDirectionToUse = sortDirectionArg || sortDirection;
459
+ const sortOnToUse = sortOnArg || sortOn;
460
+ if (sortOnArg) {
461
+ setSortOn(sortOnArg);
462
+ }
463
+ if (sortDirectionArg) {
464
+ setSortDirection(sortDirectionArg);
465
+ }
466
+ const newURL = formatFolderURL({
467
+ sortBy: sortOnArg || sortOn,
468
+ sortDirection: sortDirectionArg || sortDirection
469
+ });
470
+ if (documentsToSort) {
471
+ sortedDocuments = [...documentsToSort].sort((a, b) => {
472
+ const aValue = a.value[sortOnToUse];
473
+ const bValue = b.value[sortOnToUse];
474
+ if (aValue == null && bValue == null) {
475
+ return 0;
476
+ }
477
+ if (aValue == null) {
478
+ return sortDirectionToUse === 'asc' ? 1 : -1;
479
+ }
480
+ if (bValue == null) {
481
+ return sortDirectionToUse === 'asc' ? -1 : 1;
340
482
  }
341
- return acc_1;
342
- }, new Set()));
483
+ if (typeof aValue === 'string' && typeof bValue === 'string') {
484
+ return sortDirectionToUse === 'asc' ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue);
485
+ }
486
+ return 0;
487
+ });
343
488
  }
344
- if (doubleClicked) {
345
- navigateAfterSelection({
346
- collectionSlug: item_2.relationTo,
347
- docID: extractID(item_2.value)
489
+ if (subfoldersToSort) {
490
+ sortedSubfolders = [...subfoldersToSort].sort((a_0, b_0) => {
491
+ const aValue_0 = a_0.value[sortOnToUse];
492
+ const bValue_0 = b_0.value[sortOnToUse];
493
+ if (aValue_0 == null && bValue_0 == null) {
494
+ return 0;
495
+ }
496
+ if (aValue_0 == null) {
497
+ return sortDirectionToUse === 'asc' ? 1 : -1;
498
+ }
499
+ if (bValue_0 == null) {
500
+ return sortDirectionToUse === 'asc' ? -1 : 1;
501
+ }
502
+ if (typeof aValue_0 === 'string' && typeof bValue_0 === 'string') {
503
+ return sortDirectionToUse === 'asc' ? aValue_0.localeCompare(bValue_0) : bValue_0.localeCompare(aValue_0);
504
+ }
505
+ return 0;
506
+ });
507
+ }
508
+ return {
509
+ newURL,
510
+ sortedDocuments,
511
+ sortedSubfolders
512
+ };
513
+ }, [formatFolderURL, sortDirection, sortOn]);
514
+ const sortAndUpdateState = React.useCallback(({
515
+ documentsToSort: documentsToSort_0,
516
+ sortDirection: sortDirectionArg_0,
517
+ sortOn: sortOnArg_0,
518
+ subfoldersToSort: subfoldersToSort_0
519
+ }) => {
520
+ const {
521
+ newURL: newURL_0,
522
+ sortedDocuments: sortedDocuments_0,
523
+ sortedSubfolders: sortedSubfolders_0
524
+ } = sortItems({
525
+ documentsToSort: documentsToSort_0,
526
+ sortDirection: sortDirectionArg_0,
527
+ sortOn: sortOnArg_0,
528
+ subfoldersToSort: subfoldersToSort_0
529
+ });
530
+ if (sortedDocuments_0) {
531
+ setDocuments(sortedDocuments_0);
532
+ }
533
+ if (sortedSubfolders_0) {
534
+ setSubfolders(sortedSubfolders_0);
535
+ }
536
+ if (drawerDepth === 1) {
537
+ // not in a drawer (default is 1)
538
+ startRouteTransition(() => {
539
+ router.replace(newURL_0);
348
540
  });
349
541
  }
350
- }, [selectedItemKeys, allowMultiSelection, lastSelectedIndex, subfolders, documents, navigateAfterSelection]);
542
+ }, [drawerDepth, router, sortItems, startRouteTransition]);
543
+ const separateItems = React.useCallback(items => {
544
+ return items.reduce((acc_0, item_2) => {
545
+ if (item_2.relationTo === folderCollectionSlug) {
546
+ acc_0.folders.push(item_2);
547
+ } else {
548
+ acc_0.documents.push(item_2);
549
+ }
550
+ return acc_0;
551
+ }, {
552
+ documents: [],
553
+ folders: []
554
+ });
555
+ }, [folderCollectionSlug]);
556
+ /**
557
+ * Used to remove items from the current state.
558
+ *
559
+ * Does NOT handle the request to the server.
560
+ * Useful when a document is deleted and it needs to be removed
561
+ * from the current state.
562
+ */
563
+ const removeItems = React.useCallback(items_0 => {
564
+ if (!items_0.length) {
565
+ return;
566
+ }
567
+ const separatedItems = separateItems(items_0);
568
+ if (separatedItems.documents.length) {
569
+ setDocuments(prevDocs => {
570
+ return prevDocs.filter(({
571
+ itemKey
572
+ }) => !separatedItems.documents.some(item_3 => item_3.itemKey === itemKey));
573
+ });
574
+ }
575
+ if (separatedItems.folders.length) {
576
+ setSubfolders(prevFolders => {
577
+ return prevFolders.filter(({
578
+ itemKey: itemKey_0
579
+ }) => !separatedItems.folders.some(item_4 => item_4.itemKey === itemKey_0));
580
+ });
581
+ }
582
+ clearSelections();
583
+ }, [clearSelections, separateItems, setDocuments, setSubfolders]);
584
+ /**
585
+ * Used to add items to the current state.
586
+ *
587
+ * Does NOT handle the request to the server.
588
+ * Used when a document needs to be added to the current state.
589
+ */
590
+ const addItems = React.useCallback(itemsToAdd => {
591
+ const {
592
+ items: items_1,
593
+ parentItems
594
+ } = itemsToAdd.reduce((acc_1, item_5) => {
595
+ const destinationFolderID = item_5.value.folderID || null;
596
+ if (item_5.value.folderID && item_5.value.folderID === activeFolderID || !activeFolderID && !item_5.value.folderID) {
597
+ acc_1.items.push(item_5);
598
+ }
599
+ if (parentFolderContext && (parentFolderContext.folderID && destinationFolderID === parentFolderContext.folderID || !parentFolderContext.folderID && !item_5.value.folderID)) {
600
+ acc_1.parentItems.push(item_5);
601
+ }
602
+ return acc_1;
603
+ }, {
604
+ items: [],
605
+ parentItems: []
606
+ });
607
+ if (parentItems.length) {
608
+ parentFolderContext.addItems(parentItems);
609
+ }
610
+ if (!items_1.length) {
611
+ return;
612
+ }
613
+ const separatedItems_0 = separateItems(items_1);
614
+ let documentsToSort_1 = undefined;
615
+ let subfoldersToSort_1 = undefined;
616
+ if (separatedItems_0.documents.length) {
617
+ documentsToSort_1 = [...documents, ...separatedItems_0.documents];
618
+ }
619
+ if (separatedItems_0.folders.length) {
620
+ subfoldersToSort_1 = [...subfolders, ...separatedItems_0.folders];
621
+ }
622
+ const {
623
+ sortedDocuments: sortedDocuments_1,
624
+ sortedSubfolders: sortedSubfolders_1
625
+ } = sortItems({
626
+ documentsToSort: documentsToSort_1,
627
+ subfoldersToSort: subfoldersToSort_1
628
+ });
629
+ const {
630
+ sortedDocuments: sortedAllDocuments,
631
+ sortedSubfolders: sortedAllSubfolders
632
+ } = sortItems({
633
+ documentsToSort: documentsToSort_1,
634
+ subfoldersToSort: subfoldersToSort_1
635
+ });
636
+ if (sortedDocuments_1) {
637
+ setDocuments(sortedDocuments_1);
638
+ setAllDocuments(sortedAllDocuments);
639
+ }
640
+ if (sortedSubfolders_1) {
641
+ setSubfolders(sortedSubfolders_1);
642
+ setAllSubfolders(sortedAllSubfolders);
643
+ }
644
+ }, [activeFolderID, documents, separateItems, sortItems, subfolders, parentFolderContext]);
351
645
  /**
352
- * Makes requests to the server to update the folder field on passed in documents
646
+ * Used to move items to a different folder.
353
647
  *
354
- * Might rewrite this in the future to return the promises so errors can be handled contextually
648
+ * Handles the request to the server and updates the state.
355
649
  */
356
- const moveToFolder = React.useCallback(async args => {
650
+ const moveToFolder = React.useCallback(async args_0 => {
357
651
  const {
358
- itemsToMove: items,
652
+ itemsToMove: items_2,
359
653
  toFolderID: toFolderID_0
360
- } = args;
361
- if (!items.length) {
654
+ } = args_0;
655
+ if (!items_2.length) {
362
656
  return;
363
657
  }
364
- const movingCurrentFolder = items.length === 1 && items[0].relationTo === folderCollectionSlug && items[0].value.id === folderID;
658
+ const movingCurrentFolder = items_2.length === 1 && items_2[0].relationTo === folderCollectionSlug && items_2[0].value.id === activeFolderID;
365
659
  if (movingCurrentFolder) {
366
- const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${folderID}?depth=0`, {
660
+ const req = await fetch(`${serverURL}${routes.api}/${folderCollectionSlug}/${activeFolderID}?depth=0`, {
367
661
  body: JSON.stringify({
368
662
  [folderFieldName]: toFolderID_0 || null
369
663
  }),
@@ -375,11 +669,36 @@ export function FolderProvider({
375
669
  });
376
670
  if (req.status !== 200) {
377
671
  toast.error(t('general:error'));
672
+ } else {
673
+ const updatedDoc = await req.json();
674
+ const folderRes = await getFolderData({
675
+ folderID: updatedDoc.id
676
+ });
677
+ setBreadcrumbs(folderRes?.breadcrumbs || []);
678
+ setSubfolders(folderRes?.subfolders || []);
679
+ setDocuments(folderRes?.documents || []);
680
+ setActiveFolderID(updatedDoc.id);
378
681
  }
682
+ setBreadcrumbs(prevBreadcrumbs => {
683
+ return prevBreadcrumbs.map(breadcrumb => {
684
+ if (breadcrumb.id === activeFolderID) {
685
+ return {
686
+ ...breadcrumb,
687
+ id: toFolderID_0
688
+ };
689
+ }
690
+ return breadcrumb;
691
+ });
692
+ });
379
693
  } else {
380
- for (const [collectionSlug_0, ids] of Object.entries(groupItemIDsByRelation(items))) {
694
+ const movingToCurrentFolder = toFolderID_0 === activeFolderID;
695
+ const successfullyMovedFolderItems = [];
696
+ const successfullyMovedDocumentItems = [];
697
+ for (const [collectionSlug_1, ids] of Object.entries(groupItemIDsByRelation(items_2))) {
698
+ const collectionConfig = getEntityConfig({
699
+ collectionSlug: collectionSlug_1
700
+ });
381
701
  const query_0 = qs.stringify({
382
- depth: 0,
383
702
  limit: 0,
384
703
  where: {
385
704
  id: {
@@ -390,7 +709,7 @@ export function FolderProvider({
390
709
  addQueryPrefix: true
391
710
  });
392
711
  try {
393
- await fetch(`${serverURL}${routes.api}/${collectionSlug_0}${query_0}`, {
712
+ const res_0 = await fetch(`${serverURL}${routes.api}/${collectionSlug_1}${query_0}`, {
394
713
  body: JSON.stringify({
395
714
  [folderFieldName]: toFolderID_0 || null
396
715
  }),
@@ -400,6 +719,24 @@ export function FolderProvider({
400
719
  },
401
720
  method: 'PATCH'
402
721
  });
722
+ if (res_0.status === 200) {
723
+ const json = await res_0.json();
724
+ const {
725
+ docs
726
+ } = json;
727
+ const formattedItems = docs.map(doc => formatFolderOrDocumentItem({
728
+ folderFieldName,
729
+ isUpload: Boolean(collectionConfig.upload),
730
+ relationTo: collectionSlug_1,
731
+ useAsTitle: collectionConfig.admin.useAsTitle,
732
+ value: doc
733
+ }));
734
+ if (collectionSlug_1 === folderCollectionSlug) {
735
+ successfullyMovedFolderItems.push(...formattedItems);
736
+ } else {
737
+ successfullyMovedDocumentItems.push(...formattedItems);
738
+ }
739
+ }
403
740
  } catch (error) {
404
741
  toast.error(t('general:error'));
405
742
  // eslint-disable-next-line no-console
@@ -407,20 +744,88 @@ export function FolderProvider({
407
744
  continue;
408
745
  }
409
746
  }
747
+ if (movingToCurrentFolder) {
748
+ // need to sort if we are moving (adding) items to the current folder
749
+ const {
750
+ newURL: newURL_1,
751
+ sortedDocuments: sortedDocuments_2,
752
+ sortedSubfolders: sortedSubfolders_2
753
+ } = sortItems({
754
+ documentsToSort: successfullyMovedDocumentItems.length ? [...documents, ...successfullyMovedDocumentItems] : undefined,
755
+ subfoldersToSort: successfullyMovedFolderItems.length ? [...subfolders, ...successfullyMovedFolderItems] : undefined
756
+ });
757
+ if (sortedDocuments_2) {
758
+ setDocuments(sortedDocuments_2);
759
+ }
760
+ if (sortedSubfolders_2) {
761
+ setSubfolders(sortedSubfolders_2);
762
+ }
763
+ if (drawerDepth === 1 && newURL_1) {
764
+ // not in a drawer (default is 1)
765
+ router.replace(newURL_1);
766
+ }
767
+ } else {
768
+ // no need to sort, just remove the items from the current state
769
+ const filteredDocuments_0 = successfullyMovedDocumentItems.length ? documents.filter(({
770
+ itemKey: itemKey_1
771
+ }) => !successfullyMovedDocumentItems.some(item_6 => item_6.itemKey === itemKey_1)) : undefined;
772
+ const filteredSubfolders_0 = successfullyMovedFolderItems.length ? subfolders.filter(({
773
+ itemKey: itemKey_2
774
+ }) => !successfullyMovedFolderItems.some(item_7 => item_7.itemKey === itemKey_2)) : undefined;
775
+ if (filteredDocuments_0) {
776
+ setDocuments(filteredDocuments_0);
777
+ }
778
+ if (filteredSubfolders_0) {
779
+ setSubfolders(filteredSubfolders_0);
780
+ }
781
+ }
410
782
  }
411
783
  clearSelections();
412
- }, [folderID, clearSelections, folderCollectionSlug, folderFieldName, routes.api, serverURL, t]);
413
- // If a new component is provided, update the state so children can re-render with the new component
414
- React.useEffect(() => {
415
- if (InitialFolderResultsComponent) {
416
- setFolderResultsComponent(InitialFolderResultsComponent);
784
+ }, [folderCollectionSlug, activeFolderID, clearSelections, serverURL, routes.api, folderFieldName, t, getFolderData, getEntityConfig, sortItems, documents, subfolders, drawerDepth, router]);
785
+ /**
786
+ * Used to rename a folder in the current state.
787
+ *
788
+ * Does NOT handle the request to the server.
789
+ * Used when the user renames a folder using the drawer
790
+ * and it needs to be updated in the current state.
791
+ */
792
+ const renameFolder = React.useCallback(({
793
+ folderID: updatedFolderID,
794
+ newName
795
+ }) => {
796
+ if (activeFolderID === updatedFolderID) {
797
+ // updating the curent folder
798
+ setBreadcrumbs(prevBreadcrumbs_0 => {
799
+ return prevBreadcrumbs_0.map(breadcrumb_0 => {
800
+ if (breadcrumb_0.id === updatedFolderID) {
801
+ return {
802
+ ...breadcrumb_0,
803
+ name: newName
804
+ };
805
+ }
806
+ return breadcrumb_0;
807
+ });
808
+ });
809
+ } else {
810
+ setSubfolders(prevFolders_0 => {
811
+ return prevFolders_0.map(folder => {
812
+ if (folder.value.id === updatedFolderID && folder.relationTo === folderCollectionSlug) {
813
+ return {
814
+ ...folder,
815
+ value: {
816
+ ...folder.value,
817
+ _folderOrDocumentTitle: newName
818
+ }
819
+ };
820
+ }
821
+ return folder;
822
+ });
823
+ });
417
824
  }
418
- }, [InitialFolderResultsComponent]);
825
+ }, [folderCollectionSlug, setSubfolders, activeFolderID]);
419
826
  return /*#__PURE__*/_jsx(Context, {
420
827
  value: {
421
- activeCollectionFolderSlugs: activeCollectionSlugs || allCollectionFolderSlugs,
422
- allCollectionFolderSlugs,
423
- allowCreateCollectionSlugs,
828
+ addItems,
424
829
  breadcrumbs,
425
830
  clearSelections,
426
831
  currentFolder: breadcrumbs?.[0]?.id ? formatFolderOrDocumentItem({
@@ -431,28 +836,32 @@ export function FolderProvider({
431
836
  value: breadcrumbs[breadcrumbs.length - 1]
432
837
  }) : null,
433
838
  documents,
839
+ filterItems,
434
840
  focusedRowIndex,
435
841
  folderCollectionConfig,
436
842
  folderCollectionSlug,
843
+ folderCollectionSlugs,
437
844
  folderFieldName,
438
- folderID,
439
- FolderResultsComponent,
440
- getFolderRoute,
845
+ folderID: activeFolderID,
441
846
  getSelectedItems,
442
847
  isDragging,
443
- itemKeysToMove: parentFolderContext.selectedItemKeys,
444
848
  lastSelectedIndex,
445
849
  moveToFolder,
446
850
  onItemClick,
447
851
  onItemKeyPress,
448
- refineFolderData,
852
+ removeItems,
853
+ renameFolder,
449
854
  search,
450
- selectedItemKeys,
855
+ selectedIndexes,
451
856
  setBreadcrumbs,
452
857
  setFocusedRowIndex,
858
+ setFolderID: setNewActiveFolderID,
453
859
  setIsDragging,
454
- sort,
455
- subfolders
860
+ sortAndUpdateState,
861
+ sortDirection,
862
+ sortOn,
863
+ subfolders,
864
+ visibleCollectionSlugs
456
865
  },
457
866
  children: children
458
867
  });