@webiny/app-admin 6.5.0-beta.1 → 6.5.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/base/Admin.js +2 -0
  2. package/base/Admin.js.map +1 -1
  3. package/base/Base/FieldRenderers/AutoCompleteRenderer.js +1 -0
  4. package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -1
  5. package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
  6. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +2 -2
  7. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +1 -1
  8. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
  9. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +8 -4
  10. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +2 -2
  11. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +1 -1
  12. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  13. package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
  14. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
  15. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
  16. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
  17. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
  18. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
  19. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
  20. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
  21. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
  22. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
  23. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
  24. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
  25. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
  26. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +46 -0
  27. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
  28. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
  29. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
  30. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
  31. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
  32. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
  33. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
  34. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
  35. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
  37. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
  38. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
  39. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
  40. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
  41. package/base/Base/FieldRenderers/SelectRenderer.js +1 -0
  42. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  43. package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
  44. package/components/Filters/Filters.js +7 -1
  45. package/components/Filters/Filters.js.map +1 -1
  46. package/components/IconPicker/IconPickerComponent.d.ts +2 -2
  47. package/components/IconPicker/IconPickerComponent.js +1 -1
  48. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  49. package/components/ListView/ListViewBulkActions.d.ts +2 -2
  50. package/components/ListView/ListViewContent.d.ts +2 -2
  51. package/components/ListView/ListViewFilters.d.ts +2 -2
  52. package/components/ListView/index.d.ts +6 -6
  53. package/components/RolesMultiAutocomplete/index.js +1 -1
  54. package/components/RolesMultiAutocomplete/index.js.map +1 -1
  55. package/components/Table/components/Table/TableInner.d.ts +2 -2
  56. package/components/TeamsMultiAutocomplete/index.js +1 -1
  57. package/components/TeamsMultiAutocomplete/index.js.map +1 -1
  58. package/domain/Identity.js +1 -1
  59. package/domain/Identity.js.map +1 -1
  60. package/features/debugger/Debugger.d.ts +8 -0
  61. package/features/debugger/Debugger.js +25 -0
  62. package/features/debugger/Debugger.js.map +1 -0
  63. package/features/debugger/DebuggerIndicator.d.ts +16 -0
  64. package/features/debugger/DebuggerIndicator.js +31 -0
  65. package/features/debugger/DebuggerIndicator.js.map +1 -0
  66. package/features/debugger/DebuggerStore.d.ts +55 -0
  67. package/features/debugger/DebuggerStore.js +65 -0
  68. package/features/debugger/DebuggerStore.js.map +1 -0
  69. package/features/debugger/DebuggerView.d.ts +4 -0
  70. package/features/debugger/DebuggerView.js +49 -0
  71. package/features/debugger/DebuggerView.js.map +1 -0
  72. package/features/debugger/GraphQLExtensionsDebugHandler.d.ts +15 -0
  73. package/features/debugger/GraphQLExtensionsDebugHandler.js +15 -0
  74. package/features/debugger/GraphQLExtensionsDebugHandler.js.map +1 -0
  75. package/features/debugger/debuggerLink.d.ts +12 -0
  76. package/features/debugger/debuggerLink.js +10 -0
  77. package/features/debugger/debuggerLink.js.map +1 -0
  78. package/features/debugger/feature.d.ts +1 -0
  79. package/features/debugger/feature.js +18 -0
  80. package/features/debugger/feature.js.map +1 -0
  81. package/features/debugger/index.d.ts +7 -0
  82. package/features/debugger/index.js +7 -0
  83. package/features/debugger/permissions.d.ts +68 -0
  84. package/features/debugger/permissions.js +27 -0
  85. package/features/debugger/permissions.js.map +1 -0
  86. package/features/debugger/report.d.ts +7 -0
  87. package/features/debugger/report.js +22 -0
  88. package/features/debugger/report.js.map +1 -0
  89. package/features/debugger/routes.d.ts +4 -0
  90. package/features/debugger/routes.js +10 -0
  91. package/features/debugger/routes.js.map +1 -0
  92. package/features/formModel/Field.d.ts +7 -1
  93. package/features/formModel/Field.js +13 -5
  94. package/features/formModel/Field.js.map +1 -1
  95. package/features/formModel/FieldBuilder.test.js +25 -0
  96. package/features/formModel/FieldBuilder.test.js.map +1 -1
  97. package/features/formModel/FormErrors.d.ts +2 -2
  98. package/features/formModel/FormErrors.js +1 -1
  99. package/features/formModel/FormErrors.js.map +1 -1
  100. package/features/formModel/FormModel.d.ts +2 -0
  101. package/features/formModel/FormModel.js +25 -0
  102. package/features/formModel/FormModel.js.map +1 -1
  103. package/features/formModel/FormModel.test.js +587 -2
  104. package/features/formModel/FormModel.test.js.map +1 -1
  105. package/features/formModel/FormView.d.ts +8 -4
  106. package/features/formModel/ObjectField.d.ts +11 -1
  107. package/features/formModel/ObjectField.js +45 -20
  108. package/features/formModel/ObjectField.js.map +1 -1
  109. package/features/formModel/PresenterErrors.d.ts +2 -2
  110. package/features/formModel/abstractions.d.ts +30 -1
  111. package/features/formModel/abstractions.js.map +1 -1
  112. package/features/formModel/createFieldRenderer.js +3 -4
  113. package/features/formModel/createFieldRenderer.js.map +1 -1
  114. package/features/formModel/demo/FormModelDemo.d.ts +2 -2
  115. package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +2 -0
  116. package/features/formModel/fieldTypes/DateTimeFieldType.js +19 -15
  117. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  118. package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
  119. package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
  120. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  121. package/features/notifications/NotificationsRenderer.d.ts +2 -2
  122. package/features/wcp/WcpGateway.js +7 -0
  123. package/features/wcp/WcpGateway.js.map +1 -1
  124. package/hooks/useHotkeys.js +3 -1
  125. package/hooks/useHotkeys.js.map +1 -1
  126. package/hooks/useSnackbar.js.map +1 -1
  127. package/index.d.ts +1 -0
  128. package/index.js +3 -2
  129. package/package.json +34 -34
  130. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
  131. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
  132. package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
  133. package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
  134. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
  135. package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
  136. package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
  137. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
  138. package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
  139. package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
  140. package/presentation/listPresenter/QueryMatcher.js +3 -3
  141. package/presentation/listPresenter/QueryMatcher.js.map +1 -1
  142. package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
  143. package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
  144. package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
  145. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
  146. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, icon, childBuilders, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["createTemplateBuilder","label","icon","fieldsFactory","visibleFn","builder","text","i","factory","predicate","id","registry","childBuilders","Error","fieldName","Object","ObjectFieldBuilder","FieldBuilder","Set","fn","schema","configure","tb","name","ObjectFieldTypeFactory","ObjectFieldType","FieldType"],"mappings":"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"}
1
+ {"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type ILayoutBuilder,\n type ILayoutNodeBuilder,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon,\n type LayoutNode\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\nimport { LayoutBuilderFactory } from \"../LayoutBuilderFactory.js\";\n\nfunction resolveInnerLayout(\n factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n): LayoutNode[] {\n return LayoutBuilderFactory.resolveObjectInner(factory) as LayoutNode[];\n}\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let description: string | undefined;\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let layout: LayoutNode[] | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n description(text: string) {\n description = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n layout(factory) {\n layout = resolveInnerLayout(factory);\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, description, icon, childBuilders, layout, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _layout?: LayoutNode[];\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this {\n this._layout = resolveInnerLayout(factory);\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n if (this._templates && this._layout) {\n throw new Error(\n `Object field \"${name}\" has both .layout() and .template() defined. ` +\n `Templated objects declare their layouts per template.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates,\n layout: this._layout\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["resolveInnerLayout","factory","LayoutBuilderFactory","createTemplateBuilder","label","description","icon","fieldsFactory","layout","visibleFn","builder","text","i","predicate","id","registry","childBuilders","Error","fieldName","Object","ObjectFieldBuilder","FieldBuilder","Set","fn","schema","configure","tb","name","ObjectFieldTypeFactory","ObjectFieldType","FieldType"],"mappings":"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"}
@@ -2,6 +2,6 @@
2
2
  * Standalone consumer of the Notifications queue. Drains queued notifications oldest-first
3
3
  * and shows each one as a toast, then removes it from the queue. Mounted once, app-wide.
4
4
  */
5
- export declare const NotificationsRenderer: (() => null) & {
6
- displayName: string;
5
+ export declare const NotificationsRenderer: (() => null) & import("react").NamedExoticComponent<unknown> & {
6
+ readonly type: () => null;
7
7
  };
@@ -39,6 +39,13 @@ const GET_WCP_PROJECT = `
39
39
  enabled
40
40
  options
41
41
  }
42
+ abTesting {
43
+ enabled
44
+ }
45
+ collaboration {
46
+ enabled
47
+ options
48
+ }
42
49
  }
43
50
  }
44
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/wcp/WcpGateway.js","sources":["../../../src/features/wcp/WcpGateway.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { WcpGateway as WcpGatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { GetWcpProjectResponse, WcpProjectData } from \"./types.js\";\n\nconst GET_WCP_PROJECT = /* GraphQL */ `\n query GetWcpProject {\n wcp {\n getProject {\n data {\n orgId\n projectId\n package {\n features {\n seats {\n enabled\n options\n }\n multiTenancy {\n enabled\n options\n }\n advancedPublishingWorkflow {\n enabled\n }\n advancedAccessControlLayer {\n enabled\n options\n }\n auditLogs {\n enabled\n }\n recordLocking {\n enabled\n }\n fileManager {\n enabled\n options\n }\n aiPowerups {\n enabled\n options\n }\n }\n }\n }\n error {\n message\n code\n data\n }\n }\n }\n }\n`;\n\nclass WcpGraphQLGateway implements WcpGatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async fetchProject(): Promise<WcpProjectData | null> {\n const response = await this.client.execute<GetWcpProjectResponse>({\n query: GET_WCP_PROJECT,\n headers: {\n \"x-tenant\": \"root\"\n }\n });\n\n if (response.wcp.getProject.error) {\n throw new Error(response.wcp.getProject.error.message);\n }\n\n return response.wcp.getProject.data;\n }\n}\n\nexport const WcpGateway = createImplementation({\n abstraction: WcpGatewayAbstraction,\n implementation: WcpGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["GET_WCP_PROJECT","WcpGraphQLGateway","client","response","Error","WcpGateway","createImplementation","WcpGatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,kBAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDvC,CAAC;AAED,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,eAA+C;QACjD,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOH;YACP,SAAS;gBACL,YAAY;YAChB;QACJ;QAEA,IAAIG,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,EAC7B,MAAM,IAAIC,MAAMD,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;QAGzD,OAAOA,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI;IACvC;AACJ;AAEO,MAAME,wBAAaC,qBAAqB;IAC3C,aAAaC;IACb,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/wcp/WcpGateway.js","sources":["../../../src/features/wcp/WcpGateway.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { WcpGateway as WcpGatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { GetWcpProjectResponse, WcpProjectData } from \"./types.js\";\n\nconst GET_WCP_PROJECT = /* GraphQL */ `\n query GetWcpProject {\n wcp {\n getProject {\n data {\n orgId\n projectId\n package {\n features {\n seats {\n enabled\n options\n }\n multiTenancy {\n enabled\n options\n }\n advancedPublishingWorkflow {\n enabled\n }\n advancedAccessControlLayer {\n enabled\n options\n }\n auditLogs {\n enabled\n }\n recordLocking {\n enabled\n }\n fileManager {\n enabled\n options\n }\n aiPowerups {\n enabled\n options\n }\n abTesting {\n enabled\n }\n collaboration {\n enabled\n options\n }\n }\n }\n }\n error {\n message\n code\n data\n }\n }\n }\n }\n`;\n\nclass WcpGraphQLGateway implements WcpGatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async fetchProject(): Promise<WcpProjectData | null> {\n const response = await this.client.execute<GetWcpProjectResponse>({\n query: GET_WCP_PROJECT,\n headers: {\n \"x-tenant\": \"root\"\n }\n });\n\n if (response.wcp.getProject.error) {\n throw new Error(response.wcp.getProject.error.message);\n }\n\n return response.wcp.getProject.data;\n }\n}\n\nexport const WcpGateway = createImplementation({\n abstraction: WcpGatewayAbstraction,\n implementation: WcpGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["GET_WCP_PROJECT","WcpGraphQLGateway","client","response","Error","WcpGateway","createImplementation","WcpGatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,kBAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDvC,CAAC;AAED,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,eAA+C;QACjD,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOH;YACP,SAAS;gBACL,YAAY;YAChB;QACJ;QAEA,IAAIG,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,EAC7B,MAAM,IAAIC,MAAMD,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;QAGzD,OAAOA,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI;IACvC;AACJ;AAEO,MAAME,wBAAaC,qBAAqB;IAC3C,aAAaC;IACb,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
@@ -44,6 +44,8 @@ function useHotkeys(props) {
44
44
  const { disabled, zIndex, keys } = props;
45
45
  const prevPropsRef = useRef();
46
46
  const firstRenderRef = useRef(true);
47
+ const propsRef = useRef(props);
48
+ propsRef.current = props;
47
49
  useEffect(function() {
48
50
  if (firstRenderRef.current || prevPropsRef.current?.disabled !== disabled) {
49
51
  firstRenderRef.current = false;
@@ -59,7 +61,7 @@ function useHotkeys(props) {
59
61
  ]);
60
62
  useEffect(function() {
61
63
  return function() {
62
- if (!disabled) unregisterZIndex(props);
64
+ if (!propsRef.current.disabled) unregisterZIndex(propsRef.current);
63
65
  };
64
66
  }, []);
65
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hooks/useHotkeys.js","sources":["../../src/hooks/useHotkeys.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { isHotkey } from \"is-hotkey\";\n\ntype HookProps = {\n disabled?: boolean;\n zIndex: number;\n keys?: { [key: string]: (e: KeyboardEvent) => void };\n};\n\ntype State = {\n listenerAttached: boolean;\n zIndex: null | number;\n handlers: { [zIndex: number]: { [key: string]: (e: KeyboardEvent) => void } };\n};\n\nconst state: State = {\n listenerAttached: false,\n zIndex: null,\n handlers: {}\n};\n\nfunction triggerHotkeys(e: KeyboardEvent) {\n if (state.zIndex === null) {\n return;\n }\n\n const keys = state.handlers[state.zIndex];\n for (const key in keys) {\n if (isHotkey(key, e)) {\n keys[key](e);\n break;\n }\n }\n}\n\nfunction registerZIndex({ zIndex, keys }: HookProps) {\n if (state.zIndex === null || state.zIndex < zIndex) {\n state.zIndex = zIndex;\n }\n\n if (!state.handlers[zIndex]) {\n state.handlers[zIndex] = {};\n }\n\n if (!keys || Object.keys(keys).length === 0) {\n return;\n }\n\n for (const key in keys) {\n if (key in state.handlers[zIndex]) {\n throw Error(`Shortcut \"${key}\" already registered on zIndex ${zIndex}.`);\n }\n state.handlers[zIndex][key] = keys[key];\n }\n\n if (!state.listenerAttached) {\n document.body.addEventListener(\"keydown\", triggerHotkeys);\n state.listenerAttached = true;\n }\n}\n\nfunction unregisterZIndex({ zIndex, keys }: HookProps) {\n if (state.handlers && state.handlers[zIndex]) {\n for (const key in keys) {\n delete state.handlers[zIndex][key];\n }\n\n if (Object.keys(state.handlers[zIndex]).length === 0) {\n delete state.handlers[zIndex];\n }\n }\n\n if (Object.keys(state.handlers).length > 0) {\n state.zIndex = Math.max(...Object.keys(state.handlers).map(Number));\n } else {\n state.zIndex = null;\n\n if (state.listenerAttached) {\n document.body.removeEventListener(\"keydown\", triggerHotkeys);\n state.listenerAttached = false;\n }\n }\n}\n\nexport function useHotkeys(props: HookProps) {\n const { disabled, zIndex, keys } = props;\n\n const prevPropsRef = useRef<HookProps | undefined>();\n const firstRenderRef = useRef(true);\n\n useEffect(\n function () {\n if (firstRenderRef.current || prevPropsRef.current?.disabled !== disabled) {\n firstRenderRef.current = false;\n if (disabled) {\n unregisterZIndex(props);\n } else {\n registerZIndex(props);\n }\n }\n\n if (!disabled && typeof keys === \"object\") {\n Object.assign(state.handlers[zIndex], keys);\n }\n prevPropsRef.current = { ...props };\n },\n [keys]\n );\n\n useEffect(function () {\n return function () {\n if (!disabled) {\n unregisterZIndex(props);\n }\n };\n }, []);\n}\n"],"names":["state","triggerHotkeys","e","keys","key","isHotkey","registerZIndex","zIndex","Object","Error","document","unregisterZIndex","Math","Number","useHotkeys","props","disabled","prevPropsRef","useRef","firstRenderRef","useEffect"],"mappings":";;AAeA,MAAMA,QAAe;IACjB,kBAAkB;IAClB,QAAQ;IACR,UAAU,CAAC;AACf;AAEA,SAASC,eAAeC,CAAgB;IACpC,IAAIF,AAAiB,SAAjBA,MAAM,MAAM,EACZ;IAGJ,MAAMG,OAAOH,MAAM,QAAQ,CAACA,MAAM,MAAM,CAAC;IACzC,IAAK,MAAMI,OAAOD,KACd,IAAIE,SAASD,KAAKF,IAAI;QAClBC,IAAI,CAACC,IAAI,CAACF;QACV;IACJ;AAER;AAEA,SAASI,eAAe,EAAEC,MAAM,EAAEJ,IAAI,EAAa;IAC/C,IAAIH,AAAiB,SAAjBA,MAAM,MAAM,IAAaA,MAAM,MAAM,GAAGO,QACxCP,MAAM,MAAM,GAAGO;IAGnB,IAAI,CAACP,MAAM,QAAQ,CAACO,OAAO,EACvBP,MAAM,QAAQ,CAACO,OAAO,GAAG,CAAC;IAG9B,IAAI,CAACJ,QAAQK,AAA6B,MAA7BA,OAAO,IAAI,CAACL,MAAM,MAAM,EACjC;IAGJ,IAAK,MAAMC,OAAOD,KAAM;QACpB,IAAIC,OAAOJ,MAAM,QAAQ,CAACO,OAAO,EAC7B,MAAME,MAAM,CAAC,UAAU,EAAEL,IAAI,+BAA+B,EAAEG,OAAO,CAAC,CAAC;QAE3EP,MAAM,QAAQ,CAACO,OAAO,CAACH,IAAI,GAAGD,IAAI,CAACC,IAAI;IAC3C;IAEA,IAAI,CAACJ,MAAM,gBAAgB,EAAE;QACzBU,SAAS,IAAI,CAAC,gBAAgB,CAAC,WAAWT;QAC1CD,MAAM,gBAAgB,GAAG;IAC7B;AACJ;AAEA,SAASW,iBAAiB,EAAEJ,MAAM,EAAEJ,IAAI,EAAa;IACjD,IAAIH,MAAM,QAAQ,IAAIA,MAAM,QAAQ,CAACO,OAAO,EAAE;QAC1C,IAAK,MAAMH,OAAOD,KACd,OAAOH,MAAM,QAAQ,CAACO,OAAO,CAACH,IAAI;QAGtC,IAAII,AAA+C,MAA/CA,OAAO,IAAI,CAACR,MAAM,QAAQ,CAACO,OAAO,EAAE,MAAM,EAC1C,OAAOP,MAAM,QAAQ,CAACO,OAAO;IAErC;IAEA,IAAIC,OAAO,IAAI,CAACR,MAAM,QAAQ,EAAE,MAAM,GAAG,GACrCA,MAAM,MAAM,GAAGY,KAAK,GAAG,IAAIJ,OAAO,IAAI,CAACR,MAAM,QAAQ,EAAE,GAAG,CAACa;SACxD;QACHb,MAAM,MAAM,GAAG;QAEf,IAAIA,MAAM,gBAAgB,EAAE;YACxBU,SAAS,IAAI,CAAC,mBAAmB,CAAC,WAAWT;YAC7CD,MAAM,gBAAgB,GAAG;QAC7B;IACJ;AACJ;AAEO,SAASc,WAAWC,KAAgB;IACvC,MAAM,EAAEC,QAAQ,EAAET,MAAM,EAAEJ,IAAI,EAAE,GAAGY;IAEnC,MAAME,eAAeC;IACrB,MAAMC,iBAAiBD,OAAO;IAE9BE,UACI;QACI,IAAID,eAAe,OAAO,IAAIF,aAAa,OAAO,EAAE,aAAaD,UAAU;YACvEG,eAAe,OAAO,GAAG;YACzB,IAAIH,UACAL,iBAAiBI;iBAEjBT,eAAeS;QAEvB;QAEA,IAAI,CAACC,YAAY,AAAgB,YAAhB,OAAOb,MACpBK,OAAO,MAAM,CAACR,MAAM,QAAQ,CAACO,OAAO,EAAEJ;QAE1Cc,aAAa,OAAO,GAAG;YAAE,GAAGF,KAAK;QAAC;IACtC,GACA;QAACZ;KAAK;IAGViB,UAAU;QACN,OAAO;YACH,IAAI,CAACJ,UACDL,iBAAiBI;QAEzB;IACJ,GAAG,EAAE;AACT"}
1
+ {"version":3,"file":"hooks/useHotkeys.js","sources":["../../src/hooks/useHotkeys.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { isHotkey } from \"is-hotkey\";\n\ntype HookProps = {\n disabled?: boolean;\n zIndex: number;\n keys?: { [key: string]: (e: KeyboardEvent) => void };\n};\n\ntype State = {\n listenerAttached: boolean;\n zIndex: null | number;\n handlers: { [zIndex: number]: { [key: string]: (e: KeyboardEvent) => void } };\n};\n\nconst state: State = {\n listenerAttached: false,\n zIndex: null,\n handlers: {}\n};\n\nfunction triggerHotkeys(e: KeyboardEvent) {\n if (state.zIndex === null) {\n return;\n }\n\n const keys = state.handlers[state.zIndex];\n for (const key in keys) {\n if (isHotkey(key, e)) {\n keys[key](e);\n break;\n }\n }\n}\n\nfunction registerZIndex({ zIndex, keys }: HookProps) {\n if (state.zIndex === null || state.zIndex < zIndex) {\n state.zIndex = zIndex;\n }\n\n if (!state.handlers[zIndex]) {\n state.handlers[zIndex] = {};\n }\n\n if (!keys || Object.keys(keys).length === 0) {\n return;\n }\n\n for (const key in keys) {\n if (key in state.handlers[zIndex]) {\n throw Error(`Shortcut \"${key}\" already registered on zIndex ${zIndex}.`);\n }\n state.handlers[zIndex][key] = keys[key];\n }\n\n if (!state.listenerAttached) {\n document.body.addEventListener(\"keydown\", triggerHotkeys);\n state.listenerAttached = true;\n }\n}\n\nfunction unregisterZIndex({ zIndex, keys }: HookProps) {\n if (state.handlers && state.handlers[zIndex]) {\n for (const key in keys) {\n delete state.handlers[zIndex][key];\n }\n\n if (Object.keys(state.handlers[zIndex]).length === 0) {\n delete state.handlers[zIndex];\n }\n }\n\n if (Object.keys(state.handlers).length > 0) {\n state.zIndex = Math.max(...Object.keys(state.handlers).map(Number));\n } else {\n state.zIndex = null;\n\n if (state.listenerAttached) {\n document.body.removeEventListener(\"keydown\", triggerHotkeys);\n state.listenerAttached = false;\n }\n }\n}\n\nexport function useHotkeys(props: HookProps) {\n const { disabled, zIndex, keys } = props;\n\n const prevPropsRef = useRef<HookProps | undefined>();\n const firstRenderRef = useRef(true);\n\n // The unmount cleanup below runs once, so it must not close over the props of the first\n // render. Without this, a component unmounted while its shortcuts are registered (for\n // example, an open drawer navigating away) would leak them into the shared registry, and\n // the next component to register the same shortcut would throw.\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(\n function () {\n if (firstRenderRef.current || prevPropsRef.current?.disabled !== disabled) {\n firstRenderRef.current = false;\n if (disabled) {\n unregisterZIndex(props);\n } else {\n registerZIndex(props);\n }\n }\n\n if (!disabled && typeof keys === \"object\") {\n Object.assign(state.handlers[zIndex], keys);\n }\n prevPropsRef.current = { ...props };\n },\n [keys]\n );\n\n useEffect(function () {\n return function () {\n if (!propsRef.current.disabled) {\n unregisterZIndex(propsRef.current);\n }\n };\n }, []);\n}\n"],"names":["state","triggerHotkeys","e","keys","key","isHotkey","registerZIndex","zIndex","Object","Error","document","unregisterZIndex","Math","Number","useHotkeys","props","disabled","prevPropsRef","useRef","firstRenderRef","propsRef","useEffect"],"mappings":";;AAeA,MAAMA,QAAe;IACjB,kBAAkB;IAClB,QAAQ;IACR,UAAU,CAAC;AACf;AAEA,SAASC,eAAeC,CAAgB;IACpC,IAAIF,AAAiB,SAAjBA,MAAM,MAAM,EACZ;IAGJ,MAAMG,OAAOH,MAAM,QAAQ,CAACA,MAAM,MAAM,CAAC;IACzC,IAAK,MAAMI,OAAOD,KACd,IAAIE,SAASD,KAAKF,IAAI;QAClBC,IAAI,CAACC,IAAI,CAACF;QACV;IACJ;AAER;AAEA,SAASI,eAAe,EAAEC,MAAM,EAAEJ,IAAI,EAAa;IAC/C,IAAIH,AAAiB,SAAjBA,MAAM,MAAM,IAAaA,MAAM,MAAM,GAAGO,QACxCP,MAAM,MAAM,GAAGO;IAGnB,IAAI,CAACP,MAAM,QAAQ,CAACO,OAAO,EACvBP,MAAM,QAAQ,CAACO,OAAO,GAAG,CAAC;IAG9B,IAAI,CAACJ,QAAQK,AAA6B,MAA7BA,OAAO,IAAI,CAACL,MAAM,MAAM,EACjC;IAGJ,IAAK,MAAMC,OAAOD,KAAM;QACpB,IAAIC,OAAOJ,MAAM,QAAQ,CAACO,OAAO,EAC7B,MAAME,MAAM,CAAC,UAAU,EAAEL,IAAI,+BAA+B,EAAEG,OAAO,CAAC,CAAC;QAE3EP,MAAM,QAAQ,CAACO,OAAO,CAACH,IAAI,GAAGD,IAAI,CAACC,IAAI;IAC3C;IAEA,IAAI,CAACJ,MAAM,gBAAgB,EAAE;QACzBU,SAAS,IAAI,CAAC,gBAAgB,CAAC,WAAWT;QAC1CD,MAAM,gBAAgB,GAAG;IAC7B;AACJ;AAEA,SAASW,iBAAiB,EAAEJ,MAAM,EAAEJ,IAAI,EAAa;IACjD,IAAIH,MAAM,QAAQ,IAAIA,MAAM,QAAQ,CAACO,OAAO,EAAE;QAC1C,IAAK,MAAMH,OAAOD,KACd,OAAOH,MAAM,QAAQ,CAACO,OAAO,CAACH,IAAI;QAGtC,IAAII,AAA+C,MAA/CA,OAAO,IAAI,CAACR,MAAM,QAAQ,CAACO,OAAO,EAAE,MAAM,EAC1C,OAAOP,MAAM,QAAQ,CAACO,OAAO;IAErC;IAEA,IAAIC,OAAO,IAAI,CAACR,MAAM,QAAQ,EAAE,MAAM,GAAG,GACrCA,MAAM,MAAM,GAAGY,KAAK,GAAG,IAAIJ,OAAO,IAAI,CAACR,MAAM,QAAQ,EAAE,GAAG,CAACa;SACxD;QACHb,MAAM,MAAM,GAAG;QAEf,IAAIA,MAAM,gBAAgB,EAAE;YACxBU,SAAS,IAAI,CAAC,mBAAmB,CAAC,WAAWT;YAC7CD,MAAM,gBAAgB,GAAG;QAC7B;IACJ;AACJ;AAEO,SAASc,WAAWC,KAAgB;IACvC,MAAM,EAAEC,QAAQ,EAAET,MAAM,EAAEJ,IAAI,EAAE,GAAGY;IAEnC,MAAME,eAAeC;IACrB,MAAMC,iBAAiBD,OAAO;IAM9B,MAAME,WAAWF,OAAOH;IACxBK,SAAS,OAAO,GAAGL;IAEnBM,UACI;QACI,IAAIF,eAAe,OAAO,IAAIF,aAAa,OAAO,EAAE,aAAaD,UAAU;YACvEG,eAAe,OAAO,GAAG;YACzB,IAAIH,UACAL,iBAAiBI;iBAEjBT,eAAeS;QAEvB;QAEA,IAAI,CAACC,YAAY,AAAgB,YAAhB,OAAOb,MACpBK,OAAO,MAAM,CAACR,MAAM,QAAQ,CAACO,OAAO,EAAEJ;QAE1Cc,aAAa,OAAO,GAAG;YAAE,GAAGF,KAAK;QAAC;IACtC,GACA;QAACZ;KAAK;IAGVkB,UAAU;QACN,OAAO;YACH,IAAI,CAACD,SAAS,OAAO,CAAC,QAAQ,EAC1BT,iBAAiBS,SAAS,OAAO;QAEzC;IACJ,GAAG,EAAE;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks/useSnackbar.js","sources":["../../src/hooks/useSnackbar.tsx"],"sourcesContent":["import React from \"react\";\nimport { Toast, useToast } from \"@webiny/admin-ui\";\n\ninterface UseSnackbarResponse {\n showSnackbar: (message: React.ReactNode, options?: Record<string, React.ReactNode>) => void;\n showErrorSnackbar: (\n message: React.ReactNode,\n options?: Record<string, React.ReactNode>\n ) => void;\n hideSnackbar: () => void;\n}\n\n/**\n * @deprecated Use the new `useToast` hook from `@webiny/admin-ui` instead.\n */\nexport const useSnackbar = (): UseSnackbarResponse => {\n const { showToast, hideAllToasts } = useToast();\n\n return {\n showSnackbar: (message, options = {}) => {\n showToast({\n title: <Toast.Title text={message} />,\n ...options\n });\n },\n showErrorSnackbar: (message, options = {}) => {\n showToast({\n title: <Toast.Title text={message} />,\n duration: Infinity,\n ...options\n });\n },\n hideSnackbar: () => {\n hideAllToasts();\n }\n };\n};\n"],"names":["useSnackbar","showToast","hideAllToasts","useToast","message","options","Toast","Infinity"],"mappings":";;AAeO,MAAMA,cAAc;IACvB,MAAM,EAAEC,SAAS,EAAEC,aAAa,EAAE,GAAGC;IAErC,OAAO;QACH,cAAc,CAACC,SAASC,UAAU,CAAC,CAAC;YAChCJ,UAAU;gBACN,OAAO,WAAP,GAAO,oBAACK,MAAM,KAAK;oBAAC,MAAMF;;gBAC1B,GAAGC,OAAO;YACd;QACJ;QACA,mBAAmB,CAACD,SAASC,UAAU,CAAC,CAAC;YACrCJ,UAAU;gBACN,OAAO,WAAP,GAAO,oBAACK,MAAM,KAAK;oBAAC,MAAMF;;gBAC1B,UAAUG;gBACV,GAAGF,OAAO;YACd;QACJ;QACA,cAAc;YACVH;QACJ;IACJ;AACJ"}
1
+ {"version":3,"file":"hooks/useSnackbar.js","sources":["../../src/hooks/useSnackbar.tsx"],"sourcesContent":["import React from \"react\";\nimport { Toast, useToast } from \"@webiny/admin-ui\";\n\ninterface UseSnackbarResponse {\n showSnackbar: (message: React.ReactNode, options?: Record<string, React.ReactNode>) => void;\n showErrorSnackbar: (\n message: React.ReactNode,\n options?: Record<string, React.ReactNode>\n ) => void;\n hideSnackbar: () => void;\n}\n\n/**\n * @deprecated Use the new `useToast` hook from `@webiny/admin-ui` instead.\n */\nexport const useSnackbar = (): UseSnackbarResponse => {\n const { showToast, hideAllToasts } = useToast();\n\n return {\n showSnackbar: (message, options = {}) => {\n showToast({\n title: <Toast.Title text={message} />,\n ...options\n });\n },\n showErrorSnackbar: (message, options = {}) => {\n showToast({\n title: <Toast.Title text={message} />,\n duration: Infinity,\n ...options\n });\n },\n hideSnackbar: () => {\n hideAllToasts();\n }\n };\n};\n"],"names":["useSnackbar","showToast","hideAllToasts","useToast","message","options","Toast","Infinity"],"mappings":";;AAeO,MAAMA,cAAc;IACvB,MAAM,EAAEC,SAAS,EAAEC,aAAa,EAAE,GAAGC;IAErC,OAAO;QACH,cAAc,CAACC,SAASC,UAAU,CAAC,CAAC;YAChCJ,UAAU;gBACN,OAAO,WAAP,GAAO,oBAACK,MAAM,KAAK;oBAAC,MAAMF;;gBAC1B,GAAGC,OAAO;YACd;QACJ;QACA,mBAAmB,CAACD,SAASC,UAAU,CAAC,CAAC;YACrCJ,UAAU;gBACN,OAAO,WAAP,GAAO,oBAACK,MAAM,KAAK;oBAAC,MAAMF;;gBAC1B,UAAUG,KAAQ;gBAClB,GAAGF,OAAO;YACd;QACJ;QACA,cAAc;YACVH;QACJ;IACJ;AACJ"}
package/index.d.ts CHANGED
@@ -98,3 +98,4 @@ import "./base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRendere
98
98
  import "./base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js";
99
99
  import "./base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js";
100
100
  export type { FieldRenderers, FieldRendererComponent, LayoutRenderers, TabsNodeRendererProps } from "./features/formModel/FormView.js";
101
+ export { Debugger, DebuggerIndicator, DebuggerRoutes, debuggerStore } from "./features/debugger/index.js";
package/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import "./base/Base/FieldRenderers/MultiSelectRenderer.js";
1
2
  import "./base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js";
2
3
  import "./base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js";
3
4
  import "./base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js";
@@ -19,7 +20,6 @@ import "./base/Base/FieldRenderers/DateTimeRenderer.js";
19
20
  import "./base/Base/FieldRenderers/CheckboxesRenderer.js";
20
21
  import "./base/Base/FieldRenderers/RadioButtonsRenderer.js";
21
22
  import "./base/Base/FieldRenderers/TagsRenderer.js";
22
- import "./base/Base/FieldRenderers/TextareasRenderer.js";
23
23
  import "./features/formModel/renderers.js";
24
24
  import "./features/formModel/fieldTypes/TextFieldType.js";
25
25
  import "./features/formModel/fieldTypes/NumberFieldType.js";
@@ -29,12 +29,12 @@ import "./features/formModel/fieldTypes/FileFieldType.js";
29
29
  import "./features/formModel/fieldTypes/FileUrlFieldType.js";
30
30
  import "./features/formModel/fieldTypes/ObjectFieldType.js";
31
31
  import "./features/formModel/fieldTypes/LexicalFieldType.js";
32
+ import "./base/Base/FieldRenderers/TextareasRenderer.js";
32
33
  import "./base/Base/FieldRenderers/TextInputsRenderer.js";
33
34
  import "./base/Base/FieldRenderers/NumberInputsRenderer.js";
34
35
  import "./base/Base/FieldRenderers/NumberInputRenderer.js";
35
36
  import "./base/Base/FieldRenderers/SwitchRenderer.js";
36
37
  import "./base/Base/FieldRenderers/TextareaRenderer.js";
37
- import "./base/Base/FieldRenderers/MultiSelectRenderer.js";
38
38
  import "./base/Base/FieldRenderers/InputRenderer.js";
39
39
  import "./base/Base/FieldRenderers/SelectRenderer.js";
40
40
  export * from "@webiny/app";
@@ -83,3 +83,4 @@ export { FormErrors } from "./features/formModel/FormErrors.js";
83
83
  export { PresenterErrors } from "./features/formModel/PresenterErrors.js";
84
84
  export { useFieldRenderers } from "./features/formModel/useFieldRenderers.js";
85
85
  export { useLayoutRenderers } from "./features/formModel/useLayoutRenderers.js";
86
+ export { Debugger, DebuggerIndicator, DebuggerRoutes, debuggerStore } from "./features/debugger/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-admin",
3
- "version": "6.5.0-beta.1",
3
+ "version": "6.5.0-beta.10",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -16,34 +16,34 @@
16
16
  "dependencies": {
17
17
  "@apollo/react-components": "3.1.5",
18
18
  "@apollo/react-hooks": "3.1.5",
19
- "@atlaskit/pragmatic-drag-and-drop": "2.0.1",
20
- "@atlaskit/pragmatic-drag-and-drop-hitbox": "2.0.0",
19
+ "@atlaskit/pragmatic-drag-and-drop": "2.0.2",
20
+ "@atlaskit/pragmatic-drag-and-drop-hitbox": "2.2.2",
21
21
  "@emotion/css": "11.13.5",
22
22
  "@emotion/react": "11.14.0",
23
23
  "@emotion/styled": "11.14.1",
24
24
  "@fortawesome/fontawesome-svg-core": "7.3.1",
25
25
  "@fortawesome/react-fontawesome": "3.5.0",
26
- "@iconify/json": "2.2.503",
27
- "@lexical/utils": "0.48.0",
26
+ "@iconify/json": "2.2.538",
27
+ "@lexical/utils": "0.52.0",
28
28
  "@types/react": "18.3.31",
29
- "@webiny/admin-ui": "6.5.0-beta.1",
30
- "@webiny/app": "6.5.0-beta.1",
31
- "@webiny/di": "1.0.2",
32
- "@webiny/feature": "6.5.0-beta.1",
33
- "@webiny/form": "6.5.0-beta.1",
34
- "@webiny/icons": "6.5.0-beta.1",
35
- "@webiny/lexical-converter": "6.5.0-beta.1",
36
- "@webiny/lexical-editor": "6.5.0-beta.1",
37
- "@webiny/lexical-nodes": "6.5.0-beta.1",
38
- "@webiny/lexical-theme": "6.5.0-beta.1",
39
- "@webiny/plugins": "6.5.0-beta.1",
40
- "@webiny/react-composition": "6.5.0-beta.1",
41
- "@webiny/react-properties": "6.5.0-beta.1",
42
- "@webiny/sdk": "6.5.0-beta.1",
43
- "@webiny/telemetry": "6.5.0-beta.1",
44
- "@webiny/utils": "6.5.0-beta.1",
45
- "@webiny/validation": "6.5.0-beta.1",
46
- "@webiny/wcp": "6.5.0-beta.1",
29
+ "@webiny/admin-ui": "6.5.0-beta.10",
30
+ "@webiny/app": "6.5.0-beta.10",
31
+ "@webiny/di": "1.1.0",
32
+ "@webiny/feature": "6.5.0-beta.10",
33
+ "@webiny/form": "6.5.0-beta.10",
34
+ "@webiny/icons": "6.5.0-beta.10",
35
+ "@webiny/lexical-converter": "6.5.0-beta.10",
36
+ "@webiny/lexical-editor": "6.5.0-beta.10",
37
+ "@webiny/lexical-nodes": "6.5.0-beta.10",
38
+ "@webiny/lexical-theme": "6.5.0-beta.10",
39
+ "@webiny/plugins": "6.5.0-beta.10",
40
+ "@webiny/react-composition": "6.5.0-beta.10",
41
+ "@webiny/react-properties": "6.5.0-beta.10",
42
+ "@webiny/sdk": "6.5.0-beta.10",
43
+ "@webiny/telemetry": "6.5.0-beta.10",
44
+ "@webiny/utils": "6.5.0-beta.10",
45
+ "@webiny/validation": "6.5.0-beta.10",
46
+ "@webiny/wcp": "6.5.0-beta.10",
47
47
  "apollo-cache": "1.3.5",
48
48
  "apollo-client": "2.6.10",
49
49
  "apollo-link": "1.2.14",
@@ -55,38 +55,38 @@
55
55
  "graphql-tag": "2.12.7",
56
56
  "history": "5.3.0",
57
57
  "is-hotkey": "0.2.0",
58
- "lexical": "0.48.0",
58
+ "lexical": "0.52.0",
59
59
  "lodash": "4.18.1",
60
- "markdown-to-jsx": "9.9.0",
60
+ "markdown-to-jsx": "9.10.3",
61
61
  "mime": "4.1.0",
62
- "minimatch": "10.2.5",
63
- "mobx": "6.16.1",
64
- "mobx-react-lite": "4.1.1",
62
+ "minimatch": "10.2.6",
63
+ "mobx": "7.0.6",
64
+ "mobx-react-lite": "5.1.0",
65
65
  "monaco-editor": "0.53.0",
66
66
  "react": "18.3.1",
67
67
  "react-dom": "18.3.1",
68
- "react-resizable-panels": "4.12.2",
68
+ "react-resizable-panels": "4.14.2",
69
69
  "react-transition-group": "4.4.5",
70
70
  "react-virtualized": "9.22.6",
71
71
  "reset-css": "5.0.2",
72
72
  "slugify": "1.6.9",
73
73
  "tinycolor2": "1.6.0",
74
74
  "unicode-emoji-json": "0.9.0",
75
- "zod": "4.4.3"
75
+ "zod": "4.6.5"
76
76
  },
77
77
  "devDependencies": {
78
- "@testing-library/react": "16.3.2",
79
- "@types/bytes": "3.1.5",
78
+ "@testing-library/react": "16.3.3",
79
+ "@types/bytes": "3.1.6",
80
80
  "@types/graphlib": "2.1.12",
81
81
  "@types/is-hotkey": "0.1.10",
82
82
  "@types/react-resizable": "4.0.0",
83
83
  "@types/react-transition-group": "4.4.12",
84
84
  "@types/store": "2.0.5",
85
85
  "@types/tinycolor2": "1.4.6",
86
- "@webiny/build-tools": "6.5.0-beta.1",
86
+ "@webiny/build-tools": "6.5.0-beta.10",
87
87
  "rimraf": "6.1.3",
88
88
  "typescript": "7.0.2",
89
- "vitest": "4.1.10"
89
+ "vitest": "5.0.3"
90
90
  },
91
91
  "publishConfig": {
92
92
  "access": "public"
@@ -109,8 +109,7 @@ class ApiKeysPresenterImpl {
109
109
  this._selectedApiKey = apiKey;
110
110
  });
111
111
  return apiKey;
112
- }
113
- {
112
+ } else {
114
113
  const apiKey = await this.createApiKeyUseCase.execute({
115
114
  name: data.name,
116
115
  slug: data.slug,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/accessManagement/apiKeys/ApiKeysPresenter.js","sources":["../../../../src/presentation/accessManagement/apiKeys/ApiKeysPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { ApiKey } from \"~/features/accessManagement/types.js\";\nimport {\n ListApiKeysUseCase,\n ApiKeysListCache\n} from \"~/features/accessManagement/apiKeys/listApiKeys/abstractions.js\";\nimport { GetApiKeyUseCase } from \"~/features/accessManagement/apiKeys/getApiKey/abstractions.js\";\nimport { CreateApiKeyUseCase } from \"~/features/accessManagement/apiKeys/createApiKey/abstractions.js\";\nimport { UpdateApiKeyUseCase } from \"~/features/accessManagement/apiKeys/updateApiKey/abstractions.js\";\nimport { DeleteApiKeyUseCase } from \"~/features/accessManagement/apiKeys/deleteApiKey/abstractions.js\";\nimport { ApiKeysPresenter as Abstraction } from \"./abstractions.js\";\nimport { ApiKeysDataSource } from \"./ApiKeysDataSource.js\";\n\nclass ApiKeysPresenterImpl implements Abstraction.Interface {\n private _selectedApiKey: ApiKey | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<ApiKey>,\n private formModelFactory: FormModelFactory.Interface,\n private listApiKeysUseCase: ListApiKeysUseCase.Interface,\n private getApiKeyUseCase: GetApiKeyUseCase.Interface,\n private createApiKeyUseCase: CreateApiKeyUseCase.Interface,\n private updateApiKeyUseCase: UpdateApiKeyUseCase.Interface,\n private deleteApiKeyUseCase: DeleteApiKeyUseCase.Interface,\n private cache: ApiKeysListCache.Interface\n ) {\n this._form = this.buildForm(true, \"new\");\n makeAutoObservable<\n ApiKeysPresenterImpl,\n | \"formModelFactory\"\n | \"listApiKeysUseCase\"\n | \"getApiKeyUseCase\"\n | \"createApiKeyUseCase\"\n | \"updateApiKeyUseCase\"\n | \"deleteApiKeyUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listApiKeysUseCase: false,\n getApiKeyUseCase: false,\n createApiKeyUseCase: false,\n updateApiKeyUseCase: false,\n deleteApiKeyUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): Abstraction.ViewModel {\n return {\n selectedApiKey: this._selectedApiKey,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<ApiKey> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new ApiKeysDataSource(this.listApiKeysUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectApiKey(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n });\n\n try {\n const apiKey = await this.getApiKeyUseCase.execute(id);\n runInAction(() => {\n this._selectedApiKey = apiKey;\n this._form = this.buildForm(false, apiKey.id);\n this._form.setData({\n name: apiKey.name,\n slug: apiKey.slug,\n description: apiKey.description,\n token: apiKey.token,\n permissions: apiKey.permissions || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedApiKey = null;\n this._form = this.buildForm(true, \"new\");\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedApiKey = null;\n this._showForm = false;\n }\n\n async save(): Promise<ApiKey | null> {\n const data = await this._form.submit<ApiKey>();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const isUpdate = this._selectedApiKey !== null && this._selectedApiKey.createdOn;\n\n if (isUpdate) {\n const apiKey = await this.updateApiKeyUseCase.execute(this._selectedApiKey!.id, {\n name: data.name,\n description: data.description,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedApiKey = apiKey;\n });\n return apiKey;\n } else {\n const apiKey = await this.createApiKeyUseCase.execute({\n name: data.name,\n slug: data.slug,\n description: data.description,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedApiKey = apiKey;\n this._form = this.buildForm(false, apiKey.id);\n this._form.setData({\n name: apiKey.name,\n slug: apiKey.slug,\n description: apiKey.description,\n permissions: apiKey.permissions || []\n });\n });\n return apiKey;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteApiKey(id: string): Promise<void> {\n await this.deleteApiKeyUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedApiKey !== null && this._selectedApiKey.id === id) {\n this._selectedApiKey = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, entityId: string): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields.text().label(\"Slug\").required(\"Slug is required.\").disabled(!isNew),\n description: fields\n .text()\n .label(\"Description\")\n .required(\"Description is required.\")\n .renderer(\"textarea\"),\n // @ts-expect-error This is a single-use local renderer I don't want to be visible to users.\n token: fields.text().label(\"Token\").renderer(\"apiKeyToken\"),\n permissions: fields\n .permissions()\n .label(\"Permissions\")\n .renderer(\"permissions\", { id: entityId })\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"token\"),\n layout.row(\"permissions\")\n ]\n });\n }\n}\n\nexport const ApiKeysPresenter = Abstraction.createImplementation({\n implementation: ApiKeysPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListApiKeysUseCase,\n GetApiKeyUseCase,\n CreateApiKeyUseCase,\n UpdateApiKeyUseCase,\n DeleteApiKeyUseCase,\n ApiKeysListCache\n ]\n});\n"],"names":["ApiKeysPresenterImpl","_listPresenter","formModelFactory","listApiKeysUseCase","getApiKeyUseCase","createApiKeyUseCase","updateApiKeyUseCase","deleteApiKeyUseCase","cache","makeAutoObservable","computed","dataSource","ApiKeysDataSource","id","runInAction","apiKey","data","isUpdate","isNew","entityId","fields","value","form","slugValue","slugify","String","layout","ApiKeysPresenter","Abstraction","ListPresenter","FormModelFactory","ListApiKeysUseCase","GetApiKeyUseCase","CreateApiKeyUseCase","UpdateApiKeyUseCase","DeleteApiKeyUseCase","ApiKeysListCache"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/accessManagement/apiKeys/ApiKeysPresenter.js","sources":["../../../../src/presentation/accessManagement/apiKeys/ApiKeysPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { ApiKey } from \"~/features/accessManagement/types.js\";\nimport {\n ListApiKeysUseCase,\n ApiKeysListCache\n} from \"~/features/accessManagement/apiKeys/listApiKeys/abstractions.js\";\nimport { GetApiKeyUseCase } from \"~/features/accessManagement/apiKeys/getApiKey/abstractions.js\";\nimport { CreateApiKeyUseCase } from \"~/features/accessManagement/apiKeys/createApiKey/abstractions.js\";\nimport { UpdateApiKeyUseCase } from \"~/features/accessManagement/apiKeys/updateApiKey/abstractions.js\";\nimport { DeleteApiKeyUseCase } from \"~/features/accessManagement/apiKeys/deleteApiKey/abstractions.js\";\nimport { ApiKeysPresenter as Abstraction } from \"./abstractions.js\";\nimport { ApiKeysDataSource } from \"./ApiKeysDataSource.js\";\n\nclass ApiKeysPresenterImpl implements Abstraction.Interface {\n private _selectedApiKey: ApiKey | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<ApiKey>,\n private formModelFactory: FormModelFactory.Interface,\n private listApiKeysUseCase: ListApiKeysUseCase.Interface,\n private getApiKeyUseCase: GetApiKeyUseCase.Interface,\n private createApiKeyUseCase: CreateApiKeyUseCase.Interface,\n private updateApiKeyUseCase: UpdateApiKeyUseCase.Interface,\n private deleteApiKeyUseCase: DeleteApiKeyUseCase.Interface,\n private cache: ApiKeysListCache.Interface\n ) {\n this._form = this.buildForm(true, \"new\");\n makeAutoObservable<\n ApiKeysPresenterImpl,\n | \"formModelFactory\"\n | \"listApiKeysUseCase\"\n | \"getApiKeyUseCase\"\n | \"createApiKeyUseCase\"\n | \"updateApiKeyUseCase\"\n | \"deleteApiKeyUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listApiKeysUseCase: false,\n getApiKeyUseCase: false,\n createApiKeyUseCase: false,\n updateApiKeyUseCase: false,\n deleteApiKeyUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): Abstraction.ViewModel {\n return {\n selectedApiKey: this._selectedApiKey,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<ApiKey> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new ApiKeysDataSource(this.listApiKeysUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectApiKey(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n });\n\n try {\n const apiKey = await this.getApiKeyUseCase.execute(id);\n runInAction(() => {\n this._selectedApiKey = apiKey;\n this._form = this.buildForm(false, apiKey.id);\n this._form.setData({\n name: apiKey.name,\n slug: apiKey.slug,\n description: apiKey.description,\n token: apiKey.token,\n permissions: apiKey.permissions || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedApiKey = null;\n this._form = this.buildForm(true, \"new\");\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedApiKey = null;\n this._showForm = false;\n }\n\n async save(): Promise<ApiKey | null> {\n const data = await this._form.submit<ApiKey>();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const isUpdate = this._selectedApiKey !== null && this._selectedApiKey.createdOn;\n\n if (isUpdate) {\n const apiKey = await this.updateApiKeyUseCase.execute(this._selectedApiKey!.id, {\n name: data.name,\n description: data.description,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedApiKey = apiKey;\n });\n return apiKey;\n } else {\n const apiKey = await this.createApiKeyUseCase.execute({\n name: data.name,\n slug: data.slug,\n description: data.description,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedApiKey = apiKey;\n this._form = this.buildForm(false, apiKey.id);\n this._form.setData({\n name: apiKey.name,\n slug: apiKey.slug,\n description: apiKey.description,\n permissions: apiKey.permissions || []\n });\n });\n return apiKey;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteApiKey(id: string): Promise<void> {\n await this.deleteApiKeyUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedApiKey !== null && this._selectedApiKey.id === id) {\n this._selectedApiKey = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, entityId: string): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields.text().label(\"Slug\").required(\"Slug is required.\").disabled(!isNew),\n description: fields\n .text()\n .label(\"Description\")\n .required(\"Description is required.\")\n .renderer(\"textarea\"),\n // @ts-expect-error This is a single-use local renderer I don't want to be visible to users.\n token: fields.text().label(\"Token\").renderer(\"apiKeyToken\"),\n permissions: fields\n .permissions()\n .label(\"Permissions\")\n .renderer(\"permissions\", { id: entityId })\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"token\"),\n layout.row(\"permissions\")\n ]\n });\n }\n}\n\nexport const ApiKeysPresenter = Abstraction.createImplementation({\n implementation: ApiKeysPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListApiKeysUseCase,\n GetApiKeyUseCase,\n CreateApiKeyUseCase,\n UpdateApiKeyUseCase,\n DeleteApiKeyUseCase,\n ApiKeysListCache\n ]\n});\n"],"names":["ApiKeysPresenterImpl","_listPresenter","formModelFactory","listApiKeysUseCase","getApiKeyUseCase","createApiKeyUseCase","updateApiKeyUseCase","deleteApiKeyUseCase","cache","makeAutoObservable","computed","dataSource","ApiKeysDataSource","id","runInAction","apiKey","data","isUpdate","isNew","entityId","fields","value","form","slugValue","slugify","String","layout","ApiKeysPresenter","Abstraction","ListPresenter","FormModelFactory","ListApiKeysUseCase","GetApiKeyUseCase","CreateApiKeyUseCase","UpdateApiKeyUseCase","DeleteApiKeyUseCase","ApiKeysListCache"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
- export declare const ApiKeysView: (() => React.JSX.Element) & {
3
- displayName: string;
2
+ export declare const ApiKeysView: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => React.JSX.Element;
4
4
  };
@@ -116,8 +116,7 @@ class RolesPresenterImpl {
116
116
  this._selectedRole = role;
117
117
  });
118
118
  return role;
119
- }
120
- {
119
+ } else {
121
120
  const role = await this.createRoleUseCase.execute({
122
121
  name: data.name,
123
122
  slug: data.slug,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/accessManagement/roles/RolesPresenter.js","sources":["../../../../src/presentation/accessManagement/roles/RolesPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { Role } from \"~/features/accessManagement/types.js\";\nimport {\n ListRolesUseCase,\n RolesListCache\n} from \"~/features/accessManagement/roles/listRoles/abstractions.js\";\nimport { GetRoleUseCase } from \"~/features/accessManagement/roles/getRole/abstractions.js\";\nimport { CreateRoleUseCase } from \"~/features/accessManagement/roles/createRole/abstractions.js\";\nimport { UpdateRoleUseCase } from \"~/features/accessManagement/roles/updateRole/abstractions.js\";\nimport { DeleteRoleUseCase } from \"~/features/accessManagement/roles/deleteRole/abstractions.js\";\nimport {\n RolesPresenter as Abstraction,\n type IRolesPresenter,\n type IRolesPresenterViewModel\n} from \"./abstractions.js\";\nimport { RolesDataSource } from \"./RolesDataSource.js\";\n\nclass RolesPresenterImpl implements IRolesPresenter {\n private _selectedRole: Role | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<Role>,\n private formModelFactory: FormModelFactory.Interface,\n private listRolesUseCase: ListRolesUseCase.Interface,\n private getRoleUseCase: GetRoleUseCase.Interface,\n private createRoleUseCase: CreateRoleUseCase.Interface,\n private updateRoleUseCase: UpdateRoleUseCase.Interface,\n private deleteRoleUseCase: DeleteRoleUseCase.Interface,\n private cache: RolesListCache.Interface\n ) {\n this._form = this.buildForm(false, false);\n makeAutoObservable<\n RolesPresenterImpl,\n | \"formModelFactory\"\n | \"listRolesUseCase\"\n | \"getRoleUseCase\"\n | \"createRoleUseCase\"\n | \"updateRoleUseCase\"\n | \"deleteRoleUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listRolesUseCase: false,\n getRoleUseCase: false,\n createRoleUseCase: false,\n updateRoleUseCase: false,\n deleteRoleUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): IRolesPresenterViewModel {\n const role = this._selectedRole;\n const isSystemRole = role !== null && (role.slug === \"full-access\" || role.system === true);\n const isPluginRole = role !== null && (role.plugin ?? false);\n\n return {\n selectedRole: this._selectedRole,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n canModify: !isSystemRole && !isPluginRole,\n isSystemRole,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<Role> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new RolesDataSource(this.listRolesUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectRole(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n });\n\n try {\n const role = await this.getRoleUseCase.execute(id);\n const isSystemRole = role.slug === \"full-access\" || role.system === true;\n const isPluginRole = role.plugin ?? false;\n const canModify = !isSystemRole && !isPluginRole;\n\n runInAction(() => {\n this._selectedRole = role;\n this._form = this.buildForm(false, canModify, role.id);\n this._form.setData({\n name: role.name,\n slug: role.slug,\n description: role.description,\n permissions: role.permissions || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedRole = null;\n this._form = this.buildForm(true, true, \"new\");\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedRole = null;\n this._showForm = false;\n }\n\n async save(): Promise<Role | null> {\n const data = await this._form.submit<Role>();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const isUpdate = this._selectedRole !== null && this._selectedRole.createdOn;\n\n if (isUpdate) {\n const role = await this.updateRoleUseCase.execute(this._selectedRole!.id, {\n name: data.name as string,\n description: data.description as string,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedRole = role;\n });\n return role;\n } else {\n const role = await this.createRoleUseCase.execute({\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedRole = role;\n this._form = this.buildForm(false, true, role.id);\n this._form.setData({\n name: role.name,\n slug: role.slug,\n description: role.description,\n permissions: role.permissions || []\n });\n });\n return role;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteRole(id: string): Promise<void> {\n await this.deleteRoleUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedRole !== null && this._selectedRole.id === id) {\n this._selectedRole = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, canModify: boolean, entityId?: string): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .disabled(!canModify)\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required.\")\n .disabled(!isNew || !canModify),\n description: fields\n .text()\n .label(\"Description\")\n .defaultValue(\"\")\n .renderer(\"textarea\")\n .disabled(!canModify),\n permissions: fields\n .permissions()\n .label(\"Permissions\")\n .renderer(\"permissions\", { id: entityId || \"new\" })\n .hiddenWhen(() => {\n const role = this._selectedRole;\n return (\n role !== null && (role.slug === \"full-access\" || role.system === true)\n );\n })\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"permissions\")\n ]\n });\n }\n}\n\nexport const RolesPresenter = Abstraction.createImplementation({\n implementation: RolesPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListRolesUseCase,\n GetRoleUseCase,\n CreateRoleUseCase,\n UpdateRoleUseCase,\n DeleteRoleUseCase,\n RolesListCache\n ]\n});\n"],"names":["RolesPresenterImpl","_listPresenter","formModelFactory","listRolesUseCase","getRoleUseCase","createRoleUseCase","updateRoleUseCase","deleteRoleUseCase","cache","makeAutoObservable","computed","role","isSystemRole","isPluginRole","dataSource","RolesDataSource","id","runInAction","canModify","data","isUpdate","isNew","entityId","fields","value","form","slugValue","slugify","String","layout","RolesPresenter","Abstraction","ListPresenter","FormModelFactory","ListRolesUseCase","GetRoleUseCase","CreateRoleUseCase","UpdateRoleUseCase","DeleteRoleUseCase","RolesListCache"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/accessManagement/roles/RolesPresenter.js","sources":["../../../../src/presentation/accessManagement/roles/RolesPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { Role } from \"~/features/accessManagement/types.js\";\nimport {\n ListRolesUseCase,\n RolesListCache\n} from \"~/features/accessManagement/roles/listRoles/abstractions.js\";\nimport { GetRoleUseCase } from \"~/features/accessManagement/roles/getRole/abstractions.js\";\nimport { CreateRoleUseCase } from \"~/features/accessManagement/roles/createRole/abstractions.js\";\nimport { UpdateRoleUseCase } from \"~/features/accessManagement/roles/updateRole/abstractions.js\";\nimport { DeleteRoleUseCase } from \"~/features/accessManagement/roles/deleteRole/abstractions.js\";\nimport {\n RolesPresenter as Abstraction,\n type IRolesPresenter,\n type IRolesPresenterViewModel\n} from \"./abstractions.js\";\nimport { RolesDataSource } from \"./RolesDataSource.js\";\n\nclass RolesPresenterImpl implements IRolesPresenter {\n private _selectedRole: Role | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<Role>,\n private formModelFactory: FormModelFactory.Interface,\n private listRolesUseCase: ListRolesUseCase.Interface,\n private getRoleUseCase: GetRoleUseCase.Interface,\n private createRoleUseCase: CreateRoleUseCase.Interface,\n private updateRoleUseCase: UpdateRoleUseCase.Interface,\n private deleteRoleUseCase: DeleteRoleUseCase.Interface,\n private cache: RolesListCache.Interface\n ) {\n this._form = this.buildForm(false, false);\n makeAutoObservable<\n RolesPresenterImpl,\n | \"formModelFactory\"\n | \"listRolesUseCase\"\n | \"getRoleUseCase\"\n | \"createRoleUseCase\"\n | \"updateRoleUseCase\"\n | \"deleteRoleUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listRolesUseCase: false,\n getRoleUseCase: false,\n createRoleUseCase: false,\n updateRoleUseCase: false,\n deleteRoleUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): IRolesPresenterViewModel {\n const role = this._selectedRole;\n const isSystemRole = role !== null && (role.slug === \"full-access\" || role.system === true);\n const isPluginRole = role !== null && (role.plugin ?? false);\n\n return {\n selectedRole: this._selectedRole,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n canModify: !isSystemRole && !isPluginRole,\n isSystemRole,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<Role> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new RolesDataSource(this.listRolesUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectRole(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n });\n\n try {\n const role = await this.getRoleUseCase.execute(id);\n const isSystemRole = role.slug === \"full-access\" || role.system === true;\n const isPluginRole = role.plugin ?? false;\n const canModify = !isSystemRole && !isPluginRole;\n\n runInAction(() => {\n this._selectedRole = role;\n this._form = this.buildForm(false, canModify, role.id);\n this._form.setData({\n name: role.name,\n slug: role.slug,\n description: role.description,\n permissions: role.permissions || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedRole = null;\n this._form = this.buildForm(true, true, \"new\");\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedRole = null;\n this._showForm = false;\n }\n\n async save(): Promise<Role | null> {\n const data = await this._form.submit<Role>();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const isUpdate = this._selectedRole !== null && this._selectedRole.createdOn;\n\n if (isUpdate) {\n const role = await this.updateRoleUseCase.execute(this._selectedRole!.id, {\n name: data.name as string,\n description: data.description as string,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedRole = role;\n });\n return role;\n } else {\n const role = await this.createRoleUseCase.execute({\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string,\n permissions: data.permissions\n });\n runInAction(() => {\n this._selectedRole = role;\n this._form = this.buildForm(false, true, role.id);\n this._form.setData({\n name: role.name,\n slug: role.slug,\n description: role.description,\n permissions: role.permissions || []\n });\n });\n return role;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteRole(id: string): Promise<void> {\n await this.deleteRoleUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedRole !== null && this._selectedRole.id === id) {\n this._selectedRole = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, canModify: boolean, entityId?: string): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .disabled(!canModify)\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required.\")\n .disabled(!isNew || !canModify),\n description: fields\n .text()\n .label(\"Description\")\n .defaultValue(\"\")\n .renderer(\"textarea\")\n .disabled(!canModify),\n permissions: fields\n .permissions()\n .label(\"Permissions\")\n .renderer(\"permissions\", { id: entityId || \"new\" })\n .hiddenWhen(() => {\n const role = this._selectedRole;\n return (\n role !== null && (role.slug === \"full-access\" || role.system === true)\n );\n })\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"permissions\")\n ]\n });\n }\n}\n\nexport const RolesPresenter = Abstraction.createImplementation({\n implementation: RolesPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListRolesUseCase,\n GetRoleUseCase,\n CreateRoleUseCase,\n UpdateRoleUseCase,\n DeleteRoleUseCase,\n RolesListCache\n ]\n});\n"],"names":["RolesPresenterImpl","_listPresenter","formModelFactory","listRolesUseCase","getRoleUseCase","createRoleUseCase","updateRoleUseCase","deleteRoleUseCase","cache","makeAutoObservable","computed","role","isSystemRole","isPluginRole","dataSource","RolesDataSource","id","runInAction","canModify","data","isUpdate","isNew","entityId","fields","value","form","slugValue","slugify","String","layout","RolesPresenter","Abstraction","ListPresenter","FormModelFactory","ListRolesUseCase","GetRoleUseCase","CreateRoleUseCase","UpdateRoleUseCase","DeleteRoleUseCase","RolesListCache"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
- export declare const RolesView: (() => React.JSX.Element) & {
3
- displayName: string;
2
+ export declare const RolesView: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => React.JSX.Element;
4
4
  };
@@ -119,8 +119,7 @@ class TeamsPresenterImpl {
119
119
  this._selectedTeam = team;
120
120
  });
121
121
  return team;
122
- }
123
- {
122
+ } else {
124
123
  const team = await this.createTeamUseCase.execute({
125
124
  name: data.name,
126
125
  slug: data.slug,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/accessManagement/teams/TeamsPresenter.js","sources":["../../../../src/presentation/accessManagement/teams/TeamsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { Team } from \"~/features/accessManagement/types.js\";\nimport {\n ListTeamsUseCase,\n TeamsListCache\n} from \"~/features/accessManagement/teams/listTeams/abstractions.js\";\nimport { GetTeamUseCase } from \"~/features/accessManagement/teams/getTeam/abstractions.js\";\nimport { CreateTeamUseCase } from \"~/features/accessManagement/teams/createTeam/abstractions.js\";\nimport { UpdateTeamUseCase } from \"~/features/accessManagement/teams/updateTeam/abstractions.js\";\nimport { DeleteTeamUseCase } from \"~/features/accessManagement/teams/deleteTeam/abstractions.js\";\nimport {\n TeamsPresenter as Abstraction,\n type ITeamsPresenter,\n type ITeamsPresenterViewModel\n} from \"./abstractions.js\";\nimport { TeamsDataSource } from \"./TeamsDataSource.js\";\n\nclass TeamsPresenterImpl implements ITeamsPresenter {\n private _selectedTeam: Team | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n private _isNew = false;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<Team>,\n private formModelFactory: FormModelFactory.Interface,\n private listTeamsUseCase: ListTeamsUseCase.Interface,\n private getTeamUseCase: GetTeamUseCase.Interface,\n private createTeamUseCase: CreateTeamUseCase.Interface,\n private updateTeamUseCase: UpdateTeamUseCase.Interface,\n private deleteTeamUseCase: DeleteTeamUseCase.Interface,\n private cache: TeamsListCache.Interface\n ) {\n this._form = this.buildForm(false, true);\n makeAutoObservable<\n TeamsPresenterImpl,\n | \"formModelFactory\"\n | \"listTeamsUseCase\"\n | \"getTeamUseCase\"\n | \"createTeamUseCase\"\n | \"updateTeamUseCase\"\n | \"deleteTeamUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listTeamsUseCase: false,\n getTeamUseCase: false,\n createTeamUseCase: false,\n updateTeamUseCase: false,\n deleteTeamUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): ITeamsPresenterViewModel {\n const team = this._selectedTeam;\n const systemTeam = team !== null && team.system === true;\n const pluginTeam = team !== null && (team.plugin ?? false);\n\n return {\n selectedTeam: this._selectedTeam,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n canModify: !systemTeam && !pluginTeam,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<Team> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new TeamsDataSource(this.listTeamsUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectTeam(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n this._isNew = false;\n });\n\n try {\n const team = await this.getTeamUseCase.execute(id);\n const systemTeam = team.system === true;\n const pluginTeam = team.plugin ?? false;\n const canModify = !systemTeam && !pluginTeam;\n\n runInAction(() => {\n this._selectedTeam = team;\n this._form = this.buildForm(false, canModify);\n this._form.setData({\n name: team.name,\n slug: team.slug,\n description: team.description,\n roles: team.roles || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedTeam = null;\n this._isNew = true;\n this._form = this.buildForm(true, true);\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedTeam = null;\n this._showForm = false;\n }\n\n async save(): Promise<Team | null> {\n const data = await this._form.submit();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const roles = ((data.roles as any[]) || []).map((r: any) =>\n typeof r === \"string\" ? r : r.id\n );\n const isUpdate = this._selectedTeam !== null && this._selectedTeam.createdOn;\n\n if (isUpdate) {\n const team = await this.updateTeamUseCase.execute(this._selectedTeam!.id, {\n name: data.name as string,\n description: data.description as string,\n roles\n });\n runInAction(() => {\n this._selectedTeam = team;\n });\n return team;\n } else {\n const team = await this.createTeamUseCase.execute({\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string,\n roles\n });\n runInAction(() => {\n this._selectedTeam = team;\n this._isNew = false;\n this._form = this.buildForm(false, true);\n this._form.setData({\n name: team.name,\n slug: team.slug,\n description: team.description,\n roles: team.roles || []\n });\n });\n return team;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteTeam(id: string): Promise<void> {\n await this.deleteTeamUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedTeam !== null && this._selectedTeam.id === id) {\n this._selectedTeam = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, canModify: boolean): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .disabled(!canModify)\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required.\")\n .disabled(!isNew || !canModify),\n description: fields\n .text()\n .label(\"Description\")\n .renderer(\"textarea\")\n .defaultValue(\"\")\n .disabled(!canModify),\n roles: fields\n .rolesMultiSelect()\n .label(\"Roles\")\n .required(\"Roles are required.\")\n .disabled(!canModify)\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"roles\")\n ]\n });\n }\n}\n\nexport const TeamsPresenter = Abstraction.createImplementation({\n implementation: TeamsPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListTeamsUseCase,\n GetTeamUseCase,\n CreateTeamUseCase,\n UpdateTeamUseCase,\n DeleteTeamUseCase,\n TeamsListCache\n ]\n});\n"],"names":["TeamsPresenterImpl","_listPresenter","formModelFactory","listTeamsUseCase","getTeamUseCase","createTeamUseCase","updateTeamUseCase","deleteTeamUseCase","cache","makeAutoObservable","computed","team","systemTeam","pluginTeam","dataSource","TeamsDataSource","id","runInAction","canModify","data","roles","r","isUpdate","isNew","fields","value","form","slugValue","slugify","String","layout","TeamsPresenter","Abstraction","ListPresenter","FormModelFactory","ListTeamsUseCase","GetTeamUseCase","CreateTeamUseCase","UpdateTeamUseCase","DeleteTeamUseCase","TeamsListCache"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/accessManagement/teams/TeamsPresenter.js","sources":["../../../../src/presentation/accessManagement/teams/TeamsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport slugify from \"slugify\";\nimport { ListPresenter } from \"~/presentation/listPresenter/abstractions.js\";\nimport { FormModelFactory } from \"~/features/formModel/abstractions.js\";\nimport type { IFormModel } from \"~/features/formModel/abstractions.js\";\nimport type { Team } from \"~/features/accessManagement/types.js\";\nimport {\n ListTeamsUseCase,\n TeamsListCache\n} from \"~/features/accessManagement/teams/listTeams/abstractions.js\";\nimport { GetTeamUseCase } from \"~/features/accessManagement/teams/getTeam/abstractions.js\";\nimport { CreateTeamUseCase } from \"~/features/accessManagement/teams/createTeam/abstractions.js\";\nimport { UpdateTeamUseCase } from \"~/features/accessManagement/teams/updateTeam/abstractions.js\";\nimport { DeleteTeamUseCase } from \"~/features/accessManagement/teams/deleteTeam/abstractions.js\";\nimport {\n TeamsPresenter as Abstraction,\n type ITeamsPresenter,\n type ITeamsPresenterViewModel\n} from \"./abstractions.js\";\nimport { TeamsDataSource } from \"./TeamsDataSource.js\";\n\nclass TeamsPresenterImpl implements ITeamsPresenter {\n private _selectedTeam: Team | null = null;\n private _loading = false;\n private _saving = false;\n private _showForm = false;\n private _form: IFormModel;\n private _isNew = false;\n\n constructor(\n private _listPresenter: ListPresenter.Interface<Team>,\n private formModelFactory: FormModelFactory.Interface,\n private listTeamsUseCase: ListTeamsUseCase.Interface,\n private getTeamUseCase: GetTeamUseCase.Interface,\n private createTeamUseCase: CreateTeamUseCase.Interface,\n private updateTeamUseCase: UpdateTeamUseCase.Interface,\n private deleteTeamUseCase: DeleteTeamUseCase.Interface,\n private cache: TeamsListCache.Interface\n ) {\n this._form = this.buildForm(false, true);\n makeAutoObservable<\n TeamsPresenterImpl,\n | \"formModelFactory\"\n | \"listTeamsUseCase\"\n | \"getTeamUseCase\"\n | \"createTeamUseCase\"\n | \"updateTeamUseCase\"\n | \"deleteTeamUseCase\"\n | \"cache\"\n >(this, {\n formModelFactory: false,\n listTeamsUseCase: false,\n getTeamUseCase: false,\n createTeamUseCase: false,\n updateTeamUseCase: false,\n deleteTeamUseCase: false,\n cache: false,\n vm: computed\n });\n }\n\n get vm(): ITeamsPresenterViewModel {\n const team = this._selectedTeam;\n const systemTeam = team !== null && team.system === true;\n const pluginTeam = team !== null && (team.plugin ?? false);\n\n return {\n selectedTeam: this._selectedTeam,\n loading: this._loading,\n saving: this._saving,\n showForm: this._showForm,\n canModify: !systemTeam && !pluginTeam,\n form: this._form.vm\n };\n }\n\n get list(): ListPresenter.Interface<Team> {\n return this._listPresenter;\n }\n\n init(): void {\n const dataSource = new TeamsDataSource(this.listTeamsUseCase, this.cache);\n\n this._listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 1000\n });\n }\n\n async selectTeam(id: string): Promise<void> {\n runInAction(() => {\n this._loading = true;\n this._showForm = true;\n this._isNew = false;\n });\n\n try {\n const team = await this.getTeamUseCase.execute(id);\n const systemTeam = team.system === true;\n const pluginTeam = team.plugin ?? false;\n const canModify = !systemTeam && !pluginTeam;\n\n runInAction(() => {\n this._selectedTeam = team;\n this._form = this.buildForm(false, canModify);\n this._form.setData({\n name: team.name,\n slug: team.slug,\n description: team.description,\n roles: team.roles || []\n });\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n createNew(): void {\n this._selectedTeam = null;\n this._isNew = true;\n this._form = this.buildForm(true, true);\n this._showForm = true;\n }\n\n deselect(): void {\n this._selectedTeam = null;\n this._showForm = false;\n }\n\n async save(): Promise<Team | null> {\n const data = await this._form.submit();\n if (!data) {\n return null;\n }\n\n runInAction(() => {\n this._saving = true;\n });\n\n try {\n const roles = ((data.roles as any[]) || []).map((r: any) =>\n typeof r === \"string\" ? r : r.id\n );\n const isUpdate = this._selectedTeam !== null && this._selectedTeam.createdOn;\n\n if (isUpdate) {\n const team = await this.updateTeamUseCase.execute(this._selectedTeam!.id, {\n name: data.name as string,\n description: data.description as string,\n roles\n });\n runInAction(() => {\n this._selectedTeam = team;\n });\n return team;\n } else {\n const team = await this.createTeamUseCase.execute({\n name: data.name as string,\n slug: data.slug as string,\n description: data.description as string,\n roles\n });\n runInAction(() => {\n this._selectedTeam = team;\n this._isNew = false;\n this._form = this.buildForm(false, true);\n this._form.setData({\n name: team.name,\n slug: team.slug,\n description: team.description,\n roles: team.roles || []\n });\n });\n return team;\n }\n } catch {\n return null;\n } finally {\n runInAction(() => {\n this._saving = false;\n });\n }\n }\n\n async deleteTeam(id: string): Promise<void> {\n await this.deleteTeamUseCase.execute(id);\n\n runInAction(() => {\n if (this._selectedTeam !== null && this._selectedTeam.id === id) {\n this._selectedTeam = null;\n this._showForm = false;\n }\n });\n }\n\n private buildForm(isNew: boolean, canModify: boolean): IFormModel {\n return this.formModelFactory.create({\n fields: fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .required(\"Name is required.\")\n .disabled(!canModify)\n .onBlur((value, { form }) => {\n const slugValue = form.field(\"slug\").getValue();\n if (slugValue || !value) {\n return;\n }\n form.field(\"slug\").setValue(\n slugify(String(value), {\n replacement: \"-\",\n lower: true,\n remove: /[*#?<>_{}[\\]+~.()'\"!:;@]/g,\n trim: false\n })\n );\n }),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required.\")\n .disabled(!isNew || !canModify),\n description: fields\n .text()\n .label(\"Description\")\n .renderer(\"textarea\")\n .defaultValue(\"\")\n .disabled(!canModify),\n roles: fields\n .rolesMultiSelect()\n .label(\"Roles\")\n .required(\"Roles are required.\")\n .disabled(!canModify)\n }),\n layout: layout => [\n layout.row(\"name\", \"slug\"),\n layout.row(\"description\"),\n layout.row(\"roles\")\n ]\n });\n }\n}\n\nexport const TeamsPresenter = Abstraction.createImplementation({\n implementation: TeamsPresenterImpl,\n dependencies: [\n ListPresenter,\n FormModelFactory,\n ListTeamsUseCase,\n GetTeamUseCase,\n CreateTeamUseCase,\n UpdateTeamUseCase,\n DeleteTeamUseCase,\n TeamsListCache\n ]\n});\n"],"names":["TeamsPresenterImpl","_listPresenter","formModelFactory","listTeamsUseCase","getTeamUseCase","createTeamUseCase","updateTeamUseCase","deleteTeamUseCase","cache","makeAutoObservable","computed","team","systemTeam","pluginTeam","dataSource","TeamsDataSource","id","runInAction","canModify","data","roles","r","isUpdate","isNew","fields","value","form","slugValue","slugify","String","layout","TeamsPresenter","Abstraction","ListPresenter","FormModelFactory","ListTeamsUseCase","GetTeamUseCase","CreateTeamUseCase","UpdateTeamUseCase","DeleteTeamUseCase","TeamsListCache"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
- export declare const TeamsView: (() => React.JSX.Element) & {
3
- displayName: string;
2
+ export declare const TeamsView: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
3
+ readonly type: () => React.JSX.Element;
4
4
  };
@@ -2,7 +2,7 @@ import React from "react";
2
2
  interface SystemInstallerProps {
3
3
  children: React.ReactNode;
4
4
  }
5
- export declare const SystemInstaller: (({ children }: SystemInstallerProps) => React.JSX.Element) & {
6
- displayName: string;
5
+ export declare const SystemInstaller: (({ children }: SystemInstallerProps) => React.JSX.Element) & React.NamedExoticComponent<SystemInstallerProps> & {
6
+ readonly type: ({ children }: SystemInstallerProps) => React.JSX.Element;
7
7
  };
8
8
  export {};