@griddo/ax 11.5.1 → 11.5.2
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/package.json +2 -2
- package/src/containers/Gallery/actions.tsx +5 -5
- package/src/modules/MediaGallery/Breadcrumb/index.tsx +2 -2
- package/src/modules/MediaGallery/FolderTree/index.tsx +1 -1
- package/src/modules/MediaGallery/GridItem/style.tsx +1 -1
- package/src/modules/MediaGallery/index.tsx +57 -18
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@griddo/ax",
|
|
3
3
|
"description": "Griddo Author Experience",
|
|
4
|
-
"version": "11.5.
|
|
4
|
+
"version": "11.5.2",
|
|
5
5
|
"authors": [
|
|
6
6
|
"Álvaro Sánchez' <alvaro.sanches@secuoyas.com>",
|
|
7
7
|
"Diego M. Béjar <diego.bejar@secuoyas.com>",
|
|
@@ -224,5 +224,5 @@
|
|
|
224
224
|
"publishConfig": {
|
|
225
225
|
"access": "public"
|
|
226
226
|
},
|
|
227
|
-
"gitHead": "
|
|
227
|
+
"gitHead": "9e842b52cd5f320535bb5b6a0cedbbe8e7eb1319"
|
|
228
228
|
}
|
|
@@ -253,12 +253,12 @@ function getFolderContent(params: IGetFolderParams): (dispatch: Dispatch, getSta
|
|
|
253
253
|
const { folderID, loading, infinite = false } = params;
|
|
254
254
|
const responseActions = {
|
|
255
255
|
handleSuccess: (data: IImageFolder) => {
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
const imagesData =
|
|
257
|
+
infinite && currentFolderContent
|
|
258
258
|
? [...currentFolderContent.images.items, ...data.images.items]
|
|
259
|
-
: [];
|
|
260
|
-
|
|
261
|
-
dispatch(setCurrentFolderContent(data));
|
|
259
|
+
: [...data.images.items];
|
|
260
|
+
|
|
261
|
+
dispatch(setCurrentFolderContent({ ...data, images: { ...data.images, items: imagesData } }));
|
|
262
262
|
updateBreadcrumb(folderID)(dispatch, getState);
|
|
263
263
|
dispatch(setUploadSuccess(false));
|
|
264
264
|
},
|
|
@@ -12,11 +12,11 @@ const Breadcrumb = (props: IBreadcrumbProps): JSX.Element => {
|
|
|
12
12
|
<S.BreadcrumbGroup data-testid="file-breadcrumb">
|
|
13
13
|
<React.Fragment key="root">
|
|
14
14
|
<S.BreadcrumbItem onClick={handleRootClick} isLastItem={false}>
|
|
15
|
-
All
|
|
15
|
+
All Media
|
|
16
16
|
</S.BreadcrumbItem>
|
|
17
17
|
{"/"}
|
|
18
18
|
</React.Fragment>
|
|
19
|
-
{breadcrumb.slice(0).map((item: IFolderTree, index: number, arr:
|
|
19
|
+
{breadcrumb.slice(0).map((item: IFolderTree, index: number, arr: IFolderTree[]) => {
|
|
20
20
|
const { id, name } = item;
|
|
21
21
|
const isLastItem = breadcrumb.length === index + 1;
|
|
22
22
|
const handleClick = () => onClick(id);
|
|
@@ -33,7 +33,7 @@ const ImageWrapper = styled.div<{ selected: boolean }>`
|
|
|
33
33
|
border: 1px solid;
|
|
34
34
|
border-color: ${(p) => (p.selected === true ? p.theme.color.interactive02 : p.theme.color.uiLine)};
|
|
35
35
|
flex-grow: 1;
|
|
36
|
-
max-width:
|
|
36
|
+
max-width: 500px;
|
|
37
37
|
min-width: 150px;
|
|
38
38
|
:before {
|
|
39
39
|
content: "";
|
|
@@ -81,8 +81,9 @@ const MediaGallery = (props: IProps) => {
|
|
|
81
81
|
const { images, folders } = currentFolderContent || initState;
|
|
82
82
|
const { items, totalItems } = images;
|
|
83
83
|
|
|
84
|
-
const itemsPerPage =
|
|
84
|
+
const itemsPerPage = 50;
|
|
85
85
|
const firstPage = 1;
|
|
86
|
+
const lastPage = Math.ceil(totalItems / itemsPerPage);
|
|
86
87
|
const [page, setPage] = useState(firstPage);
|
|
87
88
|
const [isPanelOpen, setPanelOpen] = useState(false);
|
|
88
89
|
const [fileSelected, setFileSelected] = useState<IImage | null>(null);
|
|
@@ -90,8 +91,13 @@ const MediaGallery = (props: IProps) => {
|
|
|
90
91
|
const imagesIds: number[] = (items && items.map((image) => image.id)) || [];
|
|
91
92
|
const [galleryItems, setGalleryItems] = useState<number[]>(imagesIds);
|
|
92
93
|
const [galleryDelete, setGalleryDelete] = useState(true);
|
|
93
|
-
const [progressItems, setProgressItems] = useState<
|
|
94
|
+
const [progressItems, setProgressItems] = useState<IProgressState>({
|
|
95
|
+
tab: selectedTab,
|
|
96
|
+
folder: currentFolderID,
|
|
97
|
+
items: [],
|
|
98
|
+
});
|
|
94
99
|
const [wrapperWidth, setWrapperWidth] = useState<number>();
|
|
100
|
+
const [isLoadingMore, setIsLoadingMore] = useState(false);
|
|
95
101
|
const tableRef = useRef<HTMLDivElement>(null);
|
|
96
102
|
const contentRef = useRef<HTMLDivElement>(null);
|
|
97
103
|
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
@@ -174,6 +180,7 @@ const MediaGallery = (props: IProps) => {
|
|
|
174
180
|
return () => {
|
|
175
181
|
updateCurrentFolder(null);
|
|
176
182
|
updateTab("site");
|
|
183
|
+
setPage(firstPage);
|
|
177
184
|
};
|
|
178
185
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
179
186
|
}, []);
|
|
@@ -182,6 +189,7 @@ const MediaGallery = (props: IProps) => {
|
|
|
182
189
|
const handleGetContent = async () => {
|
|
183
190
|
const params = getParams();
|
|
184
191
|
await getFolderContent(params);
|
|
192
|
+
setIsLoadingMore(false);
|
|
185
193
|
};
|
|
186
194
|
const handleGetTree = async () => await getFoldersTree(siteID);
|
|
187
195
|
|
|
@@ -220,7 +228,13 @@ const MediaGallery = (props: IProps) => {
|
|
|
220
228
|
const onScroll = () => {
|
|
221
229
|
if (contentRef.current && isGrid) {
|
|
222
230
|
const { scrollTop, scrollHeight, clientHeight } = contentRef.current;
|
|
223
|
-
if (
|
|
231
|
+
if (
|
|
232
|
+
scrollTop + clientHeight + 100 >= scrollHeight &&
|
|
233
|
+
items.length < totalItems &&
|
|
234
|
+
page < lastPage &&
|
|
235
|
+
!isLoadingMore
|
|
236
|
+
) {
|
|
237
|
+
setIsLoadingMore(true);
|
|
224
238
|
setPage((currentPage) => currentPage + 1);
|
|
225
239
|
}
|
|
226
240
|
}
|
|
@@ -257,6 +271,7 @@ const MediaGallery = (props: IProps) => {
|
|
|
257
271
|
|
|
258
272
|
const handleBackClick = () => {
|
|
259
273
|
const parentID = breadcrumb.length >= 2 ? breadcrumb[breadcrumb.length - 2].id : null;
|
|
274
|
+
setPage(firstPage);
|
|
260
275
|
updateCurrentFolder(parentID);
|
|
261
276
|
};
|
|
262
277
|
|
|
@@ -305,7 +320,10 @@ const MediaGallery = (props: IProps) => {
|
|
|
305
320
|
let index = 0;
|
|
306
321
|
while (files.length) {
|
|
307
322
|
const handleProgress = (progress: number) => {
|
|
308
|
-
setProgressItems((prevState) =>
|
|
323
|
+
setProgressItems((prevState) => ({
|
|
324
|
+
...prevState,
|
|
325
|
+
items: [...prevState.items.slice(0, index), progress, ...prevState.items.slice(index + 1)],
|
|
326
|
+
}));
|
|
309
327
|
};
|
|
310
328
|
|
|
311
329
|
const file = files.shift();
|
|
@@ -321,11 +339,15 @@ const MediaGallery = (props: IProps) => {
|
|
|
321
339
|
isUploadOpen && toggleUploadModal();
|
|
322
340
|
|
|
323
341
|
const initialProgress = files.map(() => 0);
|
|
324
|
-
setProgressItems(initialProgress);
|
|
342
|
+
setProgressItems({ tab: selectedTab, folder: currentFolderID, items: initialProgress });
|
|
325
343
|
|
|
326
344
|
await uploadMultipleFiles(files);
|
|
327
345
|
|
|
328
|
-
setProgressItems([]);
|
|
346
|
+
setProgressItems((prevState) => ({ ...prevState, items: [] }));
|
|
347
|
+
|
|
348
|
+
updateTab(selectedTab);
|
|
349
|
+
updateCurrentFolder(currentFolderID);
|
|
350
|
+
|
|
329
351
|
const params = getParams();
|
|
330
352
|
await getFolderContent(params);
|
|
331
353
|
};
|
|
@@ -348,7 +370,8 @@ const MediaGallery = (props: IProps) => {
|
|
|
348
370
|
|
|
349
371
|
const handleDeleteFile = async (imageID: number) => {
|
|
350
372
|
const params = getParams();
|
|
351
|
-
const
|
|
373
|
+
const resetedParams = { ...params, page: firstPage, infinite: false, loading: true };
|
|
374
|
+
const isDeleted = await deleteImage(imageID, resetedParams);
|
|
352
375
|
if (isDeleted) {
|
|
353
376
|
toggleToast("1 Image deleted");
|
|
354
377
|
isOpen && handleCloseModal();
|
|
@@ -357,7 +380,8 @@ const MediaGallery = (props: IProps) => {
|
|
|
357
380
|
|
|
358
381
|
const handleBulkDeleteFile = async () => {
|
|
359
382
|
const params = getParams();
|
|
360
|
-
const
|
|
383
|
+
const resetedParams = { ...params, page: firstPage, infinite: false, loading: true };
|
|
384
|
+
const isDeleted = await deleteImage(selectedItems.all, resetedParams);
|
|
361
385
|
if (isDeleted) {
|
|
362
386
|
toggleToast(`${selectedItems.all.length} Image${selectedItems.all.length > 1 ? "s" : ""} deleted`);
|
|
363
387
|
resetBulkSelection();
|
|
@@ -367,7 +391,8 @@ const MediaGallery = (props: IProps) => {
|
|
|
367
391
|
|
|
368
392
|
const handleMoveImage = async (imageID: number, folderID: number | "root") => {
|
|
369
393
|
const params = getParams();
|
|
370
|
-
const
|
|
394
|
+
const resetedParams = { ...params, page: firstPage, infinite: false, loading: true };
|
|
395
|
+
const isMoved = await moveImage(imageID, folderID, resetedParams);
|
|
371
396
|
if (isMoved) {
|
|
372
397
|
toggleToast("1 Image moved to a folder");
|
|
373
398
|
}
|
|
@@ -375,7 +400,8 @@ const MediaGallery = (props: IProps) => {
|
|
|
375
400
|
|
|
376
401
|
const handleBulkMoveFile = async () => {
|
|
377
402
|
const params = getParams();
|
|
378
|
-
const
|
|
403
|
+
const resetedParams = { ...params, page: firstPage, infinite: false, loading: true };
|
|
404
|
+
const isMoved = await moveImage(selectedItems.all, selectedFolder || "root", resetedParams);
|
|
379
405
|
if (isMoved) {
|
|
380
406
|
toggleMoveModal();
|
|
381
407
|
toggleToast(`${selectedItems.all.length} Image${selectedItems.all.length > 1 ? "s" : ""} moved to a folder`);
|
|
@@ -414,6 +440,7 @@ const MediaGallery = (props: IProps) => {
|
|
|
414
440
|
|
|
415
441
|
const handleUpdateCurrentFolder = (folderID: number | null) => {
|
|
416
442
|
setSearchQuery("");
|
|
443
|
+
setPage(firstPage);
|
|
417
444
|
updateCurrentFolder(folderID);
|
|
418
445
|
};
|
|
419
446
|
|
|
@@ -480,11 +507,14 @@ const MediaGallery = (props: IProps) => {
|
|
|
480
507
|
/>
|
|
481
508
|
);
|
|
482
509
|
|
|
510
|
+
const isCurrentUploadingFolder = progressItems.tab === selectedTab && progressItems.folder === currentFolderID;
|
|
511
|
+
|
|
483
512
|
const gridList = (
|
|
484
513
|
<S.GridWrapper>
|
|
485
|
-
{
|
|
486
|
-
|
|
487
|
-
|
|
514
|
+
{isCurrentUploadingFolder &&
|
|
515
|
+
progressItems.items.map((progress: number, index: number) => (
|
|
516
|
+
<UploadItem uploadPercentage={progress} grid={true} key={index} />
|
|
517
|
+
))}
|
|
488
518
|
{items &&
|
|
489
519
|
items.map((image: IImage) => {
|
|
490
520
|
const isItemSelected = isSelected(image.id);
|
|
@@ -523,9 +553,10 @@ const MediaGallery = (props: IProps) => {
|
|
|
523
553
|
className="no-padding"
|
|
524
554
|
>
|
|
525
555
|
<>
|
|
526
|
-
{
|
|
527
|
-
|
|
528
|
-
|
|
556
|
+
{isCurrentUploadingFolder &&
|
|
557
|
+
progressItems.items.map((progress: number, index: number) => (
|
|
558
|
+
<UploadItem uploadPercentage={progress} grid={false} key={index} />
|
|
559
|
+
))}
|
|
529
560
|
{items &&
|
|
530
561
|
items.map((image: IImage) => {
|
|
531
562
|
const isItemSelected = isSelected(image.id);
|
|
@@ -734,8 +765,10 @@ const MediaGallery = (props: IProps) => {
|
|
|
734
765
|
)}
|
|
735
766
|
{!hasFolders && isRoot && !isSearching && <NewFolderButton />}
|
|
736
767
|
</S.SectionHeader>
|
|
737
|
-
{totalItems > 0
|
|
738
|
-
|
|
768
|
+
{(totalItems > 0 || progressItems.items.length > 0) && (
|
|
769
|
+
<S.DocumentsWrapper>{isGrid ? gridList : listTable}</S.DocumentsWrapper>
|
|
770
|
+
)}
|
|
771
|
+
{totalItems === 0 && progressItems.items.length == 0 && !hasFolders && (
|
|
739
772
|
<S.EmptyStateWrapper data-testid="empty-state" margin={!isRoot}>
|
|
740
773
|
{isSearching && <EmptyState {...emptySearchStateProps} />}
|
|
741
774
|
{!isSearching && isRoot && <EmptyState {...emptyProps} />}
|
|
@@ -862,6 +895,12 @@ export interface IImageFormState {
|
|
|
862
895
|
tags: string[];
|
|
863
896
|
}
|
|
864
897
|
|
|
898
|
+
interface IProgressState {
|
|
899
|
+
tab: "global" | "site";
|
|
900
|
+
folder: number | null;
|
|
901
|
+
items: number[];
|
|
902
|
+
}
|
|
903
|
+
|
|
865
904
|
const mapDispatchToProps = {
|
|
866
905
|
getSiteImages: galleryActions.getSiteImages,
|
|
867
906
|
getFolderContent: galleryActions.getFolderContent,
|