@webiny/app-aco 5.36.2 → 5.37.0-beta.1

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 (219) hide show
  1. package/Folders.d.ts +2 -0
  2. package/Folders.js +22 -0
  3. package/Folders.js.map +1 -0
  4. package/components/Dialogs/DialogCreate.d.ts +2 -3
  5. package/components/Dialogs/DialogCreate.js +32 -35
  6. package/components/Dialogs/DialogCreate.js.map +1 -1
  7. package/components/Dialogs/DialogDelete.d.ts +3 -3
  8. package/components/Dialogs/DialogDelete.js +1 -1
  9. package/components/Dialogs/DialogDelete.js.map +1 -1
  10. package/components/Dialogs/DialogMove.d.ts +4 -5
  11. package/components/Dialogs/DialogMove.js +22 -30
  12. package/components/Dialogs/DialogMove.js.map +1 -1
  13. package/components/Dialogs/DialogUpdate.d.ts +2 -2
  14. package/components/Dialogs/DialogUpdate.js +9 -13
  15. package/components/Dialogs/DialogUpdate.js.map +1 -1
  16. package/components/Dialogs/index.js.map +1 -1
  17. package/components/Dialogs/styled.js.map +1 -1
  18. package/components/FolderGrid/ActionDelete.js.map +1 -1
  19. package/components/FolderGrid/ActionEdit.js.map +1 -1
  20. package/components/FolderGrid/Folder.js.map +1 -1
  21. package/components/FolderGrid/FolderGrid.js.map +1 -1
  22. package/components/FolderGrid/index.js.map +1 -1
  23. package/components/FolderGrid/styled.js.map +1 -1
  24. package/components/FolderTree/ButtonCreate/index.js +1 -1
  25. package/components/FolderTree/ButtonCreate/index.js.map +1 -1
  26. package/components/FolderTree/ButtonCreate/styled.js.map +1 -1
  27. package/components/FolderTree/Empty/index.js.map +1 -1
  28. package/components/FolderTree/Empty/styled.js.map +1 -1
  29. package/components/FolderTree/List/index.d.ts +4 -8
  30. package/components/FolderTree/List/index.js +27 -30
  31. package/components/FolderTree/List/index.js.map +1 -1
  32. package/components/FolderTree/List/utils.d.ts +3 -3
  33. package/components/FolderTree/List/utils.js +6 -18
  34. package/components/FolderTree/List/utils.js.map +1 -1
  35. package/components/FolderTree/Loader/index.d.ts +4 -2
  36. package/components/FolderTree/Loader/index.js +3 -2
  37. package/components/FolderTree/Loader/index.js.map +1 -1
  38. package/components/FolderTree/Loader/styled.js +2 -2
  39. package/components/FolderTree/Loader/styled.js.map +1 -1
  40. package/components/FolderTree/MenuActions/index.js.map +1 -1
  41. package/components/FolderTree/MenuActions/styled.js.map +1 -1
  42. package/components/FolderTree/Node/index.d.ts +7 -6
  43. package/components/FolderTree/Node/index.js +25 -10
  44. package/components/FolderTree/Node/index.js.map +1 -1
  45. package/components/FolderTree/Node/styled.js +1 -1
  46. package/components/FolderTree/Node/styled.js.map +1 -1
  47. package/components/FolderTree/NodePreview/index.d.ts +2 -2
  48. package/components/FolderTree/NodePreview/index.js +2 -1
  49. package/components/FolderTree/NodePreview/index.js.map +1 -1
  50. package/components/FolderTree/NodePreview/styled.js.map +1 -1
  51. package/components/FolderTree/Placeholder/index.d.ts +2 -2
  52. package/components/FolderTree/Placeholder/index.js.map +1 -1
  53. package/components/FolderTree/Placeholder/styled.js.map +1 -1
  54. package/components/FolderTree/index.d.ts +7 -10
  55. package/components/FolderTree/index.js +30 -30
  56. package/components/FolderTree/index.js.map +1 -1
  57. package/components/FolderTree/styled.js +1 -1
  58. package/components/FolderTree/styled.js.map +1 -1
  59. package/components/Search/Search.d.ts +7 -0
  60. package/components/Search/Search.js +19 -0
  61. package/components/Search/Search.js.map +1 -0
  62. package/components/Search/index.d.ts +1 -0
  63. package/components/{TagList → Search}/index.js +4 -4
  64. package/components/Search/index.js.map +1 -0
  65. package/components/Search/styled.d.ts +7 -0
  66. package/components/Search/styled.js +13 -0
  67. package/components/Search/styled.js.map +1 -0
  68. package/components/index.d.ts +1 -1
  69. package/components/index.js +4 -4
  70. package/components/index.js.map +1 -1
  71. package/constants.d.ts +1 -0
  72. package/constants.js +8 -0
  73. package/constants.js.map +1 -0
  74. package/contexts/DisplayError/index.d.ts +6 -0
  75. package/contexts/DisplayError/index.js +38 -0
  76. package/contexts/DisplayError/index.js.map +1 -0
  77. package/contexts/FoldersApi/FoldersApiProvider.d.ts +23 -0
  78. package/contexts/FoldersApi/FoldersApiProvider.js +332 -0
  79. package/contexts/FoldersApi/FoldersApiProvider.js.map +1 -0
  80. package/contexts/FoldersApi/index.d.ts +2 -0
  81. package/contexts/FoldersApi/index.js +27 -0
  82. package/contexts/FoldersApi/index.js.map +1 -0
  83. package/contexts/FoldersApi/useFoldersApi.d.ts +2 -0
  84. package/contexts/FoldersApi/useFoldersApi.js +15 -0
  85. package/contexts/FoldersApi/useFoldersApi.js.map +1 -0
  86. package/contexts/acoList.d.ts +34 -0
  87. package/contexts/acoList.js +298 -0
  88. package/contexts/acoList.js.map +1 -0
  89. package/contexts/app.d.ts +35 -0
  90. package/contexts/app.js +197 -0
  91. package/contexts/app.js.map +1 -0
  92. package/contexts/folders.d.ts +8 -6
  93. package/contexts/folders.js +142 -240
  94. package/contexts/folders.js.map +1 -1
  95. package/contexts/index.d.ts +1 -2
  96. package/contexts/index.js +12 -12
  97. package/contexts/index.js.map +1 -1
  98. package/contexts/navigateFolder.d.ts +18 -0
  99. package/contexts/navigateFolder.js +72 -0
  100. package/contexts/navigateFolder.js.map +1 -0
  101. package/contexts/navigateFolderWithRouter.d.ts +8 -0
  102. package/contexts/navigateFolderWithRouter.js +92 -0
  103. package/contexts/navigateFolderWithRouter.js.map +1 -0
  104. package/contexts/records.d.ts +17 -26
  105. package/contexts/records.js +524 -383
  106. package/contexts/records.js.map +1 -1
  107. package/dialogs/Dialog.d.ts +15 -0
  108. package/dialogs/Dialog.js +43 -0
  109. package/dialogs/Dialog.js.map +1 -0
  110. package/dialogs/dialogs.d.ts +31 -0
  111. package/dialogs/dialogs.js +120 -0
  112. package/dialogs/dialogs.js.map +1 -0
  113. package/dialogs/index.d.ts +4 -0
  114. package/dialogs/index.js +49 -0
  115. package/dialogs/index.js.map +1 -0
  116. package/dialogs/styled.d.ts +18 -0
  117. package/dialogs/styled.js +24 -0
  118. package/dialogs/styled.js.map +1 -0
  119. package/dialogs/useDialogsContext.d.ts +2 -0
  120. package/dialogs/useDialogsContext.js +16 -0
  121. package/dialogs/useDialogsContext.js.map +1 -0
  122. package/dialogs/useMoveToFolderDialog.d.ts +22 -0
  123. package/dialogs/useMoveToFolderDialog.js +74 -0
  124. package/dialogs/useMoveToFolderDialog.js.map +1 -0
  125. package/graphql/app.gql.d.ts +17 -0
  126. package/graphql/app.gql.js +14 -0
  127. package/graphql/app.gql.js.map +1 -0
  128. package/graphql/folders.gql.js +1 -1
  129. package/graphql/folders.gql.js.map +1 -1
  130. package/graphql/records/common.d.ts +4 -0
  131. package/graphql/records/common.js +47 -0
  132. package/graphql/records/common.js.map +1 -0
  133. package/graphql/records/createRecord.d.ts +2 -0
  134. package/graphql/records/createRecord.js +19 -0
  135. package/graphql/records/createRecord.js.map +1 -0
  136. package/graphql/records/deleteRecord.d.ts +2 -0
  137. package/graphql/records/deleteRecord.js +19 -0
  138. package/graphql/records/deleteRecord.js.map +1 -0
  139. package/graphql/records/getRecord.d.ts +2 -0
  140. package/graphql/records/getRecord.js +20 -0
  141. package/graphql/records/getRecord.js.map +1 -0
  142. package/graphql/records/listRecords.d.ts +2 -0
  143. package/graphql/records/listRecords.js +29 -0
  144. package/graphql/records/listRecords.js.map +1 -0
  145. package/graphql/records/listTags.d.ts +2 -0
  146. package/graphql/records/listTags.js +19 -0
  147. package/graphql/records/listTags.js.map +1 -0
  148. package/graphql/records/moveRecord.d.ts +2 -0
  149. package/graphql/records/moveRecord.js +19 -0
  150. package/graphql/records/moveRecord.js.map +1 -0
  151. package/graphql/records/types.d.ts +108 -0
  152. package/graphql/records/types.js +5 -0
  153. package/graphql/records/types.js.map +1 -0
  154. package/graphql/records/updateRecord.d.ts +2 -0
  155. package/graphql/records/updateRecord.js +19 -0
  156. package/graphql/records/updateRecord.js.map +1 -0
  157. package/graphql/records.gql.d.ts +7 -6
  158. package/graphql/records.gql.js +77 -20
  159. package/graphql/records.gql.js.map +1 -1
  160. package/handlers.d.ts +7 -2
  161. package/handlers.js +36 -2
  162. package/handlers.js.map +1 -1
  163. package/hooks/index.d.ts +3 -0
  164. package/hooks/index.js +39 -1
  165. package/hooks/index.js.map +1 -1
  166. package/hooks/useAcoApp.d.ts +2 -0
  167. package/hooks/useAcoApp.js +25 -0
  168. package/hooks/useAcoApp.js.map +1 -0
  169. package/hooks/useAcoList.d.ts +3 -33
  170. package/hooks/useAcoList.js +6 -141
  171. package/hooks/useAcoList.js.map +1 -1
  172. package/hooks/useFolders.d.ts +8 -8
  173. package/hooks/useFolders.js +15 -25
  174. package/hooks/useFolders.js.map +1 -1
  175. package/hooks/useNavigateFolder.d.ts +2 -0
  176. package/hooks/useNavigateFolder.js +16 -0
  177. package/hooks/useNavigateFolder.js.map +1 -0
  178. package/hooks/useRecords.d.ts +12 -18
  179. package/hooks/useRecords.js +33 -16
  180. package/hooks/useRecords.js.map +1 -1
  181. package/hooks/useTags.d.ts +1 -6
  182. package/hooks/useTags.js +10 -19
  183. package/hooks/useTags.js.map +1 -1
  184. package/index.d.ts +5 -2
  185. package/index.js +51 -32
  186. package/index.js.map +1 -1
  187. package/package.json +22 -16
  188. package/sorting.d.ts +9 -3
  189. package/sorting.js +38 -12
  190. package/sorting.js.map +1 -1
  191. package/types.d.ts +40 -114
  192. package/types.js +11 -13
  193. package/types.js.map +1 -1
  194. package/components/FolderTree/List/constants.d.ts +0 -1
  195. package/components/FolderTree/List/constants.js +0 -8
  196. package/components/FolderTree/List/constants.js.map +0 -1
  197. package/components/FolderTree/Title/index.d.ts +0 -9
  198. package/components/FolderTree/Title/index.js +0 -24
  199. package/components/FolderTree/Title/index.js.map +0 -1
  200. package/components/FolderTree/Title/styled.d.ts +0 -16
  201. package/components/FolderTree/Title/styled.js +0 -24
  202. package/components/FolderTree/Title/styled.js.map +0 -1
  203. package/components/TagList/Empty.d.ts +0 -6
  204. package/components/TagList/Empty.js +0 -22
  205. package/components/TagList/Empty.js.map +0 -1
  206. package/components/TagList/Loader.d.ts +0 -2
  207. package/components/TagList/Loader.js +0 -19
  208. package/components/TagList/Loader.js.map +0 -1
  209. package/components/TagList/Tag.d.ts +0 -9
  210. package/components/TagList/Tag.js +0 -28
  211. package/components/TagList/Tag.js.map +0 -1
  212. package/components/TagList/TagList.d.ts +0 -14
  213. package/components/TagList/TagList.js +0 -65
  214. package/components/TagList/TagList.js.map +0 -1
  215. package/components/TagList/index.d.ts +0 -1
  216. package/components/TagList/index.js.map +0 -1
  217. package/components/TagList/styled.d.ts +0 -27
  218. package/components/TagList/styled.js +0 -35
  219. package/components/TagList/styled.js.map +0 -1
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AcoListProvider = exports.AcoListContext = void 0;
9
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _hooks = require("../hooks");
16
+ var _folders = require("./folders");
17
+ var _records = require("./records");
18
+ var _sorting = require("../sorting");
19
+ var _dotPropImmutable = _interopRequireDefault(require("dot-prop-immutable"));
20
+ var _pick = _interopRequireDefault(require("lodash/pick"));
21
+ var _constants = require("../constants");
22
+ var _appSecurity = require("@webiny/app-security");
23
+ var _excluded = ["children"];
24
+ var AcoListContext = /*#__PURE__*/_react.default.createContext(undefined);
25
+ exports.AcoListContext = AcoListContext;
26
+ var initializeAcoListState = function initializeAcoListState() {
27
+ return {
28
+ after: undefined,
29
+ filters: undefined,
30
+ folderId: undefined,
31
+ isSearch: false,
32
+ limit: 50,
33
+ listSort: [],
34
+ searchQuery: "",
35
+ showingFilters: false
36
+ };
37
+ };
38
+ var getCurrentFolderList = function getCurrentFolderList(folders, currentFolderId) {
39
+ if (!folders) {
40
+ return [];
41
+ }
42
+ if (!currentFolderId || currentFolderId.toLowerCase() === _constants.ROOT_FOLDER) {
43
+ return folders.filter(function (folder) {
44
+ return !folder.parentId || folder.parentId.toLowerCase() === _constants.ROOT_FOLDER;
45
+ });
46
+ }
47
+ return folders.filter(function (folder) {
48
+ return folder.parentId === currentFolderId;
49
+ });
50
+ };
51
+ var getCurrentRecordList = function getCurrentRecordList(records, folderIdPath, currentFolderId) {
52
+ if (!records) {
53
+ return [];
54
+ }
55
+ if (!currentFolderId) {
56
+ return records;
57
+ }
58
+ return records.filter(function (record) {
59
+ return _dotPropImmutable.default.get(record, folderIdPath) === currentFolderId;
60
+ });
61
+ };
62
+ var AcoListProvider = function AcoListProvider(_ref) {
63
+ var children = _ref.children,
64
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
65
+ var _useSecurity = (0, _appSecurity.useSecurity)(),
66
+ identity = _useSecurity.identity;
67
+ var _useNavigateFolder = (0, _hooks.useNavigateFolder)(),
68
+ currentFolderId = _useNavigateFolder.currentFolderId;
69
+ var _useAcoApp = (0, _hooks.useAcoApp)(),
70
+ folderIdPath = _useAcoApp.folderIdPath,
71
+ folderIdInPath = _useAcoApp.folderIdInPath;
72
+ var folderContext = (0, _react.useContext)(_folders.FoldersContext);
73
+ var searchContext = (0, _react.useContext)(_records.SearchRecordsContext);
74
+ if (!folderContext || !searchContext) {
75
+ throw new Error("useAcoList must be used within a ACOProvider");
76
+ }
77
+ var _useState = (0, _react.useState)([]),
78
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
79
+ folders = _useState2[0],
80
+ setFolders = _useState2[1];
81
+ var _useState3 = (0, _react.useState)([]),
82
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
83
+ records = _useState4[0],
84
+ setRecords = _useState4[1];
85
+ var _useState5 = (0, _react.useState)(),
86
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
87
+ listTitle = _useState6[0],
88
+ setListTitle = _useState6[1];
89
+ var _useState7 = (0, _react.useState)(initializeAcoListState()),
90
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
91
+ state = _useState8[0],
92
+ setState = _useState8[1];
93
+ var originalFolders = folderContext.folders,
94
+ foldersLoading = folderContext.loading,
95
+ listFolders = folderContext.listFolders,
96
+ getDescendantFolders = folderContext.getDescendantFolders;
97
+ var originalRecords = searchContext.records,
98
+ recordsLoading = searchContext.loading,
99
+ listRecords = searchContext.listRecords,
100
+ meta = searchContext.meta;
101
+
102
+ /**
103
+ * On first mount, call `listFolders` and `setState`, which will either issue a network request, or load folders and records from cache.
104
+ * We don't need to store the result of it to any local state; that is managed by the context provider.
105
+ *
106
+ * IMPORTANT: we check if the folders[type] array exists: the hook can be used from multiple components and
107
+ * fetch the outdated list from Apollo Cache. Since the state is managed locally, we fetch the folders only
108
+ * at the first mount.
109
+ *
110
+ * We don't call `listRecords` directly, instead we call `setState` making it the only driver to fetch records from the apis.
111
+ */
112
+ (0, _react.useEffect)(function () {
113
+ if (!currentFolderId) {
114
+ return;
115
+ }
116
+ if (!originalFolders) {
117
+ listFolders();
118
+ }
119
+ setState(function (state) {
120
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
121
+ after: undefined,
122
+ filters: undefined,
123
+ folderId: currentFolderId,
124
+ isSearch: false,
125
+ searchQuery: "",
126
+ showingFilters: false
127
+ });
128
+ });
129
+ }, [currentFolderId]);
130
+
131
+ /**
132
+ * Any time we receive a `folders` list update:
133
+ * - we set an empty array in case of search;
134
+ * - we set the list filtered by the current `type` and parent `folderId`, sorted according to the current `sort` value;
135
+ * - we set the current folder name.
136
+ */
137
+ (0, _react.useEffect)(function () {
138
+ var currentFolder = originalFolders === null || originalFolders === void 0 ? void 0 : originalFolders.find(function (folder) {
139
+ return folder.id === (state.folderId || _constants.ROOT_FOLDER);
140
+ });
141
+ setListTitle(currentFolder === null || currentFolder === void 0 ? void 0 : currentFolder.title);
142
+ if (state.isSearch) {
143
+ setFolders([]);
144
+ return;
145
+ }
146
+ var subFolders = getCurrentFolderList(originalFolders, state.folderId);
147
+ setFolders(function () {
148
+ return (0, _sorting.sortTableItems)(subFolders, state.listSort);
149
+ });
150
+ }, [originalFolders, state.folderId, state.isSearch]);
151
+
152
+ /**
153
+ * Any time we receive a `records` list or `folderId` update:
154
+ * - we set all `records` in case of search query;
155
+ * - we set the `records` list filtered by the current `folderId`.
156
+ */
157
+ (0, _react.useEffect)(function () {
158
+ if (state.isSearch) {
159
+ setRecords(originalRecords);
160
+ return;
161
+ }
162
+ var subRecords = getCurrentRecordList(originalRecords, folderIdPath, state.folderId);
163
+ setRecords(subRecords);
164
+ }, [originalRecords, state.folderId, state.isSearch]);
165
+
166
+ /**
167
+ * Any time we receive a new `sort` value:
168
+ * - we sort the current `folders` list according to `sorting` value;
169
+ */
170
+ (0, _react.useEffect)(function () {
171
+ setFolders(function (prev) {
172
+ return (0, _sorting.sortTableItems)(prev, state.listSort);
173
+ });
174
+ }, [state.listSort]);
175
+
176
+ /**
177
+ * Utility function to list/load more records, the `meta` state is tracked internally.
178
+ */
179
+ var listMoreRecords = (0, _react.useCallback)(function () {
180
+ var hasMoreItems = meta.hasMoreItems,
181
+ cursor = meta.cursor;
182
+ if (hasMoreItems && cursor) {
183
+ setState(function (state) {
184
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
185
+ after: cursor
186
+ });
187
+ });
188
+ }
189
+ }, [meta]);
190
+
191
+ /**
192
+ * Any time we receive new useful `state` params:
193
+ * - we fetch records according to the new params
194
+ */
195
+ (0, _react.useEffect)(function () {
196
+ var listItems = /*#__PURE__*/function () {
197
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
198
+ var isSearch, locationWhere, descendantFolderIds, params;
199
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
200
+ while (1) switch (_context.prev = _context.next) {
201
+ case 0:
202
+ if (state.folderId) {
203
+ _context.next = 2;
204
+ break;
205
+ }
206
+ return _context.abrupt("return");
207
+ case 2:
208
+ isSearch = Boolean(state.searchQuery || state.filters && Object.values(state.filters).filter(Boolean).length);
209
+ locationWhere = _dotPropImmutable.default.set({}, folderIdPath, state.folderId);
210
+ if (isSearch) {
211
+ if (state.folderId === _constants.ROOT_FOLDER) {
212
+ locationWhere = undefined;
213
+ } else {
214
+ descendantFolderIds = getDescendantFolders(state.folderId).map(function (folder) {
215
+ return folder.id;
216
+ });
217
+ locationWhere = _dotPropImmutable.default.set({}, folderIdInPath, descendantFolderIds);
218
+ }
219
+ }
220
+ params = {
221
+ limit: state.limit,
222
+ sort: (0, _sorting.validateOrGetDefaultDbSort)(state.listSort),
223
+ search: state.searchQuery,
224
+ after: state.after,
225
+ where: (0, _objectSpread2.default)((0, _objectSpread2.default)({
226
+ createdBy: props.own ? identity.id : undefined
227
+ }, locationWhere), state.filters)
228
+ };
229
+ _context.next = 8;
230
+ return listRecords(params);
231
+ case 8:
232
+ setState(function (state) {
233
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
234
+ isSearch: isSearch
235
+ });
236
+ });
237
+ case 9:
238
+ case "end":
239
+ return _context.stop();
240
+ }
241
+ }, _callee);
242
+ }));
243
+ return function listItems() {
244
+ return _ref2.apply(this, arguments);
245
+ };
246
+ }();
247
+ listItems();
248
+ }, [state.folderId, state.filters, state.searchQuery, state.after, state.listSort]);
249
+ var context = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(state, ["isSearch", "showingFilters"])), {}, {
250
+ folders: folders,
251
+ records: records,
252
+ listTitle: listTitle,
253
+ isListLoading: Boolean(recordsLoading.INIT || foldersLoading.INIT || recordsLoading.LIST || foldersLoading.LIST),
254
+ isListLoadingMore: Boolean(recordsLoading.LIST_MORE),
255
+ meta: meta,
256
+ setSearchQuery: function setSearchQuery(query) {
257
+ setState(function (state) {
258
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
259
+ searchQuery: query
260
+ });
261
+ });
262
+ },
263
+ setFilters: function setFilters(data) {
264
+ setState(function (state) {
265
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
266
+ filters: data
267
+ });
268
+ });
269
+ },
270
+ setListSort: function setListSort(sort) {
271
+ setState(function (state) {
272
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
273
+ listSort: sort
274
+ });
275
+ });
276
+ },
277
+ hideFilters: function hideFilters() {
278
+ setState(function (state) {
279
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
280
+ filters: undefined,
281
+ showingFilters: false
282
+ });
283
+ });
284
+ },
285
+ showFilters: function showFilters() {
286
+ setState(function (state) {
287
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
288
+ showingFilters: true
289
+ });
290
+ });
291
+ },
292
+ listMoreRecords: listMoreRecords
293
+ });
294
+ return /*#__PURE__*/_react.default.createElement(AcoListContext.Provider, {
295
+ value: context
296
+ }, children);
297
+ };
298
+ exports.AcoListProvider = AcoListProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_hooks","_folders","_records","_sorting","_dotPropImmutable","_interopRequireDefault","_pick","_constants","_appSecurity","_excluded","AcoListContext","React","createContext","undefined","exports","initializeAcoListState","after","filters","folderId","isSearch","limit","listSort","searchQuery","showingFilters","getCurrentFolderList","folders","currentFolderId","toLowerCase","ROOT_FOLDER","filter","folder","parentId","getCurrentRecordList","records","folderIdPath","record","dotPropImmutable","get","AcoListProvider","_ref","children","props","_objectWithoutProperties2","default","_useSecurity","useSecurity","identity","_useNavigateFolder","useNavigateFolder","_useAcoApp","useAcoApp","folderIdInPath","folderContext","useContext","FoldersContext","searchContext","SearchRecordsContext","Error","_useState","useState","_useState2","_slicedToArray2","setFolders","_useState3","_useState4","setRecords","_useState5","_useState6","listTitle","setListTitle","_useState7","_useState8","state","setState","originalFolders","foldersLoading","loading","listFolders","getDescendantFolders","originalRecords","recordsLoading","listRecords","meta","useEffect","_objectSpread2","currentFolder","find","id","title","subFolders","sortTableItems","subRecords","prev","listMoreRecords","useCallback","hasMoreItems","cursor","listItems","_ref2","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","locationWhere","descendantFolderIds","params","wrap","_callee$","_context","next","abrupt","Boolean","Object","values","length","set","map","sort","validateOrGetDefaultDbSort","search","where","createdBy","own","stop","apply","arguments","context","pick","isListLoading","INIT","LIST","isListLoadingMore","LIST_MORE","setSearchQuery","query","setFilters","data","setListSort","hideFilters","showFilters","createElement","Provider","value"],"sources":["acoList.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport {\n FolderItem,\n GenericSearchData,\n ListMeta,\n ListSearchRecordsQueryVariables,\n ListSearchRecordsSort,\n SearchRecordItem\n} from \"~/types\";\nimport { useAcoApp, useNavigateFolder } from \"~/hooks\";\nimport { FoldersContext } from \"~/contexts/folders\";\nimport { SearchRecordsContext } from \"~/contexts/records\";\nimport { sortTableItems, validateOrGetDefaultDbSort } from \"~/sorting\";\nimport dotPropImmutable from \"dot-prop-immutable\";\nimport pick from \"lodash/pick\";\nimport { ROOT_FOLDER } from \"~/constants\";\nimport { useSecurity } from \"@webiny/app-security\";\n\nexport interface AcoListContextData<T> {\n folders: FolderItem[];\n hideFilters: () => void;\n isListLoading: boolean;\n isListLoadingMore: boolean;\n isSearch: boolean;\n listMoreRecords: () => void;\n listTitle?: string;\n meta: ListMeta;\n records: SearchRecordItem<T>[];\n setFilters: (data: Record<string, any>) => void;\n setListSort: (state: ListSearchRecordsSort) => void;\n setSearchQuery: (query: string) => void;\n showFilters: () => void;\n showingFilters: boolean;\n}\n\nexport const AcoListContext = React.createContext<\n AcoListContextData<GenericSearchData> | undefined\n>(undefined);\n\nexport interface State {\n after?: string;\n filters?: Record<string, any>;\n folderId?: string;\n isSearch: boolean;\n limit: number;\n listSort: ListSearchRecordsSort;\n searchQuery: string;\n showingFilters: boolean;\n}\n\nconst initializeAcoListState = (): State => {\n return {\n after: undefined,\n filters: undefined,\n folderId: undefined,\n isSearch: false,\n limit: 50,\n listSort: [],\n searchQuery: \"\",\n showingFilters: false\n };\n};\n\nconst getCurrentFolderList = (\n folders?: FolderItem[] | null,\n currentFolderId?: string\n): FolderItem[] | [] => {\n if (!folders) {\n return [];\n }\n if (!currentFolderId || currentFolderId.toLowerCase() === ROOT_FOLDER) {\n return folders.filter(\n folder => !folder.parentId || folder.parentId.toLowerCase() === ROOT_FOLDER\n );\n }\n return folders.filter(folder => folder.parentId === currentFolderId);\n};\n\nconst getCurrentRecordList = <T = GenericSearchData,>(\n records: SearchRecordItem<T>[],\n folderIdPath: string,\n currentFolderId?: string\n): SearchRecordItem<T>[] => {\n if (!records) {\n return [];\n }\n\n if (!currentFolderId) {\n return records;\n }\n\n return records.filter(\n (record): record is SearchRecordItem<T> =>\n dotPropImmutable.get(record, folderIdPath) === currentFolderId\n );\n};\n\nexport interface AcoListProviderProps {\n children: React.ReactNode;\n own?: boolean;\n}\n\nexport const AcoListProvider: React.VFC<AcoListProviderProps> = ({ children, ...props }) => {\n const { identity } = useSecurity();\n const { currentFolderId } = useNavigateFolder();\n const { folderIdPath, folderIdInPath } = useAcoApp();\n const folderContext = useContext(FoldersContext);\n const searchContext = useContext(SearchRecordsContext);\n\n if (!folderContext || !searchContext) {\n throw new Error(\"useAcoList must be used within a ACOProvider\");\n }\n\n const [folders, setFolders] = useState<FolderItem[]>([]);\n const [records, setRecords] = useState<SearchRecordItem[]>([]);\n const [listTitle, setListTitle] = useState<string | undefined>();\n const [state, setState] = useState(initializeAcoListState());\n\n const {\n folders: originalFolders,\n loading: foldersLoading,\n listFolders,\n getDescendantFolders\n } = folderContext;\n const { records: originalRecords, loading: recordsLoading, listRecords, meta } = searchContext;\n\n /**\n * On first mount, call `listFolders` and `setState`, which will either issue a network request, or load folders and records from cache.\n * We don't need to store the result of it to any local state; that is managed by the context provider.\n *\n * IMPORTANT: we check if the folders[type] array exists: the hook can be used from multiple components and\n * fetch the outdated list from Apollo Cache. Since the state is managed locally, we fetch the folders only\n * at the first mount.\n *\n * We don't call `listRecords` directly, instead we call `setState` making it the only driver to fetch records from the apis.\n */\n useEffect(() => {\n if (!currentFolderId) {\n return;\n }\n\n if (!originalFolders) {\n listFolders();\n }\n\n setState(state => {\n return {\n ...state,\n after: undefined,\n filters: undefined,\n folderId: currentFolderId,\n isSearch: false,\n searchQuery: \"\",\n showingFilters: false\n };\n });\n }, [currentFolderId]);\n\n /**\n * Any time we receive a `folders` list update:\n * - we set an empty array in case of search;\n * - we set the list filtered by the current `type` and parent `folderId`, sorted according to the current `sort` value;\n * - we set the current folder name.\n */\n useEffect(() => {\n const currentFolder = originalFolders?.find(\n folder => folder.id === (state.folderId || ROOT_FOLDER)\n );\n\n setListTitle(currentFolder?.title);\n\n if (state.isSearch) {\n setFolders([]);\n return;\n }\n\n const subFolders = getCurrentFolderList(originalFolders, state.folderId);\n setFolders(() => {\n return sortTableItems(subFolders, state.listSort);\n });\n }, [originalFolders, state.folderId, state.isSearch]);\n\n /**\n * Any time we receive a `records` list or `folderId` update:\n * - we set all `records` in case of search query;\n * - we set the `records` list filtered by the current `folderId`.\n */\n useEffect(() => {\n if (state.isSearch) {\n setRecords(originalRecords as SearchRecordItem[]);\n return;\n }\n\n const subRecords = getCurrentRecordList(\n originalRecords as SearchRecordItem[],\n folderIdPath,\n state.folderId\n );\n setRecords(subRecords);\n }, [originalRecords, state.folderId, state.isSearch]);\n\n /**\n * Any time we receive a new `sort` value:\n * - we sort the current `folders` list according to `sorting` value;\n */\n useEffect(() => {\n setFolders(prev => {\n return sortTableItems(prev, state.listSort);\n });\n }, [state.listSort]);\n\n /**\n * Utility function to list/load more records, the `meta` state is tracked internally.\n */\n const listMoreRecords = useCallback(() => {\n const { hasMoreItems, cursor } = meta;\n if (hasMoreItems && cursor) {\n setState(state => ({\n ...state,\n after: cursor\n }));\n }\n }, [meta]);\n\n /**\n * Any time we receive new useful `state` params:\n * - we fetch records according to the new params\n */\n useEffect(() => {\n const listItems = async () => {\n if (!state.folderId) {\n return;\n }\n\n const isSearch = Boolean(\n state.searchQuery ||\n (state.filters && Object.values(state.filters).filter(Boolean).length)\n );\n\n let locationWhere = dotPropImmutable.set({}, folderIdPath, state.folderId);\n\n if (isSearch) {\n if (state.folderId === ROOT_FOLDER) {\n locationWhere = undefined;\n } else {\n const descendantFolderIds = getDescendantFolders(state.folderId).map(\n folder => folder.id\n );\n locationWhere = dotPropImmutable.set({}, folderIdInPath, descendantFolderIds);\n }\n }\n\n const params: ListSearchRecordsQueryVariables = {\n limit: state.limit,\n sort: validateOrGetDefaultDbSort(state.listSort),\n search: state.searchQuery,\n after: state.after,\n where: {\n createdBy: props.own ? identity!.id : undefined,\n ...locationWhere,\n ...state.filters\n }\n };\n\n await listRecords(params);\n\n setState(state => ({\n ...state,\n isSearch\n }));\n };\n\n listItems();\n }, [state.folderId, state.filters, state.searchQuery, state.after, state.listSort]);\n\n const context: AcoListContextData<GenericSearchData> = {\n ...pick(state, [\"isSearch\", \"showingFilters\"]),\n folders,\n records,\n listTitle,\n isListLoading: Boolean(\n recordsLoading.INIT || foldersLoading.INIT || recordsLoading.LIST || foldersLoading.LIST\n ),\n isListLoadingMore: Boolean(recordsLoading.LIST_MORE),\n meta,\n setSearchQuery(query) {\n setState(state => ({\n ...state,\n searchQuery: query\n }));\n },\n setFilters(data) {\n setState(state => ({\n ...state,\n filters: data\n }));\n },\n setListSort(sort: ListSearchRecordsSort) {\n setState(state => ({\n ...state,\n listSort: sort\n }));\n },\n hideFilters() {\n setState(state => ({\n ...state,\n filters: undefined,\n showingFilters: false\n }));\n },\n showFilters() {\n setState(state => ({\n ...state,\n showingFilters: true\n }));\n },\n listMoreRecords\n };\n\n return <AcoListContext.Provider value={context}>{children}</AcoListContext.Provider>;\n};\n"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import React from "react";
2
+ import { AcoApp, AcoAppMode, AcoError, AcoModel, AcoModelField } from "../types";
3
+ import { ApolloClient } from "apollo-client";
4
+ export interface AcoAppProviderContext {
5
+ app: AcoApp;
6
+ folderIdPath: string;
7
+ folderIdInPath: string;
8
+ model: AcoModel;
9
+ client: ApolloClient<any>;
10
+ loading: boolean;
11
+ error?: AcoError | null;
12
+ mode: AcoAppMode;
13
+ }
14
+ export declare const AcoAppContext: React.Context<AcoAppProviderContext | undefined>;
15
+ interface BaseAcoAppProviderProps {
16
+ children: React.ReactNode;
17
+ id: string;
18
+ folderIdPath?: string;
19
+ folderIdQueryString?: string;
20
+ client: ApolloClient<any>;
21
+ createNavigateFolderListLink?: () => string;
22
+ createNavigateFolderStorageKey: () => string;
23
+ own?: boolean;
24
+ }
25
+ export interface AcoAppProviderPropsApi extends BaseAcoAppProviderProps {
26
+ model?: never;
27
+ getFields?: never;
28
+ }
29
+ export interface AcoAppProviderPropsManual extends BaseAcoAppProviderProps {
30
+ model: AcoModel;
31
+ getFields?: () => AcoModelField[];
32
+ }
33
+ export declare type AcoAppProviderProps = AcoAppProviderPropsApi | AcoAppProviderPropsManual;
34
+ export declare const AcoAppProvider: React.VFC<AcoAppProviderProps>;
35
+ export {};
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AcoAppProvider = exports.AcoAppContext = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _app = require("../graphql/app.gql");
13
+ var _folders = require("./folders");
14
+ var _records = require("./records");
15
+ var _dialogs = require("../dialogs");
16
+ var _DisplayError = require("./DisplayError");
17
+ var _navigateFolderWithRouter = require("./navigateFolderWithRouter");
18
+ var _Progress = require("@webiny/ui/Progress");
19
+ var _acoList = require("./acoList");
20
+ var AcoAppContext = /*#__PURE__*/_react.default.createContext(undefined);
21
+ exports.AcoAppContext = AcoAppContext;
22
+ var createApp = function createApp(data) {
23
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
24
+ getFields: data.getFields || function () {
25
+ return data.model.fields;
26
+ }
27
+ });
28
+ };
29
+ var createApiApp = function createApiApp(data) {
30
+ if (!data) {
31
+ console.error("The APP could not be created. No data received.");
32
+ return null;
33
+ }
34
+ var dataField = data.model.fields.find(function (f) {
35
+ return f.fieldId === "data";
36
+ });
37
+ if (!dataField) {
38
+ console.error("The APP \"".concat(data.id, "\" does not have the data field."));
39
+ return null;
40
+ }
41
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
42
+ getFields: function getFields() {
43
+ var _dataField$settings;
44
+ return (dataField === null || dataField === void 0 ? void 0 : (_dataField$settings = dataField.settings) === null || _dataField$settings === void 0 ? void 0 : _dataField$settings.fields) || [];
45
+ }
46
+ });
47
+ };
48
+ var AcoAppProvider = function AcoAppProvider(_ref) {
49
+ var children = _ref.children,
50
+ id = _ref.id,
51
+ client = _ref.client,
52
+ inputModel = _ref.model,
53
+ getFields = _ref.getFields,
54
+ folderIdQueryString = _ref.folderIdQueryString,
55
+ createNavigateFolderListLink = _ref.createNavigateFolderListLink,
56
+ createNavigateFolderStorageKey = _ref.createNavigateFolderStorageKey,
57
+ initialFolderIdPath = _ref.folderIdPath,
58
+ own = _ref.own;
59
+ var _useState = (0, _react.useState)({
60
+ loading: false,
61
+ app: null,
62
+ model: null,
63
+ error: null,
64
+ mode: "aco"
65
+ }),
66
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
67
+ state = _useState2[0],
68
+ setState = _useState2[1];
69
+ var folderIdPath = initialFolderIdPath || "location.folderId";
70
+ var folderIdInPath = folderIdPath + "_in";
71
+
72
+ /**
73
+ * The APP Provider can operate in two modes:
74
+ * * `app` - when the `id` is provided, the app is fetched from the API
75
+ * * `model` - when the `model` is provided, the app is created from the model
76
+ */
77
+ (0, _react.useEffect)(function () {
78
+ var _state$app;
79
+ if (!id) {
80
+ return;
81
+ }
82
+ /**
83
+ * In the `model` mode, we don't need to fetch the app from the API.
84
+ * BUT, the input model must be `undefined`. In case it's `null`, just return because there will be a model at a point.
85
+ */
86
+ if (inputModel !== undefined) {
87
+ if (!inputModel) {
88
+ return;
89
+ }
90
+ setState(function (prev) {
91
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
92
+ loading: false,
93
+ model: inputModel,
94
+ app: createApp({
95
+ id: id,
96
+ model: inputModel,
97
+ getFields: getFields
98
+ }),
99
+ mode: "cms"
100
+ });
101
+ });
102
+ return;
103
+ }
104
+ if (id === ((_state$app = state.app) === null || _state$app === void 0 ? void 0 : _state$app.id)) {
105
+ return;
106
+ }
107
+ setState(function (prev) {
108
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
109
+ loading: true
110
+ });
111
+ });
112
+ client.query({
113
+ query: (0, _app.createGetAppQuery)(),
114
+ variables: {
115
+ id: id
116
+ }
117
+ }).then(function (response) {
118
+ var _response$data$aco;
119
+ var _ref2 = ((_response$data$aco = response.data.aco) === null || _response$data$aco === void 0 ? void 0 : _response$data$aco.app) || {},
120
+ data = _ref2.data,
121
+ error = _ref2.error;
122
+ if (error) {
123
+ setState(function (prev) {
124
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
125
+ loading: false,
126
+ app: null,
127
+ model: null,
128
+ error: error,
129
+ mode: "aco"
130
+ });
131
+ });
132
+ return;
133
+ }
134
+ setState(function (prev) {
135
+ var app = createApiApp(data);
136
+ if (!app) {
137
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
138
+ loading: false,
139
+ app: null,
140
+ model: null,
141
+ mode: "aco",
142
+ error: {
143
+ message: "App \"".concat(id, "\" not found!"),
144
+ code: "APP_NOT_FOUND"
145
+ }
146
+ });
147
+ }
148
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
149
+ loading: false,
150
+ app: app,
151
+ model: app.model,
152
+ error: null,
153
+ mode: "aco"
154
+ });
155
+ });
156
+ });
157
+ }, [id, inputModel === null || inputModel === void 0 ? void 0 : inputModel.modelId]);
158
+ var app = state.app,
159
+ model = state.model,
160
+ error = state.error,
161
+ loading = state.loading,
162
+ mode = state.mode;
163
+ var value = (0, _react.useMemo)(function () {
164
+ return {
165
+ app: app,
166
+ folderIdPath: folderIdPath,
167
+ folderIdInPath: folderIdInPath,
168
+ loading: loading,
169
+ client: client,
170
+ model: model,
171
+ error: error,
172
+ mode: mode
173
+ };
174
+ }, [app === null || app === void 0 ? void 0 : app.id, loading, error, model, client, mode]);
175
+ /**
176
+ * Do not render anything yet if there is no application.
177
+ */
178
+ if (error) {
179
+ return /*#__PURE__*/_react.default.createElement("div", null, "Error: ", error.message);
180
+ } else if (loading) {
181
+ return /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null);
182
+ } else if (!app) {
183
+ return /*#__PURE__*/_react.default.createElement(_DisplayError.DisplayError, null, "There is no ACO App: ", /*#__PURE__*/_react.default.createElement("strong", null, id), "!");
184
+ } else if (!model) {
185
+ return /*#__PURE__*/_react.default.createElement(_DisplayError.DisplayError, null, "There is no model for the ACO App: ", /*#__PURE__*/_react.default.createElement("strong", null, id), "!");
186
+ }
187
+ return /*#__PURE__*/_react.default.createElement(AcoAppContext.Provider, {
188
+ value: value
189
+ }, /*#__PURE__*/_react.default.createElement(_folders.FoldersProvider, null, /*#__PURE__*/_react.default.createElement(_records.SearchRecordsProvider, null, /*#__PURE__*/_react.default.createElement(_navigateFolderWithRouter.NavigateFolderWithRouterProvider, {
190
+ folderIdQueryString: folderIdQueryString,
191
+ createListLink: createNavigateFolderListLink,
192
+ createStorageKey: createNavigateFolderStorageKey
193
+ }, /*#__PURE__*/_react.default.createElement(_acoList.AcoListProvider, {
194
+ own: own
195
+ }, /*#__PURE__*/_react.default.createElement(_dialogs.DialogsProvider, null, children))))));
196
+ };
197
+ exports.AcoAppProvider = AcoAppProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_app","_folders","_records","_dialogs","_DisplayError","_navigateFolderWithRouter","_Progress","_acoList","AcoAppContext","React","createContext","undefined","exports","createApp","data","_objectSpread2","default","getFields","model","fields","createApiApp","console","error","dataField","find","f","fieldId","concat","id","_dataField$settings","settings","AcoAppProvider","_ref","children","client","inputModel","folderIdQueryString","createNavigateFolderListLink","createNavigateFolderStorageKey","initialFolderIdPath","folderIdPath","own","_useState","useState","loading","app","mode","_useState2","_slicedToArray2","state","setState","folderIdInPath","useEffect","_state$app","prev","query","createGetAppQuery","variables","then","response","_response$data$aco","_ref2","aco","message","code","modelId","value","useMemo","createElement","CircularProgress","DisplayError","Provider","FoldersProvider","SearchRecordsProvider","NavigateFolderWithRouterProvider","createListLink","createStorageKey","AcoListProvider","DialogsProvider"],"sources":["app.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { AcoApp, AcoAppMode, AcoError, AcoModel, AcoModelField } from \"~/types\";\nimport { createGetAppQuery, GetAppResult, GetAppVariables } from \"~/graphql/app.gql\";\nimport { FoldersProvider as FoldersContextProvider } from \"./folders\";\nimport { SearchRecordsProvider as SearchRecordsContextProvider } from \"./records\";\nimport { DialogsProvider as DialogsContextProvider } from \"../dialogs\";\nimport { DisplayError } from \"./DisplayError\";\nimport { ApolloClient } from \"apollo-client\";\nimport { NavigateFolderWithRouterProvider } from \"~/contexts/navigateFolderWithRouter\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { AcoListProvider } from \"~/contexts/acoList\";\n\nexport interface AcoAppProviderContext {\n app: AcoApp;\n folderIdPath: string;\n folderIdInPath: string;\n model: AcoModel;\n client: ApolloClient<any>;\n loading: boolean;\n error?: AcoError | null;\n mode: AcoAppMode;\n}\n\ninterface AcoAppProviderState {\n loading: boolean;\n app?: AcoApp | null;\n model?: AcoModel | null;\n error?: AcoError | null;\n mode: AcoAppMode;\n}\n\nexport const AcoAppContext = React.createContext<AcoAppProviderContext | undefined>(undefined);\n\ninterface BaseAcoAppProviderProps {\n children: React.ReactNode;\n id: string;\n folderIdPath?: string;\n folderIdQueryString?: string;\n client: ApolloClient<any>;\n createNavigateFolderListLink?: () => string;\n createNavigateFolderStorageKey: () => string;\n own?: boolean;\n}\n\nexport interface AcoAppProviderPropsApi extends BaseAcoAppProviderProps {\n model?: never;\n getFields?: never;\n}\n\nexport interface AcoAppProviderPropsManual extends BaseAcoAppProviderProps {\n model: AcoModel;\n getFields?: () => AcoModelField[];\n}\n\nexport type AcoAppProviderProps = AcoAppProviderPropsApi | AcoAppProviderPropsManual;\n\ninterface CreateAppParams {\n id: string;\n model: AcoModel;\n getFields?: () => AcoModelField[];\n}\n\nconst createApp = (data: CreateAppParams): AcoApp => {\n return {\n ...data,\n getFields:\n data.getFields ||\n (() => {\n return data.model.fields;\n })\n };\n};\n\ninterface CreateApiAppParams {\n id: string;\n model: AcoModel;\n}\n\nconst createApiApp = (data: CreateApiAppParams | null): AcoApp | null => {\n if (!data) {\n console.error(`The APP could not be created. No data received.`);\n return null;\n }\n const dataField = data.model.fields.find(f => f.fieldId === \"data\");\n if (!dataField) {\n console.error(`The APP \"${data.id}\" does not have the data field.`);\n return null;\n }\n return {\n ...data,\n getFields: () => {\n return dataField?.settings?.fields || [];\n }\n };\n};\n\nexport const AcoAppProvider: React.VFC<AcoAppProviderProps> = ({\n children,\n id,\n client,\n model: inputModel,\n getFields,\n folderIdQueryString,\n createNavigateFolderListLink,\n createNavigateFolderStorageKey,\n folderIdPath: initialFolderIdPath,\n own\n}) => {\n const [state, setState] = useState<AcoAppProviderState>({\n loading: false,\n app: null,\n model: null,\n error: null,\n mode: \"aco\"\n });\n const folderIdPath = initialFolderIdPath || \"location.folderId\";\n const folderIdInPath = folderIdPath + \"_in\";\n\n /**\n * The APP Provider can operate in two modes:\n * * `app` - when the `id` is provided, the app is fetched from the API\n * * `model` - when the `model` is provided, the app is created from the model\n */\n useEffect(() => {\n if (!id) {\n return;\n }\n /**\n * In the `model` mode, we don't need to fetch the app from the API.\n * BUT, the input model must be `undefined`. In case it's `null`, just return because there will be a model at a point.\n */\n if (inputModel !== undefined) {\n if (!inputModel) {\n return;\n }\n setState(prev => {\n return {\n ...prev,\n loading: false,\n model: inputModel,\n app: createApp({\n id,\n model: inputModel,\n getFields\n }),\n mode: \"cms\"\n };\n });\n return;\n }\n if (id === state.app?.id) {\n return;\n }\n setState(prev => {\n return {\n ...prev,\n loading: true\n };\n });\n client\n .query<GetAppResult, GetAppVariables>({\n query: createGetAppQuery(),\n variables: {\n id\n }\n })\n .then(response => {\n const { data, error } = response.data.aco?.app || {};\n\n if (error) {\n setState(prev => {\n return {\n ...prev,\n loading: false,\n app: null,\n model: null,\n error,\n mode: \"aco\"\n };\n });\n return;\n }\n\n setState(prev => {\n const app = createApiApp(data);\n if (!app) {\n return {\n ...prev,\n loading: false,\n app: null,\n model: null,\n mode: \"aco\",\n error: {\n message: `App \"${id}\" not found!`,\n code: \"APP_NOT_FOUND\"\n }\n };\n }\n return {\n ...prev,\n loading: false,\n app,\n model: app.model,\n error: null,\n mode: \"aco\"\n };\n });\n });\n }, [id, inputModel?.modelId]);\n\n const { app, model, error, loading, mode } = state;\n\n const value = useMemo<AcoAppProviderContext>(() => {\n return {\n app: app as AcoApp,\n folderIdPath,\n folderIdInPath,\n loading,\n client,\n model: model as AcoModel,\n error,\n mode\n };\n }, [app?.id, loading, error, model, client, mode]);\n /**\n * Do not render anything yet if there is no application.\n */\n if (error) {\n return <div>Error: {error.message}</div>;\n } else if (loading) {\n return <CircularProgress />;\n } else if (!app) {\n return (\n <DisplayError>\n There is no ACO App: <strong>{id}</strong>!\n </DisplayError>\n );\n } else if (!model) {\n return (\n <DisplayError>\n There is no model for the ACO App: <strong>{id}</strong>!\n </DisplayError>\n );\n }\n\n return (\n <AcoAppContext.Provider value={value}>\n <FoldersContextProvider>\n <SearchRecordsContextProvider>\n <NavigateFolderWithRouterProvider\n folderIdQueryString={folderIdQueryString}\n createListLink={createNavigateFolderListLink}\n createStorageKey={createNavigateFolderStorageKey}\n >\n <AcoListProvider own={own}>\n <DialogsContextProvider>{children}</DialogsContextProvider>\n </AcoListProvider>\n </NavigateFolderWithRouterProvider>\n </SearchRecordsContextProvider>\n </FoldersContextProvider>\n </AcoAppContext.Provider>\n );\n};\n"],"mappings":"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"}
@@ -1,17 +1,19 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { FolderItem, Loading, LoadingActions } from "../types";
3
3
  interface FoldersContext {
4
- folders: Record<string, FolderItem[]>;
4
+ folders?: FolderItem[] | null;
5
5
  loading: Loading<LoadingActions>;
6
- listFolders: (type: string) => Promise<FolderItem[]>;
6
+ listFolders: () => Promise<FolderItem[]>;
7
7
  getFolder: (id: string) => Promise<FolderItem>;
8
- createFolder: (folder: Omit<FolderItem, "id">) => Promise<FolderItem>;
9
- updateFolder: (folder: FolderItem) => Promise<FolderItem>;
10
- deleteFolder(folder: FolderItem): Promise<true>;
8
+ createFolder: (folder: Omit<FolderItem, "id" | "type">) => Promise<FolderItem>;
9
+ updateFolder: (folder: Omit<FolderItem, "type">) => Promise<FolderItem>;
10
+ deleteFolder(folder: Pick<FolderItem, "id">): Promise<true>;
11
+ getDescendantFolders(id?: string): FolderItem[];
11
12
  }
12
13
  export declare const FoldersContext: React.Context<FoldersContext | undefined>;
13
14
  interface Props {
15
+ type?: string;
14
16
  children: ReactNode;
15
17
  }
16
- export declare const FoldersProvider: ({ children }: Props) => JSX.Element;
18
+ export declare const FoldersProvider: React.VFC<Props>;
17
19
  export {};