@bindu-dashing/dam-solution-v2 5.8.60 → 5.8.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/MyDrive/AddDrive.d.ts +3 -1
- package/build/MyDrive/AddDrive.js +6 -3
- package/build/MyDrive/AddFolder.d.ts +2 -1
- package/build/MyDrive/AddFolder.js +4 -2
- package/build/MyDrive/DriveContainer.js +2 -2
- package/build/MyDrive/FolderGridView.d.ts +2 -1
- package/build/MyDrive/FolderGridView.js +27 -7
- package/package.json +1 -1
|
@@ -39,11 +39,14 @@ const BsUploadIcon = BsUpload;
|
|
|
39
39
|
const PiFolderPlusLightIcon = PiFolderPlusLight;
|
|
40
40
|
const GoPlusIcon = GoPlus;
|
|
41
41
|
const MdKeyboardArrowDownIconIcon = MdKeyboardArrowDown;
|
|
42
|
-
const AddDrive = () => {
|
|
42
|
+
const AddDrive = ({ parentFolderId }) => {
|
|
43
43
|
const damConfig = useDamConfig();
|
|
44
44
|
const { brand, rootFolderId } = damConfig;
|
|
45
45
|
const brandId = get(brand, "_id");
|
|
46
46
|
const { folderId } = useAppParams();
|
|
47
|
+
// Use parentFolderId (current folder from selection) > folderId (from URL) > rootFolderId
|
|
48
|
+
const currentFolderId = parentFolderId || folderId || rootFolderId;
|
|
49
|
+
console.log('## currentFolderId', currentFolderId, 'parentFolderId', parentFolderId, 'folderId', folderId, 'rootFolderId', rootFolderId);
|
|
47
50
|
const fileInputRef = useRef(null);
|
|
48
51
|
const api = useMemo(() => createApiClient(damConfig), [damConfig]);
|
|
49
52
|
const [state, setState] = useState({
|
|
@@ -102,7 +105,7 @@ const AddDrive = () => {
|
|
|
102
105
|
try {
|
|
103
106
|
const response = yield api.post(FILE_UPLOAD_URL, {
|
|
104
107
|
brandId,
|
|
105
|
-
folderId:
|
|
108
|
+
folderId: currentFolderId,
|
|
106
109
|
files: map(files, (file) => ({
|
|
107
110
|
name: get(file, "name"),
|
|
108
111
|
size: get(file, "size"),
|
|
@@ -165,6 +168,6 @@ const AddDrive = () => {
|
|
|
165
168
|
},
|
|
166
169
|
];
|
|
167
170
|
const toggleGenerateThumbnails = () => setState((prevState) => (Object.assign(Object.assign({}, prevState), { showGenerateThumbnails: !prevState.showGenerateThumbnails })));
|
|
168
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "md-lib-flex md-lib-gap-3", children: [_jsx(CustomButton, { label: "Generate Thumbnails", icon: _jsx(RiGalleryLineIcon, {}), size: "large", onClick: toggleGenerateThumbnails }), _jsx(Dropdown, { menu: { items }, trigger: ["click"], placement: "bottomRight", children: _jsxs(Button, { icon: _jsx(GoPlusIcon, { size: 16 }), type: "primary", size: "large", children: ["Add ", _jsx(MdKeyboardArrowDownIconIcon, {})] }) })] }), _jsx("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: handleNativeFileUpload }), openFolderModal && (_jsx(AddFolder, { open: openFolderModal, handleCancel: toggleFolderModal })), openMapFile && (_jsx(MapFile, { open: openMapFile, handleCancel: toggleOpenMapFile, filesList: filesList, fromUpload: true })), showUploadStatus && (_jsx(UploadStatusModal, { open: showUploadStatus, statusList: uploadStatusList, onClose: () => setState((prevState) => (Object.assign(Object.assign({}, prevState), { showUploadStatus: false }))) })), openBlukUploadModal && (_jsx(BulkUploadModal, { toggleUpload: toggleFolderBulkModal, folderId:
|
|
171
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "md-lib-flex md-lib-gap-3", children: [_jsx(CustomButton, { label: "Generate Thumbnails", icon: _jsx(RiGalleryLineIcon, {}), size: "large", onClick: toggleGenerateThumbnails }), _jsx(Dropdown, { menu: { items }, trigger: ["click"], placement: "bottomRight", children: _jsxs(Button, { icon: _jsx(GoPlusIcon, { size: 16 }), type: "primary", size: "large", children: ["Add ", _jsx(MdKeyboardArrowDownIconIcon, {})] }) })] }), _jsx("input", { ref: fileInputRef, type: "file", style: { display: 'none' }, onChange: handleNativeFileUpload }), openFolderModal && (_jsx(AddFolder, { open: openFolderModal, handleCancel: toggleFolderModal, parentFolderId: currentFolderId })), openMapFile && (_jsx(MapFile, { open: openMapFile, handleCancel: toggleOpenMapFile, filesList: filesList, fromUpload: true })), showUploadStatus && (_jsx(UploadStatusModal, { open: showUploadStatus, statusList: uploadStatusList, onClose: () => setState((prevState) => (Object.assign(Object.assign({}, prevState), { showUploadStatus: false }))) })), openBlukUploadModal && (_jsx(BulkUploadModal, { toggleUpload: toggleFolderBulkModal, folderId: currentFolderId })), showGenerateThumbnails && (_jsx(BulkUploadModal, { toggleUpload: toggleGenerateThumbnails, thumbnailsOnly: true, folderId: currentFolderId }))] }));
|
|
169
172
|
};
|
|
170
173
|
export default AddDrive;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { FileEntity, FolderEntity } from "../utilities/constants/interface";
|
|
2
|
-
declare function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileModal, }: {
|
|
2
|
+
declare function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileModal, parentFolderId, }: {
|
|
3
3
|
open: boolean;
|
|
4
4
|
handleCancel: () => void;
|
|
5
5
|
folder?: FolderEntity;
|
|
6
6
|
file?: FileEntity;
|
|
7
7
|
onCloseSelection?: () => void;
|
|
8
8
|
fileModal?: boolean;
|
|
9
|
+
parentFolderId?: string;
|
|
9
10
|
}): JSX.Element;
|
|
10
11
|
export default AddFolder;
|
|
@@ -24,11 +24,13 @@ import { createApiClient } from "../hocs/configureAxios";
|
|
|
24
24
|
import useAppParams from "../utilities/useAppParams";
|
|
25
25
|
import { RenderModalTitle } from "../common/CustomElements";
|
|
26
26
|
import { useFoldersContext } from "../utilities/FoldersContext";
|
|
27
|
-
function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileModal, }) {
|
|
27
|
+
function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileModal, parentFolderId, }) {
|
|
28
28
|
const { setFolders, globalSearch } = useFoldersContext();
|
|
29
29
|
const { folderId, type } = useAppParams();
|
|
30
30
|
const damConfig = useDamConfig();
|
|
31
31
|
const { rootFolderId } = damConfig;
|
|
32
|
+
// Use parentFolderId (current folder from selection) > folderId (from URL) > rootFolderId
|
|
33
|
+
const currentFolderId = parentFolderId || folderId || rootFolderId;
|
|
32
34
|
const api = useMemo(() => createApiClient(damConfig), [damConfig]);
|
|
33
35
|
const [state, setState] = useState({ loading: false });
|
|
34
36
|
const { loading } = state;
|
|
@@ -42,7 +44,7 @@ function AddFolder({ open, handleCancel, folder, file, onCloseSelection, fileMod
|
|
|
42
44
|
? yield api.put(FETCH_FOLDER_URL.replace(":folderId", get(folder, "_id")), values)
|
|
43
45
|
: get(file, "_id")
|
|
44
46
|
? yield api.put(FETCH_FILE_URL.replace(":fileId", get(file, "_id")), values)
|
|
45
|
-
: yield api.post(FETCH_FOLDERS_URL, Object.assign(Object.assign({}, values), { teamIds: [], parentId:
|
|
47
|
+
: yield api.post(FETCH_FOLDERS_URL, Object.assign(Object.assign({}, values), { teamIds: [], parentId: currentFolderId }));
|
|
46
48
|
if (folder || file) {
|
|
47
49
|
// ✅ update case
|
|
48
50
|
const updatedFolder = folder
|
|
@@ -235,7 +235,7 @@ function DriveContainer({ parentFolderId, setSelectedFile, setParentFolderId, pi
|
|
|
235
235
|
setState((prevState) => (Object.assign(Object.assign({}, prevState), filters)));
|
|
236
236
|
};
|
|
237
237
|
// console.log("search", searchKey, searchValue, metadataKey, metadataValue);
|
|
238
|
-
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, {}), get(imagePicker, "allowNewFiles") && (_jsx(Upload, { beforeUpload: (file) => {
|
|
238
|
+
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) => {
|
|
239
239
|
onSelectNewFile(file);
|
|
240
240
|
}, 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)
|
|
241
241
|
? "md-lib-justify-between"
|
|
@@ -271,7 +271,7 @@ function DriveContainer({ parentFolderId, setSelectedFile, setParentFolderId, pi
|
|
|
271
271
|
}, 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) => {
|
|
272
272
|
const prevSelected = prevState.selectedItems;
|
|
273
273
|
return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
|
|
274
|
-
}), 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 }))) })) : (_jsx(FolderListView, { folders: folders, foldersFetching: isFetching, hasNextPage: !!hasNextPage, fetchNextPage: fetchNextPage, selectedFolderIds: get(selectedItems, "folderIds", []), selectedFileIds: get(selectedItems, "fileIds", []), setSelectedItems: (updateFnOrValue = {}) => setState((prevState) => {
|
|
274
|
+
}), 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) => {
|
|
275
275
|
const prevSelected = prevState.selectedItems;
|
|
276
276
|
return Object.assign(Object.assign({}, prevState), { selectedItems: Object.assign(Object.assign({}, prevSelected), updateFnOrValue) });
|
|
277
277
|
}), 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 })) }))] }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FileEntity, FolderEntity, SortByKeys, SortOrders } from "../utilities/constants/interface";
|
|
2
|
-
declare const FolderGridView: ({ folders, foldersFetching, hasNextPage, fetchNextPage, files, selectedFileIds, selectedFolderIds, setSelectedItems, isImagePicker, setSelectedFile, setParentFolderId, selectedPickerFile, sortBy, sortOrder, setSortOrders, }: {
|
|
2
|
+
declare const FolderGridView: ({ folders, foldersFetching, hasNextPage, fetchNextPage, files, selectedFileIds, selectedFolderIds, setSelectedItems, isImagePicker, setSelectedFile, setParentFolderId, selectedPickerFile, sortBy, sortOrder, setSortOrders, setSelectedKeys, }: {
|
|
3
3
|
folders: FolderEntity[];
|
|
4
4
|
foldersFetching: boolean;
|
|
5
5
|
hasNextPage: boolean;
|
|
@@ -15,5 +15,6 @@ declare const FolderGridView: ({ folders, foldersFetching, hasNextPage, fetchNex
|
|
|
15
15
|
sortBy: SortByKeys;
|
|
16
16
|
sortOrder: SortOrders;
|
|
17
17
|
setSortOrders: (newSortBy: SortByKeys, newSortOrder: SortOrders) => void;
|
|
18
|
+
setSelectedKeys?: (keys: string | string[]) => void;
|
|
18
19
|
}) => JSX.Element;
|
|
19
20
|
export default FolderGridView;
|
|
@@ -4,7 +4,7 @@ import _, { filter, get, includes } from "lodash";
|
|
|
4
4
|
import { FaFolder, FaSort } from "react-icons/fa";
|
|
5
5
|
import LoadMoreItems from "../common/LoadMoreItems";
|
|
6
6
|
import FolderMenuOptions from "./FolderMenuOptions";
|
|
7
|
-
import { FETCH_ENTITY_SCREEN,
|
|
7
|
+
import { FETCH_ENTITY_SCREEN, } from "../utilities/constants/routes";
|
|
8
8
|
import FilesGridView from "./FilesGridView";
|
|
9
9
|
import { useRef, useState } from "react";
|
|
10
10
|
import ActionsBar from "./ActionBar";
|
|
@@ -14,7 +14,7 @@ import useAppParams from "../utilities/useAppParams";
|
|
|
14
14
|
import { ArrowDownOutlined, ArrowUpOutlined } from "@ant-design/icons";
|
|
15
15
|
const FaFolderIcon = FaFolder;
|
|
16
16
|
const FaSortIcon = FaSort;
|
|
17
|
-
const FolderGridView = ({ folders, foldersFetching, hasNextPage, fetchNextPage, files, selectedFileIds, selectedFolderIds, setSelectedItems, isImagePicker, setSelectedFile, setParentFolderId, selectedPickerFile, sortBy, sortOrder, setSortOrders, }) => {
|
|
17
|
+
const FolderGridView = ({ folders, foldersFetching, hasNextPage, fetchNextPage, files, selectedFileIds, selectedFolderIds, setSelectedItems, isImagePicker, setSelectedFile, setParentFolderId, selectedPickerFile, sortBy, sortOrder, setSortOrders, setSelectedKeys, }) => {
|
|
18
18
|
const navigate = useAppNavigate();
|
|
19
19
|
const [state, setState] = useState({
|
|
20
20
|
selectedFile: {},
|
|
@@ -23,6 +23,7 @@ const FolderGridView = ({ folders, foldersFetching, hasNextPage, fetchNextPage,
|
|
|
23
23
|
const { showPreviewModal, selectedFile } = state;
|
|
24
24
|
const { type } = useAppParams();
|
|
25
25
|
const clickTimer = useRef(null);
|
|
26
|
+
const lastClickedId = useRef(null);
|
|
26
27
|
const handleClick = (folder) => {
|
|
27
28
|
const id = get(folder, "_id");
|
|
28
29
|
const fileType = get(folder, "type", EntityType.FOLDER);
|
|
@@ -40,18 +41,36 @@ const FolderGridView = ({ folders, foldersFetching, hasNextPage, fetchNextPage,
|
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
else {
|
|
43
|
-
if (
|
|
44
|
-
|
|
44
|
+
// Check if this is a double click (same item clicked within timer window)
|
|
45
|
+
const isDoubleClick = clickTimer.current !== null && lastClickedId.current === id;
|
|
46
|
+
if (isDoubleClick) {
|
|
47
|
+
// Double click detected - clear timer and handle double click action
|
|
48
|
+
if (clickTimer.current) {
|
|
49
|
+
clearTimeout(clickTimer.current);
|
|
50
|
+
}
|
|
45
51
|
clickTimer.current = null;
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
lastClickedId.current = null;
|
|
53
|
+
if (fileType === EntityType.FOLDER) {
|
|
54
|
+
// Double click on folder: update tree selection (similar to FolderTree's handleSelect)
|
|
55
|
+
// This will automatically update the DriveContainer to show the folder's contents
|
|
56
|
+
if (setSelectedKeys) {
|
|
57
|
+
setSelectedKeys(id);
|
|
58
|
+
}
|
|
48
59
|
}
|
|
49
|
-
if (fileType === EntityType.FILE && type !== DriveModes.TRASH) {
|
|
60
|
+
else if (fileType === EntityType.FILE && type !== DriveModes.TRASH) {
|
|
61
|
+
// Double click on file: show preview
|
|
50
62
|
setState((prevState) => (Object.assign(Object.assign({}, prevState), { selectedFile: folder, showPreviewModal: true })));
|
|
51
63
|
}
|
|
52
64
|
return;
|
|
53
65
|
}
|
|
66
|
+
// Single click - set timer for selection
|
|
67
|
+
if (clickTimer.current) {
|
|
68
|
+
// Different item clicked, clear previous timer
|
|
69
|
+
clearTimeout(clickTimer.current);
|
|
70
|
+
}
|
|
71
|
+
lastClickedId.current = id;
|
|
54
72
|
clickTimer.current = setTimeout(() => {
|
|
73
|
+
// Single click action: toggle selection
|
|
55
74
|
if (fileType === EntityType.FILE) {
|
|
56
75
|
const alreadySelected = includes(selectedFileIds, id);
|
|
57
76
|
setSelectedItems({
|
|
@@ -69,6 +88,7 @@ const FolderGridView = ({ folders, foldersFetching, hasNextPage, fetchNextPage,
|
|
|
69
88
|
});
|
|
70
89
|
}
|
|
71
90
|
clickTimer.current = null;
|
|
91
|
+
lastClickedId.current = null;
|
|
72
92
|
}, 250);
|
|
73
93
|
}
|
|
74
94
|
};
|