@webiny/app-file-manager 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf

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/app.js CHANGED
@@ -4,8 +4,9 @@ import { FileManagerApiProviderModule } from "./modules/FileManagerApiProvider/i
4
4
  import { FileManagerRendererModule } from "./modules/FileManagerRenderer/index.js";
5
5
  import { HeadlessCmsModule } from "./modules/HeadlessCms/index.js";
6
6
  import { EnterpriseModule } from "./modules/Enterprise/index.js";
7
+ import { SecurityPermissions } from "./modules/SecurityPermissions.js";
7
8
  export const FileManager = () => {
8
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SettingsModule, null), /*#__PURE__*/React.createElement(FileManagerApiProviderModule, null), /*#__PURE__*/React.createElement(FileManagerRendererModule, null), /*#__PURE__*/React.createElement(HeadlessCmsModule, null), /*#__PURE__*/React.createElement(EnterpriseModule, null));
9
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SettingsModule, null), /*#__PURE__*/React.createElement(FileManagerApiProviderModule, null), /*#__PURE__*/React.createElement(FileManagerRendererModule, null), /*#__PURE__*/React.createElement(HeadlessCmsModule, null), /*#__PURE__*/React.createElement(EnterpriseModule, null), /*#__PURE__*/React.createElement(SecurityPermissions, null));
9
10
  };
10
11
 
11
12
  //# sourceMappingURL=app.js.map
package/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["React","SettingsModule","FileManagerApiProviderModule","FileManagerRendererModule","HeadlessCmsModule","EnterpriseModule","FileManager","createElement","Fragment"],"sources":["app.tsx"],"sourcesContent":["import React from \"react\";\nimport { SettingsModule } from \"~/modules/Settings/index.js\";\nimport { FileManagerApiProviderModule } from \"~/modules/FileManagerApiProvider/index.js\";\nimport { FileManagerRendererModule } from \"~/modules/FileManagerRenderer/index.js\";\nimport { HeadlessCmsModule } from \"~/modules/HeadlessCms/index.js\";\nimport { EnterpriseModule } from \"~/modules/Enterprise/index.js\";\n\nexport const FileManager = () => {\n return (\n <>\n <SettingsModule />\n <FileManagerApiProviderModule />\n <FileManagerRendererModule />\n <HeadlessCmsModule />\n <EnterpriseModule />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc;AACvB,SAASC,4BAA4B;AACrC,SAASC,yBAAyB;AAClC,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AAEzB,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,oBACIN,KAAA,CAAAO,aAAA,CAAAP,KAAA,CAAAQ,QAAA,qBACIR,KAAA,CAAAO,aAAA,CAACN,cAAc,MAAE,CAAC,eAClBD,KAAA,CAAAO,aAAA,CAACL,4BAA4B,MAAE,CAAC,eAChCF,KAAA,CAAAO,aAAA,CAACJ,yBAAyB,MAAE,CAAC,eAC7BH,KAAA,CAAAO,aAAA,CAACH,iBAAiB,MAAE,CAAC,eACrBJ,KAAA,CAAAO,aAAA,CAACF,gBAAgB,MAAE,CACrB,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","SettingsModule","FileManagerApiProviderModule","FileManagerRendererModule","HeadlessCmsModule","EnterpriseModule","SecurityPermissions","FileManager","createElement","Fragment"],"sources":["app.tsx"],"sourcesContent":["import React from \"react\";\nimport { SettingsModule } from \"~/modules/Settings/index.js\";\nimport { FileManagerApiProviderModule } from \"~/modules/FileManagerApiProvider/index.js\";\nimport { FileManagerRendererModule } from \"~/modules/FileManagerRenderer/index.js\";\nimport { HeadlessCmsModule } from \"~/modules/HeadlessCms/index.js\";\nimport { EnterpriseModule } from \"~/modules/Enterprise/index.js\";\nimport { SecurityPermissions } from \"./modules/SecurityPermissions.js\";\n\nexport const FileManager = () => {\n return (\n <>\n <SettingsModule />\n <FileManagerApiProviderModule />\n <FileManagerRendererModule />\n <HeadlessCmsModule />\n <EnterpriseModule />\n <SecurityPermissions />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc;AACvB,SAASC,4BAA4B;AACrC,SAASC,yBAAyB;AAClC,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;AAE5B,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,oBACIP,KAAA,CAAAQ,aAAA,CAAAR,KAAA,CAAAS,QAAA,qBACIT,KAAA,CAAAQ,aAAA,CAACP,cAAc,MAAE,CAAC,eAClBD,KAAA,CAAAQ,aAAA,CAACN,4BAA4B,MAAE,CAAC,eAChCF,KAAA,CAAAQ,aAAA,CAACL,yBAAyB,MAAE,CAAC,eAC7BH,KAAA,CAAAQ,aAAA,CAACJ,iBAAiB,MAAE,CAAC,eACrBJ,KAAA,CAAAQ,aAAA,CAACH,gBAAgB,MAAE,CAAC,eACpBL,KAAA,CAAAQ,aAAA,CAACF,mBAAmB,MAAE,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
@@ -27,22 +27,21 @@ export const LeftSidebar = ({
27
27
  }
28
28
  }, [currentFolder]);
29
29
  return /*#__PURE__*/React.createElement("div", {
30
- className: "overflow-auto",
31
- style: {
32
- height: "calc(100vh - 69px)"
33
- }
30
+ className: "flex flex-col h-main-content"
34
31
  }, /*#__PURE__*/React.createElement("div", {
35
- className: "p-sm"
32
+ className: "py-sm px-md"
36
33
  }, /*#__PURE__*/React.createElement(Heading, {
37
34
  level: 5
38
- }, "File Manager")), /*#__PURE__*/React.createElement(Separator, null), /*#__PURE__*/React.createElement(FolderTree, {
35
+ }, "File Manager")), /*#__PURE__*/React.createElement(Separator, null), /*#__PURE__*/React.createElement("div", {
36
+ className: "flex-1 overflow-y-scroll"
37
+ }, /*#__PURE__*/React.createElement(FolderTree, {
39
38
  folderActions: browser.folder.actions,
40
39
  dropConfirmation: browser.folder.dropConfirmation,
41
40
  focusedFolderId: currentFolder,
42
41
  onFolderClick: data => onFolderClick(data.id),
43
42
  enableActions: true,
44
43
  enableCreate: true
45
- }), children ? /*#__PURE__*/React.createElement(Separator, null) : null, children);
44
+ })), children ? /*#__PURE__*/React.createElement(Separator, null) : null, children);
46
45
  };
47
46
 
48
47
  //# sourceMappingURL=LeftSidebar.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","Separator","FolderTree","useLoadFolderHierarchy","useListFoldersByParentIds","useFileManagerViewConfig","Heading","LeftSidebar","currentFolder","onFolderClick","children","browser","folders","loadFolderHierarchy","listFoldersByParentIds","length","createElement","className","style","height","level","folderActions","folder","actions","dropConfirmation","focusedFolderId","data","id","enableActions","enableCreate"],"sources":["LeftSidebar.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Separator } from \"@webiny/admin-ui\";\nimport { FolderTree, useLoadFolderHierarchy, useListFoldersByParentIds } from \"@webiny/app-aco\";\nimport { useFileManagerViewConfig } from \"~/modules/FileManagerRenderer/FileManagerView/FileManagerViewConfig.js\";\nimport { Heading } from \"@webiny/admin-ui\";\n\ninterface LeftSidebarProps {\n currentFolder: string;\n onFolderClick: (folderId: string) => void;\n children?: React.ReactNode;\n}\n\nexport const LeftSidebar = ({ currentFolder, onFolderClick, children }: LeftSidebarProps) => {\n const { browser } = useFileManagerViewConfig();\n const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();\n const { listFoldersByParentIds } = useListFoldersByParentIds();\n\n useEffect(() => {\n if (folders.length === 0) {\n loadFolderHierarchy(currentFolder);\n } else {\n // Otherwise let's load only the current folder sub-tree\n listFoldersByParentIds([currentFolder]);\n }\n }, [currentFolder]);\n\n return (\n <div className={\"overflow-auto\"} style={{ height: \"calc(100vh - 69px)\" }}>\n <div className={\"p-sm\"}>\n <Heading level={5}>File Manager</Heading>\n </div>\n <Separator />\n <FolderTree\n folderActions={browser.folder.actions}\n dropConfirmation={browser.folder.dropConfirmation}\n focusedFolderId={currentFolder}\n onFolderClick={data => onFolderClick(data.id)}\n enableActions={true}\n enableCreate={true}\n />\n {children ? <Separator /> : null}\n {children}\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,UAAU,EAAEC,sBAAsB,EAAEC,yBAAyB,QAAQ,iBAAiB;AAC/F,SAASC,wBAAwB;AACjC,SAASC,OAAO,QAAQ,kBAAkB;AAQ1C,OAAO,MAAMC,WAAW,GAAGA,CAAC;EAAEC,aAAa;EAAEC,aAAa;EAAEC;AAA2B,CAAC,KAAK;EACzF,MAAM;IAAEC;EAAQ,CAAC,GAAGN,wBAAwB,CAAC,CAAC;EAC9C,MAAM;IAAEO,OAAO;IAAEC;EAAoB,CAAC,GAAGV,sBAAsB,CAAC,CAAC;EACjE,MAAM;IAAEW;EAAuB,CAAC,GAAGV,yBAAyB,CAAC,CAAC;EAE9DJ,SAAS,CAAC,MAAM;IACZ,IAAIY,OAAO,CAACG,MAAM,KAAK,CAAC,EAAE;MACtBF,mBAAmB,CAACL,aAAa,CAAC;IACtC,CAAC,MAAM;MACH;MACAM,sBAAsB,CAAC,CAACN,aAAa,CAAC,CAAC;IAC3C;EACJ,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;EAEnB,oBACIT,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAE,eAAgB;IAACC,KAAK,EAAE;MAAEC,MAAM,EAAE;IAAqB;EAAE,gBACrEpB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAE;EAAO,gBACnBlB,KAAA,CAAAiB,aAAA,CAACV,OAAO;IAACc,KAAK,EAAE;EAAE,GAAC,cAAqB,CACvC,CAAC,eACNrB,KAAA,CAAAiB,aAAA,CAACf,SAAS,MAAE,CAAC,eACbF,KAAA,CAAAiB,aAAA,CAACd,UAAU;IACPmB,aAAa,EAAEV,OAAO,CAACW,MAAM,CAACC,OAAQ;IACtCC,gBAAgB,EAAEb,OAAO,CAACW,MAAM,CAACE,gBAAiB;IAClDC,eAAe,EAAEjB,aAAc;IAC/BC,aAAa,EAAEiB,IAAI,IAAIjB,aAAa,CAACiB,IAAI,CAACC,EAAE,CAAE;IAC9CC,aAAa,EAAE,IAAK;IACpBC,YAAY,EAAE;EAAK,CACtB,CAAC,EACDnB,QAAQ,gBAAGX,KAAA,CAAAiB,aAAA,CAACf,SAAS,MAAE,CAAC,GAAG,IAAI,EAC/BS,QACA,CAAC;AAEd,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","Separator","FolderTree","useLoadFolderHierarchy","useListFoldersByParentIds","useFileManagerViewConfig","Heading","LeftSidebar","currentFolder","onFolderClick","children","browser","folders","loadFolderHierarchy","listFoldersByParentIds","length","createElement","className","level","folderActions","folder","actions","dropConfirmation","focusedFolderId","data","id","enableActions","enableCreate"],"sources":["LeftSidebar.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Separator } from \"@webiny/admin-ui\";\nimport { FolderTree, useLoadFolderHierarchy, useListFoldersByParentIds } from \"@webiny/app-aco\";\nimport { useFileManagerViewConfig } from \"~/modules/FileManagerRenderer/FileManagerView/FileManagerViewConfig.js\";\nimport { Heading } from \"@webiny/admin-ui\";\n\ninterface LeftSidebarProps {\n currentFolder: string;\n onFolderClick: (folderId: string) => void;\n children?: React.ReactNode;\n}\n\nexport const LeftSidebar = ({ currentFolder, onFolderClick, children }: LeftSidebarProps) => {\n const { browser } = useFileManagerViewConfig();\n const { folders, loadFolderHierarchy } = useLoadFolderHierarchy();\n const { listFoldersByParentIds } = useListFoldersByParentIds();\n\n useEffect(() => {\n if (folders.length === 0) {\n loadFolderHierarchy(currentFolder);\n } else {\n // Otherwise let's load only the current folder sub-tree\n listFoldersByParentIds([currentFolder]);\n }\n }, [currentFolder]);\n\n return (\n <div className={\"flex flex-col h-main-content\"}>\n <div className={\"py-sm px-md\"}>\n <Heading level={5}>File Manager</Heading>\n </div>\n <Separator />\n <div className={\"flex-1 overflow-y-scroll\"}>\n <FolderTree\n folderActions={browser.folder.actions}\n dropConfirmation={browser.folder.dropConfirmation}\n focusedFolderId={currentFolder}\n onFolderClick={data => onFolderClick(data.id)}\n enableActions={true}\n enableCreate={true}\n />\n </div>\n {children ? <Separator /> : null}\n {children}\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,UAAU,EAAEC,sBAAsB,EAAEC,yBAAyB,QAAQ,iBAAiB;AAC/F,SAASC,wBAAwB;AACjC,SAASC,OAAO,QAAQ,kBAAkB;AAQ1C,OAAO,MAAMC,WAAW,GAAGA,CAAC;EAAEC,aAAa;EAAEC,aAAa;EAAEC;AAA2B,CAAC,KAAK;EACzF,MAAM;IAAEC;EAAQ,CAAC,GAAGN,wBAAwB,CAAC,CAAC;EAC9C,MAAM;IAAEO,OAAO;IAAEC;EAAoB,CAAC,GAAGV,sBAAsB,CAAC,CAAC;EACjE,MAAM;IAAEW;EAAuB,CAAC,GAAGV,yBAAyB,CAAC,CAAC;EAE9DJ,SAAS,CAAC,MAAM;IACZ,IAAIY,OAAO,CAACG,MAAM,KAAK,CAAC,EAAE;MACtBF,mBAAmB,CAACL,aAAa,CAAC;IACtC,CAAC,MAAM;MACH;MACAM,sBAAsB,CAAC,CAACN,aAAa,CAAC,CAAC;IAC3C;EACJ,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;EAEnB,oBACIT,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAE;EAA+B,gBAC3ClB,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAE;EAAc,gBAC1BlB,KAAA,CAAAiB,aAAA,CAACV,OAAO;IAACY,KAAK,EAAE;EAAE,GAAC,cAAqB,CACvC,CAAC,eACNnB,KAAA,CAAAiB,aAAA,CAACf,SAAS,MAAE,CAAC,eACbF,KAAA,CAAAiB,aAAA;IAAKC,SAAS,EAAE;EAA2B,gBACvClB,KAAA,CAAAiB,aAAA,CAACd,UAAU;IACPiB,aAAa,EAAER,OAAO,CAACS,MAAM,CAACC,OAAQ;IACtCC,gBAAgB,EAAEX,OAAO,CAACS,MAAM,CAACE,gBAAiB;IAClDC,eAAe,EAAEf,aAAc;IAC/BC,aAAa,EAAEe,IAAI,IAAIf,aAAa,CAACe,IAAI,CAACC,EAAE,CAAE;IAC9CC,aAAa,EAAE,IAAK;IACpBC,YAAY,EAAE;EAAK,CACtB,CACA,CAAC,EACLjB,QAAQ,gBAAGX,KAAA,CAAAiB,aAAA,CAACf,SAAS,MAAE,CAAC,GAAG,IAAI,EAC/BS,QACA,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import minimatch from "minimatch";
1
+ import { minimatch } from "minimatch";
2
2
  export const getThumbnailRenderer = (renderers, file) => {
3
3
  // Sort by type and by priority. More occurrences of `*` means lower priority.
4
4
  const regExMatch = /\*/g;
@@ -1 +1 @@
1
- {"version":3,"names":["minimatch","getThumbnailRenderer","renderers","file","regExMatch","types","sort","a","b","countA","type","match","length","countB","renderer","find"],"sources":["getThumbnailRenderer.ts"],"sourcesContent":["import type { FileItem } from \"~/types.js\";\nimport minimatch from \"minimatch\";\n\nexport const getThumbnailRenderer = <T extends { type: string }>(\n renderers: T[],\n file: FileItem\n): T => {\n // Sort by type and by priority. More occurrences of `*` means lower priority.\n const regExMatch = /\\*/g;\n\n const types = renderers.sort((a, b) => {\n const countA = (a.type.match(regExMatch) || []).length;\n const countB = (b.type.match(regExMatch) || []).length;\n if (countB > countA) {\n return -1;\n } else if (countB < countA) {\n return 1;\n }\n return 0;\n });\n\n // Find first matching type\n const renderer = types.find(type => minimatch(file.type, type.type));\n\n return renderer!;\n};\n"],"mappings":"AACA,OAAOA,SAAS,MAAM,WAAW;AAEjC,OAAO,MAAMC,oBAAoB,GAAGA,CAChCC,SAAc,EACdC,IAAc,KACV;EACJ;EACA,MAAMC,UAAU,GAAG,KAAK;EAExB,MAAMC,KAAK,GAAGH,SAAS,CAACI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IACnC,MAAMC,MAAM,GAAG,CAACF,CAAC,CAACG,IAAI,CAACC,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACtD,MAAMC,MAAM,GAAG,CAACL,CAAC,CAACE,IAAI,CAACC,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACtD,IAAIC,MAAM,GAAGJ,MAAM,EAAE;MACjB,OAAO,CAAC,CAAC;IACb,CAAC,MAAM,IAAII,MAAM,GAAGJ,MAAM,EAAE;MACxB,OAAO,CAAC;IACZ;IACA,OAAO,CAAC;EACZ,CAAC,CAAC;;EAEF;EACA,MAAMK,QAAQ,GAAGT,KAAK,CAACU,IAAI,CAACL,IAAI,IAAIV,SAAS,CAACG,IAAI,CAACO,IAAI,EAAEA,IAAI,CAACA,IAAI,CAAC,CAAC;EAEpE,OAAOI,QAAQ;AACnB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["minimatch","getThumbnailRenderer","renderers","file","regExMatch","types","sort","a","b","countA","type","match","length","countB","renderer","find"],"sources":["getThumbnailRenderer.ts"],"sourcesContent":["import type { FileItem } from \"~/types.js\";\nimport { minimatch } from \"minimatch\";\n\nexport const getThumbnailRenderer = <T extends { type: string }>(\n renderers: T[],\n file: FileItem\n): T => {\n // Sort by type and by priority. More occurrences of `*` means lower priority.\n const regExMatch = /\\*/g;\n\n const types = renderers.sort((a, b) => {\n const countA = (a.type.match(regExMatch) || []).length;\n const countB = (b.type.match(regExMatch) || []).length;\n if (countB > countA) {\n return -1;\n } else if (countB < countA) {\n return 1;\n }\n return 0;\n });\n\n // Find first matching type\n const renderer = types.find(type => minimatch(file.type, type.type));\n\n return renderer!;\n};\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,WAAW;AAErC,OAAO,MAAMC,oBAAoB,GAAGA,CAChCC,SAAc,EACdC,IAAc,KACV;EACJ;EACA,MAAMC,UAAU,GAAG,KAAK;EAExB,MAAMC,KAAK,GAAGH,SAAS,CAACI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IACnC,MAAMC,MAAM,GAAG,CAACF,CAAC,CAACG,IAAI,CAACC,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACtD,MAAMC,MAAM,GAAG,CAACL,CAAC,CAACE,IAAI,CAACC,KAAK,CAACP,UAAU,CAAC,IAAI,EAAE,EAAEQ,MAAM;IACtD,IAAIC,MAAM,GAAGJ,MAAM,EAAE;MACjB,OAAO,CAAC,CAAC;IACb,CAAC,MAAM,IAAII,MAAM,GAAGJ,MAAM,EAAE;MACxB,OAAO,CAAC;IACZ;IACA,OAAO,CAAC;EACZ,CAAC,CAAC;;EAEF;EACA,MAAMK,QAAQ,GAAGT,KAAK,CAACU,IAAI,CAACL,IAAI,IAAIV,SAAS,CAACG,IAAI,CAACO,IAAI,EAAEA,IAAI,CAACA,IAAI,CAAC,CAAC;EAEpE,OAAOI,QAAQ;AACnB,CAAC","ignoreList":[]}
@@ -1,12 +1,17 @@
1
1
  import React from "react";
2
2
  import { FileManager } from "@webiny/app-admin";
3
- import { EditFileUsingUrl } from "../../../components/EditFileUsingUrl/index.js";
3
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
4
4
  import { FilePicker } from "@webiny/admin-ui";
5
+ import { EditFileUsingUrl } from "../../../components/EditFileUsingUrl/index.js";
5
6
  import { getSupportedExtensionsLabelHint } from "./utils.js";
6
7
  const FieldRenderer = ({
7
- field,
8
8
  getBind
9
9
  }) => {
10
+ const {
11
+ field
12
+ } = useModelField();
13
+ const rules = useEffectiveRules(field);
14
+ const disabled = !rules.canEdit || rules.disabled;
10
15
  const Bind = getBind();
11
16
  const imagesOnly = field.settings && field.settings.imagesOnly;
12
17
  return /*#__PURE__*/React.createElement(Bind, null, bind => {
@@ -25,6 +30,7 @@ const FieldRenderer = ({
25
30
  showFileManager
26
31
  }) => {
27
32
  return /*#__PURE__*/React.createElement(FilePicker, Object.assign({}, bind, {
33
+ disabled: disabled,
28
34
  label: field.label,
29
35
  validation: validation,
30
36
  description: field.description,
@@ -1 +1 @@
1
- {"version":3,"names":["React","FileManager","EditFileUsingUrl","FilePicker","getSupportedExtensionsLabelHint","FieldRenderer","field","getBind","Bind","imagesOnly","settings","createElement","bind","value","onChange","validation","ValidationContainer","onSetFile","file","src","editFile","images","render","showFileManager","Object","assign","label","description","hint","help","note","onSelectItem","onEditItem","onRemoveItem","placeholder","type","singleFile","name","renderer","rendererName","canUse","list","params"],"sources":["fileField.tsx"],"sourcesContent":["import React from \"react\";\nimport type {\n CmsModelFieldRendererPlugin,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms/types.js\";\nimport { FileManager } from \"@webiny/app-admin\";\nimport { EditFileUsingUrl } from \"~/components/EditFileUsingUrl/index.js\";\nimport { FilePicker } from \"@webiny/admin-ui\";\nimport { getSupportedExtensionsLabelHint } from \"~/modules/HeadlessCms/fileRenderer/utils.js\";\n\nconst FieldRenderer = ({ field, getBind }: CmsModelFieldRendererProps) => {\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n return (\n <Bind>\n {bind => {\n const { value, onChange, validation } = bind;\n\n return (\n <Bind.ValidationContainer>\n <EditFileUsingUrl onSetFile={file => bind.onChange(file.src)}>\n {({ editFile }) => (\n <FileManager\n images={imagesOnly}\n render={({ showFileManager }) => {\n return (\n <FilePicker\n {...bind}\n label={field.label}\n validation={validation}\n description={field.description}\n hint={field.help}\n note={getSupportedExtensionsLabelHint(imagesOnly)}\n value={value}\n onSelectItem={() => {\n showFileManager(file => onChange(file.src));\n }}\n onEditItem={() => editFile(value)}\n onRemoveItem={() => onChange(null)}\n placeholder={field.placeholder}\n type={\"compact\"}\n data-testid={`fr.input.filefield.${field.label}`}\n />\n );\n }}\n />\n )}\n </EditFileUsingUrl>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport const singleFile: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-file\",\n renderer: {\n rendererName: \"file-input\",\n name: \"File Input\",\n description: \"Enables selecting a single file via File Manager.\",\n canUse({ field }) {\n return field.type === \"file\" && !field.list;\n },\n render(params) {\n return <FieldRenderer {...params} />;\n }\n }\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAKzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,gBAAgB;AACzB,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B;AAExC,MAAMC,aAAa,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAoC,CAAC,KAAK;EACtE,MAAMC,IAAI,GAAGD,OAAO,CAAC,CAAC;EAEtB,MAAME,UAAU,GAAGH,KAAK,CAACI,QAAQ,IAAIJ,KAAK,CAACI,QAAQ,CAACD,UAAU;EAE9D,oBACIT,KAAA,CAAAW,aAAA,CAACH,IAAI,QACAI,IAAI,IAAI;IACL,MAAM;MAAEC,KAAK;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGH,IAAI;IAE5C,oBACIZ,KAAA,CAAAW,aAAA,CAACH,IAAI,CAACQ,mBAAmB,qBACrBhB,KAAA,CAAAW,aAAA,CAACT,gBAAgB;MAACe,SAAS,EAAEC,IAAI,IAAIN,IAAI,CAACE,QAAQ,CAACI,IAAI,CAACC,GAAG;IAAE,GACxD,CAAC;MAAEC;IAAS,CAAC,kBACVpB,KAAA,CAAAW,aAAA,CAACV,WAAW;MACRoB,MAAM,EAAEZ,UAAW;MACnBa,MAAM,EAAEA,CAAC;QAAEC;MAAgB,CAAC,KAAK;QAC7B,oBACIvB,KAAA,CAAAW,aAAA,CAACR,UAAU,EAAAqB,MAAA,CAAAC,MAAA,KACHb,IAAI;UACRc,KAAK,EAAEpB,KAAK,CAACoB,KAAM;UACnBX,UAAU,EAAEA,UAAW;UACvBY,WAAW,EAAErB,KAAK,CAACqB,WAAY;UAC/BC,IAAI,EAAEtB,KAAK,CAACuB,IAAK;UACjBC,IAAI,EAAE1B,+BAA+B,CAACK,UAAU,CAAE;UAClDI,KAAK,EAAEA,KAAM;UACbkB,YAAY,EAAEA,CAAA,KAAM;YAChBR,eAAe,CAACL,IAAI,IAAIJ,QAAQ,CAACI,IAAI,CAACC,GAAG,CAAC,CAAC;UAC/C,CAAE;UACFa,UAAU,EAAEA,CAAA,KAAMZ,QAAQ,CAACP,KAAK,CAAE;UAClCoB,YAAY,EAAEA,CAAA,KAAMnB,QAAQ,CAAC,IAAI,CAAE;UACnCoB,WAAW,EAAE5B,KAAK,CAAC4B,WAAY;UAC/BC,IAAI,EAAE,SAAU;UAChB,eAAa,sBAAsB7B,KAAK,CAACoB,KAAK;QAAG,EACpD,CAAC;MAEV;IAAE,CACL,CAES,CACI,CAAC;EAEnC,CACE,CAAC;AAEf,CAAC;AAED,OAAO,MAAMU,UAAuC,GAAG;EACnDD,IAAI,EAAE,2BAA2B;EACjCE,IAAI,EAAE,gCAAgC;EACtCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YAAY;IAC1BF,IAAI,EAAE,YAAY;IAClBV,WAAW,EAAE,mDAAmD;IAChEa,MAAMA,CAAC;MAAElC;IAAM,CAAC,EAAE;MACd,OAAOA,KAAK,CAAC6B,IAAI,KAAK,MAAM,IAAI,CAAC7B,KAAK,CAACmC,IAAI;IAC/C,CAAC;IACDnB,MAAMA,CAACoB,MAAM,EAAE;MACX,oBAAO1C,KAAA,CAAAW,aAAA,CAACN,aAAa,EAAKqC,MAAS,CAAC;IACxC;EACJ;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","FileManager","useEffectiveRules","useModelField","FilePicker","EditFileUsingUrl","getSupportedExtensionsLabelHint","FieldRenderer","getBind","field","rules","disabled","canEdit","Bind","imagesOnly","settings","createElement","bind","value","onChange","validation","ValidationContainer","onSetFile","file","src","editFile","images","render","showFileManager","Object","assign","label","description","hint","help","note","onSelectItem","onEditItem","onRemoveItem","placeholder","type","singleFile","name","renderer","rendererName","canUse","list","params"],"sources":["fileField.tsx"],"sourcesContent":["import React from \"react\";\nimport type {\n CmsModelFieldRendererPlugin,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms/types.js\";\nimport { FileManager } from \"@webiny/app-admin\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\nimport { FilePicker } from \"@webiny/admin-ui\";\nimport { EditFileUsingUrl } from \"~/components/EditFileUsingUrl/index.js\";\nimport { getSupportedExtensionsLabelHint } from \"~/modules/HeadlessCms/fileRenderer/utils.js\";\n\nconst FieldRenderer = ({ getBind }: CmsModelFieldRendererProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n const Bind = getBind();\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n return (\n <Bind>\n {bind => {\n const { value, onChange, validation } = bind;\n\n return (\n <Bind.ValidationContainer>\n <EditFileUsingUrl onSetFile={file => bind.onChange(file.src)}>\n {({ editFile }) => (\n <FileManager\n images={imagesOnly}\n render={({ showFileManager }) => {\n return (\n <FilePicker\n {...bind}\n disabled={disabled}\n label={field.label}\n validation={validation}\n description={field.description}\n hint={field.help}\n note={getSupportedExtensionsLabelHint(imagesOnly)}\n value={value}\n onSelectItem={() => {\n showFileManager(file => onChange(file.src));\n }}\n onEditItem={() => editFile(value)}\n onRemoveItem={() => onChange(null)}\n placeholder={field.placeholder}\n type={\"compact\"}\n data-testid={`fr.input.filefield.${field.label}`}\n />\n );\n }}\n />\n )}\n </EditFileUsingUrl>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport const singleFile: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-file\",\n renderer: {\n rendererName: \"file-input\",\n name: \"File Input\",\n description: \"Enables selecting a single file via File Manager.\",\n canUse({ field }) {\n return field.type === \"file\" && !field.list;\n },\n render(params) {\n return <FieldRenderer {...params} />;\n }\n }\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAKzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAClF,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,gBAAgB;AACzB,SAASC,+BAA+B;AAExC,MAAMC,aAAa,GAAGA,CAAC;EAAEC;AAAoC,CAAC,KAAK;EAC/D,MAAM;IAAEC;EAAM,CAAC,GAAGN,aAAa,CAAC,CAAC;EACjC,MAAMO,KAAK,GAAGR,iBAAiB,CAACO,KAAK,CAAC;EACtC,MAAME,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;EACjD,MAAME,IAAI,GAAGL,OAAO,CAAC,CAAC;EAEtB,MAAMM,UAAU,GAAGL,KAAK,CAACM,QAAQ,IAAIN,KAAK,CAACM,QAAQ,CAACD,UAAU;EAE9D,oBACId,KAAA,CAAAgB,aAAA,CAACH,IAAI,QACAI,IAAI,IAAI;IACL,MAAM;MAAEC,KAAK;MAAEC,QAAQ;MAAEC;IAAW,CAAC,GAAGH,IAAI;IAE5C,oBACIjB,KAAA,CAAAgB,aAAA,CAACH,IAAI,CAACQ,mBAAmB,qBACrBrB,KAAA,CAAAgB,aAAA,CAACX,gBAAgB;MAACiB,SAAS,EAAEC,IAAI,IAAIN,IAAI,CAACE,QAAQ,CAACI,IAAI,CAACC,GAAG;IAAE,GACxD,CAAC;MAAEC;IAAS,CAAC,kBACVzB,KAAA,CAAAgB,aAAA,CAACf,WAAW;MACRyB,MAAM,EAAEZ,UAAW;MACnBa,MAAM,EAAEA,CAAC;QAAEC;MAAgB,CAAC,KAAK;QAC7B,oBACI5B,KAAA,CAAAgB,aAAA,CAACZ,UAAU,EAAAyB,MAAA,CAAAC,MAAA,KACHb,IAAI;UACRN,QAAQ,EAAEA,QAAS;UACnBoB,KAAK,EAAEtB,KAAK,CAACsB,KAAM;UACnBX,UAAU,EAAEA,UAAW;UACvBY,WAAW,EAAEvB,KAAK,CAACuB,WAAY;UAC/BC,IAAI,EAAExB,KAAK,CAACyB,IAAK;UACjBC,IAAI,EAAE7B,+BAA+B,CAACQ,UAAU,CAAE;UAClDI,KAAK,EAAEA,KAAM;UACbkB,YAAY,EAAEA,CAAA,KAAM;YAChBR,eAAe,CAACL,IAAI,IAAIJ,QAAQ,CAACI,IAAI,CAACC,GAAG,CAAC,CAAC;UAC/C,CAAE;UACFa,UAAU,EAAEA,CAAA,KAAMZ,QAAQ,CAACP,KAAK,CAAE;UAClCoB,YAAY,EAAEA,CAAA,KAAMnB,QAAQ,CAAC,IAAI,CAAE;UACnCoB,WAAW,EAAE9B,KAAK,CAAC8B,WAAY;UAC/BC,IAAI,EAAE,SAAU;UAChB,eAAa,sBAAsB/B,KAAK,CAACsB,KAAK;QAAG,EACpD,CAAC;MAEV;IAAE,CACL,CAES,CACI,CAAC;EAEnC,CACE,CAAC;AAEf,CAAC;AAED,OAAO,MAAMU,UAAuC,GAAG;EACnDD,IAAI,EAAE,2BAA2B;EACjCE,IAAI,EAAE,gCAAgC;EACtCC,QAAQ,EAAE;IACNC,YAAY,EAAE,YAAY;IAC1BF,IAAI,EAAE,YAAY;IAClBV,WAAW,EAAE,mDAAmD;IAChEa,MAAMA,CAAC;MAAEpC;IAAM,CAAC,EAAE;MACd,OAAOA,KAAK,CAAC+B,IAAI,KAAK,MAAM,IAAI,CAAC/B,KAAK,CAACqC,IAAI;IAC/C,CAAC;IACDnB,MAAMA,CAACoB,MAAM,EAAE;MACX,oBAAO/C,KAAA,CAAAgB,aAAA,CAACT,aAAa,EAAKwC,MAAS,CAAC;IACxC;EACJ;AACJ,CAAC","ignoreList":[]}
@@ -5,11 +5,16 @@ import { FileManager } from "@webiny/app-admin";
5
5
  import { getSupportedExtensionsLabelHint } from "./utils.js";
6
6
  import { EditFileUsingUrl } from "../../../components/EditFileUsingUrl/index.js";
7
7
  import { MultiFilePicker } from "@webiny/admin-ui";
8
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
8
9
  const t = i18n.ns("app-headless-cms/admin/fields/file");
9
10
  const FieldRenderer = ({
10
- getBind,
11
- field
11
+ getBind
12
12
  }) => {
13
+ const {
14
+ field
15
+ } = useModelField();
16
+ const rules = useEffectiveRules(field);
17
+ const disabled = !rules.canEdit || rules.disabled;
13
18
  const Bind = getBind();
14
19
  const editFileRef = useRef(null);
15
20
  const imagesOnly = field.settings && field.settings.imagesOnly;
@@ -52,6 +57,7 @@ const FieldRenderer = ({
52
57
  });
53
58
  };
54
59
  return /*#__PURE__*/React.createElement(MultiFilePicker, Object.assign({}, bind, {
60
+ disabled: disabled,
55
61
  label: field.label,
56
62
  validation: validation,
57
63
  description: field.description,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","dotProp","i18n","FileManager","getSupportedExtensionsLabelHint","EditFileUsingUrl","MultiFilePicker","t","ns","FieldRenderer","getBind","field","Bind","editFileRef","imagesOnly","settings","onSetFile","bind","file","current","newValue","value","onChange","slice","index","src","createElement","validation","values","Array","isArray","filter","Boolean","ValidationContainer","editFile","multiple","images","render","showFileManager","selectFiles","files","urls","map","f","Object","assign","label","description","note","onSelectItem","onReplaceItem","_","onRemoveItem","delete","onEditItem","url","placeholder","type","multipleFiles","name","renderer","rendererName","canUse","list","props"],"sources":["fileFields.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport dotProp from \"dot-prop-immutable\";\nimport type {\n BindComponentRenderProp,\n CmsModelFieldRendererPlugin,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { FileManager } from \"@webiny/app-admin\";\nimport { getSupportedExtensionsLabelHint } from \"./utils.js\";\nimport { EditFileUsingUrl } from \"~/components/EditFileUsingUrl/index.js\";\nimport type { FileItem } from \"~/types.js\";\nimport { MultiFilePicker } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\ninterface EditFileRef {\n index: number;\n url: string;\n}\n\nconst FieldRenderer = ({ getBind, field }: CmsModelFieldRendererProps) => {\n const Bind = getBind();\n const editFileRef = useRef<EditFileRef | null>(null);\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n const onSetFile = (bind: BindComponentRenderProp) => {\n return (file: FileItem) => {\n if (!editFileRef.current) {\n return;\n }\n\n const newValue = [...bind.value];\n bind.onChange([\n ...newValue.slice(0, editFileRef.current.index),\n file.src,\n ...newValue.slice(editFileRef.current.index + 1)\n ]);\n\n editFileRef.current = null;\n };\n };\n\n return (\n <Bind>\n {bind => {\n const { onChange, validation } = bind;\n\n // We need to make sure the value is an array, since this is a multi-value component.\n const values: string[] = (\n Array.isArray(bind.value) ? bind.value : [bind.value]\n ).filter(Boolean);\n\n return (\n <Bind.ValidationContainer>\n <EditFileUsingUrl onSetFile={onSetFile(bind)}>\n {({ editFile }) => (\n <FileManager\n multiple\n images={imagesOnly}\n render={({ showFileManager }) => {\n const selectFiles = (index = -1) => {\n showFileManager(files => {\n const urls = files.map(f => f.src);\n if (index === -1) {\n onChange([...values, ...urls]);\n } else {\n onChange([\n ...values.slice(0, index),\n ...urls,\n ...values.slice(index + 1)\n ]);\n }\n });\n };\n return (\n <MultiFilePicker\n {...bind}\n label={field.label}\n validation={validation}\n description={field.description}\n note={getSupportedExtensionsLabelHint(imagesOnly)}\n values={values}\n onSelectItem={() => selectFiles()}\n onReplaceItem={(_, index) => selectFiles(index)}\n onRemoveItem={(_, index) =>\n onChange(dotProp.delete(values, index))\n }\n onEditItem={(value, index) => {\n if (!value) {\n return;\n }\n\n editFileRef.current = {\n index,\n url: value.url\n };\n\n editFile(value.url);\n }}\n placeholder={field.placeholder}\n type={\"compact\"}\n data-testid={`fr.input.filefields.${field.label}`}\n />\n );\n }}\n />\n )}\n </EditFileUsingUrl>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport const multipleFiles: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-files\",\n renderer: {\n rendererName: \"file-inputs\",\n name: t`File Inputs`,\n description: t`Enables selecting multiple files via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !!field.list;\n },\n render(props) {\n return <FieldRenderer {...props} />;\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useRef","dotProp","i18n","FileManager","getSupportedExtensionsLabelHint","EditFileUsingUrl","MultiFilePicker","useEffectiveRules","useModelField","t","ns","FieldRenderer","getBind","field","rules","disabled","canEdit","Bind","editFileRef","imagesOnly","settings","onSetFile","bind","file","current","newValue","value","onChange","slice","index","src","createElement","validation","values","Array","isArray","filter","Boolean","ValidationContainer","editFile","multiple","images","render","showFileManager","selectFiles","files","urls","map","f","Object","assign","label","description","note","onSelectItem","onReplaceItem","_","onRemoveItem","delete","onEditItem","url","placeholder","type","multipleFiles","name","renderer","rendererName","canUse","list","props"],"sources":["fileFields.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport dotProp from \"dot-prop-immutable\";\nimport type {\n BindComponentRenderProp,\n CmsModelFieldRendererPlugin,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { FileManager } from \"@webiny/app-admin\";\nimport { getSupportedExtensionsLabelHint } from \"./utils.js\";\nimport { EditFileUsingUrl } from \"~/components/EditFileUsingUrl/index.js\";\nimport type { FileItem } from \"~/types.js\";\nimport { MultiFilePicker } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/file\");\n\ninterface EditFileRef {\n index: number;\n url: string;\n}\n\nconst FieldRenderer = ({ getBind }: CmsModelFieldRendererProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n const Bind = getBind();\n const editFileRef = useRef<EditFileRef | null>(null);\n\n const imagesOnly = field.settings && field.settings.imagesOnly;\n\n const onSetFile = (bind: BindComponentRenderProp) => {\n return (file: FileItem) => {\n if (!editFileRef.current) {\n return;\n }\n\n const newValue = [...bind.value];\n bind.onChange([\n ...newValue.slice(0, editFileRef.current.index),\n file.src,\n ...newValue.slice(editFileRef.current.index + 1)\n ]);\n\n editFileRef.current = null;\n };\n };\n\n return (\n <Bind>\n {bind => {\n const { onChange, validation } = bind;\n\n // We need to make sure the value is an array, since this is a multi-value component.\n const values: string[] = (\n Array.isArray(bind.value) ? bind.value : [bind.value]\n ).filter(Boolean);\n\n return (\n <Bind.ValidationContainer>\n <EditFileUsingUrl onSetFile={onSetFile(bind)}>\n {({ editFile }) => (\n <FileManager\n multiple\n images={imagesOnly}\n render={({ showFileManager }) => {\n const selectFiles = (index = -1) => {\n showFileManager(files => {\n const urls = files.map(f => f.src);\n if (index === -1) {\n onChange([...values, ...urls]);\n } else {\n onChange([\n ...values.slice(0, index),\n ...urls,\n ...values.slice(index + 1)\n ]);\n }\n });\n };\n return (\n <MultiFilePicker\n {...bind}\n disabled={disabled}\n label={field.label}\n validation={validation}\n description={field.description}\n note={getSupportedExtensionsLabelHint(imagesOnly)}\n values={values}\n onSelectItem={() => selectFiles()}\n onReplaceItem={(_, index) => selectFiles(index)}\n onRemoveItem={(_, index) =>\n onChange(dotProp.delete(values, index))\n }\n onEditItem={(value, index) => {\n if (!value) {\n return;\n }\n\n editFileRef.current = {\n index,\n url: value.url\n };\n\n editFile(value.url);\n }}\n placeholder={field.placeholder}\n type={\"compact\"}\n data-testid={`fr.input.filefields.${field.label}`}\n />\n );\n }}\n />\n )}\n </EditFileUsingUrl>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport const multipleFiles: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-files\",\n renderer: {\n rendererName: \"file-inputs\",\n name: t`File Inputs`,\n description: t`Enables selecting multiple files via File Manager.`,\n canUse({ field }) {\n return field.type === \"file\" && !!field.list;\n },\n render(props) {\n return <FieldRenderer {...props} />;\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const SecurityPermissions: () => React.JSX.Element;
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+ import { AdminConfig } from "@webiny/app-admin";
3
+ import { ReactComponent as PermissionsIcon } from "@webiny/icons/folder_open.svg";
4
+ const {
5
+ Security
6
+ } = AdminConfig;
7
+ export const SecurityPermissions = () => {
8
+ return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Security.Permissions, {
9
+ name: "file-manager",
10
+ title: "File Manager",
11
+ description: "Manage File Manager permissions.",
12
+ icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
13
+ schema: {
14
+ prefix: "fm",
15
+ fullAccess: true,
16
+ entities: [{
17
+ id: "file",
18
+ title: "File",
19
+ scopes: ["full", "own"],
20
+ permission: "fm.file",
21
+ actions: [{
22
+ name: "rwd"
23
+ }]
24
+ }, {
25
+ id: "settings",
26
+ title: "Settings",
27
+ scopes: ["full"],
28
+ permission: "fm.settings"
29
+ }]
30
+ }
31
+ }));
32
+ };
33
+
34
+ //# sourceMappingURL=SecurityPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","Security","SecurityPermissions","createElement","Permissions","name","title","description","icon","schema","prefix","fullAccess","entities","id","scopes","permission","actions"],"sources":["SecurityPermissions.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/folder_open.svg\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermissions = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"file-manager\"\n title=\"File Manager\"\n description=\"Manage File Manager permissions.\"\n icon={<PermissionsIcon />}\n schema={{\n prefix: \"fm\",\n fullAccess: true,\n entities: [\n {\n id: \"file\",\n title: \"File\",\n scopes: [\"full\", \"own\"],\n permission: \"fm.file\",\n actions: [\n {\n name: \"rwd\"\n }\n ]\n },\n {\n id: \"settings\",\n title: \"Settings\",\n scopes: [\"full\"],\n permission: \"fm.settings\"\n }\n ]\n }}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,eAAe,QAAQ,+BAA+B;AAEjF,MAAM;EAAEC;AAAS,CAAC,GAAGH,WAAW;AAEhC,OAAO,MAAMI,mBAAmB,GAAGA,CAAA,KAAM;EACrC,oBACIL,KAAA,CAAAM,aAAA,CAACL,WAAW,qBACRD,KAAA,CAAAM,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,cAAc;IACnBC,KAAK,EAAC,cAAc;IACpBC,WAAW,EAAC,kCAAkC;IAC9CC,IAAI,eAAEX,KAAA,CAAAM,aAAA,CAACH,eAAe,MAAE,CAAE;IAC1BS,MAAM,EAAE;MACJC,MAAM,EAAE,IAAI;MACZC,UAAU,EAAE,IAAI;MAChBC,QAAQ,EAAE,CACN;QACIC,EAAE,EAAE,MAAM;QACVP,KAAK,EAAE,MAAM;QACbQ,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;QACvBC,UAAU,EAAE,SAAS;QACrBC,OAAO,EAAE,CACL;UACIX,IAAI,EAAE;QACV,CAAC;MAET,CAAC,EACD;QACIQ,EAAE,EAAE,UAAU;QACdP,KAAK,EAAE,UAAU;QACjBQ,MAAM,EAAE,CAAC,MAAM,CAAC;QAChBC,UAAU,EAAE;MAChB,CAAC;IAET;EAAE,CACL,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -1,8 +1,6 @@
1
1
  import React from "react";
2
2
  import { AdminConfig, useRouter, AdminLayout } from "@webiny/app-admin";
3
- import { plugins } from "@webiny/plugins";
4
3
  import { HasPermission } from "@webiny/app-admin";
5
- import permissionRenderer from "./plugins/permissionRenderer/index.js";
6
4
  import { FileManagerSettings } from "./views/FileManagerSettings.js";
7
5
  import { Routes } from "../../routes.js";
8
6
  const {
@@ -13,7 +11,6 @@ export const SettingsModule = () => {
13
11
  const {
14
12
  getLink
15
13
  } = useRouter();
16
- plugins.register(permissionRenderer);
17
14
  return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
18
15
  name: "fm.settings"
19
16
  }, /*#__PURE__*/React.createElement(Route, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","AdminConfig","useRouter","AdminLayout","plugins","HasPermission","permissionRenderer","FileManagerSettings","Routes","Menu","Route","SettingsModule","getLink","register","createElement","name","route","Settings","element","title","parent","Group","text","Link","to","pinnable"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, useRouter, AdminLayout } from \"@webiny/app-admin\";\nimport { plugins } from \"@webiny/plugins\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport permissionRenderer from \"./plugins/permissionRenderer/index.js\";\nimport { FileManagerSettings } from \"./views/FileManagerSettings.js\";\nimport { Routes } from \"~/routes.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const SettingsModule = () => {\n const { getLink } = useRouter();\n plugins.register(permissionRenderer);\n\n return (\n <AdminConfig>\n <HasPermission name={\"fm.settings\"}>\n <Route\n route={Routes.Settings}\n element={\n <AdminLayout title={\"File Manager - General Settings\"}>\n <FileManagerSettings />\n </AdminLayout>\n }\n />\n <Menu\n parent={\"settings\"}\n name={\"settings.fm\"}\n element={<Menu.Group text={\"File Manager\"} />}\n />\n <Menu\n parent={\"settings\"}\n name={\"settings.fm.general\"}\n element={\n <Menu.Link text={\"General\"} to={getLink(Routes.Settings)} pinnable={true} />\n }\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,SAAS,EAAEC,WAAW,QAAQ,mBAAmB;AACvE,SAASC,OAAO,QAAQ,iBAAiB;AACzC,SAASC,aAAa,QAAQ,mBAAmB;AACjD,OAAOC,kBAAkB;AACzB,SAASC,mBAAmB;AAC5B,SAASC,MAAM;AAEf,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGT,WAAW;AAEnC,OAAO,MAAMU,cAAc,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC;EAAQ,CAAC,GAAGV,SAAS,CAAC,CAAC;EAC/BE,OAAO,CAACS,QAAQ,CAACP,kBAAkB,CAAC;EAEpC,oBACIN,KAAA,CAAAc,aAAA,CAACb,WAAW,qBACRD,KAAA,CAAAc,aAAA,CAACT,aAAa;IAACU,IAAI,EAAE;EAAc,gBAC/Bf,KAAA,CAAAc,aAAA,CAACJ,KAAK;IACFM,KAAK,EAAER,MAAM,CAACS,QAAS;IACvBC,OAAO,eACHlB,KAAA,CAAAc,aAAA,CAACX,WAAW;MAACgB,KAAK,EAAE;IAAkC,gBAClDnB,KAAA,CAAAc,aAAA,CAACP,mBAAmB,MAAE,CACb;EAChB,CACJ,CAAC,eACFP,KAAA,CAAAc,aAAA,CAACL,IAAI;IACDW,MAAM,EAAE,UAAW;IACnBL,IAAI,EAAE,aAAc;IACpBG,OAAO,eAAElB,KAAA,CAAAc,aAAA,CAACL,IAAI,CAACY,KAAK;MAACC,IAAI,EAAE;IAAe,CAAE;EAAE,CACjD,CAAC,eACFtB,KAAA,CAAAc,aAAA,CAACL,IAAI;IACDW,MAAM,EAAE,UAAW;IACnBL,IAAI,EAAE,qBAAsB;IAC5BG,OAAO,eACHlB,KAAA,CAAAc,aAAA,CAACL,IAAI,CAACc,IAAI;MAACD,IAAI,EAAE,SAAU;MAACE,EAAE,EAAEZ,OAAO,CAACJ,MAAM,CAACS,QAAQ,CAAE;MAACQ,QAAQ,EAAE;IAAK,CAAE;EAC9E,CACJ,CACU,CACN,CAAC;AAEtB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","AdminConfig","useRouter","AdminLayout","HasPermission","FileManagerSettings","Routes","Menu","Route","SettingsModule","getLink","createElement","name","route","Settings","element","title","parent","Group","text","Link","to","pinnable"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, useRouter, AdminLayout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { FileManagerSettings } from \"./views/FileManagerSettings.js\";\nimport { Routes } from \"~/routes.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const SettingsModule = () => {\n const { getLink } = useRouter();\n\n return (\n <AdminConfig>\n <HasPermission name={\"fm.settings\"}>\n <Route\n route={Routes.Settings}\n element={\n <AdminLayout title={\"File Manager - General Settings\"}>\n <FileManagerSettings />\n </AdminLayout>\n }\n />\n <Menu\n parent={\"settings\"}\n name={\"settings.fm\"}\n element={<Menu.Group text={\"File Manager\"} />}\n />\n <Menu\n parent={\"settings\"}\n name={\"settings.fm.general\"}\n element={\n <Menu.Link text={\"General\"} to={getLink(Routes.Settings)} pinnable={true} />\n }\n />\n </HasPermission>\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,SAAS,EAAEC,WAAW,QAAQ,mBAAmB;AACvE,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,mBAAmB;AAC5B,SAASC,MAAM;AAEf,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGP,WAAW;AAEnC,OAAO,MAAMQ,cAAc,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC;EAAQ,CAAC,GAAGR,SAAS,CAAC,CAAC;EAE/B,oBACIF,KAAA,CAAAW,aAAA,CAACV,WAAW,qBACRD,KAAA,CAAAW,aAAA,CAACP,aAAa;IAACQ,IAAI,EAAE;EAAc,gBAC/BZ,KAAA,CAAAW,aAAA,CAACH,KAAK;IACFK,KAAK,EAAEP,MAAM,CAACQ,QAAS;IACvBC,OAAO,eACHf,KAAA,CAAAW,aAAA,CAACR,WAAW;MAACa,KAAK,EAAE;IAAkC,gBAClDhB,KAAA,CAAAW,aAAA,CAACN,mBAAmB,MAAE,CACb;EAChB,CACJ,CAAC,eACFL,KAAA,CAAAW,aAAA,CAACJ,IAAI;IACDU,MAAM,EAAE,UAAW;IACnBL,IAAI,EAAE,aAAc;IACpBG,OAAO,eAAEf,KAAA,CAAAW,aAAA,CAACJ,IAAI,CAACW,KAAK;MAACC,IAAI,EAAE;IAAe,CAAE;EAAE,CACjD,CAAC,eACFnB,KAAA,CAAAW,aAAA,CAACJ,IAAI;IACDU,MAAM,EAAE,UAAW;IACnBL,IAAI,EAAE,qBAAsB;IAC5BG,OAAO,eACHf,KAAA,CAAAW,aAAA,CAACJ,IAAI,CAACa,IAAI;MAACD,IAAI,EAAE,SAAU;MAACE,EAAE,EAAEX,OAAO,CAACJ,MAAM,CAACQ,QAAQ,CAAE;MAACQ,QAAQ,EAAE;IAAK,CAAE;EAC9E,CACJ,CACU,CACN,CAAC;AAEtB,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-file-manager",
3
- "version": "0.0.0-unstable.df7a8bb475",
3
+ "version": "0.0.0-unstable.e2758ee1cf",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -14,21 +14,21 @@
14
14
  "@apollo/react-components": "3.1.5",
15
15
  "@apollo/react-hooks": "3.1.5",
16
16
  "@types/react": "18.2.79",
17
- "@webiny/admin-ui": "0.0.0-unstable.df7a8bb475",
18
- "@webiny/app": "0.0.0-unstable.df7a8bb475",
19
- "@webiny/app-aco": "0.0.0-unstable.df7a8bb475",
20
- "@webiny/app-admin": "0.0.0-unstable.df7a8bb475",
21
- "@webiny/app-headless-cms": "0.0.0-unstable.df7a8bb475",
22
- "@webiny/app-headless-cms-common": "0.0.0-unstable.df7a8bb475",
23
- "@webiny/app-websockets": "0.0.0-unstable.df7a8bb475",
24
- "@webiny/error": "0.0.0-unstable.df7a8bb475",
25
- "@webiny/form": "0.0.0-unstable.df7a8bb475",
26
- "@webiny/icons": "0.0.0-unstable.df7a8bb475",
27
- "@webiny/plugins": "0.0.0-unstable.df7a8bb475",
28
- "@webiny/react-composition": "0.0.0-unstable.df7a8bb475",
29
- "@webiny/react-properties": "0.0.0-unstable.df7a8bb475",
30
- "@webiny/utils": "0.0.0-unstable.df7a8bb475",
31
- "@webiny/validation": "0.0.0-unstable.df7a8bb475",
17
+ "@webiny/admin-ui": "0.0.0-unstable.e2758ee1cf",
18
+ "@webiny/app": "0.0.0-unstable.e2758ee1cf",
19
+ "@webiny/app-aco": "0.0.0-unstable.e2758ee1cf",
20
+ "@webiny/app-admin": "0.0.0-unstable.e2758ee1cf",
21
+ "@webiny/app-headless-cms": "0.0.0-unstable.e2758ee1cf",
22
+ "@webiny/app-headless-cms-common": "0.0.0-unstable.e2758ee1cf",
23
+ "@webiny/app-websockets": "0.0.0-unstable.e2758ee1cf",
24
+ "@webiny/error": "0.0.0-unstable.e2758ee1cf",
25
+ "@webiny/form": "0.0.0-unstable.e2758ee1cf",
26
+ "@webiny/icons": "0.0.0-unstable.e2758ee1cf",
27
+ "@webiny/plugins": "0.0.0-unstable.e2758ee1cf",
28
+ "@webiny/react-composition": "0.0.0-unstable.e2758ee1cf",
29
+ "@webiny/react-properties": "0.0.0-unstable.e2758ee1cf",
30
+ "@webiny/utils": "0.0.0-unstable.e2758ee1cf",
31
+ "@webiny/validation": "0.0.0-unstable.e2758ee1cf",
32
32
  "apollo-cache": "1.3.5",
33
33
  "apollo-client": "2.6.10",
34
34
  "apollo-link": "1.2.14",
@@ -38,12 +38,12 @@
38
38
  "dataurl-to-blob": "0.0.1",
39
39
  "dayjs": "1.11.19",
40
40
  "dot-prop-immutable": "2.1.1",
41
- "graphql": "16.12.0",
41
+ "graphql": "16.13.0",
42
42
  "graphql-tag": "2.12.6",
43
43
  "load-script": "1.0.0",
44
44
  "lodash": "4.17.23",
45
45
  "mime": "3.0.0",
46
- "minimatch": "5.1.6",
46
+ "minimatch": "10.2.4",
47
47
  "mobx": "6.15.0",
48
48
  "mobx-react-lite": "3.4.3",
49
49
  "prop-types": "15.8.1",
@@ -57,14 +57,14 @@
57
57
  },
58
58
  "devDependencies": {
59
59
  "@svgr/webpack": "6.5.1",
60
- "@webiny/build-tools": "0.0.0-unstable.df7a8bb475",
60
+ "@webiny/build-tools": "0.0.0-unstable.e2758ee1cf",
61
61
  "rimraf": "6.1.3",
62
62
  "typescript": "5.9.3",
63
- "vitest": "3.2.4"
63
+ "vitest": "4.0.18"
64
64
  },
65
65
  "publishConfig": {
66
66
  "access": "public",
67
67
  "directory": "dist"
68
68
  },
69
- "gitHead": "df7a8bb4755a1da047f0af8c56bdb649cc81bf7d"
69
+ "gitHead": "e2758ee1cfa3b9a7152e9bb995a90ccabd33266f"
70
70
  }
@@ -1,14 +0,0 @@
1
- import React from "react";
2
- interface FileManagerPermissionItem {
3
- settingsAccessScope?: string;
4
- filesAccessScope?: string;
5
- accessLevel?: string;
6
- name?: string;
7
- filesRWD?: string;
8
- }
9
- interface FileManagerPermissionsProps {
10
- value: FileManagerPermissionItem;
11
- onChange: (value: FileManagerPermissionItem[]) => void;
12
- }
13
- export declare const FileManagerPermissions: ({ value, onChange }: FileManagerPermissionsProps) => React.JSX.Element;
14
- export {};
@@ -1,205 +0,0 @@
1
- import React, { Fragment, useCallback, useMemo } from "react";
2
- import { Grid, Select } from "@webiny/admin-ui";
3
- import { i18n } from "@webiny/app/i18n/index.js";
4
- import { CannotUseAaclAlert, PermissionInfo, gridWithPaddingClass, PermissionsGroup } from "@webiny/app-admin";
5
- import { Form } from "@webiny/form";
6
- import { useSecurity } from "@webiny/app-admin";
7
- const t = i18n.ns("app-file-manager/admin/plugins/permissionRenderer");
8
- const FILE_MANAGER = "fm";
9
- const FILE_MANAGER_FULL_ACCESS = `${FILE_MANAGER}.*`;
10
- const FILE_MANAGER_ACCESS_FILE = `${FILE_MANAGER}.file`;
11
- const FILE_MANAGER_ACCESS_SETTINGS = `${FILE_MANAGER}.settings`;
12
- const FULL_ACCESS = "full";
13
- const NO_ACCESS = "no";
14
- const CUSTOM_ACCESS = "custom";
15
- export const FileManagerPermissions = ({
16
- value,
17
- onChange
18
- }) => {
19
- const {
20
- getPermission
21
- } = useSecurity();
22
-
23
- // We disable form elements for custom permissions if AACL cannot be used.
24
- const cannotUseAAcl = useMemo(() => {
25
- return !getPermission("aacl", true);
26
- }, []);
27
- const onFormChange = useCallback(data => {
28
- let newValue = [];
29
- if (Array.isArray(value)) {
30
- // Let's just filter out the `file-manager*` permission objects, it's easier to build new ones from scratch.
31
- newValue = value.filter(item => !item.name.startsWith(FILE_MANAGER));
32
- }
33
- if (data.accessLevel === NO_ACCESS) {
34
- onChange(newValue);
35
- return;
36
- }
37
- if (data.accessLevel === FULL_ACCESS) {
38
- newValue.push({
39
- name: FILE_MANAGER_FULL_ACCESS
40
- });
41
- onChange(newValue);
42
- return;
43
- }
44
-
45
- // Handling custom access level.
46
-
47
- // Files first.
48
- if (data.filesAccessScope && data.filesAccessScope !== NO_ACCESS) {
49
- const permission = {
50
- name: FILE_MANAGER_ACCESS_FILE,
51
- own: false,
52
- rwd: undefined
53
- };
54
- if (data.filesAccessScope === "own") {
55
- permission.own = true;
56
- permission.rwd = "rwd";
57
- } else {
58
- permission.rwd = data.filesRWD || "r";
59
- }
60
- newValue.push(permission);
61
- }
62
-
63
- // Settings second.
64
- if (data.settingsAccessScope === FULL_ACCESS) {
65
- newValue.push({
66
- name: FILE_MANAGER_ACCESS_SETTINGS
67
- });
68
- }
69
- onChange(newValue);
70
- }, [value]);
71
- const formData = useMemo(() => {
72
- if (!Array.isArray(value)) {
73
- return {
74
- accessLevel: NO_ACCESS
75
- };
76
- }
77
- const hasFullAccess = value.find(item => item.name === FILE_MANAGER_FULL_ACCESS || item.name === "*");
78
- if (hasFullAccess) {
79
- return {
80
- accessLevel: FULL_ACCESS
81
- };
82
- }
83
- const permissions = value.filter(item => item.name.startsWith(FILE_MANAGER));
84
- if (!permissions.length) {
85
- return {
86
- accessLevel: NO_ACCESS
87
- };
88
- }
89
- const data = {
90
- accessLevel: CUSTOM_ACCESS,
91
- filesAccessScope: NO_ACCESS,
92
- settingsAccessScope: NO_ACCESS,
93
- filesRWD: "r"
94
- };
95
- const filesPermission = permissions.find(item => item.name === FILE_MANAGER_ACCESS_FILE);
96
- if (filesPermission) {
97
- data.filesAccessScope = filesPermission.own ? "own" : FULL_ACCESS;
98
- if (data.filesAccessScope === FULL_ACCESS) {
99
- data.filesRWD = filesPermission.rwd;
100
- } else {
101
- data.filesRWD = "rwd";
102
- }
103
- }
104
- const hasSettingsAccess = permissions.find(item => item.name === FILE_MANAGER_ACCESS_SETTINGS);
105
- if (hasSettingsAccess) {
106
- data.settingsAccessScope = FULL_ACCESS;
107
- }
108
- return data;
109
- }, []);
110
- return /*#__PURE__*/React.createElement(Form, {
111
- data: formData,
112
- onChange: onFormChange
113
- }, ({
114
- data,
115
- Bind,
116
- setValue
117
- }) => /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
118
- className: gridWithPaddingClass
119
- }, /*#__PURE__*/React.createElement(Grid.Column, {
120
- span: 12
121
- }, data.accessLevel === "custom" && cannotUseAAcl && /*#__PURE__*/React.createElement(CannotUseAaclAlert, null))), /*#__PURE__*/React.createElement(Grid, {
122
- className: gridWithPaddingClass
123
- }, /*#__PURE__*/React.createElement(Grid.Column, {
124
- span: 6
125
- }, /*#__PURE__*/React.createElement(PermissionInfo, {
126
- title: t`Access Level`
127
- })), /*#__PURE__*/React.createElement(Grid.Column, {
128
- span: 6
129
- }, /*#__PURE__*/React.createElement(Bind, {
130
- name: "accessLevel"
131
- }, /*#__PURE__*/React.createElement(Select, {
132
- options: [{
133
- value: NO_ACCESS,
134
- label: t`No access`
135
- }, {
136
- value: FULL_ACCESS,
137
- label: t`Full access`
138
- }, {
139
- value: CUSTOM_ACCESS,
140
- label: t`Custom access`
141
- }]
142
- })))), data.accessLevel === "custom" && /*#__PURE__*/React.createElement("div", {
143
- className: "mt-lg"
144
- }, /*#__PURE__*/React.createElement(PermissionsGroup, {
145
- title: t`Files`
146
- }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
147
- span: 12
148
- }, /*#__PURE__*/React.createElement(Bind, {
149
- name: "filesAccessScope",
150
- beforeChange: (value, cb) => {
151
- if (value === "own") {
152
- setValue(`filesRWD`, "rwd");
153
- }
154
- cb(value);
155
- }
156
- }, /*#__PURE__*/React.createElement(Select, {
157
- label: t`Access Scope`,
158
- disabled: cannotUseAAcl,
159
- options: [{
160
- value: NO_ACCESS,
161
- label: t`No access`
162
- }, {
163
- value: FULL_ACCESS,
164
- label: t`Full access`
165
- }, {
166
- value: "own",
167
- label: t`Only files created by the user`
168
- }]
169
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
170
- span: 12
171
- }, /*#__PURE__*/React.createElement(Bind, {
172
- name: "filesRWD"
173
- }, /*#__PURE__*/React.createElement(Select, {
174
- label: t`Primary Actions`,
175
- disabled: cannotUseAAcl || data.filesAccessScope !== "full",
176
- options: [{
177
- value: "r",
178
- label: t`Read`
179
- }, {
180
- value: "rw",
181
- label: t`Read, write`
182
- }, {
183
- value: "rwd",
184
- label: t`Read, write, delete`
185
- }]
186
- }))))), /*#__PURE__*/React.createElement(PermissionsGroup, {
187
- title: t`Settings`
188
- }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
189
- span: 12
190
- }, /*#__PURE__*/React.createElement(Bind, {
191
- name: "settingsAccessScope"
192
- }, /*#__PURE__*/React.createElement(Select, {
193
- disabled: cannotUseAAcl,
194
- label: t`Access Scope`,
195
- options: [{
196
- value: NO_ACCESS,
197
- label: t`No access`
198
- }, {
199
- value: FULL_ACCESS,
200
- label: t`Full access`
201
- }]
202
- }))))))));
203
- };
204
-
205
- //# sourceMappingURL=FileManagerPermissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Fragment","useCallback","useMemo","Grid","Select","i18n","CannotUseAaclAlert","PermissionInfo","gridWithPaddingClass","PermissionsGroup","Form","useSecurity","t","ns","FILE_MANAGER","FILE_MANAGER_FULL_ACCESS","FILE_MANAGER_ACCESS_FILE","FILE_MANAGER_ACCESS_SETTINGS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","FileManagerPermissions","value","onChange","getPermission","cannotUseAAcl","onFormChange","data","newValue","Array","isArray","filter","item","name","startsWith","accessLevel","push","filesAccessScope","permission","own","rwd","undefined","filesRWD","settingsAccessScope","formData","hasFullAccess","find","permissions","length","filesPermission","hasSettingsAccess","createElement","Bind","setValue","className","Column","span","title","options","label","beforeChange","cb","disabled"],"sources":["FileManagerPermissions.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Grid, Select } from \"@webiny/admin-ui\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport {\n CannotUseAaclAlert,\n PermissionInfo,\n gridWithPaddingClass,\n PermissionsGroup,\n type AaclPermission\n} from \"@webiny/app-admin\";\nimport { Form } from \"@webiny/form\";\nimport { useSecurity } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-file-manager/admin/plugins/permissionRenderer\");\n\nconst FILE_MANAGER = \"fm\";\nconst FILE_MANAGER_FULL_ACCESS = `${FILE_MANAGER}.*`;\nconst FILE_MANAGER_ACCESS_FILE = `${FILE_MANAGER}.file`;\nconst FILE_MANAGER_ACCESS_SETTINGS = `${FILE_MANAGER}.settings`;\n\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\nconst CUSTOM_ACCESS = \"custom\";\n\ninterface FileManagerPermission {\n name: string;\n own?: boolean;\n rwd?: string;\n}\ninterface FileManagerPermissionItem {\n settingsAccessScope?: string;\n filesAccessScope?: string;\n accessLevel?: string;\n name?: string;\n filesRWD?: string;\n}\ninterface FileManagerPermissionsProps {\n value: FileManagerPermissionItem;\n onChange: (value: FileManagerPermissionItem[]) => void;\n}\n\nexport const FileManagerPermissions = ({ value, onChange }: FileManagerPermissionsProps) => {\n const { getPermission } = useSecurity();\n\n // We disable form elements for custom permissions if AACL cannot be used.\n const cannotUseAAcl = useMemo(() => {\n return !getPermission<AaclPermission>(\"aacl\", true);\n }, []);\n\n const onFormChange = useCallback(\n (data: FileManagerPermissionItem) => {\n let newValue: FileManagerPermissionItem[] = [];\n if (Array.isArray(value)) {\n // Let's just filter out the `file-manager*` permission objects, it's easier to build new ones from scratch.\n newValue = value.filter(item => !item.name.startsWith(FILE_MANAGER));\n }\n\n if (data.accessLevel === NO_ACCESS) {\n onChange(newValue);\n return;\n }\n\n if (data.accessLevel === FULL_ACCESS) {\n newValue.push({ name: FILE_MANAGER_FULL_ACCESS });\n onChange(newValue);\n return;\n }\n\n // Handling custom access level.\n\n // Files first.\n if (data.filesAccessScope && data.filesAccessScope !== NO_ACCESS) {\n const permission: FileManagerPermission = {\n name: FILE_MANAGER_ACCESS_FILE,\n own: false,\n rwd: undefined\n };\n\n if (data.filesAccessScope === \"own\") {\n permission.own = true;\n permission.rwd = \"rwd\";\n } else {\n permission.rwd = data.filesRWD || \"r\";\n }\n newValue.push(permission);\n }\n\n // Settings second.\n if (data.settingsAccessScope === FULL_ACCESS) {\n newValue.push({ name: FILE_MANAGER_ACCESS_SETTINGS });\n }\n\n onChange(newValue);\n },\n [value]\n );\n\n const formData = useMemo((): FileManagerPermissionItem => {\n if (!Array.isArray(value)) {\n return { accessLevel: NO_ACCESS };\n }\n\n const hasFullAccess = value.find(\n item => item.name === FILE_MANAGER_FULL_ACCESS || item.name === \"*\"\n );\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n const permissions = value.filter(item => item.name.startsWith(FILE_MANAGER));\n if (!permissions.length) {\n return { accessLevel: NO_ACCESS };\n }\n\n const data: FileManagerPermissionItem = {\n accessLevel: CUSTOM_ACCESS,\n filesAccessScope: NO_ACCESS,\n settingsAccessScope: NO_ACCESS,\n filesRWD: \"r\"\n };\n\n const filesPermission = permissions.find(item => item.name === FILE_MANAGER_ACCESS_FILE);\n if (filesPermission) {\n data.filesAccessScope = filesPermission.own ? \"own\" : FULL_ACCESS;\n if (data.filesAccessScope === FULL_ACCESS) {\n data.filesRWD = filesPermission.rwd;\n } else {\n data.filesRWD = \"rwd\";\n }\n }\n\n const hasSettingsAccess = permissions.find(\n item => item.name === FILE_MANAGER_ACCESS_SETTINGS\n );\n if (hasSettingsAccess) {\n data.settingsAccessScope = FULL_ACCESS;\n }\n\n return data;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ data, Bind, setValue }) => (\n <Fragment>\n <Grid className={gridWithPaddingClass}>\n <Grid.Column span={12}>\n {data.accessLevel === \"custom\" && cannotUseAAcl && (\n <CannotUseAaclAlert />\n )}\n </Grid.Column>\n </Grid>\n <Grid className={gridWithPaddingClass}>\n <Grid.Column span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name={\"accessLevel\"}>\n <Select\n options={[\n {\n value: NO_ACCESS,\n label: t`No access`\n },\n {\n value: FULL_ACCESS,\n label: t`Full access`\n },\n {\n value: CUSTOM_ACCESS,\n label: t`Custom access`\n }\n ]}\n />\n </Bind>\n </Grid.Column>\n </Grid>\n {data.accessLevel === \"custom\" && (\n <div className={\"mt-lg\"}>\n <PermissionsGroup title={t`Files`}>\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"filesAccessScope\"}\n beforeChange={(value, cb) => {\n if (value === \"own\") {\n setValue(`filesRWD`, \"rwd\");\n }\n cb(value);\n }}\n >\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAAcl}\n options={[\n {\n value: NO_ACCESS,\n label: t`No access`\n },\n {\n value: FULL_ACCESS,\n label: t`Full access`\n },\n {\n value: \"own\",\n label: t`Only files created by the user`\n }\n ]}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"filesRWD\"}>\n <Select\n label={t`Primary Actions`}\n disabled={\n cannotUseAAcl ||\n data.filesAccessScope !== \"full\"\n }\n options={[\n {\n value: \"r\",\n label: t`Read`\n },\n {\n value: \"rw\",\n label: t`Read, write`\n },\n {\n value: \"rwd\",\n label: t`Read, write, delete`\n }\n ]}\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </PermissionsGroup>\n <PermissionsGroup title={t`Settings`}>\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"settingsAccessScope\"}>\n <Select\n disabled={cannotUseAAcl}\n label={t`Access Scope`}\n options={[\n {\n value: NO_ACCESS,\n label: t`No access`\n },\n {\n value: FULL_ACCESS,\n label: t`Full access`\n }\n ]}\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </PermissionsGroup>\n </div>\n )}\n </Fragment>\n )}\n </Form>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAC7D,SAASC,IAAI,EAAEC,MAAM,QAAQ,kBAAkB;AAC/C,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SACIC,kBAAkB,EAClBC,cAAc,EACdC,oBAAoB,EACpBC,gBAAgB,QAEb,mBAAmB;AAC1B,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,MAAMC,CAAC,GAAGP,IAAI,CAACQ,EAAE,CAAC,mDAAmD,CAAC;AAEtE,MAAMC,YAAY,GAAG,IAAI;AACzB,MAAMC,wBAAwB,GAAG,GAAGD,YAAY,IAAI;AACpD,MAAME,wBAAwB,GAAG,GAAGF,YAAY,OAAO;AACvD,MAAMG,4BAA4B,GAAG,GAAGH,YAAY,WAAW;AAE/D,MAAMI,WAAW,GAAG,MAAM;AAC1B,MAAMC,SAAS,GAAG,IAAI;AACtB,MAAMC,aAAa,GAAG,QAAQ;AAmB9B,OAAO,MAAMC,sBAAsB,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAsC,CAAC,KAAK;EACxF,MAAM;IAAEC;EAAc,CAAC,GAAGb,WAAW,CAAC,CAAC;;EAEvC;EACA,MAAMc,aAAa,GAAGvB,OAAO,CAAC,MAAM;IAChC,OAAO,CAACsB,aAAa,CAAiB,MAAM,EAAE,IAAI,CAAC;EACvD,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,YAAY,GAAGzB,WAAW,CAC3B0B,IAA+B,IAAK;IACjC,IAAIC,QAAqC,GAAG,EAAE;IAC9C,IAAIC,KAAK,CAACC,OAAO,CAACR,KAAK,CAAC,EAAE;MACtB;MACAM,QAAQ,GAAGN,KAAK,CAACS,MAAM,CAACC,IAAI,IAAI,CAACA,IAAI,CAACC,IAAI,CAACC,UAAU,CAACpB,YAAY,CAAC,CAAC;IACxE;IAEA,IAAIa,IAAI,CAACQ,WAAW,KAAKhB,SAAS,EAAE;MAChCI,QAAQ,CAACK,QAAQ,CAAC;MAClB;IACJ;IAEA,IAAID,IAAI,CAACQ,WAAW,KAAKjB,WAAW,EAAE;MAClCU,QAAQ,CAACQ,IAAI,CAAC;QAAEH,IAAI,EAAElB;MAAyB,CAAC,CAAC;MACjDQ,QAAQ,CAACK,QAAQ,CAAC;MAClB;IACJ;;IAEA;;IAEA;IACA,IAAID,IAAI,CAACU,gBAAgB,IAAIV,IAAI,CAACU,gBAAgB,KAAKlB,SAAS,EAAE;MAC9D,MAAMmB,UAAiC,GAAG;QACtCL,IAAI,EAAEjB,wBAAwB;QAC9BuB,GAAG,EAAE,KAAK;QACVC,GAAG,EAAEC;MACT,CAAC;MAED,IAAId,IAAI,CAACU,gBAAgB,KAAK,KAAK,EAAE;QACjCC,UAAU,CAACC,GAAG,GAAG,IAAI;QACrBD,UAAU,CAACE,GAAG,GAAG,KAAK;MAC1B,CAAC,MAAM;QACHF,UAAU,CAACE,GAAG,GAAGb,IAAI,CAACe,QAAQ,IAAI,GAAG;MACzC;MACAd,QAAQ,CAACQ,IAAI,CAACE,UAAU,CAAC;IAC7B;;IAEA;IACA,IAAIX,IAAI,CAACgB,mBAAmB,KAAKzB,WAAW,EAAE;MAC1CU,QAAQ,CAACQ,IAAI,CAAC;QAAEH,IAAI,EAAEhB;MAA6B,CAAC,CAAC;IACzD;IAEAM,QAAQ,CAACK,QAAQ,CAAC;EACtB,CAAC,EACD,CAACN,KAAK,CACV,CAAC;EAED,MAAMsB,QAAQ,GAAG1C,OAAO,CAAC,MAAiC;IACtD,IAAI,CAAC2B,KAAK,CAACC,OAAO,CAACR,KAAK,CAAC,EAAE;MACvB,OAAO;QAAEa,WAAW,EAAEhB;MAAU,CAAC;IACrC;IAEA,MAAM0B,aAAa,GAAGvB,KAAK,CAACwB,IAAI,CAC5Bd,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKlB,wBAAwB,IAAIiB,IAAI,CAACC,IAAI,KAAK,GACpE,CAAC;IACD,IAAIY,aAAa,EAAE;MACf,OAAO;QAAEV,WAAW,EAAEjB;MAAY,CAAC;IACvC;IAEA,MAAM6B,WAAW,GAAGzB,KAAK,CAACS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACC,IAAI,CAACC,UAAU,CAACpB,YAAY,CAAC,CAAC;IAC5E,IAAI,CAACiC,WAAW,CAACC,MAAM,EAAE;MACrB,OAAO;QAAEb,WAAW,EAAEhB;MAAU,CAAC;IACrC;IAEA,MAAMQ,IAA+B,GAAG;MACpCQ,WAAW,EAAEf,aAAa;MAC1BiB,gBAAgB,EAAElB,SAAS;MAC3BwB,mBAAmB,EAAExB,SAAS;MAC9BuB,QAAQ,EAAE;IACd,CAAC;IAED,MAAMO,eAAe,GAAGF,WAAW,CAACD,IAAI,CAACd,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKjB,wBAAwB,CAAC;IACxF,IAAIiC,eAAe,EAAE;MACjBtB,IAAI,CAACU,gBAAgB,GAAGY,eAAe,CAACV,GAAG,GAAG,KAAK,GAAGrB,WAAW;MACjE,IAAIS,IAAI,CAACU,gBAAgB,KAAKnB,WAAW,EAAE;QACvCS,IAAI,CAACe,QAAQ,GAAGO,eAAe,CAACT,GAAG;MACvC,CAAC,MAAM;QACHb,IAAI,CAACe,QAAQ,GAAG,KAAK;MACzB;IACJ;IAEA,MAAMQ,iBAAiB,GAAGH,WAAW,CAACD,IAAI,CACtCd,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKhB,4BAC1B,CAAC;IACD,IAAIiC,iBAAiB,EAAE;MACnBvB,IAAI,CAACgB,mBAAmB,GAAGzB,WAAW;IAC1C;IAEA,OAAOS,IAAI;EACf,CAAC,EAAE,EAAE,CAAC;EAEN,oBACI5B,KAAA,CAAAoD,aAAA,CAACzC,IAAI;IAACiB,IAAI,EAAEiB,QAAS;IAACrB,QAAQ,EAAEG;EAAa,GACxC,CAAC;IAAEC,IAAI;IAAEyB,IAAI;IAAEC;EAAS,CAAC,kBACtBtD,KAAA,CAAAoD,aAAA,CAACnD,QAAQ,qBACLD,KAAA,CAAAoD,aAAA,CAAChD,IAAI;IAACmD,SAAS,EAAE9C;EAAqB,gBAClCT,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAG,GACjB7B,IAAI,CAACQ,WAAW,KAAK,QAAQ,IAAIV,aAAa,iBAC3C1B,KAAA,CAAAoD,aAAA,CAAC7C,kBAAkB,MAAE,CAEhB,CACX,CAAC,eACPP,KAAA,CAAAoD,aAAA,CAAChD,IAAI;IAACmD,SAAS,EAAE9C;EAAqB,gBAClCT,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAE,gBACjBzD,KAAA,CAAAoD,aAAA,CAAC5C,cAAc;IAACkD,KAAK,EAAE7C,CAAC;EAAe,CAAE,CAChC,CAAC,eACdb,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAE,gBACjBzD,KAAA,CAAAoD,aAAA,CAACC,IAAI;IAACnB,IAAI,EAAE;EAAc,gBACtBlC,KAAA,CAAAoD,aAAA,CAAC/C,MAAM;IACHsD,OAAO,EAAE,CACL;MACIpC,KAAK,EAAEH,SAAS;MAChBwC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAEJ,WAAW;MAClByC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAEF,aAAa;MACpBuC,KAAK,EAAE/C,CAAC;IACZ,CAAC;EACH,CACL,CACC,CACG,CACX,CAAC,EACNe,IAAI,CAACQ,WAAW,KAAK,QAAQ,iBAC1BpC,KAAA,CAAAoD,aAAA;IAAKG,SAAS,EAAE;EAAQ,gBACpBvD,KAAA,CAAAoD,aAAA,CAAC1C,gBAAgB;IAACgD,KAAK,EAAE7C,CAAC;EAAQ,gBAC9Bb,KAAA,CAAAoD,aAAA,CAAChD,IAAI,qBACDJ,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBzD,KAAA,CAAAoD,aAAA,CAACC,IAAI;IACDnB,IAAI,EAAE,kBAAmB;IACzB2B,YAAY,EAAEA,CAACtC,KAAK,EAAEuC,EAAE,KAAK;MACzB,IAAIvC,KAAK,KAAK,KAAK,EAAE;QACjB+B,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;MAC/B;MACAQ,EAAE,CAACvC,KAAK,CAAC;IACb;EAAE,gBAEFvB,KAAA,CAAAoD,aAAA,CAAC/C,MAAM;IACHuD,KAAK,EAAE/C,CAAC,cAAe;IACvBkD,QAAQ,EAAErC,aAAc;IACxBiC,OAAO,EAAE,CACL;MACIpC,KAAK,EAAEH,SAAS;MAChBwC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAEJ,WAAW;MAClByC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAE,KAAK;MACZqC,KAAK,EAAE/C,CAAC;IACZ,CAAC;EACH,CACL,CACC,CACG,CAAC,eACdb,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBzD,KAAA,CAAAoD,aAAA,CAACC,IAAI;IAACnB,IAAI,EAAE;EAAW,gBACnBlC,KAAA,CAAAoD,aAAA,CAAC/C,MAAM;IACHuD,KAAK,EAAE/C,CAAC,iBAAkB;IAC1BkD,QAAQ,EACJrC,aAAa,IACbE,IAAI,CAACU,gBAAgB,KAAK,MAC7B;IACDqB,OAAO,EAAE,CACL;MACIpC,KAAK,EAAE,GAAG;MACVqC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAE,IAAI;MACXqC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAE,KAAK;MACZqC,KAAK,EAAE/C,CAAC;IACZ,CAAC;EACH,CACL,CACC,CACG,CACX,CACQ,CAAC,eACnBb,KAAA,CAAAoD,aAAA,CAAC1C,gBAAgB;IAACgD,KAAK,EAAE7C,CAAC;EAAW,gBACjCb,KAAA,CAAAoD,aAAA,CAAChD,IAAI,qBACDJ,KAAA,CAAAoD,aAAA,CAAChD,IAAI,CAACoD,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBzD,KAAA,CAAAoD,aAAA,CAACC,IAAI;IAACnB,IAAI,EAAE;EAAsB,gBAC9BlC,KAAA,CAAAoD,aAAA,CAAC/C,MAAM;IACH0D,QAAQ,EAAErC,aAAc;IACxBkC,KAAK,EAAE/C,CAAC,cAAe;IACvB8C,OAAO,EAAE,CACL;MACIpC,KAAK,EAAEH,SAAS;MAChBwC,KAAK,EAAE/C,CAAC;IACZ,CAAC,EACD;MACIU,KAAK,EAAEJ,WAAW;MAClByC,KAAK,EAAE/C,CAAC;IACZ,CAAC;EACH,CACL,CACC,CACG,CACX,CACQ,CACjB,CAEH,CAEZ,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -1,3 +0,0 @@
1
- import type { AdminAppPermissionRendererPlugin } from "@webiny/app-admin/types.js";
2
- declare const _default: AdminAppPermissionRendererPlugin;
3
- export default _default;
@@ -1,23 +0,0 @@
1
- import React from "react";
2
- import { Accordion } from "@webiny/admin-ui";
3
- import { ReactComponent as PermissionsIcon } from "@webiny/icons/folder_open.svg";
4
- import { FileManagerPermissions } from "./FileManagerPermissions.js";
5
- import { i18n } from "@webiny/app/i18n/index.js";
6
- const t = i18n.ns("app-file-manager/admin/plugins/permissionRenderer");
7
- export default {
8
- type: "admin-app-permissions-renderer",
9
- name: "admin-app-permissions-renderer-file-manager",
10
- render(props) {
11
- return /*#__PURE__*/React.createElement(Accordion.Item, {
12
- icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
13
- icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
14
- label: "File Manager Permissions"
15
- }),
16
- title: t`File Manager`,
17
- description: t`Manage File manager app access permissions.`,
18
- "data-testid": "permission.fm"
19
- }, /*#__PURE__*/React.createElement(FileManagerPermissions, props));
20
- }
21
- };
22
-
23
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Accordion","ReactComponent","PermissionsIcon","FileManagerPermissions","i18n","t","ns","type","name","render","props","createElement","Item","icon","Icon","label","title","description"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport type { AdminAppPermissionRendererPlugin } from \"@webiny/app-admin/types.js\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/folder_open.svg\";\nimport { FileManagerPermissions } from \"./FileManagerPermissions.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\n\nconst t = i18n.ns(\"app-file-manager/admin/plugins/permissionRenderer\");\n\nexport default {\n type: \"admin-app-permissions-renderer\",\n name: \"admin-app-permissions-renderer-file-manager\",\n render(props) {\n return (\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n icon={<PermissionsIcon />}\n label={\"File Manager Permissions\"}\n />\n }\n title={t`File Manager`}\n description={t`Manage File manager app access permissions.`}\n data-testid={\"permission.fm\"}\n >\n <FileManagerPermissions {...props} />\n </Accordion.Item>\n );\n }\n} as AdminAppPermissionRendererPlugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,cAAc,IAAIC,eAAe,QAAQ,+BAA+B;AACjF,SAASC,sBAAsB;AAC/B,SAASC,IAAI,QAAQ,2BAA2B;AAEhD,MAAMC,CAAC,GAAGD,IAAI,CAACE,EAAE,CAAC,mDAAmD,CAAC;AAEtE,eAAe;EACXC,IAAI,EAAE,gCAAgC;EACtCC,IAAI,EAAE,6CAA6C;EACnDC,MAAMA,CAACC,KAAK,EAAE;IACV,oBACIX,KAAA,CAAAY,aAAA,CAACX,SAAS,CAACY,IAAI;MACXC,IAAI,eACAd,KAAA,CAAAY,aAAA,CAACX,SAAS,CAACY,IAAI,CAACE,IAAI;QAChBD,IAAI,eAAEd,KAAA,CAAAY,aAAA,CAACT,eAAe,MAAE,CAAE;QAC1Ba,KAAK,EAAE;MAA2B,CACrC,CACJ;MACDC,KAAK,EAAEX,CAAC,cAAe;MACvBY,WAAW,EAAEZ,CAAC,6CAA8C;MAC5D,eAAa;IAAgB,gBAE7BN,KAAA,CAAAY,aAAA,CAACR,sBAAsB,EAAKO,KAAQ,CACxB,CAAC;EAEzB;AACJ,CAAC","ignoreList":[]}