@griddo/ax 11.4.24 → 11.5.0

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 (103) hide show
  1. package/package.json +2 -2
  2. package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +52 -34
  3. package/src/api/folders.tsx +62 -0
  4. package/src/api/images.tsx +159 -1
  5. package/src/api/index.tsx +2 -0
  6. package/src/api/sites.tsx +1 -1
  7. package/src/components/Fields/ImageField/index.tsx +7 -6
  8. package/src/components/Fields/Wysiwyg/index.tsx +5 -3
  9. package/src/components/FileGallery/index.tsx +22 -16
  10. package/src/components/FileGallery/style.tsx +18 -4
  11. package/src/components/Gallery/FolderItem/index.tsx +39 -0
  12. package/src/components/Gallery/FolderItem/style.tsx +31 -0
  13. package/src/components/Gallery/GalleryPanel/DetailPanel/index.tsx +112 -237
  14. package/src/components/Gallery/GalleryPanel/DetailPanel/style.tsx +77 -61
  15. package/src/components/Gallery/GalleryPanel/index.tsx +37 -32
  16. package/src/components/Gallery/GalleryPanel/style.tsx +1 -0
  17. package/src/components/Gallery/index.tsx +267 -163
  18. package/src/components/Gallery/style.tsx +200 -135
  19. package/src/components/Loading/index.tsx +7 -2
  20. package/src/components/Loading/style.tsx +2 -2
  21. package/src/components/TableFilters/StateFilter/index.tsx +1 -1
  22. package/src/containers/FileDrive/actions.tsx +1 -2
  23. package/src/containers/FileDrive/interfaces.tsx +3 -3
  24. package/src/containers/Gallery/actions.tsx +359 -13
  25. package/src/containers/Gallery/constants.tsx +12 -0
  26. package/src/containers/Gallery/interfaces.tsx +44 -1
  27. package/src/containers/Gallery/reducer.tsx +27 -3
  28. package/src/containers/Sites/actions.tsx +2 -2
  29. package/src/containers/Users/actions.tsx +9 -6
  30. package/src/helpers/files.tsx +37 -1
  31. package/src/helpers/index.tsx +3 -1
  32. package/src/modules/App/Routing/NavMenu/NavItem/NavSubItem/style.tsx +7 -2
  33. package/src/modules/App/Routing/NavMenu/index.tsx +2 -1
  34. package/src/modules/FileDrive/FileFilters/SortBy/style.tsx +3 -0
  35. package/src/modules/FileDrive/FileModal/DetailPanel/UsageContent/index.tsx +1 -1
  36. package/src/modules/FileDrive/FolderTree/MenuItem/index.tsx +14 -10
  37. package/src/modules/FileDrive/FolderTree/MenuItem/style.tsx +8 -1
  38. package/src/modules/FileDrive/FolderTree/MenuList/index.tsx +9 -2
  39. package/src/modules/FileDrive/index.tsx +45 -28
  40. package/src/modules/FileDrive/style.tsx +7 -6
  41. package/src/modules/GlobalEditor/index.tsx +1 -1
  42. package/src/modules/MediaGallery/Breadcrumb/index.tsx +42 -0
  43. package/src/modules/MediaGallery/Breadcrumb/style.tsx +18 -0
  44. package/src/modules/MediaGallery/BulkGridHeader/GridHeader/index.tsx +37 -0
  45. package/src/modules/MediaGallery/BulkGridHeader/GridHeader/style.tsx +19 -0
  46. package/src/modules/MediaGallery/BulkGridHeader/index.tsx +35 -0
  47. package/src/modules/MediaGallery/BulkGridHeader/style.tsx +17 -0
  48. package/src/modules/MediaGallery/BulkListHeader/TableHeader/index.tsx +46 -0
  49. package/src/modules/MediaGallery/BulkListHeader/TableHeader/style.tsx +53 -0
  50. package/src/modules/MediaGallery/BulkListHeader/index.tsx +42 -0
  51. package/src/modules/MediaGallery/BulkListHeader/style.tsx +17 -0
  52. package/src/modules/MediaGallery/FolderItem/index.tsx +191 -0
  53. package/src/modules/MediaGallery/FolderItem/style.tsx +39 -0
  54. package/src/modules/MediaGallery/FolderTree/MenuItem/index.tsx +87 -0
  55. package/src/modules/MediaGallery/FolderTree/MenuItem/style.tsx +76 -0
  56. package/src/modules/MediaGallery/FolderTree/MenuList/index.tsx +34 -0
  57. package/src/modules/MediaGallery/FolderTree/index.tsx +62 -0
  58. package/src/modules/MediaGallery/FolderTree/style.tsx +49 -0
  59. package/src/modules/MediaGallery/GridItem/index.tsx +149 -0
  60. package/src/modules/MediaGallery/GridItem/style.tsx +74 -0
  61. package/src/modules/MediaGallery/ImageDragAndDrop/index.tsx +299 -0
  62. package/src/{components/Gallery/GalleryPanel/GalleryDragAndDrop → modules/MediaGallery/ImageDragAndDrop}/style.tsx +114 -33
  63. package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/Orientation/style.tsx +2 -1
  64. package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/SortBy/style.tsx +3 -0
  65. package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/Type/style.tsx +1 -0
  66. package/src/modules/MediaGallery/ImageFilters/Usage/index.tsx +75 -0
  67. package/src/modules/MediaGallery/ImageFilters/Usage/style.tsx +30 -0
  68. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/Item/index.tsx +35 -0
  69. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/Item/style.tsx +43 -0
  70. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/ItemGroup/index.tsx +44 -0
  71. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/ItemGroup/style.tsx +34 -0
  72. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/index.tsx +233 -0
  73. package/src/modules/MediaGallery/ImageModal/DetailPanel/UsageContent/style.tsx +21 -0
  74. package/src/modules/MediaGallery/ImageModal/DetailPanel/index.tsx +209 -0
  75. package/src/modules/MediaGallery/ImageModal/DetailPanel/style.tsx +81 -0
  76. package/src/modules/MediaGallery/ImageModal/index.tsx +168 -0
  77. package/src/modules/MediaGallery/ImageModal/style.tsx +106 -0
  78. package/src/modules/MediaGallery/ListItem/index.tsx +181 -0
  79. package/src/modules/MediaGallery/ListItem/style.tsx +100 -0
  80. package/src/modules/MediaGallery/UploadItem/index.tsx +32 -0
  81. package/src/modules/MediaGallery/UploadItem/style.tsx +42 -0
  82. package/src/modules/MediaGallery/atoms.tsx +196 -0
  83. package/src/{components/Gallery → modules/MediaGallery}/hooks.tsx +10 -4
  84. package/src/modules/MediaGallery/index.tsx +892 -0
  85. package/src/modules/MediaGallery/style.tsx +216 -0
  86. package/src/{components/Gallery → modules/MediaGallery}/utils.tsx +1 -1
  87. package/src/modules/StructuredData/Form/index.tsx +2 -2
  88. package/src/routes/multisite.tsx +24 -4
  89. package/src/routes/site.tsx +24 -4
  90. package/src/types/files.tsx +98 -0
  91. package/src/types/index.tsx +33 -91
  92. package/src/__tests__/components/Gallery/Gallery.test.tsx +0 -559
  93. package/src/__tests__/components/Gallery/GalleryFilters/Orientation/Orientation.test.tsx +0 -54
  94. package/src/__tests__/components/Gallery/GalleryFilters/SortBy/SortBy.test.tsx +0 -118
  95. package/src/__tests__/components/Gallery/GalleryFilters/Type/Type.test.tsx +0 -54
  96. package/src/__tests__/components/Gallery/GalleryPanel/DetailPanel/DetailPanel.test.tsx +0 -869
  97. package/src/__tests__/components/Gallery/GalleryPanel/GalleryDragAndDrop/GalleryDragAndDrop.test.tsx +0 -249
  98. package/src/__tests__/components/Gallery/GalleryPanel/GalleryPanel.test.tsx +0 -55
  99. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/index.tsx +0 -239
  100. package/src/containers/FileDrive/utils.tsx +0 -37
  101. /package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/Orientation/index.tsx +0 -0
  102. /package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/SortBy/index.tsx +0 -0
  103. /package/src/{components/Gallery/GalleryFilters → modules/MediaGallery/ImageFilters}/Type/index.tsx +0 -0
@@ -0,0 +1,196 @@
1
+ import React from "react";
2
+
3
+ import { IModal } from "@ax/types";
4
+ import { Modal, FieldsBehavior } from "@ax/components";
5
+ import FolderTree from "./FolderTree";
6
+ import { IFolderFormState } from ".";
7
+
8
+ import * as S from "./style";
9
+
10
+ const NewFolderModal = (props: INewModalProps): JSX.Element => {
11
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, form, setForm } = props;
12
+
13
+ const setNameValue = (name: string) => setForm({ ...form, name });
14
+ const setFolder = (folderID: number | null) => setForm({ ...form, folderID });
15
+
16
+ const handleKeyDown = (e: React.KeyboardEvent) => {
17
+ if (e.key === "Enter") {
18
+ mainModalAction?.onClick();
19
+ }
20
+ };
21
+
22
+ return (
23
+ <Modal
24
+ isOpen={isOpen}
25
+ hide={toggleModal}
26
+ title="Create New Folder"
27
+ secondaryAction={secondaryModalAction}
28
+ mainAction={mainModalAction}
29
+ size="S"
30
+ height={640}
31
+ >
32
+ <S.ModalContent>
33
+ <FieldsBehavior
34
+ title="Folder name"
35
+ name="name"
36
+ fieldType="TextField"
37
+ value={form.name}
38
+ placeholder="Type a name of the new folder"
39
+ onChange={setNameValue}
40
+ onKeyDown={handleKeyDown}
41
+ autoComplete="nodelay"
42
+ focus
43
+ />
44
+ <FolderTree folderID={form.folderID || 0} onClick={setFolder} />
45
+ </S.ModalContent>
46
+ </Modal>
47
+ );
48
+ };
49
+
50
+ const DeleteFolderModal = (props: IDeleteModalProps): JSX.Element => {
51
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, title } = props;
52
+
53
+ return (
54
+ <Modal
55
+ isOpen={isOpen}
56
+ hide={toggleModal}
57
+ title="Delete Folder?"
58
+ secondaryAction={secondaryModalAction}
59
+ mainAction={mainModalAction}
60
+ size="S"
61
+ height={240}
62
+ >
63
+ <S.ModalContent>
64
+ Are you sure you want to delete <strong>{title} folder</strong>? All documents inside the folder will also be
65
+ deleted. This action <strong>cannot be undone</strong>.
66
+ </S.ModalContent>
67
+ </Modal>
68
+ );
69
+ };
70
+
71
+ const RenameFolderModal = (props: IRenameModalProps): JSX.Element => {
72
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, value, setValue } = props;
73
+
74
+ const setNameValue = (name: string) => setValue(name);
75
+
76
+ const handleKeyDown = (e: React.KeyboardEvent) => {
77
+ if (e.key === "Enter") {
78
+ mainModalAction?.onClick();
79
+ }
80
+ };
81
+
82
+ return (
83
+ <Modal
84
+ isOpen={isOpen}
85
+ hide={toggleModal}
86
+ title="Rename Folder"
87
+ secondaryAction={secondaryModalAction}
88
+ mainAction={mainModalAction}
89
+ size="S"
90
+ height={244}
91
+ >
92
+ <S.ModalContent>
93
+ <S.NoMarginFieldsBehavior
94
+ title="Folder name"
95
+ name="name"
96
+ fieldType="TextField"
97
+ value={value}
98
+ onChange={setNameValue}
99
+ onKeyDown={handleKeyDown}
100
+ autoComplete="nodelay"
101
+ focus
102
+ />
103
+ </S.ModalContent>
104
+ </Modal>
105
+ );
106
+ };
107
+
108
+ const DeleteFileModal = (props: IDeleteModalProps): JSX.Element => {
109
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, title, isChild } = props;
110
+
111
+ return (
112
+ <Modal
113
+ isOpen={isOpen}
114
+ hide={toggleModal}
115
+ title="Delete image?"
116
+ secondaryAction={secondaryModalAction}
117
+ mainAction={mainModalAction}
118
+ size="S"
119
+ height={240}
120
+ isChild={isChild}
121
+ >
122
+ <S.ModalContent>
123
+ Are you sure you want to delete <strong>{title}</strong>?<br />
124
+ This action <strong>cannot be undone</strong>.
125
+ </S.ModalContent>
126
+ </Modal>
127
+ );
128
+ };
129
+
130
+ const MoveItemModal = (props: IMoveModalProps): JSX.Element => {
131
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, folder, setFolder, hidden, hideRoot } = props;
132
+
133
+ const handleSetFolder = (folderID: number) => setFolder(folderID);
134
+
135
+ return (
136
+ <Modal
137
+ isOpen={isOpen}
138
+ hide={toggleModal}
139
+ title="Move to"
140
+ secondaryAction={secondaryModalAction}
141
+ mainAction={mainModalAction}
142
+ size="S"
143
+ height={528}
144
+ >
145
+ <S.ModalContent>
146
+ <FolderTree folderID={folder || null} onClick={handleSetFolder} hidden={hidden} hideRoot={hideRoot} />
147
+ </S.ModalContent>
148
+ </Modal>
149
+ );
150
+ };
151
+
152
+ const NotSavedModal = (props: IModal): JSX.Element => {
153
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction } = props;
154
+
155
+ return (
156
+ <Modal
157
+ isOpen={isOpen}
158
+ hide={toggleModal}
159
+ size="S"
160
+ title="Unsaved changes"
161
+ mainAction={mainModalAction}
162
+ secondaryAction={secondaryModalAction}
163
+ isChild={true}
164
+ >
165
+ {
166
+ <S.ModalContent>
167
+ Some content is not saved on this file. If you exit without saving it, it will be lost. Do you want to discard
168
+ your changes?
169
+ </S.ModalContent>
170
+ }
171
+ </Modal>
172
+ );
173
+ };
174
+
175
+ interface INewModalProps extends IModal {
176
+ form: IFolderFormState;
177
+ setForm(form: IFolderFormState): void;
178
+ }
179
+
180
+ interface IRenameModalProps extends IModal {
181
+ value: string;
182
+ setValue(value: string): void;
183
+ }
184
+
185
+ interface IDeleteModalProps extends IModal {
186
+ title: string;
187
+ }
188
+
189
+ interface IMoveModalProps extends IModal {
190
+ folder: number | null;
191
+ setFolder(folderID: number | null): void;
192
+ hidden?: number[];
193
+ hideRoot?: boolean;
194
+ }
195
+
196
+ export { NewFolderModal, DeleteFolderModal, DeleteFileModal, MoveItemModal, RenameFolderModal, NotSavedModal };
@@ -27,13 +27,14 @@ const useFilterQuery = () => {
27
27
  orientation: [],
28
28
  order: [],
29
29
  format: [],
30
+ usage: [],
30
31
  };
31
32
 
32
33
  const [query, setQuery] = useState(initialQueryValues);
33
34
  const [currentFilterQuery, setCurrentFilterQuery] = useState("");
34
35
 
35
36
  const setFilterQuery = (filterValues: Record<string, IQueryValue[]>) => {
36
- const { orientation, order, format } = filterValues;
37
+ const { orientation, order, format, usage } = filterValues;
37
38
  let filterQuery = "";
38
39
 
39
40
  const currentQuery = (pointer: string, values: IQueryValue[]): string => {
@@ -44,8 +45,8 @@ const useFilterQuery = () => {
44
45
  return !stringValues.length
45
46
  ? filterQuery
46
47
  : filterQuery.length
47
- ? filterQuery.concat(`&${pointer}=${stringValues}`)
48
- : `&${pointer}=${stringValues}`;
48
+ ? filterQuery.concat(`&${pointer}=${stringValues}`)
49
+ : `${pointer}=${stringValues}`;
49
50
  };
50
51
 
51
52
  if (orientation) {
@@ -60,16 +61,21 @@ const useFilterQuery = () => {
60
61
  filterQuery = currentQuery("format", format);
61
62
  }
62
63
 
64
+ if (usage) {
65
+ filterQuery = currentQuery("usage", usage);
66
+ }
67
+
63
68
  setCurrentFilterQuery(filterQuery);
64
69
  };
65
70
 
66
71
  const setFiltersSelection = (pointer: string, filter: IQueryValue[], isAscendent?: boolean) => {
67
- const { orientation, order, format } = query;
72
+ const { orientation, order, format, usage } = query;
68
73
  const orderMethod = isAscendent ? "asc" : "desc";
69
74
  const filterValues = {
70
75
  orientation: pointer === "orientation" ? filter : orientation,
71
76
  order: pointer === "order" ? [{ value: `${filter[0].value}-${orderMethod}`, label: filter[0].label }] : order,
72
77
  format: pointer === "format" ? filter : format,
78
+ usage: pointer === "usage" ? filter : usage,
73
79
  };
74
80
 
75
81
  setQuery(filterValues);