@webiny/app-file-manager 5.34.8 → 5.35.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.
- package/FileManagerFileTypePlugin.d.ts +20 -0
- package/FileManagerFileTypePlugin.js +48 -0
- package/FileManagerFileTypePlugin.js.map +1 -0
- package/app.d.ts +2 -0
- package/app.js +16 -0
- package/app.js.map +1 -0
- package/components/FileDetails/Aliases.d.ts +3 -0
- package/components/FileDetails/Aliases.js +228 -0
- package/components/FileDetails/Aliases.js.map +1 -0
- package/components/FileDetails/DeleteImageAction.d.ts +2 -0
- package/components/FileDetails/DeleteImageAction.js +82 -0
- package/components/FileDetails/DeleteImageAction.js.map +1 -0
- package/components/FileDetails/FileProvider.d.ts +13 -0
- package/components/FileDetails/FileProvider.js +29 -0
- package/components/FileDetails/FileProvider.js.map +1 -0
- package/components/FileDetails/Name.d.ts +3 -0
- package/components/FileDetails/Name.js +81 -0
- package/components/FileDetails/Name.js.map +1 -0
- package/components/FileDetails/Tags.d.ts +3 -0
- package/components/FileDetails/Tags.js +176 -0
- package/components/FileDetails/Tags.js.map +1 -0
- package/components/FileDetails.d.ts +20 -0
- package/components/FileDetails.js +243 -0
- package/components/FileDetails.js.map +1 -0
- package/getFileTypePlugin.d.ts +4 -0
- package/getFileTypePlugin.js +51 -0
- package/getFileTypePlugin.js.map +1 -0
- package/index.d.ts +4 -2
- package/index.js +37 -31
- package/index.js.map +1 -1
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.d.ts +37 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js +293 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/FileManagerApiContext.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.d.ts +2 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js +15 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/getFileUploader.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.d.ts +2 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.js +19 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/index.js.map +1 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.d.ts +3 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js +16 -0
- package/modules/FileManagerApiProvider/FileManagerApiContext/useFileManagerApi.js.map +1 -0
- package/modules/FileManagerApiProvider/graphql.d.ts +103 -0
- package/modules/FileManagerApiProvider/graphql.js +24 -0
- package/modules/FileManagerApiProvider/graphql.js.map +1 -0
- package/modules/FileManagerApiProvider/index.d.ts +2 -0
- package/modules/FileManagerApiProvider/index.js +22 -0
- package/modules/FileManagerApiProvider/index.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js +41 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/SupportedFileTypes.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js +51 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar/UploadStatus.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.d.ts +5 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js +48 -0
- package/modules/FileManagerRenderer/DefaultRenderer/BottomInfoBar.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.d.ts +11 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js +68 -0
- package/modules/FileManagerRenderer/DefaultRenderer/DropFilesHere.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.d.ts +7 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js +32 -0
- package/modules/FileManagerRenderer/DefaultRenderer/EmptyView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.d.ts +16 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.js +131 -0
- package/modules/FileManagerRenderer/DefaultRenderer/File.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.d.ts +18 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js +443 -0
- package/modules/FileManagerRenderer/DefaultRenderer/FileManagerView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.d.ts +6 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js +96 -0
- package/modules/FileManagerRenderer/DefaultRenderer/LeftSidebar.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.d.ts +3 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js +74 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoPermissionView.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.d.ts +3 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js +22 -0
- package/modules/FileManagerRenderer/DefaultRenderer/NoResults.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.d.ts +2 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.js +70 -0
- package/modules/FileManagerRenderer/DefaultRenderer/index.js.map +1 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.d.ts +2 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js +40 -0
- package/modules/FileManagerRenderer/DefaultRenderer/outputFileSelectionError.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.d.ts +47 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js +448 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/FileManagerViewContext.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.d.ts +2 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.js +27 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/index.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.d.ts +63 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js +100 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/stateReducer.js.map +1 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.d.ts +3 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js +15 -0
- package/modules/FileManagerRenderer/FileManagerViewProvider/useFileManagerView.js.map +1 -0
- package/modules/FileManagerRenderer/index.d.ts +2 -0
- package/modules/FileManagerRenderer/index.js +13 -0
- package/modules/FileManagerRenderer/index.js.map +1 -0
- package/modules/FileTypes/fileDefault.d.ts +2 -0
- package/modules/FileTypes/fileDefault.js +28 -0
- package/modules/FileTypes/fileDefault.js.map +1 -0
- package/modules/FileTypes/fileImage/EditAction.d.ts +7 -0
- package/modules/FileTypes/fileImage/EditAction.js +123 -0
- package/modules/FileTypes/fileImage/EditAction.js.map +1 -0
- package/modules/FileTypes/fileImage/index.d.ts +2 -0
- package/modules/FileTypes/fileImage/index.js +37 -0
- package/modules/FileTypes/fileImage/index.js.map +1 -0
- package/modules/FileTypes/icons/edit.svg +17 -0
- package/modules/FileTypes/icons/round-description-24px.svg +1 -0
- package/modules/FileTypes/index.d.ts +1 -0
- package/modules/FileTypes/index.js +32 -0
- package/modules/FileTypes/index.js.map +1 -0
- package/modules/Settings/assets/icons/folder-open.svg +1 -0
- package/modules/Settings/graphql.d.ts +5 -0
- package/modules/Settings/graphql.js +17 -0
- package/modules/Settings/graphql.js.map +1 -0
- package/modules/Settings/index.d.ts +2 -0
- package/modules/Settings/index.js +35 -0
- package/modules/Settings/index.js.map +1 -0
- package/modules/Settings/plugins/installation.d.ts +3 -0
- package/modules/Settings/plugins/installation.js +103 -0
- package/modules/Settings/plugins/installation.js.map +1 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.d.ts +14 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js +217 -0
- package/modules/Settings/plugins/permissionRenderer/FileManagerPermissions.js.map +1 -0
- package/modules/Settings/plugins/permissionRenderer/index.d.ts +3 -0
- package/modules/Settings/plugins/permissionRenderer/index.js +28 -0
- package/modules/Settings/plugins/permissionRenderer/index.js.map +1 -0
- package/modules/Settings/views/FileManagerSettings.d.ts +2 -0
- package/modules/Settings/views/FileManagerSettings.js +132 -0
- package/modules/Settings/views/FileManagerSettings.js.map +1 -0
- package/package.json +28 -16
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Plugin } from "@webiny/plugins";
|
|
3
|
+
import { FileItem } from "@webiny/app-admin/types";
|
|
4
|
+
export interface RenderParams {
|
|
5
|
+
file: FileItem;
|
|
6
|
+
}
|
|
7
|
+
interface Config {
|
|
8
|
+
types: string[];
|
|
9
|
+
actions?: React.ComponentType<RenderParams>[];
|
|
10
|
+
render(params: RenderParams): React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export declare class FileManagerFileTypePlugin extends Plugin {
|
|
13
|
+
static readonly type: string;
|
|
14
|
+
private readonly config;
|
|
15
|
+
constructor(config?: Config);
|
|
16
|
+
get types(): string[];
|
|
17
|
+
get actions(): React.ComponentType<RenderParams>[];
|
|
18
|
+
render(params: RenderParams): React.ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.FileManagerFileTypePlugin = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
+
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _plugins = require("@webiny/plugins");
|
|
15
|
+
var FileManagerFileTypePlugin = /*#__PURE__*/function (_Plugin) {
|
|
16
|
+
(0, _inherits2.default)(FileManagerFileTypePlugin, _Plugin);
|
|
17
|
+
var _super = (0, _createSuper2.default)(FileManagerFileTypePlugin);
|
|
18
|
+
function FileManagerFileTypePlugin(config) {
|
|
19
|
+
var _this;
|
|
20
|
+
(0, _classCallCheck2.default)(this, FileManagerFileTypePlugin);
|
|
21
|
+
_this = _super.call(this);
|
|
22
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
|
|
23
|
+
_this.config = config || {};
|
|
24
|
+
return _this;
|
|
25
|
+
}
|
|
26
|
+
(0, _createClass2.default)(FileManagerFileTypePlugin, [{
|
|
27
|
+
key: "types",
|
|
28
|
+
get: function get() {
|
|
29
|
+
return this.config.types || [];
|
|
30
|
+
}
|
|
31
|
+
}, {
|
|
32
|
+
key: "actions",
|
|
33
|
+
get: function get() {
|
|
34
|
+
return this.config.actions || [];
|
|
35
|
+
}
|
|
36
|
+
}, {
|
|
37
|
+
key: "render",
|
|
38
|
+
value: function render(params) {
|
|
39
|
+
if (!this.config.render) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return this.config.render(params);
|
|
43
|
+
}
|
|
44
|
+
}]);
|
|
45
|
+
return FileManagerFileTypePlugin;
|
|
46
|
+
}(_plugins.Plugin);
|
|
47
|
+
exports.FileManagerFileTypePlugin = FileManagerFileTypePlugin;
|
|
48
|
+
(0, _defineProperty2.default)(FileManagerFileTypePlugin, "type", "admin-file-manager-file-type");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FileManagerFileTypePlugin","config","types","actions","params","render","Plugin"],"sources":["FileManagerFileTypePlugin.ts"],"sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins\";\nimport { FileItem } from \"@webiny/app-admin/types\";\n\nexport interface RenderParams {\n file: FileItem;\n}\n\ninterface Config {\n types: string[];\n actions?: React.ComponentType<RenderParams>[];\n render(params: RenderParams): React.ReactNode;\n}\n\nexport class FileManagerFileTypePlugin extends Plugin {\n public static override readonly type: string = \"admin-file-manager-file-type\";\n private readonly config: Partial<Config>;\n\n public constructor(config?: Config) {\n super();\n this.config = config || {};\n }\n\n get types(): string[] {\n return this.config.types || [];\n }\n\n get actions(): React.ComponentType<RenderParams>[] {\n return this.config.actions || [];\n }\n\n public render(params: RenderParams): React.ReactNode {\n if (!this.config.render) {\n return null;\n }\n return this.config.render(params);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AACA;AAAyC,IAa5BA,yBAAyB;EAAA;EAAA;EAIlC,mCAAmBC,MAAe,EAAE;IAAA;IAAA;IAChC;IAAQ;IACR,MAAKA,MAAM,GAAGA,MAAM,IAAI,CAAC,CAAC;IAAC;EAC/B;EAAC;IAAA;IAAA,KAED,eAAsB;MAClB,OAAO,IAAI,CAACA,MAAM,CAACC,KAAK,IAAI,EAAE;IAClC;EAAC;IAAA;IAAA,KAED,eAAmD;MAC/C,OAAO,IAAI,CAACD,MAAM,CAACE,OAAO,IAAI,EAAE;IACpC;EAAC;IAAA;IAAA,OAED,gBAAcC,MAAoB,EAAmB;MACjD,IAAI,CAAC,IAAI,CAACH,MAAM,CAACI,MAAM,EAAE;QACrB,OAAO,IAAI;MACf;MACA,OAAO,IAAI,CAACJ,MAAM,CAACI,MAAM,CAACD,MAAM,CAAC;IACrC;EAAC;EAAA;AAAA,EAtB0CE,eAAM;AAAA;AAAA,8BAAxCN,yBAAyB,UACa,8BAA8B"}
|
package/app.d.ts
ADDED
package/app.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.FileManager = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _Settings = require("./modules/Settings");
|
|
10
|
+
var _FileManagerApiProvider = require("./modules/FileManagerApiProvider");
|
|
11
|
+
var _FileTypes = require("./modules/FileTypes");
|
|
12
|
+
var _FileManagerRenderer = require("./modules/FileManagerRenderer");
|
|
13
|
+
var FileManager = function FileManager() {
|
|
14
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Settings.SettingsModule, null), /*#__PURE__*/_react.default.createElement(_FileManagerApiProvider.FileManagerApiProviderModule, null), /*#__PURE__*/_react.default.createElement(_FileTypes.FileTypesModule, null), /*#__PURE__*/_react.default.createElement(_FileManagerRenderer.FileManagerRendererModule, null));
|
|
15
|
+
};
|
|
16
|
+
exports.FileManager = FileManager;
|
package/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FileManager"],"sources":["app.tsx"],"sourcesContent":["import React from \"react\";\nimport { SettingsModule } from \"~/modules/Settings\";\nimport { FileManagerApiProviderModule } from \"~/modules/FileManagerApiProvider\";\nimport { FileTypesModule } from \"~/modules/FileTypes\";\nimport { FileManagerRendererModule } from \"~/modules/FileManagerRenderer\";\n\nexport const FileManager: React.FC = () => {\n return (\n <>\n <SettingsModule />\n <FileManagerApiProviderModule />\n <FileTypesModule />\n <FileManagerRendererModule />\n </>\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AAEO,IAAMA,WAAqB,GAAG,SAAxBA,WAAqB,GAAS;EACvC,oBACI,yEACI,6BAAC,wBAAc,OAAG,eAClB,6BAAC,oDAA4B,OAAG,eAChC,6BAAC,0BAAe,OAAG,eACnB,6BAAC,8CAAyB,OAAG,CAC9B;AAEX,CAAC;AAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
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.Aliases = exports.AliasEditor = void 0;
|
|
9
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _DynamicFieldset = require("@webiny/ui/DynamicFieldset");
|
|
15
|
+
var _Input = require("@webiny/ui/Input");
|
|
16
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
17
|
+
var _Typography = require("@webiny/ui/Typography");
|
|
18
|
+
var _Button = require("@webiny/ui/Button");
|
|
19
|
+
var _validation = require("@webiny/validation");
|
|
20
|
+
var _form = require("@webiny/form");
|
|
21
|
+
var _Icon = require("@webiny/ui/Icon");
|
|
22
|
+
var _link = require("@material-design-icons/svg/outlined/link.svg");
|
|
23
|
+
var _edit = require("@material-design-icons/svg/outlined/edit.svg");
|
|
24
|
+
var _delete = require("@material-design-icons/svg/outlined/delete.svg");
|
|
25
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
26
|
+
var _ = require("../..");
|
|
27
|
+
var Fieldset = /*#__PURE__*/(0, _styled.default)("div", {
|
|
28
|
+
target: "e1buhfku0",
|
|
29
|
+
label: "Fieldset"
|
|
30
|
+
})({
|
|
31
|
+
position: "relative",
|
|
32
|
+
width: "100%",
|
|
33
|
+
marginBottom: 15,
|
|
34
|
+
".webiny-ui-button": {
|
|
35
|
+
position: "absolute",
|
|
36
|
+
display: "block",
|
|
37
|
+
right: 10,
|
|
38
|
+
top: 13
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
var Header = /*#__PURE__*/(0, _styled.default)("div", {
|
|
42
|
+
target: "e1buhfku1",
|
|
43
|
+
label: "Header"
|
|
44
|
+
})({
|
|
45
|
+
display: "flex",
|
|
46
|
+
justifyContent: "space-between",
|
|
47
|
+
marginBottom: 15
|
|
48
|
+
});
|
|
49
|
+
var DeleteAliasButton = /*#__PURE__*/(0, _styled.default)(_Button.IconButton, {
|
|
50
|
+
label: "DeleteAliasButton",
|
|
51
|
+
target: "e1buhfku2"
|
|
52
|
+
})("position:absolute;top:5px;right:5px;");
|
|
53
|
+
var AliasList = /*#__PURE__*/(0, _styled.default)("ul", {
|
|
54
|
+
label: "AliasList",
|
|
55
|
+
target: "e1buhfku3"
|
|
56
|
+
})("padding-left:48px;li{padding:0;}");
|
|
57
|
+
var PATHNAME_REGEX = /^\/[/.a-zA-Z0-9-]+$/;
|
|
58
|
+
var AliasEditor = function AliasEditor() {
|
|
59
|
+
var _useBind = (0, _form.useBind)({
|
|
60
|
+
name: "aliases"
|
|
61
|
+
}),
|
|
62
|
+
value = _useBind.value,
|
|
63
|
+
onChange = _useBind.onChange;
|
|
64
|
+
var addAlias = function addAlias() {
|
|
65
|
+
var newValue = Array.isArray(value) ? (0, _toConsumableArray2.default)(value) : [];
|
|
66
|
+
newValue.push("");
|
|
67
|
+
if (!onChange) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
onChange(newValue);
|
|
71
|
+
};
|
|
72
|
+
var aliasValidator = (0, _react.useMemo)(function () {
|
|
73
|
+
return [_validation.validation.create("required"), function (value) {
|
|
74
|
+
if (!PATHNAME_REGEX.test(value)) {
|
|
75
|
+
throw new Error("Value must be a valid pathname.");
|
|
76
|
+
}
|
|
77
|
+
}];
|
|
78
|
+
}, []);
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement(_DynamicFieldset.DynamicFieldset, {
|
|
80
|
+
value: value || [""],
|
|
81
|
+
onChange: onChange
|
|
82
|
+
}, function (_ref) {
|
|
83
|
+
var actions = _ref.actions,
|
|
84
|
+
header = _ref.header,
|
|
85
|
+
row = _ref.row,
|
|
86
|
+
empty = _ref.empty;
|
|
87
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, row(function (_ref2) {
|
|
88
|
+
var index = _ref2.index;
|
|
89
|
+
return /*#__PURE__*/_react.default.createElement(Fieldset, null, /*#__PURE__*/_react.default.createElement(_form.Bind, {
|
|
90
|
+
validators: aliasValidator,
|
|
91
|
+
name: "aliases.".concat(index)
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
93
|
+
placeholder: "Alias",
|
|
94
|
+
description: "Enter a file path, e.g., /my/custom/file/path.png"
|
|
95
|
+
})), /*#__PURE__*/_react.default.createElement(DeleteAliasButton, {
|
|
96
|
+
icon: /*#__PURE__*/_react.default.createElement(_delete.ReactComponent, null),
|
|
97
|
+
onClick: actions.remove(index)
|
|
98
|
+
}));
|
|
99
|
+
}), empty(function () {
|
|
100
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(Header, null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
101
|
+
use: "overline"
|
|
102
|
+
}, "File Aliases"), /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
|
|
103
|
+
onClick: addAlias
|
|
104
|
+
}, "+ Add Alias")), /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
105
|
+
use: "body2"
|
|
106
|
+
}, "To make your file accessible via custom paths, add one or more aliases."));
|
|
107
|
+
}), header(function () {
|
|
108
|
+
return /*#__PURE__*/_react.default.createElement(Header, null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
109
|
+
use: "overline"
|
|
110
|
+
}, "File Aliases"), /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
|
|
111
|
+
onClick: addAlias
|
|
112
|
+
}, "+ Add Alias"));
|
|
113
|
+
}));
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
exports.AliasEditor = AliasEditor;
|
|
117
|
+
var EditButton = /*#__PURE__*/(0, _styled.default)(_Button.IconButton, {
|
|
118
|
+
label: "EditButton",
|
|
119
|
+
target: "e1buhfku4"
|
|
120
|
+
})("&.mdc-icon-button svg{width:20px;height:20px;}");
|
|
121
|
+
var EmptyAddAlias = /*#__PURE__*/(0, _styled.default)(_Button.ButtonDefault, {
|
|
122
|
+
label: "EmptyAddAlias",
|
|
123
|
+
target: "e1buhfku5"
|
|
124
|
+
})("&.mdc-button:not(:disabled){color:var(--mdc-theme-text-secondary-on-background);text-transform:capitalize;letter-spacing:initial;margin-left:-8px;}");
|
|
125
|
+
var ButtonsWrapper = /*#__PURE__*/(0, _styled.default)("div", {
|
|
126
|
+
label: "ButtonsWrapper",
|
|
127
|
+
target: "e1buhfku6"
|
|
128
|
+
})("margin-top:16px;& button:first-of-type{margin-right:16px;}");
|
|
129
|
+
var Aliases = function Aliases() {
|
|
130
|
+
var _useFileManagerApi = (0, _.useFileManagerApi)(),
|
|
131
|
+
canEdit = _useFileManagerApi.canEdit;
|
|
132
|
+
var _useFileManagerView = (0, _.useFileManagerView)(),
|
|
133
|
+
updateFile = _useFileManagerView.updateFile;
|
|
134
|
+
var _useFile = (0, _.useFile)(),
|
|
135
|
+
file = _useFile.file;
|
|
136
|
+
var _useState = (0, _react.useState)(false),
|
|
137
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
138
|
+
isEditing = _useState2[0],
|
|
139
|
+
setIsEditing = _useState2[1];
|
|
140
|
+
var _useSnackbar = (0, _appAdmin.useSnackbar)(),
|
|
141
|
+
showSnackbar = _useSnackbar.showSnackbar;
|
|
142
|
+
var _useState3 = (0, _react.useState)(false),
|
|
143
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
144
|
+
updating = _useState4[0],
|
|
145
|
+
setUpdating = _useState4[1];
|
|
146
|
+
var isEditingAllowed = canEdit(file);
|
|
147
|
+
var getUrlWithAlias = function getUrlWithAlias(alias) {
|
|
148
|
+
var url = new URL(file.src);
|
|
149
|
+
url.pathname = alias;
|
|
150
|
+
return url.toString();
|
|
151
|
+
};
|
|
152
|
+
var onEdit = function onEdit() {
|
|
153
|
+
return setIsEditing(true);
|
|
154
|
+
};
|
|
155
|
+
var cancelEdit = function cancelEdit() {
|
|
156
|
+
return setIsEditing(false);
|
|
157
|
+
};
|
|
158
|
+
var onSubmit = /*#__PURE__*/function () {
|
|
159
|
+
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref3) {
|
|
160
|
+
var aliases;
|
|
161
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
162
|
+
while (1) switch (_context.prev = _context.next) {
|
|
163
|
+
case 0:
|
|
164
|
+
aliases = _ref3.aliases;
|
|
165
|
+
setUpdating(true);
|
|
166
|
+
_context.next = 4;
|
|
167
|
+
return updateFile(file.id, {
|
|
168
|
+
aliases: aliases
|
|
169
|
+
});
|
|
170
|
+
case 4:
|
|
171
|
+
setUpdating(false);
|
|
172
|
+
setIsEditing(false);
|
|
173
|
+
showSnackbar("Aliases successfully updated.");
|
|
174
|
+
case 7:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee);
|
|
179
|
+
}));
|
|
180
|
+
return function onSubmit(_x) {
|
|
181
|
+
return _ref4.apply(this, arguments);
|
|
182
|
+
};
|
|
183
|
+
}();
|
|
184
|
+
var aliases = file.aliases || [];
|
|
185
|
+
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
186
|
+
// An empty string immediately creates an input, for better UX.
|
|
187
|
+
data: {
|
|
188
|
+
aliases: aliases.length ? aliases : [""]
|
|
189
|
+
},
|
|
190
|
+
onSubmit: onSubmit
|
|
191
|
+
}, function (_ref5) {
|
|
192
|
+
var submit = _ref5.submit;
|
|
193
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("li-title", null, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
|
|
194
|
+
className: "list-item__icon",
|
|
195
|
+
icon: /*#__PURE__*/_react.default.createElement(_link.ReactComponent, null)
|
|
196
|
+
}), aliases.length && !isEditing ? /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
197
|
+
use: "subtitle1",
|
|
198
|
+
className: "list-item__content"
|
|
199
|
+
}, "File aliases") : null, !aliases.length && !isEditing ? /*#__PURE__*/_react.default.createElement(EmptyAddAlias, {
|
|
200
|
+
onClick: onEdit,
|
|
201
|
+
disabled: !isEditingAllowed,
|
|
202
|
+
"data-testid": "fm.alias.add"
|
|
203
|
+
}, "Add aliases...") : null, isEditingAllowed && aliases.length && !isEditing ? /*#__PURE__*/_react.default.createElement(EditButton, {
|
|
204
|
+
icon: /*#__PURE__*/_react.default.createElement(_edit.ReactComponent, null),
|
|
205
|
+
onClick: onEdit
|
|
206
|
+
}) : null), isEditing ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AliasEditor, null), /*#__PURE__*/_react.default.createElement(ButtonsWrapper, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
|
|
207
|
+
small: true,
|
|
208
|
+
onClick: submit,
|
|
209
|
+
disabled: updating,
|
|
210
|
+
"data-testid": "fm.aliases.submit"
|
|
211
|
+
}, updating ? "Saving..." : "Save changes"), /*#__PURE__*/_react.default.createElement(_Button.ButtonSecondary, {
|
|
212
|
+
small: true,
|
|
213
|
+
onClick: cancelEdit
|
|
214
|
+
}, "Cancel"))) : /*#__PURE__*/_react.default.createElement(AliasList, null, aliases.map(function (alias) {
|
|
215
|
+
return /*#__PURE__*/_react.default.createElement("li", {
|
|
216
|
+
key: alias
|
|
217
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
218
|
+
use: "subtitle1",
|
|
219
|
+
className: "list-item__content"
|
|
220
|
+
}, "-", " ", /*#__PURE__*/_react.default.createElement("a", {
|
|
221
|
+
rel: "noreferrer",
|
|
222
|
+
href: getUrlWithAlias(alias),
|
|
223
|
+
target: "_blank"
|
|
224
|
+
}, alias)));
|
|
225
|
+
})));
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
exports.Aliases = Aliases;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Fieldset","styled","position","width","marginBottom","display","right","top","Header","justifyContent","DeleteAliasButton","IconButton","AliasList","PATHNAME_REGEX","AliasEditor","useBind","name","value","onChange","addAlias","newValue","Array","isArray","push","aliasValidator","useMemo","validation","create","test","Error","actions","header","row","empty","index","remove","EditButton","EmptyAddAlias","ButtonDefault","ButtonsWrapper","Aliases","useFileManagerApi","canEdit","useFileManagerView","updateFile","useFile","file","useState","isEditing","setIsEditing","useSnackbar","showSnackbar","updating","setUpdating","isEditingAllowed","getUrlWithAlias","alias","url","URL","src","pathname","toString","onEdit","cancelEdit","onSubmit","aliases","id","length","submit","map"],"sources":["Aliases.tsx"],"sourcesContent":["import React, { Fragment, useMemo, useState } from \"react\";\nimport { DynamicFieldset } from \"@webiny/ui/DynamicFieldset\";\nimport { Input } from \"@webiny/ui/Input\";\nimport styled from \"@emotion/styled\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ButtonSecondary, ButtonDefault, IconButton, ButtonPrimary } from \"@webiny/ui/Button\";\nimport { validation } from \"@webiny/validation\";\nimport { Form, Bind, FormOnSubmit, useBind } from \"@webiny/form\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { ReactComponent as LinkIcon } from \"@material-design-icons/svg/outlined/link.svg\";\nimport { ReactComponent as EditIcon } from \"@material-design-icons/svg/outlined/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"@material-design-icons/svg/outlined/delete.svg\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { useFile, useFileManagerApi, useFileManagerView } from \"~/index\";\n\nconst Fieldset = styled(\"div\")({\n position: \"relative\",\n width: \"100%\",\n marginBottom: 15,\n \".webiny-ui-button\": {\n position: \"absolute\",\n display: \"block\",\n right: 10,\n top: 13\n }\n});\n\nconst Header = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: 15\n});\n\nconst DeleteAliasButton = styled(IconButton)`\n position: absolute;\n top: 5px;\n right: 5px;\n`;\n\nconst AliasList = styled.ul`\n padding-left: 48px;\n li {\n padding: 0;\n }\n`;\n\nconst PATHNAME_REGEX = /^\\/[/.a-zA-Z0-9-]+$/;\n\nexport const AliasEditor = () => {\n const { value, onChange } = useBind<string[]>({ name: \"aliases\" });\n\n const addAlias = () => {\n const newValue = Array.isArray(value) ? [...value] : [];\n newValue.push(\"\");\n if (!onChange) {\n return;\n }\n onChange(newValue);\n };\n\n const aliasValidator = useMemo(() => {\n return [\n validation.create(\"required\"),\n (value: string) => {\n if (!PATHNAME_REGEX.test(value)) {\n throw new Error(\"Value must be a valid pathname.\");\n }\n }\n ];\n }, []);\n\n return (\n <DynamicFieldset value={value || [\"\"]} onChange={onChange}>\n {({ actions, header, row, empty }) => (\n <>\n {row(({ index }) => (\n <Fieldset>\n <Bind validators={aliasValidator} name={`aliases.${index}`}>\n <Input\n placeholder={\"Alias\"}\n description={\n \"Enter a file path, e.g., /my/custom/file/path.png\"\n }\n />\n </Bind>\n <DeleteAliasButton\n icon={<DeleteIcon />}\n onClick={actions.remove(index)}\n />\n </Fieldset>\n ))}\n {empty(() => (\n <Fragment>\n <Header>\n <Typography use={\"overline\"}>File Aliases</Typography>\n <ButtonDefault onClick={addAlias}>+ Add Alias</ButtonDefault>\n </Header>\n <Typography use={\"body2\"}>\n To make your file accessible via custom paths, add one or more\n aliases.\n </Typography>\n </Fragment>\n ))}\n {header(() => (\n <Header>\n <Typography use={\"overline\"}>File Aliases</Typography>\n <ButtonDefault onClick={addAlias}>+ Add Alias</ButtonDefault>\n </Header>\n ))}\n </>\n )}\n </DynamicFieldset>\n );\n};\n\nconst EditButton = styled(IconButton)`\n &.mdc-icon-button svg {\n width: 20px;\n height: 20px;\n }\n`;\n\nconst EmptyAddAlias = styled(ButtonDefault)`\n &.mdc-button:not(:disabled) {\n color: var(--mdc-theme-text-secondary-on-background);\n text-transform: capitalize;\n letter-spacing: initial;\n margin-left: -8px;\n }\n`;\n\nconst ButtonsWrapper = styled.div`\n margin-top: 16px;\n & button:first-of-type {\n margin-right: 16px;\n }\n`;\n\ninterface AliasesFormData {\n aliases: string[];\n}\n\nexport const Aliases = () => {\n const { canEdit } = useFileManagerApi();\n const { updateFile } = useFileManagerView();\n const { file } = useFile();\n const [isEditing, setIsEditing] = useState(false);\n const { showSnackbar } = useSnackbar();\n const [updating, setUpdating] = useState(false);\n const isEditingAllowed = canEdit(file);\n\n const getUrlWithAlias = (alias: string) => {\n const url = new URL(file.src);\n url.pathname = alias;\n return url.toString();\n };\n\n const onEdit = () => setIsEditing(true);\n const cancelEdit = () => setIsEditing(false);\n\n const onSubmit: FormOnSubmit<AliasesFormData> = async ({ aliases }) => {\n setUpdating(true);\n await updateFile(file.id, { aliases });\n setUpdating(false);\n setIsEditing(false);\n showSnackbar(\"Aliases successfully updated.\");\n };\n\n const aliases = file.aliases || [];\n\n return (\n <Form<AliasesFormData>\n // An empty string immediately creates an input, for better UX.\n data={{ aliases: aliases.length ? aliases : [\"\"] }}\n onSubmit={onSubmit}\n >\n {({ submit }) => (\n <>\n <li-title>\n <Icon className={\"list-item__icon\"} icon={<LinkIcon />} />\n {aliases.length && !isEditing ? (\n <Typography use={\"subtitle1\"} className={\"list-item__content\"}>\n File aliases\n </Typography>\n ) : null}\n {!aliases.length && !isEditing ? (\n <EmptyAddAlias\n onClick={onEdit}\n disabled={!isEditingAllowed}\n data-testid=\"fm.alias.add\"\n >\n Add aliases...\n </EmptyAddAlias>\n ) : null}\n\n {isEditingAllowed && aliases.length && !isEditing ? (\n <EditButton icon={<EditIcon />} onClick={onEdit} />\n ) : null}\n </li-title>\n {isEditing ? (\n <>\n <AliasEditor />\n <ButtonsWrapper>\n <ButtonPrimary\n small\n onClick={submit}\n disabled={updating}\n data-testid={\"fm.aliases.submit\"}\n >\n {updating ? \"Saving...\" : \"Save changes\"}\n </ButtonPrimary>\n <ButtonSecondary small onClick={cancelEdit}>\n Cancel\n </ButtonSecondary>\n </ButtonsWrapper>\n </>\n ) : (\n <AliasList>\n {aliases.map(alias => (\n <li key={alias}>\n <Typography use={\"subtitle1\"} className={\"list-item__content\"}>\n -{\" \"}\n <a\n rel=\"noreferrer\"\n href={getUrlWithAlias(alias)}\n target={\"_blank\"}\n >\n {alias}\n </a>\n </Typography>\n </li>\n ))}\n </AliasList>\n )}\n </>\n )}\n </Form>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DeleteImageAction = void 0;
|
|
8
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _mime = _interopRequireDefault(require("mime"));
|
|
12
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
13
|
+
var _ConfirmationDialog = require("@webiny/ui/ConfirmationDialog");
|
|
14
|
+
var _Tooltip = require("@webiny/ui/Tooltip");
|
|
15
|
+
var _Button = require("@webiny/ui/Button");
|
|
16
|
+
var _delete = require("@material-design-icons/svg/outlined/delete.svg");
|
|
17
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
18
|
+
var _ = require("../..");
|
|
19
|
+
var isImage = function isImage(file) {
|
|
20
|
+
var fileType = _mime.default.getType(file && file.name);
|
|
21
|
+
if (fileType) {
|
|
22
|
+
return fileType.includes("image");
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
};
|
|
26
|
+
var Filename = /*#__PURE__*/(0, _styled.default)("span", {
|
|
27
|
+
label: "Filename",
|
|
28
|
+
target: "e112uu8j0"
|
|
29
|
+
})("font-weight:bold;");
|
|
30
|
+
var DeleteImageAction = function DeleteImageAction() {
|
|
31
|
+
var _useFile = (0, _.useFile)(),
|
|
32
|
+
file = _useFile.file;
|
|
33
|
+
var _useFileManagerApi = (0, _.useFileManagerApi)(),
|
|
34
|
+
canEdit = _useFileManagerApi.canEdit;
|
|
35
|
+
var _useFileManagerView = (0, _.useFileManagerView)(),
|
|
36
|
+
deleteFile = _useFileManagerView.deleteFile;
|
|
37
|
+
var _useSnackbar = (0, _appAdmin.useSnackbar)(),
|
|
38
|
+
showSnackbar = _useSnackbar.showSnackbar;
|
|
39
|
+
if (!canEdit(file)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
var fileDeleteConfirmationProps = {
|
|
43
|
+
title: "Delete file",
|
|
44
|
+
message: file && /*#__PURE__*/_react.default.createElement("span", null, "You're about to delete file ", /*#__PURE__*/_react.default.createElement(Filename, null, file.name), ".", /*#__PURE__*/_react.default.createElement("br", null), "Are you sure you want to continue?")
|
|
45
|
+
};
|
|
46
|
+
return /*#__PURE__*/_react.default.createElement(_ConfirmationDialog.ConfirmationDialog, Object.assign({}, fileDeleteConfirmationProps, {
|
|
47
|
+
"data-testid": "fm-delete-file-confirmation-dialog",
|
|
48
|
+
style: {
|
|
49
|
+
zIndex: 100
|
|
50
|
+
}
|
|
51
|
+
}), function (_ref) {
|
|
52
|
+
var showConfirmation = _ref.showConfirmation;
|
|
53
|
+
return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
54
|
+
content: isImage(file) ? /*#__PURE__*/_react.default.createElement("span", null, "Delete image") : /*#__PURE__*/_react.default.createElement("span", null, "Delete file"),
|
|
55
|
+
placement: "bottom"
|
|
56
|
+
}, /*#__PURE__*/_react.default.createElement(_Button.IconButton, {
|
|
57
|
+
"data-testid": "fm-delete-file-button",
|
|
58
|
+
icon: /*#__PURE__*/_react.default.createElement(_delete.ReactComponent, {
|
|
59
|
+
style: {
|
|
60
|
+
margin: "0 8px 0 0"
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
onClick: function onClick() {
|
|
64
|
+
return showConfirmation( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
65
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
66
|
+
while (1) switch (_context.prev = _context.next) {
|
|
67
|
+
case 0:
|
|
68
|
+
_context.next = 2;
|
|
69
|
+
return deleteFile(file.id);
|
|
70
|
+
case 2:
|
|
71
|
+
showSnackbar("File deleted successfully.");
|
|
72
|
+
case 3:
|
|
73
|
+
case "end":
|
|
74
|
+
return _context.stop();
|
|
75
|
+
}
|
|
76
|
+
}, _callee);
|
|
77
|
+
})));
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
exports.DeleteImageAction = DeleteImageAction;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isImage","file","fileType","mime","getType","name","includes","Filename","styled","DeleteImageAction","useFile","useFileManagerApi","canEdit","useFileManagerView","deleteFile","useSnackbar","showSnackbar","fileDeleteConfirmationProps","title","message","zIndex","showConfirmation","margin","id"],"sources":["DeleteImageAction.tsx"],"sourcesContent":["import React from \"react\";\nimport mime from \"mime\";\nimport styled from \"@emotion/styled\";\nimport { ConfirmationDialog } from \"@webiny/ui/ConfirmationDialog\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { ReactComponent as DeleteIcon } from \"@material-design-icons/svg/outlined/delete.svg\";\nimport { FileItem } from \"@webiny/app-admin/types\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { useFile, useFileManagerApi, useFileManagerView } from \"~/index\";\n\nconst isImage = (file: FileItem) => {\n const fileType = mime.getType(file && file.name);\n\n if (fileType) {\n return fileType.includes(\"image\");\n }\n\n return false;\n};\n\nconst Filename = styled.span`\n font-weight: bold;\n`;\n\nexport const DeleteImageAction = () => {\n const { file } = useFile();\n const { canEdit } = useFileManagerApi();\n const { deleteFile } = useFileManagerView();\n const { showSnackbar } = useSnackbar();\n\n if (!canEdit(file)) {\n return null;\n }\n\n const fileDeleteConfirmationProps = {\n title: \"Delete file\",\n message: file && (\n <span>\n You're about to delete file <Filename>{file.name}</Filename>.<br />\n Are you sure you want to continue?\n </span>\n )\n };\n return (\n <ConfirmationDialog\n {...fileDeleteConfirmationProps}\n data-testid={\"fm-delete-file-confirmation-dialog\"}\n style={{ zIndex: 100 }}\n >\n {({ showConfirmation }) => {\n return (\n <Tooltip\n content={\n isImage(file) ? <span>Delete image</span> : <span>Delete file</span>\n }\n placement={\"bottom\"}\n >\n <IconButton\n data-testid={\"fm-delete-file-button\"}\n icon={<DeleteIcon style={{ margin: \"0 8px 0 0\" }} />}\n onClick={() =>\n showConfirmation(async () => {\n await deleteFile(file.id);\n showSnackbar(`File deleted successfully.`);\n })\n }\n />\n </Tooltip>\n );\n }}\n </ConfirmationDialog>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA,IAAMA,OAAO,GAAG,SAAVA,OAAO,CAAIC,IAAc,EAAK;EAChC,IAAMC,QAAQ,GAAGC,aAAI,CAACC,OAAO,CAACH,IAAI,IAAIA,IAAI,CAACI,IAAI,CAAC;EAEhD,IAAIH,QAAQ,EAAE;IACV,OAAOA,QAAQ,CAACI,QAAQ,CAAC,OAAO,CAAC;EACrC;EAEA,OAAO,KAAK;AAChB,CAAC;AAED,IAAMC,QAAQ,oBAAGC,eAAM;EAAA;EAAA;AAAA,uBAEtB;AAEM,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiB,GAAS;EACnC,eAAiB,IAAAC,SAAO,GAAE;IAAlBT,IAAI,YAAJA,IAAI;EACZ,yBAAoB,IAAAU,mBAAiB,GAAE;IAA/BC,OAAO,sBAAPA,OAAO;EACf,0BAAuB,IAAAC,oBAAkB,GAAE;IAAnCC,UAAU,uBAAVA,UAAU;EAClB,mBAAyB,IAAAC,qBAAW,GAAE;IAA9BC,YAAY,gBAAZA,YAAY;EAEpB,IAAI,CAACJ,OAAO,CAACX,IAAI,CAAC,EAAE;IAChB,OAAO,IAAI;EACf;EAEA,IAAMgB,2BAA2B,GAAG;IAChCC,KAAK,EAAE,aAAa;IACpBC,OAAO,EAAElB,IAAI,iBACT,2CAAM,8BAC+B,4CAAC,QAAQ,QAAEA,IAAI,CAACI,IAAI,CAAY,KAAC,uDAAM,sCAE5E;EAER,CAAC;EACD,oBACI,6BAAC,sCAAkB,oBACXY,2BAA2B;IAC/B,eAAa,oCAAqC;IAClD,KAAK,EAAE;MAAEG,MAAM,EAAE;IAAI;EAAE,IAEtB,gBAA0B;IAAA,IAAvBC,gBAAgB,QAAhBA,gBAAgB;IAChB,oBACI,6BAAC,gBAAO;MACJ,OAAO,EACHrB,OAAO,CAACC,IAAI,CAAC,gBAAG,2CAAM,cAAY,CAAO,gBAAG,2CAAM,aAAW,CAChE;MACD,SAAS,EAAE;IAAS,gBAEpB,6BAAC,kBAAU;MACP,eAAa,uBAAwB;MACrC,IAAI,eAAE,6BAAC,sBAAU;QAAC,KAAK,EAAE;UAAEqB,MAAM,EAAE;QAAY;MAAE,EAAI;MACrD,OAAO,EAAE;QAAA,OACLD,gBAAgB,sGAAC;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACPP,UAAU,CAACb,IAAI,CAACsB,EAAE,CAAC;cAAA;gBACzBP,YAAY,8BAA8B;cAAC;cAAA;gBAAA;YAAA;UAAA;QAAA,CAC9C,GAAC;MAAA;IACL,EACH,CACI;EAElB,CAAC,CACgB;AAE7B,CAAC;AAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FileItem } from "@webiny/app-admin/types";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export interface FileContext {
|
|
4
|
+
file: FileItem;
|
|
5
|
+
}
|
|
6
|
+
export declare const FileContext: React.Context<FileContext | undefined>;
|
|
7
|
+
interface FileProviderProps {
|
|
8
|
+
file: FileItem;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare const FileProvider: ({ file, children }: FileProviderProps) => JSX.Element;
|
|
12
|
+
export declare const useFile: () => FileContext;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useFile = exports.FileProvider = exports.FileContext = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var FileContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
10
|
+
exports.FileContext = FileContext;
|
|
11
|
+
var FileProvider = function FileProvider(_ref) {
|
|
12
|
+
var file = _ref.file,
|
|
13
|
+
children = _ref.children;
|
|
14
|
+
var value = {
|
|
15
|
+
file: file
|
|
16
|
+
};
|
|
17
|
+
return /*#__PURE__*/_react.default.createElement(FileContext.Provider, {
|
|
18
|
+
value: value
|
|
19
|
+
}, children);
|
|
20
|
+
};
|
|
21
|
+
exports.FileProvider = FileProvider;
|
|
22
|
+
var useFile = function useFile() {
|
|
23
|
+
var context = _react.default.useContext(FileContext);
|
|
24
|
+
if (!context) {
|
|
25
|
+
throw Error("FileContext is missing in the component tree. Are you using \"useFile()\" hook in the right place?");
|
|
26
|
+
}
|
|
27
|
+
return context;
|
|
28
|
+
};
|
|
29
|
+
exports.useFile = useFile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FileContext","createContext","undefined","FileProvider","file","children","value","useFile","context","React","useContext","Error"],"sources":["FileProvider.tsx"],"sourcesContent":["import { FileItem } from \"@webiny/app-admin/types\";\nimport React, { createContext } from \"react\";\n\nexport interface FileContext {\n file: FileItem;\n}\n\nexport const FileContext = createContext<FileContext | undefined>(undefined);\n\ninterface FileProviderProps {\n file: FileItem;\n children: React.ReactNode;\n}\n\nexport const FileProvider = ({ file, children }: FileProviderProps) => {\n const value: FileContext = { file };\n\n return <FileContext.Provider value={value}>{children}</FileContext.Provider>;\n};\n\nexport const useFile = () => {\n const context = React.useContext(FileContext);\n if (!context) {\n throw Error(\n `FileContext is missing in the component tree. Are you using \"useFile()\" hook in the right place?`\n );\n }\n\n return context;\n};\n"],"mappings":";;;;;;;AACA;AAMO,IAAMA,WAAW,gBAAG,IAAAC,oBAAa,EAA0BC,SAAS,CAAC;AAAC;AAOtE,IAAMC,YAAY,GAAG,SAAfA,YAAY,OAA8C;EAAA,IAAxCC,IAAI,QAAJA,IAAI;IAAEC,QAAQ,QAARA,QAAQ;EACzC,IAAMC,KAAkB,GAAG;IAAEF,IAAI,EAAJA;EAAK,CAAC;EAEnC,oBAAO,6BAAC,WAAW,CAAC,QAAQ;IAAC,KAAK,EAAEE;EAAM,GAAED,QAAQ,CAAwB;AAChF,CAAC;AAAC;AAEK,IAAME,OAAO,GAAG,SAAVA,OAAO,GAAS;EACzB,IAAMC,OAAO,GAAGC,cAAK,CAACC,UAAU,CAACV,WAAW,CAAC;EAC7C,IAAI,CAACQ,OAAO,EAAE;IACV,MAAMG,KAAK,sGAEV;EACL;EAEA,OAAOH,OAAO;AAClB,CAAC;AAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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.default = void 0;
|
|
9
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _Input = require("@webiny/ui/Input");
|
|
13
|
+
var _form = require("@webiny/form");
|
|
14
|
+
var _validation = require("@webiny/validation");
|
|
15
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
16
|
+
var _ = require("../..");
|
|
17
|
+
var Name = function Name() {
|
|
18
|
+
var _useFile = (0, _.useFile)(),
|
|
19
|
+
file = _useFile.file;
|
|
20
|
+
var name = file.name || "";
|
|
21
|
+
var _useSnackbar = (0, _appAdmin.useSnackbar)(),
|
|
22
|
+
showSnackbar = _useSnackbar.showSnackbar;
|
|
23
|
+
var _useFileManagerApi = (0, _.useFileManagerApi)(),
|
|
24
|
+
canEdit = _useFileManagerApi.canEdit;
|
|
25
|
+
var _useFileManagerView = (0, _.useFileManagerView)(),
|
|
26
|
+
updateFile = _useFileManagerView.updateFile;
|
|
27
|
+
var onSubmit = /*#__PURE__*/function () {
|
|
28
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(_ref) {
|
|
29
|
+
var name;
|
|
30
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
31
|
+
while (1) switch (_context.prev = _context.next) {
|
|
32
|
+
case 0:
|
|
33
|
+
name = _ref.name;
|
|
34
|
+
if (!(name === file.name)) {
|
|
35
|
+
_context.next = 3;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
return _context.abrupt("return");
|
|
39
|
+
case 3:
|
|
40
|
+
_context.next = 5;
|
|
41
|
+
return updateFile(file.id, {
|
|
42
|
+
name: name
|
|
43
|
+
});
|
|
44
|
+
case 5:
|
|
45
|
+
showSnackbar("Name successfully updated.");
|
|
46
|
+
case 6:
|
|
47
|
+
case "end":
|
|
48
|
+
return _context.stop();
|
|
49
|
+
}
|
|
50
|
+
}, _callee);
|
|
51
|
+
}));
|
|
52
|
+
return function onSubmit(_x) {
|
|
53
|
+
return _ref2.apply(this, arguments);
|
|
54
|
+
};
|
|
55
|
+
}();
|
|
56
|
+
var editContent = (0, _react.useMemo)(function () {
|
|
57
|
+
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
58
|
+
data: {
|
|
59
|
+
name: name
|
|
60
|
+
},
|
|
61
|
+
onSubmit: onSubmit
|
|
62
|
+
}, function (_ref3) {
|
|
63
|
+
var Bind = _ref3.Bind,
|
|
64
|
+
submit = _ref3.submit;
|
|
65
|
+
return /*#__PURE__*/_react.default.createElement(Bind, {
|
|
66
|
+
name: "name",
|
|
67
|
+
validators: _validation.validation.create("required")
|
|
68
|
+
}, /*#__PURE__*/_react.default.createElement(_Input.Input, {
|
|
69
|
+
disabled: !canEdit(file),
|
|
70
|
+
autoFocus: true,
|
|
71
|
+
placeholder: "Enter name",
|
|
72
|
+
fullwidth: true,
|
|
73
|
+
onBlur: submit,
|
|
74
|
+
description: "A descriptive name is easier to remember."
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
}, [name, file.name, canEdit]);
|
|
78
|
+
return /*#__PURE__*/_react.default.createElement("li-content", null, editContent);
|
|
79
|
+
};
|
|
80
|
+
var _default = Name;
|
|
81
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Name","useFile","file","name","useSnackbar","showSnackbar","useFileManagerApi","canEdit","useFileManagerView","updateFile","onSubmit","id","editContent","useMemo","Bind","submit","validation","create"],"sources":["Name.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Form, FormOnSubmit } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { useFile, useFileManagerApi, useFileManagerView } from \"~/index\";\n\ninterface NameFormData {\n name: string;\n}\n\nconst Name = () => {\n const { file } = useFile();\n const name = file.name || \"\";\n const { showSnackbar } = useSnackbar();\n const { canEdit } = useFileManagerApi();\n const { updateFile } = useFileManagerView();\n\n const onSubmit: FormOnSubmit<NameFormData> = async ({ name }) => {\n // Bail out if name is same as the current file name.\n if (name === file.name) {\n return;\n }\n\n await updateFile(file.id, { name });\n\n showSnackbar(\"Name successfully updated.\");\n };\n\n const editContent = useMemo(() => {\n return (\n <Form<NameFormData> data={{ name }} onSubmit={onSubmit}>\n {({ Bind, submit }) => (\n <Bind name={\"name\"} validators={validation.create(\"required\")}>\n <Input\n disabled={!canEdit(file)}\n autoFocus\n placeholder={\"Enter name\"}\n fullwidth={true}\n onBlur={submit}\n description={\"A descriptive name is easier to remember.\"}\n />\n </Bind>\n )}\n </Form>\n );\n }, [name, file.name, canEdit]);\n\n return <li-content>{editContent}</li-content>;\n};\n\nexport default Name;\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAMA,IAAMA,IAAI,GAAG,SAAPA,IAAI,GAAS;EACf,eAAiB,IAAAC,SAAO,GAAE;IAAlBC,IAAI,YAAJA,IAAI;EACZ,IAAMC,IAAI,GAAGD,IAAI,CAACC,IAAI,IAAI,EAAE;EAC5B,mBAAyB,IAAAC,qBAAW,GAAE;IAA9BC,YAAY,gBAAZA,YAAY;EACpB,yBAAoB,IAAAC,mBAAiB,GAAE;IAA/BC,OAAO,sBAAPA,OAAO;EACf,0BAAuB,IAAAC,oBAAkB,GAAE;IAAnCC,UAAU,uBAAVA,UAAU;EAElB,IAAMC,QAAoC;IAAA,mGAAG;MAAA;MAAA;QAAA;UAAA;YAASP,IAAI,QAAJA,IAAI;YAAA,MAElDA,IAAI,KAAKD,IAAI,CAACC,IAAI;cAAA;cAAA;YAAA;YAAA;UAAA;YAAA;YAAA,OAIhBM,UAAU,CAACP,IAAI,CAACS,EAAE,EAAE;cAAER,IAAI,EAAJA;YAAK,CAAC,CAAC;UAAA;YAEnCE,YAAY,CAAC,4BAA4B,CAAC;UAAC;UAAA;YAAA;QAAA;MAAA;IAAA,CAC9C;IAAA,gBATKK,QAAoC;MAAA;IAAA;EAAA,GASzC;EAED,IAAME,WAAW,GAAG,IAAAC,cAAO,EAAC,YAAM;IAC9B,oBACI,6BAAC,UAAI;MAAe,IAAI,EAAE;QAAEV,IAAI,EAAJA;MAAK,CAAE;MAAC,QAAQ,EAAEO;IAAS,GAClD;MAAA,IAAGI,IAAI,SAAJA,IAAI;QAAEC,MAAM,SAANA,MAAM;MAAA,oBACZ,6BAAC,IAAI;QAAC,IAAI,EAAE,MAAO;QAAC,UAAU,EAAEC,sBAAU,CAACC,MAAM,CAAC,UAAU;MAAE,gBAC1D,6BAAC,YAAK;QACF,QAAQ,EAAE,CAACV,OAAO,CAACL,IAAI,CAAE;QACzB,SAAS;QACT,WAAW,EAAE,YAAa;QAC1B,SAAS,EAAE,IAAK;QAChB,MAAM,EAAEa,MAAO;QACf,WAAW,EAAE;MAA4C,EAC3D,CACC;IAAA,CACV,CACE;EAEf,CAAC,EAAE,CAACZ,IAAI,EAAED,IAAI,CAACC,IAAI,EAAEI,OAAO,CAAC,CAAC;EAE9B,oBAAO,iDAAaK,WAAW,CAAc;AACjD,CAAC;AAAC,eAEaZ,IAAI;AAAA"}
|