@webiny/app-aco 0.0.0-unstable.60e968001a

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/components/Dialogs/DialogCreate.d.ts +10 -0
  4. package/components/Dialogs/DialogCreate.js +153 -0
  5. package/components/Dialogs/DialogCreate.js.map +1 -0
  6. package/components/Dialogs/DialogDelete.d.ts +10 -0
  7. package/components/Dialogs/DialogDelete.js +135 -0
  8. package/components/Dialogs/DialogDelete.js.map +1 -0
  9. package/components/Dialogs/DialogUpdate.d.ts +10 -0
  10. package/components/Dialogs/DialogUpdate.js +186 -0
  11. package/components/Dialogs/DialogUpdate.js.map +1 -0
  12. package/components/Dialogs/index.d.ts +3 -0
  13. package/components/Dialogs/index.js +44 -0
  14. package/components/Dialogs/index.js.map +1 -0
  15. package/components/Dialogs/styled.d.ts +8 -0
  16. package/components/Dialogs/styled.js +23 -0
  17. package/components/Dialogs/styled.js.map +1 -0
  18. package/components/Tree/ButtonCreate/index.d.ts +6 -0
  19. package/components/Tree/ButtonCreate/index.js +33 -0
  20. package/components/Tree/ButtonCreate/index.js.map +1 -0
  21. package/components/Tree/ButtonCreate/styled.d.ts +18 -0
  22. package/components/Tree/ButtonCreate/styled.js +28 -0
  23. package/components/Tree/ButtonCreate/styled.js.map +1 -0
  24. package/components/Tree/Empty/index.d.ts +2 -0
  25. package/components/Tree/Empty/index.js +30 -0
  26. package/components/Tree/Empty/index.js.map +1 -0
  27. package/components/Tree/Empty/styled.d.ts +4 -0
  28. package/components/Tree/Empty/styled.js +16 -0
  29. package/components/Tree/Empty/styled.js.map +1 -0
  30. package/components/Tree/List/constants.d.ts +1 -0
  31. package/components/Tree/List/constants.js +8 -0
  32. package/components/Tree/List/constants.js.map +1 -0
  33. package/components/Tree/List/index.d.ts +13 -0
  34. package/components/Tree/List/index.js +233 -0
  35. package/components/Tree/List/index.js.map +1 -0
  36. package/components/Tree/List/utils.d.ts +20 -0
  37. package/components/Tree/List/utils.js +93 -0
  38. package/components/Tree/List/utils.js.map +1 -0
  39. package/components/Tree/Loader/index.d.ts +2 -0
  40. package/components/Tree/Loader/index.js +25 -0
  41. package/components/Tree/Loader/index.js.map +1 -0
  42. package/components/Tree/Loader/styled.d.ts +5 -0
  43. package/components/Tree/Loader/styled.js +21 -0
  44. package/components/Tree/Loader/styled.js.map +1 -0
  45. package/components/Tree/MenuActions/index.d.ts +9 -0
  46. package/components/Tree/MenuActions/index.js +51 -0
  47. package/components/Tree/MenuActions/index.js.map +1 -0
  48. package/components/Tree/MenuActions/styled.d.ts +4 -0
  49. package/components/Tree/MenuActions/styled.js +16 -0
  50. package/components/Tree/MenuActions/styled.js.map +1 -0
  51. package/components/Tree/Node/index.d.ts +19 -0
  52. package/components/Tree/Node/index.js +79 -0
  53. package/components/Tree/Node/index.js.map +1 -0
  54. package/components/Tree/Node/styled.d.ts +38 -0
  55. package/components/Tree/Node/styled.js +47 -0
  56. package/components/Tree/Node/styled.js.map +1 -0
  57. package/components/Tree/NodePreview/index.d.ts +8 -0
  58. package/components/Tree/NodePreview/index.js +24 -0
  59. package/components/Tree/NodePreview/index.js.map +1 -0
  60. package/components/Tree/NodePreview/styled.d.ts +4 -0
  61. package/components/Tree/NodePreview/styled.js +16 -0
  62. package/components/Tree/NodePreview/styled.js.map +1 -0
  63. package/components/Tree/Placeholder/index.d.ts +9 -0
  64. package/components/Tree/Placeholder/index.js +26 -0
  65. package/components/Tree/Placeholder/index.js.map +1 -0
  66. package/components/Tree/Placeholder/styled.d.ts +4 -0
  67. package/components/Tree/Placeholder/styled.js +16 -0
  68. package/components/Tree/Placeholder/styled.js.map +1 -0
  69. package/components/Tree/Title/index.d.ts +9 -0
  70. package/components/Tree/Title/index.js +31 -0
  71. package/components/Tree/Title/index.js.map +1 -0
  72. package/components/Tree/Title/styled.d.ts +10 -0
  73. package/components/Tree/Title/styled.js +27 -0
  74. package/components/Tree/Title/styled.js.map +1 -0
  75. package/components/Tree/index.d.ts +13 -0
  76. package/components/Tree/index.js +99 -0
  77. package/components/Tree/index.js.map +1 -0
  78. package/components/Tree/styled.d.ts +4 -0
  79. package/components/Tree/styled.js +16 -0
  80. package/components/Tree/styled.js.map +1 -0
  81. package/components/index.d.ts +2 -0
  82. package/components/index.js +31 -0
  83. package/components/index.js.map +1 -0
  84. package/contexts/folders.d.ts +17 -0
  85. package/contexts/folders.js +354 -0
  86. package/contexts/folders.js.map +1 -0
  87. package/contexts/index.d.ts +2 -0
  88. package/contexts/index.js +24 -0
  89. package/contexts/index.js.map +1 -0
  90. package/contexts/links.d.ts +18 -0
  91. package/contexts/links.js +371 -0
  92. package/contexts/links.js.map +1 -0
  93. package/graphql/folders.gql.d.ts +5 -0
  94. package/graphql/folders.gql.js +31 -0
  95. package/graphql/folders.gql.js.map +1 -0
  96. package/graphql/links.gql.d.ts +5 -0
  97. package/graphql/links.gql.js +34 -0
  98. package/graphql/links.gql.js.map +1 -0
  99. package/handlers.d.ts +18 -0
  100. package/handlers.js +70 -0
  101. package/handlers.js.map +1 -0
  102. package/hooks/index.d.ts +2 -0
  103. package/hooks/index.js +31 -0
  104. package/hooks/index.js.map +1 -0
  105. package/hooks/useFolders.d.ts +14 -0
  106. package/hooks/useFolders.js +64 -0
  107. package/hooks/useFolders.js.map +1 -0
  108. package/hooks/useLinks.d.ts +20 -0
  109. package/hooks/useLinks.js +65 -0
  110. package/hooks/useLinks.js.map +1 -0
  111. package/index.d.ts +3 -0
  112. package/index.js +53 -0
  113. package/index.js.map +1 -0
  114. package/package.json +57 -0
  115. package/types.d.ts +152 -0
  116. package/types.js +5 -0
  117. package/types.js.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Webiny
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,349 @@
1
+ # @webiny/app-aco
2
+ [![](https://img.shields.io/npm/dw/@webiny/app-aco.svg)](https://www.npmjs.com/package/@webiny/app-aco)
3
+ [![](https://img.shields.io/npm/v/@webiny/app-aco.svg)](https://www.npmjs.com/package/@webiny/app-aco)
4
+ [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
5
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
6
+
7
+ A set of frontend aco-related utilities.
8
+
9
+ ## Table of Contents
10
+
11
+ - [Installation](#installation)
12
+ - [Overview](#overview)
13
+ - [Reference](#reference)
14
+ - [Components](#components)
15
+ - [`FoldersProvider`](#FoldersProvider)
16
+ - [`FolderTree`](#FolderTree)
17
+ - [`FolderDialogCreate`](#FolderDialogCreate)
18
+ - [`FolderDialogUpdate`](#FolderDialogUpdate)
19
+ - [`FolderDialogDelete`](#FolderDialogDelete)
20
+ - [Hooks](#hooks)
21
+ - [`useFolder`](#useFolders)
22
+ - [`useLinks`](#useLinks)
23
+
24
+ ## Installation
25
+ ```
26
+ npm install --save @webiny/app-aco
27
+ ```
28
+
29
+ Or if you prefer yarn:
30
+ ```
31
+ yarn add @webiny/app-aco
32
+ ```
33
+
34
+ ## Overview
35
+ The `@webiny/app-aco` package contains essential aco-related utilities (Advanced Content Organisation), that can be used within a React app. These include the `FoldersProvider` provider component, the `useFolders` and `useLinks` hooks, which can be used to retrieve the current folder and link information and interact with them.
36
+
37
+ > ℹ️ **INFO**
38
+ >
39
+ > Internally, the [`FoldersProvider`](#FoldersProvider) provider retrieves information from the Webiny's default GraphQL API. Because of this, note that this project relies on [`@webiny/api-aco`](./../api-aco) when it comes to retrieving folders and links information (via GraphQL).
40
+
41
+ ## Reference
42
+
43
+ ### Components
44
+
45
+ #### `FoldersProvider`
46
+
47
+ <details>
48
+ <summary>Type Declaration</summary>
49
+ <p>
50
+
51
+ ```tsx
52
+ export declare const FoldersProvider: React.FC;
53
+ ```
54
+
55
+ </p>
56
+ </details>
57
+
58
+ The [`FoldersProvider`](#FoldersProvider) is a provider component, which retrieves the folders and links information. The component also makes it possible to use the [`useFolders`](#useFolders) and [`useLinks`](#useLinks) hook, which can be used to list, create, update or delete folders and links within the React app.
59
+
60
+ ```tsx
61
+ import React from "react";
62
+ import { FoldersProvider } from "@webiny/app-aco";
63
+
64
+ export const App = () => {
65
+ return (
66
+ <FoldersProvider>
67
+ <MyApp />
68
+ </FoldersProvider>
69
+ );
70
+ };
71
+ ```
72
+
73
+ #### `FolderTree`
74
+ <details>
75
+ <summary>Type Declaration</summary>
76
+ <p>
77
+
78
+ ```tsx
79
+ import { NodeModel } from "@minoru/react-dnd-treeview";
80
+ import { DndItemData } from "~/types";
81
+
82
+ interface Props {
83
+ type: string;
84
+ title: string;
85
+ onFolderClick: (data: NodeModel<DndItemData>["data"]) => void;
86
+ onTitleClick?: (event: React.MouseEvent<HTMLElement>) => void;
87
+ focusedFolderId?: string;
88
+ }
89
+
90
+ declare function FolderTree(props: Props): React.FC;
91
+ ```
92
+ </p>
93
+ </details>
94
+
95
+ `FolderTree` component shows the tree list of folders for a particular `type`.
96
+
97
+ ```tsx
98
+ import React from "react";
99
+ import { FolderTree } from "@webiny/app-aco";
100
+
101
+ export const MyComponent = () => {
102
+ return (
103
+ <FolderTree
104
+ type={"page"}
105
+ title={"All pages"}
106
+ onFolderClick={item => console.log(item)}
107
+ onTitleClick={() => console.log("Do whatever you like on title click")}
108
+ focusedFolderId={"anyExistingId"}
109
+ />
110
+ );
111
+ };
112
+ ```
113
+ > ℹ️ **INFO**
114
+ >
115
+ > Internally, the `FolderTree` uses [react-dnd-treeview](https://www.npmjs.com/package/@minoru/react-dnd-treeview) to render and manage the folder list: DO NOT rely on any of this package features, we might change it in the future.
116
+
117
+ #### `FolderDialogCreate`
118
+ <details>
119
+ <summary>Type Declaration</summary>
120
+ <p>
121
+
122
+ ```tsx
123
+ import { DialogOnClose } from "@webiny/ui/Dialog";
124
+
125
+ interface Props {
126
+ type: string;
127
+ open: boolean;
128
+ onClose: DialogOnClose;
129
+ parentId?: string | null;
130
+ }
131
+
132
+ declare function FolderDialogCreate(props: Props): React.FC;
133
+ ```
134
+ </p>
135
+ </details>
136
+
137
+ `FolderDialogCreate` component shows a dialog to allow users to create a new folder.
138
+
139
+ ```tsx
140
+ import React, { useState } from "react";
141
+ import { FolderDialogCreate } from "@webiny/app-aco";
142
+
143
+ export const MyComponent = () => {
144
+ const [dialogOpen, setDialogOpen] = useState(false);
145
+
146
+ return (
147
+ <>
148
+ <button onClick={() => setDialogOpen(true)}>Create folder</button>
149
+ <FolderDialogCreate
150
+ type={"page"}
151
+ open={dialogOpen}
152
+ onClose={() => setDialogOpen(false)}
153
+ parentId={"anyParentId"}
154
+ />
155
+ </>
156
+ );
157
+ };
158
+ ```
159
+
160
+ #### `FolderDialogUpdate`
161
+ <details>
162
+ <summary>Type Declaration</summary>
163
+ <p>
164
+
165
+ ```tsx
166
+ import { DialogOnClose } from "@webiny/ui/Dialog";
167
+
168
+ interface Props {
169
+ folder: FolderItem;
170
+ open: boolean;
171
+ onClose: DialogOnClose;
172
+ }
173
+
174
+ declare function FolderDialogUpdate(props: Props): React.FC;
175
+ ```
176
+ </p>
177
+ </details>
178
+
179
+ `FolderDialogUpdate` component shows a dialog to allow users to update an existing folder.
180
+
181
+ ```tsx
182
+ import React, { useState } from "react";
183
+ import { FolderDialogUpdate } from "@webiny/app-aco";
184
+
185
+ type Props = {
186
+ folder: FolderItem;
187
+ }
188
+
189
+ export const MyComponent = ({ folder }: Props) => {
190
+ const [dialogOpen, setDialogOpen] = useState(false);
191
+
192
+ return (
193
+ <>
194
+ <button onClick={() => setDialogOpen(true)}>Edit folder</button>
195
+ <FolderDialogUpdate
196
+ folder={folder}
197
+ open={dialogOpen}
198
+ onClose={() => setDialogOpen(false)}
199
+ />
200
+ </>
201
+ );
202
+ };
203
+ ```
204
+
205
+ #### `FolderDialogDelete`
206
+ <details>
207
+ <summary>Type Declaration</summary>
208
+ <p>
209
+
210
+ ```tsx
211
+ import { DialogOnClose } from "@webiny/ui/Dialog";
212
+
213
+ interface Props {
214
+ folder: FolderItem;
215
+ open: boolean;
216
+ onClose: DialogOnClose;
217
+ }
218
+
219
+ declare function FolderDialogDelete(props: Props): React.FC;
220
+ ```
221
+ </p>
222
+ </details>
223
+
224
+ `FolderDialogDelete` component shows a dialog to allow users to delete an existing folder.
225
+
226
+ ```tsx
227
+ import React, { useState } from "react";
228
+ import { FolderDialogDelete } from "@webiny/app-aco";
229
+
230
+ type Props = {
231
+ folder: FolderItem;
232
+ }
233
+
234
+ export const MyComponent = ({ folder }: Props) => {
235
+ const [dialogOpen, setDialogOpen] = useState(false);
236
+
237
+ return (
238
+ <>
239
+ <button onClick={() => setDialogOpen(true)}>Delete folder</button>
240
+ <FolderDialogDelete
241
+ folder={folder}
242
+ open={dialogOpen}
243
+ onClose={() => setDialogOpen(false)}
244
+ />
245
+ </>
246
+ );
247
+ };
248
+ ```
249
+
250
+ ### Hooks
251
+ #### `useFolders`
252
+ <details>
253
+ <summary>Type Declaration</summary>
254
+ <p>
255
+
256
+ ```tsx
257
+ import {FolderItem, FoldersActions} from "./types";
258
+
259
+ interface UseFoldersHook {
260
+ folders: FolderItem[];
261
+ loading: Record<FoldersActions, boolean>;
262
+ getFolder: (id: string) => Promise<FolderItem>;
263
+ createFolder: (folder: Omit<FolderItem, "id">) => Promise<FolderItem>;
264
+ updateFolder: (folder: FolderItem) => Promise<FolderItem>;
265
+ deleteFolder(folder: FolderItem): Promise<true>;
266
+ }
267
+
268
+ export declare function useFolders(type: string): UseFoldersHook;
269
+ ```
270
+
271
+ </p>
272
+ </details>
273
+
274
+ `useFolders` hook allows you to interact with folders state and related APIs while building your custom component.
275
+
276
+ ```tsx
277
+ import React from "react";
278
+ import { useFolders } from "@webiny/app-aco";
279
+
280
+ export const MyComponent = () => {
281
+ const { folders } = useFolders("page");
282
+
283
+ if (folders) {
284
+ return folders.map(folder => {
285
+ return <span key={folder.id}>{folder.name}</span>;
286
+ });
287
+ }
288
+
289
+ return <span>No folders to show</span>;
290
+ };
291
+ ```
292
+
293
+ As you might notice, there is not `listFolders` method available from `useFolders()` hook: this is because on first mount, `listFolders` is called internally, which will either issue a network request, or load folders from cache.
294
+
295
+ You don't need to store the result of it to any local state; that is managed by the context provider.
296
+
297
+ #### `useLinks`
298
+ <details>
299
+ <summary>Type Declaration</summary>
300
+ <p>
301
+
302
+ ```tsx
303
+ import { LinkItem, LinksActions } from "./types";
304
+
305
+ interface UseLinksHook {
306
+ links: LinkItem[];
307
+ loading: Record<LinksActions, boolean>;
308
+ getLink: (id: string, folderId: string) => Promise<LinkItem>;
309
+ createLink: (link: Omit<LinkItem, "linkId">) => Promise<LinkItem>;
310
+ updateLink: (link: LinkItem, contextFolderId: string) => Promise<LinkItem>;
311
+ deleteLink(link: LinkItem): Promise<true>;
312
+ }
313
+
314
+ export declare function useLinks(folderId: string): UseLinksHook;
315
+ ```
316
+ </p>
317
+ </details>
318
+
319
+
320
+ `useLinks()` hook allows you to interact with folders links state and related APIs while building your custom component.
321
+
322
+ ```tsx
323
+ import React, { useEffect, useState } from "react";
324
+ import { useLinks } from "@webiny/app-aco";
325
+
326
+ import { getEntryDetails } from "./any-custom-hook"
327
+
328
+ export const MyComponent = () => {
329
+ const { links } = useLinks("anyFolderId");
330
+ const [entries, setEntries] = useState([]);
331
+
332
+ useEffect(() => {
333
+ const details = getEntryDetails(links);
334
+ setEntries(details)
335
+ }, [links])
336
+
337
+ if (entries) {
338
+ return entries.map(entry => {
339
+ return <span key={entry.id}>{entry.name}</span>;
340
+ });
341
+ }
342
+
343
+ return <span>No entries to show</span>;
344
+ };
345
+ ```
346
+
347
+ As you might notice, there is not `listLinks` method available from `useLinks()` hook: this is because on first mount, `listLinks` is called internally, which will either issue a network request, or load links from cache.
348
+
349
+ You don't need to store the result of it to any local state; that is managed by the context provider.
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { DialogOnClose } from "@webiny/ui/Dialog";
3
+ declare type Props = {
4
+ type: string;
5
+ open: boolean;
6
+ onClose: DialogOnClose;
7
+ parentId?: string | null;
8
+ };
9
+ export declare const FolderDialogCreate: React.FC<Props>;
10
+ export {};
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.FolderDialogCreate = void 0;
11
+
12
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
13
+
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
+
16
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
+
18
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
+
20
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
21
+
22
+ var _react = _interopRequireWildcard(require("react"));
23
+
24
+ var _AutoComplete = require("@webiny/ui/AutoComplete");
25
+
26
+ var _Button = require("@webiny/ui/Button");
27
+
28
+ var _Dialog = require("@webiny/ui/Dialog");
29
+
30
+ var _Grid = require("@webiny/ui/Grid");
31
+
32
+ var _Input = require("@webiny/ui/Input");
33
+
34
+ var _Progress = require("@webiny/ui/Progress");
35
+
36
+ var _form = require("@webiny/form");
37
+
38
+ var _validation = require("@webiny/validation");
39
+
40
+ var _i18n = require("@webiny/app/i18n");
41
+
42
+ var _appAdmin = require("@webiny/app-admin");
43
+
44
+ var _useFolders2 = require("../../hooks/useFolders");
45
+
46
+ var _styled = require("./styled");
47
+
48
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
49
+
50
+ var t = _i18n.i18n.ns("app-aco/components/tree/dialog-create");
51
+
52
+ var FolderDialogCreate = function FolderDialogCreate(_ref) {
53
+ var type = _ref.type,
54
+ onClose = _ref.onClose,
55
+ open = _ref.open,
56
+ parentId = _ref.parentId;
57
+
58
+ var _useFolders = (0, _useFolders2.useFolders)(type),
59
+ folders = _useFolders.folders,
60
+ loading = _useFolders.loading,
61
+ createFolder = _useFolders.createFolder;
62
+
63
+ var _useState = (0, _react.useState)(false),
64
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
65
+ dialogOpen = _useState2[0],
66
+ setDialogOpen = _useState2[1];
67
+
68
+ var _useSnackbar = (0, _appAdmin.useSnackbar)(),
69
+ showSnackbar = _useSnackbar.showSnackbar;
70
+
71
+ var onSubmit = /*#__PURE__*/function () {
72
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data) {
73
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
74
+ while (1) {
75
+ switch (_context.prev = _context.next) {
76
+ case 0:
77
+ _context.prev = 0;
78
+ _context.next = 3;
79
+ return createFolder((0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
80
+ type: type
81
+ }, typeof parentId !== "undefined" && {
82
+ parentId: parentId
83
+ }));
84
+
85
+ case 3:
86
+ setDialogOpen(false);
87
+ showSnackbar(t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Folder created successfully!"]))));
88
+ _context.next = 10;
89
+ break;
90
+
91
+ case 7:
92
+ _context.prev = 7;
93
+ _context.t0 = _context["catch"](0);
94
+ showSnackbar(_context.t0.message);
95
+
96
+ case 10:
97
+ case "end":
98
+ return _context.stop();
99
+ }
100
+ }
101
+ }, _callee, null, [[0, 7]]);
102
+ }));
103
+
104
+ return function onSubmit(_x) {
105
+ return _ref2.apply(this, arguments);
106
+ };
107
+ }();
108
+
109
+ (0, _react.useEffect)(function () {
110
+ setDialogOpen(open);
111
+ }, [open]);
112
+ return /*#__PURE__*/_react.default.createElement(_styled.DialogContainer, {
113
+ open: dialogOpen,
114
+ onClose: onClose
115
+ }, dialogOpen && /*#__PURE__*/_react.default.createElement(_form.Form, {
116
+ onSubmit: onSubmit
117
+ }, function (_ref3) {
118
+ var Bind = _ref3.Bind,
119
+ submit = _ref3.submit;
120
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, loading.CREATE && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, {
121
+ label: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Creating folder..."])))
122
+ }), /*#__PURE__*/_react.default.createElement(_Dialog.DialogTitle, null, t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Create a new folder"])))), /*#__PURE__*/_react.default.createElement(_Dialog.DialogContent, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
123
+ span: 12
124
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
125
+ name: "name",
126
+ validators: [_validation.validation.create("required,minLength:3")]
127
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
128
+ label: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Name"])))
129
+ }))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
130
+ span: 12
131
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
132
+ name: "slug",
133
+ validators: [_validation.validation.create("required,minLength:3,slug")]
134
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
135
+ label: t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Slug"])))
136
+ }))), typeof parentId === "undefined" && /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
137
+ span: 12
138
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
139
+ name: "parentId"
140
+ }, /*#__PURE__*/_react.default.createElement(_AutoComplete.AutoComplete, {
141
+ options: folders,
142
+ label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Parent"])))
143
+ }))))), /*#__PURE__*/_react.default.createElement(_styled.DialogActions, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
144
+ onClick: function onClick() {
145
+ setDialogOpen(false);
146
+ }
147
+ }, t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Cancel"])))), /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
148
+ onClick: submit
149
+ }, t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["Create Folder"]))))));
150
+ }));
151
+ };
152
+
153
+ exports.FolderDialogCreate = FolderDialogCreate;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["t","i18n","ns","FolderDialogCreate","type","onClose","open","parentId","useFolders","folders","loading","createFolder","useState","dialogOpen","setDialogOpen","useSnackbar","showSnackbar","onSubmit","data","message","useEffect","Bind","submit","CREATE","validation","create"],"sources":["DialogCreate.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\n\nimport { AutoComplete } from \"@webiny/ui/AutoComplete\";\nimport { ButtonPrimary, ButtonDefault } from \"@webiny/ui/Button\";\nimport { DialogTitle, DialogContent, DialogOnClose } from \"@webiny/ui/Dialog\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { Form, FormOnSubmit } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nimport { useFolders } from \"~/hooks/useFolders\";\n\nimport { DialogContainer, DialogActions } from \"./styled\";\n\nimport { FolderItem } from \"~/types\";\n\ntype Props = {\n type: string;\n open: boolean;\n onClose: DialogOnClose;\n parentId?: string | null;\n};\n\nconst t = i18n.ns(\"app-aco/components/tree/dialog-create\");\n\ntype SubmitData = Omit<FolderItem, \"id\">;\n\nexport const FolderDialogCreate: React.FC<Props> = ({ type, onClose, open, parentId }) => {\n const { folders, loading, createFolder } = useFolders(type);\n const [dialogOpen, setDialogOpen] = useState(false);\n const { showSnackbar } = useSnackbar();\n\n const onSubmit: FormOnSubmit<SubmitData> = async data => {\n try {\n await createFolder({\n ...data,\n type,\n ...(typeof parentId !== \"undefined\" && { parentId })\n });\n setDialogOpen(false);\n showSnackbar(t`Folder created successfully!`);\n } catch (error) {\n showSnackbar(error.message);\n }\n };\n\n useEffect(() => {\n setDialogOpen(open);\n }, [open]);\n\n return (\n <DialogContainer open={dialogOpen} onClose={onClose}>\n {dialogOpen && (\n <Form onSubmit={onSubmit}>\n {({ Bind, submit }) => (\n <>\n {loading.CREATE && <CircularProgress label={t`Creating folder...`} />}\n <DialogTitle>{t`Create a new folder`}</DialogTitle>\n <DialogContent>\n <Grid>\n <Cell span={12}>\n <Bind\n name={\"name\"}\n validators={[validation.create(\"required,minLength:3\")]}\n >\n <Input label={t`Name`} />\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind\n name={\"slug\"}\n validators={[\n validation.create(\"required,minLength:3,slug\")\n ]}\n >\n <Input label={t`Slug`} />\n </Bind>\n </Cell>\n {typeof parentId === \"undefined\" && (\n <Cell span={12}>\n <Bind name=\"parentId\">\n <AutoComplete options={folders} label={t`Parent`} />\n </Bind>\n </Cell>\n )}\n </Grid>\n </DialogContent>\n <DialogActions>\n <ButtonDefault\n onClick={() => {\n setDialogOpen(false);\n }}\n >\n {t`Cancel`}\n </ButtonDefault>\n <ButtonPrimary onClick={submit}>{t`Create Folder`}</ButtonPrimary>\n </DialogActions>\n </>\n )}\n </Form>\n )}\n </DialogContainer>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { DialogOnClose } from "@webiny/ui/Dialog";
3
+ import { FolderItem } from "../../types";
4
+ declare type Props = {
5
+ folder: FolderItem;
6
+ open: boolean;
7
+ onClose: DialogOnClose;
8
+ };
9
+ export declare const FolderDialogDelete: ({ folder, open, onClose }: Props) => JSX.Element;
10
+ export {};