@bindu-dashing/dam-solution-v2 5.8.118 → 5.8.120

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.
@@ -23,9 +23,10 @@ import { useDamConfig } from "../hocs/DamConfigContext";
23
23
  import { createApiClient } from "../hocs/configureAxios";
24
24
  import useAppParams from "../utilities/useAppParams";
25
25
  import { RenderModalTitle } from "../common/CustomElements";
26
- import { useFoldersContext } from "../utilities/FoldersContext";
26
+ import { useFoldersContext, useRefetchFolders } from "../utilities/FoldersContext";
27
27
  function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileModal, parentFolderId, }) {
28
28
  const { setFolders, globalSearch } = useFoldersContext();
29
+ const refetchFolders = useRefetchFolders();
29
30
  const { folderId, type } = useAppParams();
30
31
  const damConfig = useDamConfig();
31
32
  const { rootFolderId } = damConfig;
@@ -75,7 +76,20 @@ function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileMod
75
76
  }
76
77
  });
77
78
  updateFoldersCacheOnUpdateFolder(queryClient, folderId ? folderId : rootFolderId, updatedFolder, generateFoldersQueryKey(type));
78
- invalidateData(queryClient, QueryKeys.FILE, get(file, "_id"));
79
+ if (file) {
80
+ invalidateData(queryClient, QueryKeys.FILE, get(file, "_id"));
81
+ }
82
+ if (refetchFolders) {
83
+ yield refetchFolders();
84
+ }
85
+ else {
86
+ const foldersQueryKey = generateFoldersQueryKey(type);
87
+ const effectiveFolderId = folderId ? folderId : rootFolderId;
88
+ invalidateData(queryClient, foldersQueryKey, effectiveFolderId);
89
+ yield queryClient.refetchQueries({
90
+ queryKey: [foldersQueryKey, effectiveFolderId],
91
+ });
92
+ }
79
93
  }
80
94
  else {
81
95
  // ✅ create case → take folder from response
@@ -34,6 +34,7 @@ import { FETCH_ASSETS_URL, FETCH_IMAGE_PCIKER_THUMBNAIL_URL, UPLOAD_IMAGE_PICKER
34
34
  import { showNotification } from "../common/notifications";
35
35
  import useAppParams from "../utilities/useAppParams";
36
36
  import { IoIosSearch } from "react-icons/io";
37
+ import { RefetchFoldersProvider } from "../utilities/FoldersContext";
37
38
  const BsUploadIcon = BsUpload;
38
39
  const IoIosSearchIcon = IoIosSearch;
39
40
  function DriveContainer({ parentFolderId, setSelectedFile, setParentFolderId, pickerFolderId, selectedPickerFile, imagePicker, globalSearch, setGlobalSearch, setSelectedKeys, }) {
@@ -229,45 +230,45 @@ function DriveContainer({ parentFolderId, setSelectedFile, setParentFolderId, pi
229
230
  setState((prevState) => (Object.assign(Object.assign({}, prevState), filters)));
230
231
  };
231
232
  // console.log("search", searchKey, searchValue, metadataKey, metadataValue);
232
- return (_jsxs("div", { className: "md-lib-h-[inherit]", children: [type !== DriveModes.FILE && (_jsx(_Fragment, { children: _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-px-4 md-lib-h-20 md-lib-justify-between md-lib-border-b md-lib-border-borderColor dark:md-lib-border-darkBorderColor md-lib-mb-4", children: [imagePicker ? (_jsx(ImagePickerBreadCrumbList, { folder: parentFolder, parentFolderId: parentFolderId, setParentFolderId: setParentFolderId, pickerFolderId: pickerFolderId })) : (_jsx(_Fragment, { children: _jsx(BreadCrumbList, { folder: parentFolder, parentFolderId: parentFolderId, setParentFolderId: setParentFolderId, pickerFolderId: pickerFolderId, globalSearch: globalSearch, setSelectedKeys: setSelectedKeys }) })), isAdmin && _jsx(AddDrive, { parentFolderId: parentFolderId }), get(imagePicker, "allowNewFiles") && (_jsx(Upload, { beforeUpload: (file) => {
233
- onSelectNewFile(file);
234
- }, showUploadList: false, accept: "image/*", children: _jsx(CustomButton, { loading: loadingType === "NEW_FILE_UPLOAD", label: "Select File", icon: _jsx(BsUploadIcon, {}) }) }))] }) })), _jsxs("div", { className: `md-lib-px-4 md-lib-border-borderColor dark:md-lib-border-darkBorderColor md-lib-flex ${!includes([DriveModes.FOLDERS, DriveModes.FILE], type)
235
- ? "md-lib-justify-between"
236
- : "md-lib-justify-end md-lib-my-4"}`, children: [_jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-4 md-lib-mb-4", children: [_jsx(Input, { placeholder: "Search files (min. 2 characters required)", ref: nameSearchRef, prefix: _jsx(IoIosSearchIcon, {}), onPressEnter: () => {
237
- var _a;
238
- const currentObj = nameSearchRef.current;
239
- if (currentObj) {
240
- const value = ((_a = currentObj === null || currentObj === void 0 ? void 0 : currentObj.input) === null || _a === void 0 ? void 0 : _a.value) || "";
241
- if (value.length >= 2 || !value) {
242
- setState((prevState) => {
243
- return Object.assign(Object.assign({}, prevState), { folderSearch: value });
244
- });
233
+ return (_jsx(RefetchFoldersProvider, { value: refetch, children: _jsxs("div", { className: "md-lib-h-[inherit]", children: [type !== DriveModes.FILE && (_jsx(_Fragment, { children: _jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-px-4 md-lib-h-20 md-lib-justify-between md-lib-border-b md-lib-border-borderColor dark:md-lib-border-darkBorderColor md-lib-mb-4", children: [imagePicker ? (_jsx(ImagePickerBreadCrumbList, { folder: parentFolder, parentFolderId: parentFolderId, setParentFolderId: setParentFolderId, pickerFolderId: pickerFolderId })) : (_jsx(_Fragment, { children: _jsx(BreadCrumbList, { folder: parentFolder, parentFolderId: parentFolderId, setParentFolderId: setParentFolderId, pickerFolderId: pickerFolderId, globalSearch: globalSearch, setSelectedKeys: setSelectedKeys }) })), isAdmin && _jsx(AddDrive, { parentFolderId: parentFolderId }), get(imagePicker, "allowNewFiles") && (_jsx(Upload, { beforeUpload: (file) => {
234
+ onSelectNewFile(file);
235
+ }, showUploadList: false, accept: "image/*", children: _jsx(CustomButton, { loading: loadingType === "NEW_FILE_UPLOAD", label: "Select File", icon: _jsx(BsUploadIcon, {}) }) }))] }) })), _jsxs("div", { className: `md-lib-px-4 md-lib-border-borderColor dark:md-lib-border-darkBorderColor md-lib-flex ${!includes([DriveModes.FOLDERS, DriveModes.FILE], type)
236
+ ? "md-lib-justify-between"
237
+ : "md-lib-justify-end md-lib-my-4"}`, children: [_jsxs("div", { className: "md-lib-flex md-lib-items-center md-lib-gap-4 md-lib-mb-4", children: [_jsx(Input, { placeholder: "Search files (min. 2 characters required)", ref: nameSearchRef, prefix: _jsx(IoIosSearchIcon, {}), onPressEnter: () => {
238
+ var _a;
239
+ const currentObj = nameSearchRef.current;
240
+ if (currentObj) {
241
+ const value = ((_a = currentObj === null || currentObj === void 0 ? void 0 : currentObj.input) === null || _a === void 0 ? void 0 : _a.value) || "";
242
+ if (value.length >= 2 || !value) {
243
+ setState((prevState) => {
244
+ return Object.assign(Object.assign({}, prevState), { folderSearch: value });
245
+ });
246
+ }
245
247
  }
246
- }
247
- } }), !includes([DriveModes.FOLDERS, DriveModes.FILE], type) && (_jsx(TypeAndDateFilters, { selectedDateKey: selectedDateKey, selectedType: selectedType, onDateMenuClick: onDateMenuClick, onTypeMenuClick: onTypeMenuClick, onChangeDates: (dates) => {
248
- if (dates) {
249
- const [start, end] = dates;
250
- setState((prev) => (Object.assign(Object.assign({}, prev), { customDateRange: dates, selectedDateKey: "custom" })));
251
- }
252
- }, loading: isFetching, loadingType: loadingType }))] }), _jsx(ToggleView, { showGrid: showGrid, toggleView: (value) => setState((prevState) => (Object.assign(Object.assign({}, prevState), { showGrid: value }))) })] }), _jsx("div", { className: "md-lib-border-b md-lib-border-borderColor md-lib-mb-4" }), isLoading ? (_jsx(Loader, {})) : isEmpty(folders) ? (_jsxs("div", { className: "md-lib-flex md-lib-flex-col md-lib-items-center md-lib-justify-center", children: [_jsx("img", { src: NOT_FOUND_IMAGE_URL, alt: "Not Found", width: 300, height: 300 }), _jsx("p", { className: "md-lib-mt-3 md-lib-text-sm md-lib-font-semibold", children: error
253
- ? get(error, "message", SOMETHING_WENT_WRONG)
254
- : includes(Object.values(DriveModes), type)
255
- ? "No data found"
256
- : (searchKey && searchValue) || (metadataKey && metadataValue)
257
- ? "No results found"
258
- : "No files has been created yet" }), ((searchKey && searchValue) || (metadataKey && metadataValue)) && (_jsx(Button, { type: "primary", className: "md-lib-mt-4", onClick: () => {
259
- onSearch({
260
- searchKey: "",
261
- searchValue: "",
262
- metadataKey: "",
263
- metadataValue: "",
264
- });
265
- }, children: "Clear Filters" }))] })) : (_jsx("div", { className: "md-lib-p-4 md-lib-max-h-[calc(100%-161px)] md-lib-overflow-x-auto", children: state.showGrid ? (_jsx(FolderGridView, { folders: filter(folders, (item) => get(item, "type") !== EntityType.FILE), files: _.filter(folders, (item) => get(item, "type") === EntityType.FILE), foldersFetching: isFetching, hasNextPage: !!hasNextPage, fetchNextPage: fetchNextPage, selectedFolderIds: get(selectedItems, "folderIds", []), selectedFileIds: get(selectedItems, "fileIds", []), setSelectedItems: (updateFnOrValue = {}) => setState((prevState) => {
266
- const prevSelected = prevState.selectedItems;
267
- return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
268
- }), isImagePicker: !!pickerFolderId, setSelectedFile: setSelectedFile, setParentFolderId: setParentFolderId, selectedPickerFile: selectedPickerFile, sortBy: sortBy, sortOrder: sortOrder, setSortOrders: (newSortBy, newSortOrder) => setState((prev) => (Object.assign(Object.assign({}, prev), { sortBy: newSortBy, sortOrder: newSortOrder }))), setSelectedKeys: setSelectedKeys })) : (_jsx(FolderListView, { folders: folders, foldersFetching: isFetching, hasNextPage: !!hasNextPage, fetchNextPage: fetchNextPage, selectedFolderIds: get(selectedItems, "folderIds", []), selectedFileIds: get(selectedItems, "fileIds", []), setSelectedItems: (updateFnOrValue = {}) => setState((prevState) => {
269
- const prevSelected = prevState.selectedItems;
270
- return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
271
- }), isImagePicker: !!pickerFolderId, setSelectedFile: setSelectedFile, setParentFolderId: setParentFolderId, selectedPickerFile: selectedPickerFile, location: get(parentFolder, "name"), assets: assets, sortByKey: sortBy, sortOrder: sortOrder, setSortOrders: (newSortBy, newSortOrder) => setState((prev) => (Object.assign(Object.assign({}, prev), { sortBy: newSortBy, sortOrder: newSortOrder }))), onSearch: onSearch, searchKey: searchKey, searchValue: searchValue, metadataKey: metadataKey, metadataValue: metadataValue, setSelectedKeys: setSelectedKeys })) }))] }));
248
+ } }), !includes([DriveModes.FOLDERS, DriveModes.FILE], type) && (_jsx(TypeAndDateFilters, { selectedDateKey: selectedDateKey, selectedType: selectedType, onDateMenuClick: onDateMenuClick, onTypeMenuClick: onTypeMenuClick, onChangeDates: (dates) => {
249
+ if (dates) {
250
+ const [start, end] = dates;
251
+ setState((prev) => (Object.assign(Object.assign({}, prev), { customDateRange: dates, selectedDateKey: "custom" })));
252
+ }
253
+ }, loading: isFetching, loadingType: loadingType }))] }), _jsx(ToggleView, { showGrid: showGrid, toggleView: (value) => setState((prevState) => (Object.assign(Object.assign({}, prevState), { showGrid: value }))) })] }), _jsx("div", { className: "md-lib-border-b md-lib-border-borderColor md-lib-mb-4" }), isLoading ? (_jsx(Loader, {})) : isEmpty(folders) ? (_jsxs("div", { className: "md-lib-flex md-lib-flex-col md-lib-items-center md-lib-justify-center", children: [_jsx("img", { src: NOT_FOUND_IMAGE_URL, alt: "Not Found", width: 300, height: 300 }), _jsx("p", { className: "md-lib-mt-3 md-lib-text-sm md-lib-font-semibold", children: error
254
+ ? get(error, "message", SOMETHING_WENT_WRONG)
255
+ : includes(Object.values(DriveModes), type)
256
+ ? "No data found"
257
+ : (searchKey && searchValue) || (metadataKey && metadataValue)
258
+ ? "No results found"
259
+ : "No files has been created yet" }), ((searchKey && searchValue) || (metadataKey && metadataValue)) && (_jsx(Button, { type: "primary", className: "md-lib-mt-4", onClick: () => {
260
+ onSearch({
261
+ searchKey: "",
262
+ searchValue: "",
263
+ metadataKey: "",
264
+ metadataValue: "",
265
+ });
266
+ }, children: "Clear Filters" }))] })) : (_jsx("div", { className: "md-lib-p-4 md-lib-max-h-[calc(100%-161px)] md-lib-overflow-x-auto", children: state.showGrid ? (_jsx(FolderGridView, { folders: filter(folders, (item) => get(item, "type") !== EntityType.FILE), files: _.filter(folders, (item) => get(item, "type") === EntityType.FILE), foldersFetching: isFetching, hasNextPage: !!hasNextPage, fetchNextPage: fetchNextPage, selectedFolderIds: get(selectedItems, "folderIds", []), selectedFileIds: get(selectedItems, "fileIds", []), setSelectedItems: (updateFnOrValue = {}) => setState((prevState) => {
267
+ const prevSelected = prevState.selectedItems;
268
+ return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
269
+ }), isImagePicker: !!pickerFolderId, setSelectedFile: setSelectedFile, setParentFolderId: setParentFolderId, selectedPickerFile: selectedPickerFile, sortBy: sortBy, sortOrder: sortOrder, setSortOrders: (newSortBy, newSortOrder) => setState((prev) => (Object.assign(Object.assign({}, prev), { sortBy: newSortBy, sortOrder: newSortOrder }))), setSelectedKeys: setSelectedKeys })) : (_jsx(FolderListView, { folders: folders, foldersFetching: isFetching, hasNextPage: !!hasNextPage, fetchNextPage: fetchNextPage, selectedFolderIds: get(selectedItems, "folderIds", []), selectedFileIds: get(selectedItems, "fileIds", []), setSelectedItems: (updateFnOrValue = {}) => setState((prevState) => {
270
+ const prevSelected = prevState.selectedItems;
271
+ return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
272
+ }), isImagePicker: !!pickerFolderId, setSelectedFile: setSelectedFile, setParentFolderId: setParentFolderId, selectedPickerFile: selectedPickerFile, location: get(parentFolder, "name"), assets: assets, sortByKey: sortBy, sortOrder: sortOrder, setSortOrders: (newSortBy, newSortOrder) => setState((prev) => (Object.assign(Object.assign({}, prev), { sortBy: newSortBy, sortOrder: newSortOrder }))), onSearch: onSearch, searchKey: searchKey, searchValue: searchValue, metadataKey: metadataKey, metadataValue: metadataValue, setSelectedKeys: setSelectedKeys })) }))] }) }));
272
273
  }
273
274
  export default DriveContainer;
@@ -25,6 +25,7 @@ import { archiveFiles, deleteFiles, downloadFiles, duplicateFiles, restoreFiles,
25
25
  import { ADDED_TO_FAV_MSG, ARCHIVE_OK_TEXT, ARCHIVE_SUCCESS, CREATE_SUCCESS, DELETE_CONFIRMATION_MESSAGE, DELETE_MESSAGE_DESCRIPTION, DELETE_OK_TEXT, DELETE_SUCCESS, INVALID_URL, REMOVED_FROM_FAV_MSG, RESTORE_SUCCESS, SOMETHING_WENT_WRONG, } from "../utilities/constants/messages";
26
26
  import { getSelectedFiles, } from "../react-query/hooks/folder-hooks";
27
27
  import { generateFoldersQueryKey, invalidateData, QueryKeys, } from "../utilities/constants/queryKeys";
28
+ import { useRefetchFolders } from "../utilities/FoldersContext";
28
29
  import { DeleteConfirmationModal } from "../common/CustomElements";
29
30
  import { addToFavFolders, removeFromFavFolders, } from "../react-query/services/folder-services";
30
31
  import { MdDriveFileMoveOutline, MdOutlineUnarchive } from "react-icons/md";
@@ -53,6 +54,7 @@ function FileMenuOptions({ file, folderIds = [], fileIds = [], folder, onCloseSe
53
54
  const { folderId, type } = useAppParams();
54
55
  const api = useMemo(() => createApiClient(damConfig), [damConfig]);
55
56
  const queryClient = useQueryClient();
57
+ const refetchFolders = useRefetchFolders();
56
58
  // Fetch file data from API if file is null but we have a single fileId (no folders)
57
59
  const singleFileId = useMemo(() => {
58
60
  if (file)
@@ -188,12 +190,18 @@ function FileMenuOptions({ file, folderIds = [], fileIds = [], folder, onCloseSe
188
190
  const duplicateFileMutation = useMutation({
189
191
  mutationFn: duplicateFiles,
190
192
  onSuccess: (response) => __awaiter(this, void 0, void 0, function* () {
191
- const foldersQueryKey = generateFoldersQueryKey(type);
192
- const currentFolderId = folderId ? folderId : rootFolderId;
193
- invalidateData(queryClient, foldersQueryKey, currentFolderId);
194
- yield queryClient.refetchQueries({
195
- queryKey: [foldersQueryKey, currentFolderId],
196
- });
193
+ if (refetchFolders) {
194
+ yield refetchFolders();
195
+ }
196
+ else {
197
+ const foldersQueryKey = generateFoldersQueryKey(type);
198
+ const currentFolderId = folderId ? folderId : rootFolderId;
199
+ invalidateData(queryClient, foldersQueryKey, currentFolderId);
200
+ yield queryClient.refetchQueries({
201
+ queryKey: [foldersQueryKey, currentFolderId],
202
+ });
203
+ }
204
+ onCloseSelection === null || onCloseSelection === void 0 ? void 0 : onCloseSelection();
197
205
  showNotification(get(response, "data.message", CREATE_SUCCESS), NotificationStatus.SUCCESS);
198
206
  }),
199
207
  onError: (error) => {
@@ -241,7 +241,7 @@ function FolderMenuOptions({ folder }) {
241
241
  ? [
242
242
  {
243
243
  key: FileActionsList.RENAME,
244
- label: "Edit",
244
+ label: "Rename",
245
245
  icon: _jsx(EditOutlined, {}),
246
246
  onClick: () => toggleUpdateModal(),
247
247
  },
@@ -11,4 +11,6 @@ type FoldersContextType = {
11
11
  };
12
12
  export declare const FoldersProvider: import("react").Provider<FoldersContextType | undefined>;
13
13
  export declare function useFoldersContext(): FoldersContextType;
14
+ export declare const RefetchFoldersProvider: import("react").Provider<(() => Promise<unknown>) | undefined>;
15
+ export declare function useRefetchFolders(): (() => Promise<unknown>) | undefined;
14
16
  export {};
@@ -8,3 +8,10 @@ export function useFoldersContext() {
8
8
  }
9
9
  return ctx;
10
10
  }
11
+ // Optional refetch for the current folder list (provided by DriveContainer).
12
+ // When available, use this after rename/duplicate so the list updates without full refresh.
13
+ const RefetchFoldersContext = createContext(undefined);
14
+ export const RefetchFoldersProvider = RefetchFoldersContext.Provider;
15
+ export function useRefetchFolders() {
16
+ return useContext(RefetchFoldersContext);
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bindu-dashing/dam-solution-v2",
3
- "version": "5.8.118",
3
+ "version": "5.8.120",
4
4
  "dependencies": {
5
5
  "@ant-design/icons": "^5.0.1",
6
6
  "@emoji-mart/data": "^1.2.1",