@webiny/tenant-manager 0.0.0-unstable.df7a8bb475 → 6.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,8 +10,8 @@ import { DisableTenantFeature } from "./DisableTenant/index.js";
10
10
  import { EnableTenantFeature } from "./EnableTenant/index.js";
11
11
  import { TenantSelector } from "./TenantSelector.js";
12
12
  import { IsRootTenant } from "./IsRootTenant.js";
13
- import { LegacyPermissionRenderer } from "./Permissions/LegacyPermissionRenderer.js";
14
13
  import { TENANT_MODEL_ID } from "../shared/constants.js";
14
+ import { SecurityPermission } from "./SecurityPermission.js";
15
15
  const {
16
16
  Menu
17
17
  } = AdminConfig;
@@ -28,11 +28,11 @@ export const Extension = () => {
28
28
  });
29
29
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(RegisterFeature, {
30
30
  feature: CurrentTenantFeature
31
- }), /*#__PURE__*/React.createElement(RegisterFeature, {
31
+ }), /*#__PURE__*/React.createElement(CurrentTenantProvider, null), /*#__PURE__*/React.createElement(TenantSelector, null), /*#__PURE__*/React.createElement(TenantEntryList, null), /*#__PURE__*/React.createElement(SecurityPermission, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(IsRootTenant, null, /*#__PURE__*/React.createElement(RegisterFeature, {
32
32
  feature: DisableTenantFeature
33
33
  }), /*#__PURE__*/React.createElement(RegisterFeature, {
34
34
  feature: EnableTenantFeature
35
- }), /*#__PURE__*/React.createElement(CurrentTenantProvider, null), /*#__PURE__*/React.createElement(TenantSelector, null), /*#__PURE__*/React.createElement(TenantEntryList, null), /*#__PURE__*/React.createElement(LegacyPermissionRenderer, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(IsRootTenant, null, /*#__PURE__*/React.createElement(HasPermission, {
35
+ }), /*#__PURE__*/React.createElement(HasPermission, {
36
36
  name: "tm.tenant"
37
37
  }, /*#__PURE__*/React.createElement(Menu, {
38
38
  name: "tenantManager",
@@ -1 +1 @@
1
- {"version":3,"names":["React","AdminConfig","HasPermission","RegisterFeature","useRouter","Routes","ReactComponent","TenantIcon","TenantEntryList","CurrentTenantProvider","CurrentTenantFeature","DisableTenantFeature","EnableTenantFeature","TenantSelector","IsRootTenant","LegacyPermissionRenderer","TENANT_MODEL_ID","Menu","Extension","getLink","link","ContentEntries","List","modelId","icon","createElement","Link","Icon","element","label","Fragment","feature","name","text","to"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { LegacyPermissionRenderer } from \"./Permissions/LegacyPermissionRenderer.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <LegacyPermissionRenderer />\n <AdminConfig>\n <IsRootTenant>\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAC/E,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,MAAM,QAAQ,0BAA0B;AACjD,SAASC,cAAc,IAAIC,UAAU,QAAQ,4BAA4B;AACzE,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,wBAAwB;AACjC,SAASC,eAAe;AAExB,MAAM;EAAEC;AAAK,CAAC,GAAGhB,WAAW;AAE5B,OAAO,MAAMiB,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAGf,SAAS,CAAC,CAAC;EAE/B,MAAMgB,IAAI,GAAGD,OAAO,CAACd,MAAM,CAACgB,cAAc,CAACC,IAAI,EAAE;IAAEC,OAAO,EAAEP;EAAgB,CAAC,CAAC;EAE9E,MAAMQ,IAAI,gBAAGxB,KAAA,CAAAyB,aAAA,CAACR,IAAI,CAACS,IAAI,CAACC,IAAI;IAACC,OAAO,eAAE5B,KAAA,CAAAyB,aAAA,CAAClB,UAAU,MAAE,CAAE;IAACsB,KAAK,EAAE;EAAS,CAAE,CAAC;EAEzE,oBACI7B,KAAA,CAAAyB,aAAA,CAAAzB,KAAA,CAAA8B,QAAA,qBACI9B,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAErB;EAAqB,CAAE,CAAC,eAClDV,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAEpB;EAAqB,CAAE,CAAC,eAClDX,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAEnB;EAAoB,CAAE,CAAC,eACjDZ,KAAA,CAAAyB,aAAA,CAAChB,qBAAqB,MAAE,CAAC,eACzBT,KAAA,CAAAyB,aAAA,CAACZ,cAAc,MAAE,CAAC,eAClBb,KAAA,CAAAyB,aAAA,CAACjB,eAAe,MAAE,CAAC,eACnBR,KAAA,CAAAyB,aAAA,CAACV,wBAAwB,MAAE,CAAC,eAC5Bf,KAAA,CAAAyB,aAAA,CAACxB,WAAW,qBACRD,KAAA,CAAAyB,aAAA,CAACX,YAAY,qBACTd,KAAA,CAAAyB,aAAA,CAACvB,aAAa;IAAC8B,IAAI,EAAE;EAAY,gBAC7BhC,KAAA,CAAAyB,aAAA,CAACR,IAAI;IACDe,IAAI,EAAC,eAAe;IACpBJ,OAAO,eAAE5B,KAAA,CAAAyB,aAAA,CAACR,IAAI,CAACS,IAAI;MAACO,IAAI,EAAC,gBAAgB;MAACT,IAAI,EAAEA,IAAK;MAACU,EAAE,EAAEd;IAAK,CAAE;EAAE,CACtE,CACU,CACL,CACL,CACf,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","AdminConfig","HasPermission","RegisterFeature","useRouter","Routes","ReactComponent","TenantIcon","TenantEntryList","CurrentTenantProvider","CurrentTenantFeature","DisableTenantFeature","EnableTenantFeature","TenantSelector","IsRootTenant","TENANT_MODEL_ID","SecurityPermission","Menu","Extension","getLink","link","ContentEntries","List","modelId","icon","createElement","Link","Icon","element","label","Fragment","feature","name","text","to"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <SecurityPermission />\n <AdminConfig>\n <IsRootTenant>\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,aAAa,EAAEC,eAAe,QAAQ,mBAAmB;AAC/E,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,MAAM,QAAQ,0BAA0B;AACjD,SAASC,cAAc,IAAIC,UAAU,QAAQ,4BAA4B;AAEzE,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAE3B,MAAM;EAAEC;AAAK,CAAC,GAAGhB,WAAW;AAE5B,OAAO,MAAMiB,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAGf,SAAS,CAAC,CAAC;EAE/B,MAAMgB,IAAI,GAAGD,OAAO,CAACd,MAAM,CAACgB,cAAc,CAACC,IAAI,EAAE;IAAEC,OAAO,EAAER;EAAgB,CAAC,CAAC;EAE9E,MAAMS,IAAI,gBAAGxB,KAAA,CAAAyB,aAAA,CAACR,IAAI,CAACS,IAAI,CAACC,IAAI;IAACC,OAAO,eAAE5B,KAAA,CAAAyB,aAAA,CAAClB,UAAU,MAAE,CAAE;IAACsB,KAAK,EAAE;EAAS,CAAE,CAAC;EAEzE,oBACI7B,KAAA,CAAAyB,aAAA,CAAAzB,KAAA,CAAA8B,QAAA,qBACI9B,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAErB;EAAqB,CAAE,CAAC,eAClDV,KAAA,CAAAyB,aAAA,CAAChB,qBAAqB,MAAE,CAAC,eACzBT,KAAA,CAAAyB,aAAA,CAACZ,cAAc,MAAE,CAAC,eAClBb,KAAA,CAAAyB,aAAA,CAACjB,eAAe,MAAE,CAAC,eACnBR,KAAA,CAAAyB,aAAA,CAACT,kBAAkB,MAAE,CAAC,eACtBhB,KAAA,CAAAyB,aAAA,CAACxB,WAAW,qBACRD,KAAA,CAAAyB,aAAA,CAACX,YAAY,qBACTd,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAEpB;EAAqB,CAAE,CAAC,eAClDX,KAAA,CAAAyB,aAAA,CAACtB,eAAe;IAAC4B,OAAO,EAAEnB;EAAoB,CAAE,CAAC,eACjDZ,KAAA,CAAAyB,aAAA,CAACvB,aAAa;IAAC8B,IAAI,EAAE;EAAY,gBAC7BhC,KAAA,CAAAyB,aAAA,CAACR,IAAI;IACDe,IAAI,EAAC,eAAe;IACpBJ,OAAO,eAAE5B,KAAA,CAAAyB,aAAA,CAACR,IAAI,CAACS,IAAI;MAACO,IAAI,EAAC,gBAAgB;MAACT,IAAI,EAAEA,IAAK;MAACU,EAAE,EAAEd;IAAK,CAAE;EAAE,CACtE,CACU,CACL,CACL,CACf,CAAC;AAEX,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const SecurityPermission: () => React.JSX.Element;
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import { AdminConfig } from "@webiny/app-admin";
3
+ import { ReactComponent as PermissionsIcon } from "@webiny/icons/business.svg";
4
+ const {
5
+ Security
6
+ } = AdminConfig;
7
+ export const SecurityPermission = () => {
8
+ return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Security.Permissions, {
9
+ name: "tenant-manager",
10
+ title: "Tenant Manager",
11
+ description: "Manage Tenant Manager permissions.",
12
+ icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
13
+ schema: {
14
+ prefix: "tm",
15
+ fullAccess: {
16
+ name: "tm.*"
17
+ }
18
+ }
19
+ }));
20
+ };
21
+
22
+ //# sourceMappingURL=SecurityPermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema","prefix","fullAccess"],"sources":["SecurityPermission.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/business.svg\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermission = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"tenant-manager\"\n title=\"Tenant Manager\"\n description=\"Manage Tenant Manager permissions.\"\n icon={<PermissionsIcon />}\n schema={{\n prefix: \"tm\",\n fullAccess: { name: \"tm.*\" }\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,4BAA4B;AAE9E,MAAM;EAAEC;AAAS,CAAC,GAAGH,WAAW;AAEhC,OAAO,MAAMI,kBAAkB,GAAGA,CAAA,KAAM;EACpC,oBACIL,KAAA,CAAAM,aAAA,CAACL,WAAW,qBACRD,KAAA,CAAAM,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,gBAAgB;IACrBC,KAAK,EAAC,gBAAgB;IACtBC,WAAW,EAAC,oCAAoC;IAChDC,IAAI,eAAEX,KAAA,CAAAM,aAAA,CAACH,eAAe,MAAE,CAAE;IAC1BS,MAAM,EAAE;MACJC,MAAM,EAAE,IAAI;MACZC,UAAU,EAAE;QAAEN,IAAI,EAAE;MAAO;IAC/B;EAAE,CACL,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -12,8 +12,8 @@ class TenantModelFactory {
12
12
  group: "hidden"
13
13
  }).description("Manage system tenants.").titleFieldId("name").icon("fas/building").singularApiName("Tenant").pluralApiName("Tenants").tags(["$publishing:false"]);
14
14
  model.fields(fields => ({
15
- name: fields.text().label("Name").description("Enter a tenant name").required().renderer("text-input"),
16
- description: fields.longText().label("Description").description("Enter a short tenant description").renderer("long-text-text-area").required(),
15
+ name: fields.text().label("Name").description("Enter a tenant name").required().renderer("textInput"),
16
+ description: fields.longText().label("Description").description("Enter a short tenant description").renderer("textarea").required(),
17
17
  status: fields.text().label("Status").defaultValue("disabled").renderer("hidden").predefinedValues([{
18
18
  value: "enabled",
19
19
  label: "Enabled"
@@ -1 +1 @@
1
- {"version":3,"names":["ModelFactory","TenantModelExtension","TENANT_MODEL_ID","TenantModelFactory","constructor","extensions","execute","builder","model","public","modelId","name","group","description","titleFieldId","icon","singularApiName","pluralApiName","tags","fields","text","label","required","renderer","longText","status","defaultValue","predefinedValues","value","isInstalled","boolean","object","layout","modifier","extend","createImplementation","implementation","dependencies","multiple"],"sources":["TenantModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TenantModelExtension } from \"./TenantModelExtension.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass TenantModelFactory implements ModelFactory.Interface {\n constructor(private extensions: TenantModelExtension.Interface[]) {}\n\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: TENANT_MODEL_ID,\n name: \"Tenant\",\n group: \"hidden\"\n })\n .description(\"Manage system tenants.\")\n .titleFieldId(\"name\")\n .icon(\"fas/building\")\n .singularApiName(\"Tenant\")\n .pluralApiName(\"Tenants\")\n .tags([\"$publishing:false\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\"Enter a tenant name\")\n .required()\n .renderer(\"text-input\"),\n description: fields\n .longText()\n .label(\"Description\")\n .description(\"Enter a short tenant description\")\n .renderer(\"long-text-text-area\")\n .required(),\n status: fields\n .text()\n .label(\"Status\")\n .defaultValue(\"disabled\")\n .renderer(\"hidden\")\n .predefinedValues([\n {\n value: \"enabled\",\n label: \"Enabled\"\n },\n {\n value: \"disabled\",\n label: \"Disabled\"\n }\n ]),\n isInstalled: fields\n .boolean()\n .label(\"Is installed?\")\n .renderer(\"hidden\")\n .defaultValue(false),\n extensions: fields.object().renderer(\"passthrough\")\n }))\n .layout([[\"name\"], [\"description\"], [\"extensions\"]]);\n\n for (const modifier of this.extensions) {\n model.fields(fields => {\n const extensions = fields.extend().object();\n modifier.execute(extensions);\n\n return { extensions };\n });\n }\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: TenantModelFactory,\n dependencies: [[TenantModelExtension, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yDAAyD;AACtF,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAExB,MAAMC,kBAAkB,CAAmC;EACvDC,WAAWA,CAASC,UAA4C,EAAE;IAAA,KAA9CA,UAA4C,GAA5CA,UAA4C;EAAG;EAEnE,MAAMC,OAAOA,CAACC,OAA6B,EAAE;IACzC,MAAMC,KAAK,GAAGD,OAAO,CAChBE,MAAM,CAAC;MACJC,OAAO,EAAER,eAAe;MACxBS,IAAI,EAAE,QAAQ;MACdC,KAAK,EAAE;IACX,CAAC,CAAC,CACDC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,YAAY,CAAC,MAAM,CAAC,CACpBC,IAAI,CAAC,cAAc,CAAC,CACpBC,eAAe,CAAC,QAAQ,CAAC,CACzBC,aAAa,CAAC,SAAS,CAAC,CACxBC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAEhCV,KAAK,CACAW,MAAM,CAACA,MAAM,KAAK;MACfR,IAAI,EAAEQ,MAAM,CACPC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,MAAM,CAAC,CACbR,WAAW,CAAC,qBAAqB,CAAC,CAClCS,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,YAAY,CAAC;MAC3BV,WAAW,EAAEM,MAAM,CACdK,QAAQ,CAAC,CAAC,CACVH,KAAK,CAAC,aAAa,CAAC,CACpBR,WAAW,CAAC,kCAAkC,CAAC,CAC/CU,QAAQ,CAAC,qBAAqB,CAAC,CAC/BD,QAAQ,CAAC,CAAC;MACfG,MAAM,EAAEN,MAAM,CACTC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,QAAQ,CAAC,CACfK,YAAY,CAAC,UAAU,CAAC,CACxBH,QAAQ,CAAC,QAAQ,CAAC,CAClBI,gBAAgB,CAAC,CACd;QACIC,KAAK,EAAE,SAAS;QAChBP,KAAK,EAAE;MACX,CAAC,EACD;QACIO,KAAK,EAAE,UAAU;QACjBP,KAAK,EAAE;MACX,CAAC,CACJ,CAAC;MACNQ,WAAW,EAAEV,MAAM,CACdW,OAAO,CAAC,CAAC,CACTT,KAAK,CAAC,eAAe,CAAC,CACtBE,QAAQ,CAAC,QAAQ,CAAC,CAClBG,YAAY,CAAC,KAAK,CAAC;MACxBrB,UAAU,EAAEc,MAAM,CAACY,MAAM,CAAC,CAAC,CAACR,QAAQ,CAAC,aAAa;IACtD,CAAC,CAAC,CAAC,CACFS,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAExD,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAAC5B,UAAU,EAAE;MACpCG,KAAK,CAACW,MAAM,CAACA,MAAM,IAAI;QACnB,MAAMd,UAAU,GAAGc,MAAM,CAACe,MAAM,CAAC,CAAC,CAACH,MAAM,CAAC,CAAC;QAC3CE,QAAQ,CAAC3B,OAAO,CAACD,UAAU,CAAC;QAE5B,OAAO;UAAEA;QAAW,CAAC;MACzB,CAAC,CAAC;IACN;IAEA,OAAO,CAACG,KAAK,CAAC;EAClB;AACJ;AAEA,eAAeR,YAAY,CAACmC,oBAAoB,CAAC;EAC7CC,cAAc,EAAEjC,kBAAkB;EAClCkC,YAAY,EAAE,CAAC,CAACpC,oBAAoB,EAAE;IAAEqC,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC7D,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["ModelFactory","TenantModelExtension","TENANT_MODEL_ID","TenantModelFactory","constructor","extensions","execute","builder","model","public","modelId","name","group","description","titleFieldId","icon","singularApiName","pluralApiName","tags","fields","text","label","required","renderer","longText","status","defaultValue","predefinedValues","value","isInstalled","boolean","object","layout","modifier","extend","createImplementation","implementation","dependencies","multiple"],"sources":["TenantModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TenantModelExtension } from \"./TenantModelExtension.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass TenantModelFactory implements ModelFactory.Interface {\n constructor(private extensions: TenantModelExtension.Interface[]) {}\n\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: TENANT_MODEL_ID,\n name: \"Tenant\",\n group: \"hidden\"\n })\n .description(\"Manage system tenants.\")\n .titleFieldId(\"name\")\n .icon(\"fas/building\")\n .singularApiName(\"Tenant\")\n .pluralApiName(\"Tenants\")\n .tags([\"$publishing:false\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\"Enter a tenant name\")\n .required()\n .renderer(\"textInput\"),\n description: fields\n .longText()\n .label(\"Description\")\n .description(\"Enter a short tenant description\")\n .renderer(\"textarea\")\n .required(),\n status: fields\n .text()\n .label(\"Status\")\n .defaultValue(\"disabled\")\n .renderer(\"hidden\")\n .predefinedValues([\n {\n value: \"enabled\",\n label: \"Enabled\"\n },\n {\n value: \"disabled\",\n label: \"Disabled\"\n }\n ]),\n isInstalled: fields\n .boolean()\n .label(\"Is installed?\")\n .renderer(\"hidden\")\n .defaultValue(false),\n extensions: fields.object().renderer(\"passthrough\")\n }))\n .layout([[\"name\"], [\"description\"], [\"extensions\"]]);\n\n for (const modifier of this.extensions) {\n model.fields(fields => {\n const extensions = fields.extend().object();\n modifier.execute(extensions);\n\n return { extensions };\n });\n }\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: TenantModelFactory,\n dependencies: [[TenantModelExtension, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,yDAAyD;AACtF,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAExB,MAAMC,kBAAkB,CAAmC;EACvDC,WAAWA,CAASC,UAA4C,EAAE;IAAA,KAA9CA,UAA4C,GAA5CA,UAA4C;EAAG;EAEnE,MAAMC,OAAOA,CAACC,OAA6B,EAAE;IACzC,MAAMC,KAAK,GAAGD,OAAO,CAChBE,MAAM,CAAC;MACJC,OAAO,EAAER,eAAe;MACxBS,IAAI,EAAE,QAAQ;MACdC,KAAK,EAAE;IACX,CAAC,CAAC,CACDC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,YAAY,CAAC,MAAM,CAAC,CACpBC,IAAI,CAAC,cAAc,CAAC,CACpBC,eAAe,CAAC,QAAQ,CAAC,CACzBC,aAAa,CAAC,SAAS,CAAC,CACxBC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAEhCV,KAAK,CACAW,MAAM,CAACA,MAAM,KAAK;MACfR,IAAI,EAAEQ,MAAM,CACPC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,MAAM,CAAC,CACbR,WAAW,CAAC,qBAAqB,CAAC,CAClCS,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,WAAW,CAAC;MAC1BV,WAAW,EAAEM,MAAM,CACdK,QAAQ,CAAC,CAAC,CACVH,KAAK,CAAC,aAAa,CAAC,CACpBR,WAAW,CAAC,kCAAkC,CAAC,CAC/CU,QAAQ,CAAC,UAAU,CAAC,CACpBD,QAAQ,CAAC,CAAC;MACfG,MAAM,EAAEN,MAAM,CACTC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,QAAQ,CAAC,CACfK,YAAY,CAAC,UAAU,CAAC,CACxBH,QAAQ,CAAC,QAAQ,CAAC,CAClBI,gBAAgB,CAAC,CACd;QACIC,KAAK,EAAE,SAAS;QAChBP,KAAK,EAAE;MACX,CAAC,EACD;QACIO,KAAK,EAAE,UAAU;QACjBP,KAAK,EAAE;MACX,CAAC,CACJ,CAAC;MACNQ,WAAW,EAAEV,MAAM,CACdW,OAAO,CAAC,CAAC,CACTT,KAAK,CAAC,eAAe,CAAC,CACtBE,QAAQ,CAAC,QAAQ,CAAC,CAClBG,YAAY,CAAC,KAAK,CAAC;MACxBrB,UAAU,EAAEc,MAAM,CAACY,MAAM,CAAC,CAAC,CAACR,QAAQ,CAAC,aAAa;IACtD,CAAC,CAAC,CAAC,CACFS,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAExD,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAAC5B,UAAU,EAAE;MACpCG,KAAK,CAACW,MAAM,CAACA,MAAM,IAAI;QACnB,MAAMd,UAAU,GAAGc,MAAM,CAACe,MAAM,CAAC,CAAC,CAACH,MAAM,CAAC,CAAC;QAC3CE,QAAQ,CAAC3B,OAAO,CAACD,UAAU,CAAC;QAE5B,OAAO;UAAEA;QAAW,CAAC;MACzB,CAAC,CAAC;IACN;IAEA,OAAO,CAACG,KAAK,CAAC;EAClB;AACJ;AAEA,eAAeR,YAAY,CAACmC,oBAAoB,CAAC;EAC7CC,cAAc,EAAEjC,kBAAkB;EAClCkC,YAAY,EAAE,CAAC,CAACpC,oBAAoB,EAAE;IAAEqC,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC7D,CAAC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/tenant-manager",
3
- "version": "0.0.0-unstable.df7a8bb475",
3
+ "version": "6.0.0-rc.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "index.js",
@@ -13,20 +13,18 @@
13
13
  "license": "Webiny Enterprise",
14
14
  "dependencies": {
15
15
  "@apollo/react-hooks": "3.1.5",
16
- "@webiny/admin-ui": "0.0.0-unstable.df7a8bb475",
17
- "@webiny/api-core": "0.0.0-unstable.df7a8bb475",
18
- "@webiny/api-headless-cms": "0.0.0-unstable.df7a8bb475",
19
- "@webiny/app": "0.0.0-unstable.df7a8bb475",
20
- "@webiny/app-aco": "0.0.0-unstable.df7a8bb475",
21
- "@webiny/app-admin": "0.0.0-unstable.df7a8bb475",
22
- "@webiny/app-headless-cms": "0.0.0-unstable.df7a8bb475",
23
- "@webiny/feature": "0.0.0-unstable.df7a8bb475",
24
- "@webiny/form": "0.0.0-unstable.df7a8bb475",
25
- "@webiny/handler-graphql": "0.0.0-unstable.df7a8bb475",
26
- "@webiny/icons": "0.0.0-unstable.df7a8bb475",
27
- "@webiny/plugins": "0.0.0-unstable.df7a8bb475",
28
- "@webiny/project": "0.0.0-unstable.df7a8bb475",
29
- "@webiny/project-aws": "0.0.0-unstable.df7a8bb475",
16
+ "@webiny/admin-ui": "6.0.0-rc.0",
17
+ "@webiny/api-core": "6.0.0-rc.0",
18
+ "@webiny/api-headless-cms": "6.0.0-rc.0",
19
+ "@webiny/app": "6.0.0-rc.0",
20
+ "@webiny/app-aco": "6.0.0-rc.0",
21
+ "@webiny/app-admin": "6.0.0-rc.0",
22
+ "@webiny/app-headless-cms": "6.0.0-rc.0",
23
+ "@webiny/feature": "6.0.0-rc.0",
24
+ "@webiny/handler-graphql": "6.0.0-rc.0",
25
+ "@webiny/icons": "6.0.0-rc.0",
26
+ "@webiny/project": "6.0.0-rc.0",
27
+ "@webiny/project-aws": "6.0.0-rc.0",
30
28
  "graphql-tag": "2.12.6",
31
29
  "mobx": "6.15.0",
32
30
  "mobx-react-lite": "3.4.3",
@@ -34,7 +32,7 @@
34
32
  "react-dom": "18.2.0"
35
33
  },
36
34
  "devDependencies": {
37
- "@webiny/build-tools": "0.0.0-unstable.df7a8bb475",
35
+ "@webiny/build-tools": "6.0.0-rc.0",
38
36
  "rimraf": "6.1.3",
39
37
  "typescript": "5.9.3"
40
38
  },
@@ -42,5 +40,5 @@
42
40
  "access": "public",
43
41
  "directory": "dist"
44
42
  },
45
- "gitHead": "df7a8bb4755a1da047f0af8c56bdb649cc81bf7d"
43
+ "gitHead": "0f2aa699f4642e550ab62c96fcd050e8d02345c9"
46
44
  }
@@ -1 +0,0 @@
1
- export declare const LegacyPermissionRenderer: () => null;
@@ -1,29 +0,0 @@
1
- import React, { useEffect } from "react";
2
- import { Accordion } from "@webiny/admin-ui";
3
- import { plugins } from "@webiny/plugins";
4
- import { ReactComponent as PermissionsIcon } from "@webiny/icons/business.svg";
5
- import { TenantManagerPermissions } from "./TenantManagerPermissions.js";
6
- import { i18n } from "@webiny/app/i18n/index.js";
7
- const t = i18n.ns("tenant-manager/admin/permissionRenderer");
8
- export const LegacyPermissionRenderer = () => {
9
- useEffect(() => {
10
- plugins.register({
11
- type: "admin-app-permissions-renderer",
12
- name: "admin-app-permissions-renderer-tenant-manager",
13
- render(props) {
14
- return /*#__PURE__*/React.createElement(Accordion.Item, {
15
- icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
16
- icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
17
- label: "Tenant Manager Permissions"
18
- }),
19
- title: t`Tenant Manager`,
20
- description: t`Manage Tenant Manager app access permissions.`,
21
- "data-testid": "permission.tm"
22
- }, /*#__PURE__*/React.createElement(TenantManagerPermissions, props));
23
- }
24
- });
25
- }, []);
26
- return null;
27
- };
28
-
29
- //# sourceMappingURL=LegacyPermissionRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useEffect","Accordion","plugins","ReactComponent","PermissionsIcon","TenantManagerPermissions","i18n","t","ns","LegacyPermissionRenderer","register","type","name","render","props","createElement","Item","icon","Icon","label","title","description"],"sources":["LegacyPermissionRenderer.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport { plugins } from \"@webiny/plugins\";\nimport type { AdminAppPermissionRendererPlugin } from \"@webiny/app-admin/types.js\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/business.svg\";\nimport { TenantManagerPermissions } from \"./TenantManagerPermissions.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\n\nconst t = i18n.ns(\"tenant-manager/admin/permissionRenderer\");\n\nexport const LegacyPermissionRenderer = () => {\n useEffect(() => {\n plugins.register({\n type: \"admin-app-permissions-renderer\",\n name: \"admin-app-permissions-renderer-tenant-manager\",\n render(props) {\n return (\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n icon={<PermissionsIcon />}\n label={\"Tenant Manager Permissions\"}\n />\n }\n title={t`Tenant Manager`}\n description={t`Manage Tenant Manager app access permissions.`}\n data-testid={\"permission.tm\"}\n >\n <TenantManagerPermissions {...props} />\n </Accordion.Item>\n );\n }\n } as AdminAppPermissionRendererPlugin);\n }, []);\n return null;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,OAAO,QAAQ,iBAAiB;AAEzC,SAASC,cAAc,IAAIC,eAAe,QAAQ,4BAA4B;AAC9E,SAASC,wBAAwB;AACjC,SAASC,IAAI,QAAQ,2BAA2B;AAEhD,MAAMC,CAAC,GAAGD,IAAI,CAACE,EAAE,CAAC,yCAAyC,CAAC;AAE5D,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC1CT,SAAS,CAAC,MAAM;IACZE,OAAO,CAACQ,QAAQ,CAAC;MACbC,IAAI,EAAE,gCAAgC;MACtCC,IAAI,EAAE,+CAA+C;MACrDC,MAAMA,CAACC,KAAK,EAAE;QACV,oBACIf,KAAA,CAAAgB,aAAA,CAACd,SAAS,CAACe,IAAI;UACXC,IAAI,eACAlB,KAAA,CAAAgB,aAAA,CAACd,SAAS,CAACe,IAAI,CAACE,IAAI;YAChBD,IAAI,eAAElB,KAAA,CAAAgB,aAAA,CAACX,eAAe,MAAE,CAAE;YAC1Be,KAAK,EAAE;UAA6B,CACvC,CACJ;UACDC,KAAK,EAAEb,CAAC,gBAAiB;UACzBc,WAAW,EAAEd,CAAC,+CAAgD;UAC9D,eAAa;QAAgB,gBAE7BR,KAAA,CAAAgB,aAAA,CAACV,wBAAwB,EAAKS,KAAQ,CAC1B,CAAC;MAEzB;IACJ,CAAqC,CAAC;EAC1C,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- interface TenantManagerPermissionItem {
3
- accessLevel?: string;
4
- name?: string;
5
- }
6
- interface TenantManagerPermissionsProps {
7
- value: TenantManagerPermissionItem;
8
- onChange: (value: TenantManagerPermissionItem[]) => void;
9
- }
10
- export declare const TenantManagerPermissions: ({ value, onChange }: TenantManagerPermissionsProps) => React.JSX.Element;
11
- export {};
@@ -1,75 +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 { PermissionInfo, gridWithPaddingClass } from "@webiny/app-admin";
5
- import { Form } from "@webiny/form";
6
- const t = i18n.ns("app-file-manager/admin/plugins/permissionRenderer");
7
- const TENANT_MANAGER = "tm";
8
- const TENANT_MANAGER_FULL_ACCESS = `${TENANT_MANAGER}.*`;
9
- const FULL_ACCESS = "full";
10
- const NO_ACCESS = "no";
11
- const NO_ACCESS_DATA = {
12
- accessLevel: NO_ACCESS
13
- };
14
- export const TenantManagerPermissions = ({
15
- value,
16
- onChange
17
- }) => {
18
- const onFormChange = useCallback(data => {
19
- let newValue = [];
20
- if (Array.isArray(value)) {
21
- // Let's just filter out the `file-manager*` permission objects, it's easier to build new ones from scratch.
22
- newValue = value.filter(item => !item.name.startsWith(TENANT_MANAGER));
23
- }
24
- if (data.accessLevel === NO_ACCESS) {
25
- onChange(newValue);
26
- return;
27
- }
28
- if (data.accessLevel === FULL_ACCESS) {
29
- newValue.push({
30
- name: TENANT_MANAGER_FULL_ACCESS
31
- });
32
- onChange(newValue);
33
- return;
34
- }
35
- onChange(newValue);
36
- }, [value]);
37
- const formData = useMemo(() => {
38
- if (!Array.isArray(value)) {
39
- return NO_ACCESS_DATA;
40
- }
41
- const hasFullAccess = value.find(item => item.name === TENANT_MANAGER_FULL_ACCESS || item.name === "*");
42
- if (hasFullAccess) {
43
- return {
44
- accessLevel: FULL_ACCESS
45
- };
46
- }
47
- return NO_ACCESS_DATA;
48
- }, []);
49
- return /*#__PURE__*/React.createElement(Form, {
50
- data: formData,
51
- onChange: onFormChange
52
- }, ({
53
- Bind
54
- }) => /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
55
- className: gridWithPaddingClass
56
- }, /*#__PURE__*/React.createElement(Grid.Column, {
57
- span: 6
58
- }, /*#__PURE__*/React.createElement(PermissionInfo, {
59
- title: t`Access Level`
60
- })), /*#__PURE__*/React.createElement(Grid.Column, {
61
- span: 6
62
- }, /*#__PURE__*/React.createElement(Bind, {
63
- name: "accessLevel"
64
- }, /*#__PURE__*/React.createElement(Select, {
65
- options: [{
66
- value: NO_ACCESS,
67
- label: t`No access`
68
- }, {
69
- value: FULL_ACCESS,
70
- label: t`Full access`
71
- }]
72
- }))))));
73
- };
74
-
75
- //# sourceMappingURL=TenantManagerPermissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Fragment","useCallback","useMemo","Grid","Select","i18n","PermissionInfo","gridWithPaddingClass","Form","t","ns","TENANT_MANAGER","TENANT_MANAGER_FULL_ACCESS","FULL_ACCESS","NO_ACCESS","NO_ACCESS_DATA","accessLevel","TenantManagerPermissions","value","onChange","onFormChange","data","newValue","Array","isArray","filter","item","name","startsWith","push","formData","hasFullAccess","find","createElement","Bind","className","Column","span","title","options","label"],"sources":["TenantManagerPermissions.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 { PermissionInfo, gridWithPaddingClass } from \"@webiny/app-admin\";\nimport { Form } from \"@webiny/form\";\n\nconst t = i18n.ns(\"app-file-manager/admin/plugins/permissionRenderer\");\n\nconst TENANT_MANAGER = \"tm\";\nconst TENANT_MANAGER_FULL_ACCESS = `${TENANT_MANAGER}.*`;\n\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\n\nconst NO_ACCESS_DATA = { accessLevel: NO_ACCESS };\n\ninterface TenantManagerPermissionItem {\n accessLevel?: string;\n name?: string;\n}\ninterface TenantManagerPermissionsProps {\n value: TenantManagerPermissionItem;\n onChange: (value: TenantManagerPermissionItem[]) => void;\n}\n\nexport const TenantManagerPermissions = ({ value, onChange }: TenantManagerPermissionsProps) => {\n const onFormChange = useCallback(\n (data: TenantManagerPermissionItem) => {\n let newValue: TenantManagerPermissionItem[] = [];\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(TENANT_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: TENANT_MANAGER_FULL_ACCESS });\n onChange(newValue);\n return;\n }\n\n onChange(newValue);\n },\n [value]\n );\n\n const formData = useMemo((): TenantManagerPermissionItem => {\n if (!Array.isArray(value)) {\n return NO_ACCESS_DATA;\n }\n\n const hasFullAccess = value.find(\n item => item.name === TENANT_MANAGER_FULL_ACCESS || item.name === \"*\"\n );\n\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n return NO_ACCESS_DATA;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ Bind }) => (\n <Fragment>\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 />\n </Bind>\n </Grid.Column>\n </Grid>\n </Fragment>\n )}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}