@webiny/app-admin 6.4.0-beta.2 → 6.4.0-beta.4

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 (83) hide show
  1. package/base/Base/DefaultFieldRenderers.js +4 -0
  2. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  3. package/base/Base/FieldRenderers/LexicalRenderer.d.ts +12 -0
  4. package/base/Base/FieldRenderers/LexicalRenderer.js +48 -0
  5. package/base/Base/FieldRenderers/LexicalRenderer.js.map +1 -0
  6. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +1 -1
  7. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  8. package/base/Base.js +2 -1
  9. package/base/Base.js.map +1 -1
  10. package/base/providers/UiProviders.js +6 -2
  11. package/base/providers/UiProviders.js.map +1 -1
  12. package/base/ui/FileManager.d.ts +15 -14
  13. package/base/ui/FileManager.js +5 -2
  14. package/base/ui/FileManager.js.map +1 -1
  15. package/components/LexicalEditor/DefaultLexicalEditorConfig.d.ts +2 -0
  16. package/components/LexicalEditor/DefaultLexicalEditorConfig.js +81 -0
  17. package/components/LexicalEditor/DefaultLexicalEditorConfig.js.map +1 -0
  18. package/components/LexicalEditor/TypographyDropDown.d.ts +8 -0
  19. package/components/LexicalEditor/TypographyDropDown.js +60 -0
  20. package/components/LexicalEditor/TypographyDropDown.js.map +1 -0
  21. package/config/AdminConfig/Menu/MenuItem.d.ts +1 -0
  22. package/config/AdminConfig/Menu/MenuItem.js +2 -1
  23. package/config/AdminConfig/Menu/MenuItem.js.map +1 -1
  24. package/config/AdminConfig/Menu/MenuLink.d.ts +1 -0
  25. package/config/AdminConfig/Menu/MenuLink.js +2 -1
  26. package/config/AdminConfig/Menu/MenuLink.js.map +1 -1
  27. package/config/AdminConfig/Menu.d.ts +2 -0
  28. package/config/AdminConfig.d.ts +2 -0
  29. package/config/AdminConfig.js +1 -0
  30. package/config/AdminConfig.js.map +1 -1
  31. package/exports/admin/ui/file-manager.d.ts +3 -0
  32. package/exports/admin/ui/file-manager.js +2 -0
  33. package/exports/admin/ui/lexical.d.ts +1 -0
  34. package/exports/admin/ui/lexical.js +1 -0
  35. package/exports/admin/ui.d.ts +0 -1
  36. package/exports/admin/ui.js +0 -1
  37. package/features/fileUrlFormatter/abstractions.d.ts +6 -0
  38. package/features/fileUrlFormatter/abstractions.js +5 -0
  39. package/features/fileUrlFormatter/abstractions.js.map +1 -0
  40. package/features/formModel/FormModel.js +2 -2
  41. package/features/formModel/FormModel.js.map +1 -1
  42. package/features/formModel/FormModel.test.js +3 -1
  43. package/features/formModel/FormModel.test.js.map +1 -1
  44. package/features/formModel/demo/FieldRenderersDemoPresenter.js +6 -1
  45. package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -1
  46. package/features/formModel/feature.js +2 -1
  47. package/features/formModel/feature.js.map +1 -1
  48. package/features/formModel/fieldTypes/LexicalFieldType.d.ts +19 -0
  49. package/features/formModel/fieldTypes/LexicalFieldType.js +23 -0
  50. package/features/formModel/fieldTypes/LexicalFieldType.js.map +1 -0
  51. package/features/formModel/fieldTypes/index.d.ts +1 -0
  52. package/features/formModel/fieldTypes/index.js +1 -0
  53. package/features/formModel/renderers.d.ts +1 -0
  54. package/features/formModel/renderers.js +1 -0
  55. package/features/newsletter/NewsletterSubscriptionService.d.ts +13 -0
  56. package/features/newsletter/NewsletterSubscriptionService.js +36 -0
  57. package/features/newsletter/NewsletterSubscriptionService.js.map +1 -0
  58. package/features/newsletter/abstractions.d.ts +11 -0
  59. package/features/newsletter/abstractions.js +5 -0
  60. package/features/newsletter/abstractions.js.map +1 -0
  61. package/features/newsletter/index.d.ts +1 -0
  62. package/features/newsletter/index.js +1 -0
  63. package/index.d.ts +2 -1
  64. package/index.js +2 -1
  65. package/package.json +31 -27
  66. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.d.ts +1 -0
  67. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js +6 -0
  68. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js.map +1 -0
  69. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.d.ts +2 -0
  70. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +27 -0
  71. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -0
  72. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +4 -4
  73. package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
  74. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.d.ts +3 -1
  75. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +9 -3
  76. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  77. package/presentation/installation/presenters/SystemInstaller/feature.js +2 -0
  78. package/presentation/installation/presenters/SystemInstaller/feature.js.map +1 -1
  79. package/presentation/listPresenter/ListPresenter.d.ts +1 -0
  80. package/presentation/listPresenter/ListPresenter.js +8 -2
  81. package/presentation/listPresenter/ListPresenter.js.map +1 -1
  82. package/presentation/listPresenter/feature.js +1 -1
  83. package/presentation/listPresenter/feature.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/FinishSetup.js","sources":["../../../../../../src/presentation/installation/components/SystemInstaller/steps/FinishSetup.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Button, Grid, Loader, Alert } from \"@webiny/admin-ui\";\nimport { Center } from \"./Center.js\";\nimport { Container } from \"./Container.js\";\nimport type {\n ErrorObject,\n ISystemInstallerPresenter\n} from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\n\ninterface StepProps {\n error?: ErrorObject;\n isInstalled: boolean;\n installing: boolean;\n installSystem: ISystemInstallerPresenter[\"installSystem\"];\n finishInstallation: ISystemInstallerPresenter[\"finishInstallation\"];\n}\n\nexport const FinishSetupStep = ({\n error,\n isInstalled,\n installing,\n installSystem,\n finishInstallation\n}: StepProps) => {\n useEffect(() => {\n installSystem();\n }, []);\n\n const subtitle = isInstalled\n ? \"Setup complete! Everything went smooth as a breeze!\"\n : \"We're finalizing installation of Webiny...please wait.\";\n\n return (\n <Container title={\"Finish setup\"} message={subtitle}>\n <Center>\n <div style={{ width: 400 }}>\n <Grid>\n {error ? (\n <Grid.Column span={12} className={\"flex flex-col gap-4\"}>\n <Alert type={\"danger\"}>{error.data.reason}</Alert>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"secondary\"}\n size={\"lg\"}\n text={\"Restart installation\"}\n onClick={() => {\n window.location.reload();\n }}\n />\n </Grid.Column>\n ) : (\n <></>\n )}\n {installing ? (\n <Grid.Column span={12}>\n <div className=\"flex flex-col items-center gap-4 mt-8\">\n <Loader\n size=\"lg\"\n variant=\"accent\"\n indeterminate={true}\n text=\"Installing Webiny...\"\n />\n </div>\n </Grid.Column>\n ) : (\n <></>\n )}\n {!error && isInstalled ? (\n <Grid.Column span={12}>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"primary\"}\n size={\"lg\"}\n text={\"Start using Webiny\"}\n onClick={finishInstallation}\n />\n </Grid.Column>\n ) : (\n <></>\n )}\n </Grid>\n </div>\n </Center>\n </Container>\n );\n};\n"],"names":["FinishSetupStep","error","isInstalled","installing","installSystem","finishInstallation","useEffect","subtitle","Container","Center","Grid","Alert","Button","window","Loader"],"mappings":";;;;AAiBO,MAAMA,kBAAkB,CAAC,EAC5BC,KAAK,EACLC,WAAW,EACXC,UAAU,EACVC,aAAa,EACbC,kBAAkB,EACV;IACRC,UAAU;QACNF;IACJ,GAAG,EAAE;IAEL,MAAMG,WAAWL,cACX,wDACA;IAEN,OAAO,WAAP,GACI,oBAACM,WAASA;QAAC,OAAO;QAAgB,SAASD;qBACvC,oBAACE,QAAMA,MAAAA,WAAAA,GACH,oBAAC;QAAI,OAAO;YAAE,OAAO;QAAI;qBACrB,oBAACC,MAAIA,MACAT,QAAQ,WAARA,GACG,oBAACS,KAAK,MAAM;QAAC,MAAM;QAAI,WAAW;qBAC9B,oBAACC,OAAKA;QAAC,MAAM;OAAWV,MAAM,IAAI,CAAC,MAAM,iBACzC,oBAACW,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAAS;YACLC,OAAO,QAAQ,CAAC,MAAM;QAC1B;wBAIR,2CAEHV,aAAa,WAAbA,GACG,oBAACO,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAU;qBACX,oBAACI,QAAMA;QACH,MAAK;QACL,SAAQ;QACR,eAAe;QACf,MAAK;yBAKjB,2CAEH,CAACb,SAASC,cAAc,WAAdA,GACP,oBAACQ,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACE,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAASP;wBAIjB;AAO5B"}
1
+ {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/FinishSetup.js","sources":["../../../../../../src/presentation/installation/components/SystemInstaller/steps/FinishSetup.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { Button, Grid, Loader, Alert } from \"@webiny/admin-ui\";\nimport { Center } from \"./Center.js\";\nimport { Container } from \"./Container.js\";\nimport type {\n ErrorObject,\n ISystemInstallerPresenter\n} from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\nimport { handleStartUsing } from \"./FinishSetup/handleStartUsing.js\";\nimport { handleRestartInstallation } from \"./FinishSetup/handleRestartInstallation.js\";\n\ninterface StepProps {\n error?: ErrorObject;\n isInstalled: boolean;\n installing: boolean;\n installSystem: ISystemInstallerPresenter[\"installSystem\"];\n finishInstallation: ISystemInstallerPresenter[\"finishInstallation\"];\n}\n\nexport const FinishSetupStep = ({\n error,\n isInstalled,\n installing,\n installSystem,\n finishInstallation\n}: StepProps) => {\n useEffect(() => {\n installSystem();\n }, []);\n\n const subtitle = isInstalled\n ? \"Setup complete! Everything went smooth as a breeze!\"\n : \"We're finalizing installation of Webiny...please wait.\";\n\n return (\n <Container title={\"Finish setup\"} message={subtitle}>\n <Center>\n <div style={{ width: 400 }}>\n <Grid>\n {error ? (\n <Grid.Column span={12} className={\"flex flex-col gap-4\"}>\n <Alert type={\"danger\"}>{error.data.reason}</Alert>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"secondary\"}\n size={\"lg\"}\n text={\"Restart installation\"}\n onClick={handleRestartInstallation}\n />\n </Grid.Column>\n ) : (\n <></>\n )}\n {installing ? (\n <Grid.Column span={12}>\n <div className=\"flex flex-col items-center gap-4 mt-8\">\n <Loader\n size=\"lg\"\n variant=\"accent\"\n indeterminate={true}\n text=\"Installing Webiny...\"\n />\n </div>\n </Grid.Column>\n ) : (\n <></>\n )}\n {!error && isInstalled ? (\n <Grid.Column span={12}>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"primary\"}\n size={\"lg\"}\n text={\"Start using Webiny\"}\n onClick={() => handleStartUsing(finishInstallation)}\n />\n </Grid.Column>\n ) : (\n <></>\n )}\n </Grid>\n </div>\n </Center>\n </Container>\n );\n};\n"],"names":["FinishSetupStep","error","isInstalled","installing","installSystem","finishInstallation","useEffect","subtitle","Container","Center","Grid","Alert","Button","handleRestartInstallation","Loader","handleStartUsing"],"mappings":";;;;;;AAmBO,MAAMA,kBAAkB,CAAC,EAC5BC,KAAK,EACLC,WAAW,EACXC,UAAU,EACVC,aAAa,EACbC,kBAAkB,EACV;IACRC,UAAU;QACNF;IACJ,GAAG,EAAE;IAEL,MAAMG,WAAWL,cACX,wDACA;IAEN,OAAO,WAAP,GACI,oBAACM,WAASA;QAAC,OAAO;QAAgB,SAASD;qBACvC,oBAACE,QAAMA,MAAAA,WAAAA,GACH,oBAAC;QAAI,OAAO;YAAE,OAAO;QAAI;qBACrB,oBAACC,MAAIA,MACAT,QAAQ,WAARA,GACG,oBAACS,KAAK,MAAM;QAAC,MAAM;QAAI,WAAW;qBAC9B,oBAACC,OAAKA;QAAC,MAAM;OAAWV,MAAM,IAAI,CAAC,MAAM,iBACzC,oBAACW,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAASC;wBAIjB,2CAEHV,aAAa,WAAbA,GACG,oBAACO,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAU;qBACX,oBAACI,QAAMA;QACH,MAAK;QACL,SAAQ;QACR,eAAe;QACf,MAAK;yBAKjB,2CAEH,CAACb,SAASC,cAAc,WAAdA,GACP,oBAACQ,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACE,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAAS,IAAMG,iBAAiBV;wBAIxC;AAO5B"}
@@ -1,7 +1,9 @@
1
1
  import { SystemInstallerPresenter as Abstraction, SystemInstallerRepository, type SystemInstallerViewModel, type WizardStep } from "./abstractions.js";
2
2
  import { TelemetryService } from "../../../../features/telemetry/index.js";
3
+ import { NewsletterSubscriptionService } from "../../../../features/newsletter/index.js";
3
4
  declare class SystemInstallerPresenterImpl implements Abstraction.Interface {
4
5
  private telemetry;
6
+ private newsletter;
5
7
  private repository;
6
8
  private loading;
7
9
  private isInstalled;
@@ -11,7 +13,7 @@ declare class SystemInstallerPresenterImpl implements Abstraction.Interface {
11
13
  private startUsing;
12
14
  private installerData;
13
15
  private wizardSteps;
14
- constructor(telemetry: TelemetryService.Interface, repository: SystemInstallerRepository.Interface);
16
+ constructor(telemetry: TelemetryService.Interface, newsletter: NewsletterSubscriptionService.Interface, repository: SystemInstallerRepository.Interface);
15
17
  private initialize;
16
18
  get vm(): SystemInstallerViewModel;
17
19
  nextStep: (data?: Record<string, any>) => void;
@@ -2,9 +2,11 @@ import { makeAutoObservable, runInAction, toJS } from "mobx";
2
2
  import { createImplementation } from "@webiny/di";
3
3
  import { SystemInstallerPresenter, SystemInstallerRepository } from "./abstractions.js";
4
4
  import { TelemetryService } from "../../../../features/telemetry/index.js";
5
+ import { NewsletterSubscriptionService } from "../../../../features/newsletter/index.js";
5
6
  class SystemInstallerPresenterImpl {
6
- constructor(telemetry, repository){
7
+ constructor(telemetry, newsletter, repository){
7
8
  this.telemetry = telemetry;
9
+ this.newsletter = newsletter;
8
10
  this.repository = repository;
9
11
  this.loading = true;
10
12
  this.isInstalled = false;
@@ -38,14 +40,17 @@ class SystemInstallerPresenterImpl {
38
40
  }));
39
41
  await this.repository.installSystem(installationInput);
40
42
  await this.telemetry.sendEvent("install-wizard-end", {
41
- project: basicInfo.projectName,
42
- organization: basicInfo.organizationName,
43
43
  referralSource: basicInfo.referralSource
44
44
  });
45
45
  runInAction(()=>{
46
46
  this.isInstalled = true;
47
47
  this.installing = false;
48
48
  });
49
+ this.newsletter.subscribe({
50
+ email: installerData.Cognito.email,
51
+ firstName: installerData.Cognito.firstName,
52
+ lastName: installerData.Cognito.lastName
53
+ });
49
54
  } catch (error) {
50
55
  runInAction(()=>{
51
56
  this.error = error;
@@ -123,6 +128,7 @@ const SystemInstallerPresenter_SystemInstallerPresenter = createImplementation({
123
128
  implementation: SystemInstallerPresenterImpl,
124
129
  dependencies: [
125
130
  TelemetryService,
131
+ NewsletterSubscriptionService,
126
132
  SystemInstallerRepository
127
133
  ]
128
134
  });
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n SystemInstallerPresenter as Abstraction,\n InstallationInput,\n SystemInstallerRepository,\n type SystemInstallerViewModel,\n type WizardStep,\n type WizardStepState,\n type ErrorObject\n} from \"./abstractions.js\";\nimport { TelemetryService } from \"~/features/telemetry/index.js\";\n\nclass SystemInstallerPresenterImpl implements Abstraction.Interface {\n private loading = true;\n private isInstalled = false;\n private currentStep = 0;\n private error: ErrorObject | undefined = undefined;\n private installing = false;\n private startUsing = false;\n private installerData: Record<string, any> = {};\n private wizardSteps: WizardStep[];\n\n constructor(\n private telemetry: TelemetryService.Interface,\n private repository: SystemInstallerRepository.Interface\n ) {\n // TODO: Wizard steps need to be implemented via plugins, but this will do for now.\n this.wizardSteps = [\n { name: \"introduction\", label: \"Introduction\" },\n { name: \"basic-info\", label: \"Basic info\" },\n process.env.REACT_APP_IDP_TYPE === \"cognito\"\n ? { name: \"admin-account\", label: \"Admin account\" }\n : undefined,\n { name: \"finish\", label: \"Finish setup\" }\n ].filter(Boolean) as WizardStep[];\n\n makeAutoObservable(this, {}, { autoBind: true });\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const isInstalled = await this.repository.isSystemInstalled();\n runInAction(() => {\n this.isInstalled = isInstalled;\n this.startUsing = isInstalled;\n this.loading = false;\n });\n\n if (!isInstalled) {\n await this.telemetry.sendEvent(\"install-wizard-start\");\n }\n } catch {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n get vm(): SystemInstallerViewModel {\n return {\n error: this.error,\n loading: this.loading,\n isInstalled: this.isInstalled,\n startUsing: this.startUsing,\n currentStep: this.wizardSteps[this.currentStep].name,\n steps: this.wizardSteps.map((step, index) => {\n let state: WizardStepState = \"idle\";\n if (index === this.currentStep) {\n state = \"current\";\n }\n\n if (index < this.currentStep) {\n state = \"completed\";\n }\n\n return {\n ...step,\n state\n };\n }),\n installing: this.installing\n };\n }\n\n nextStep = (data: Record<string, any> = {}): void => {\n if (this.currentStep < this.wizardSteps.length - 1) {\n Object.assign(this.installerData, data ?? {});\n this.currentStep++;\n }\n };\n\n previousStep = (): void => {\n if (this.currentStep > 0) {\n this.currentStep--;\n }\n };\n\n goToStep = (name: WizardStep[\"name\"]): void => {\n const stepIndex = this.wizardSteps.findIndex(step => step.name === name);\n\n if (stepIndex > -1) {\n this.currentStep = stepIndex;\n }\n };\n\n installSystem = async (): Promise<void> => {\n runInAction(() => {\n this.installing = true;\n });\n try {\n const { basicInfo, ...installerData } = toJS(this.installerData);\n const installationInput: InstallationInput = Object.keys(installerData).map(key => {\n return {\n app: key,\n data: installerData[key]\n };\n });\n await this.repository.installSystem(installationInput);\n\n await this.telemetry.sendEvent(\"install-wizard-end\", {\n project: basicInfo.projectName,\n organization: basicInfo.organizationName,\n referralSource: basicInfo.referralSource\n });\n\n runInAction(() => {\n this.isInstalled = true;\n this.installing = false;\n });\n } catch (error) {\n runInAction(() => {\n this.error = error;\n this.installing = false;\n console.log(\"error\", error);\n });\n }\n };\n\n finishInstallation = () => {\n this.startUsing = true;\n };\n}\n\nexport const SystemInstallerPresenter = createImplementation({\n abstraction: Abstraction,\n implementation: SystemInstallerPresenterImpl,\n dependencies: [TelemetryService, SystemInstallerRepository]\n});\n"],"names":["SystemInstallerPresenterImpl","telemetry","repository","undefined","data","Object","name","stepIndex","step","runInAction","basicInfo","installerData","toJS","installationInput","key","error","console","process","Boolean","makeAutoObservable","isInstalled","index","state","SystemInstallerPresenter","createImplementation","Abstraction","TelemetryService","SystemInstallerRepository"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n SystemInstallerPresenter as Abstraction,\n InstallationInput,\n SystemInstallerRepository,\n type SystemInstallerViewModel,\n type WizardStep,\n type WizardStepState,\n type ErrorObject\n} from \"./abstractions.js\";\nimport { TelemetryService } from \"~/features/telemetry/index.js\";\nimport { NewsletterSubscriptionService } from \"~/features/newsletter/index.js\";\n\nclass SystemInstallerPresenterImpl implements Abstraction.Interface {\n private loading = true;\n private isInstalled = false;\n private currentStep = 0;\n private error: ErrorObject | undefined = undefined;\n private installing = false;\n private startUsing = false;\n private installerData: Record<string, any> = {};\n private wizardSteps: WizardStep[];\n\n constructor(\n private telemetry: TelemetryService.Interface,\n private newsletter: NewsletterSubscriptionService.Interface,\n private repository: SystemInstallerRepository.Interface\n ) {\n // TODO: Wizard steps need to be implemented via plugins, but this will do for now.\n this.wizardSteps = [\n { name: \"introduction\", label: \"Introduction\" },\n { name: \"basic-info\", label: \"Basic info\" },\n process.env.REACT_APP_IDP_TYPE === \"cognito\"\n ? { name: \"admin-account\", label: \"Admin account\" }\n : undefined,\n { name: \"finish\", label: \"Finish setup\" }\n ].filter(Boolean) as WizardStep[];\n\n makeAutoObservable(this, {}, { autoBind: true });\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const isInstalled = await this.repository.isSystemInstalled();\n runInAction(() => {\n this.isInstalled = isInstalled;\n this.startUsing = isInstalled;\n this.loading = false;\n });\n\n if (!isInstalled) {\n await this.telemetry.sendEvent(\"install-wizard-start\");\n }\n } catch {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n get vm(): SystemInstallerViewModel {\n return {\n error: this.error,\n loading: this.loading,\n isInstalled: this.isInstalled,\n startUsing: this.startUsing,\n currentStep: this.wizardSteps[this.currentStep].name,\n steps: this.wizardSteps.map((step, index) => {\n let state: WizardStepState = \"idle\";\n if (index === this.currentStep) {\n state = \"current\";\n }\n\n if (index < this.currentStep) {\n state = \"completed\";\n }\n\n return {\n ...step,\n state\n };\n }),\n installing: this.installing\n };\n }\n\n nextStep = (data: Record<string, any> = {}): void => {\n if (this.currentStep < this.wizardSteps.length - 1) {\n Object.assign(this.installerData, data ?? {});\n this.currentStep++;\n }\n };\n\n previousStep = (): void => {\n if (this.currentStep > 0) {\n this.currentStep--;\n }\n };\n\n goToStep = (name: WizardStep[\"name\"]): void => {\n const stepIndex = this.wizardSteps.findIndex(step => step.name === name);\n\n if (stepIndex > -1) {\n this.currentStep = stepIndex;\n }\n };\n\n installSystem = async (): Promise<void> => {\n runInAction(() => {\n this.installing = true;\n });\n try {\n const { basicInfo, ...installerData } = toJS(this.installerData);\n const installationInput: InstallationInput = Object.keys(installerData).map(key => {\n return {\n app: key,\n data: installerData[key]\n };\n });\n await this.repository.installSystem(installationInput);\n\n // We intentionally do NOT send `projectName` or `organizationName` to\n // telemetry — those are user-typed free-text fields that risk\n // identifying the user's company. Only the categorical\n // `referralSource` is forwarded for funnel attribution.\n await this.telemetry.sendEvent(\"install-wizard-end\", {\n referralSource: basicInfo.referralSource\n });\n\n runInAction(() => {\n this.isInstalled = true;\n this.installing = false;\n });\n\n // ToS acceptance in the basic-info step covers consent. Fire-and-forget\n // so a slow/failed newsletter call never blocks the wizard.\n this.newsletter.subscribe({\n email: installerData.Cognito.email,\n firstName: installerData.Cognito.firstName,\n lastName: installerData.Cognito.lastName\n });\n } catch (error) {\n runInAction(() => {\n this.error = error;\n this.installing = false;\n console.log(\"error\", error);\n });\n }\n };\n\n finishInstallation = () => {\n this.startUsing = true;\n };\n}\n\nexport const SystemInstallerPresenter = createImplementation({\n abstraction: Abstraction,\n implementation: SystemInstallerPresenterImpl,\n dependencies: [TelemetryService, NewsletterSubscriptionService, SystemInstallerRepository]\n});\n"],"names":["SystemInstallerPresenterImpl","telemetry","newsletter","repository","undefined","data","Object","name","stepIndex","step","runInAction","basicInfo","installerData","toJS","installationInput","key","error","console","process","Boolean","makeAutoObservable","isInstalled","index","state","SystemInstallerPresenter","createImplementation","Abstraction","TelemetryService","NewsletterSubscriptionService","SystemInstallerRepository"],"mappings":";;;;;AAcA,MAAMA;IAUF,YACYC,SAAqC,EACrCC,UAAmD,EACnDC,UAA+C,CACzD;aAHUF,SAAS,GAATA;aACAC,UAAU,GAAVA;aACAC,UAAU,GAAVA;aAZJ,OAAO,GAAG;aACV,WAAW,GAAG;aACd,WAAW,GAAG;aACd,KAAK,GAA4BC;aACjC,UAAU,GAAG;aACb,UAAU,GAAG;aACb,aAAa,GAAwB,CAAC;aAuE9C,QAAQ,GAAG,CAACC,OAA4B,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;gBAChDC,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,EAAED,QAAQ,CAAC;gBAC3C,IAAI,CAAC,WAAW;YACpB;QACJ;aAEA,YAAY,GAAG;YACX,IAAI,IAAI,CAAC,WAAW,GAAG,GACnB,IAAI,CAAC,WAAW;QAExB;aAEA,QAAQ,GAAG,CAACE;YACR,MAAMC,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAACC,CAAAA,OAAQA,KAAK,IAAI,KAAKF;YAEnE,IAAIC,YAAY,IACZ,IAAI,CAAC,WAAW,GAAGA;QAE3B;aAEA,aAAa,GAAG;YACZE,YAAY;gBACR,IAAI,CAAC,UAAU,GAAG;YACtB;YACA,IAAI;gBACA,MAAM,EAAEC,SAAS,EAAE,GAAGC,eAAe,GAAGC,KAAK,IAAI,CAAC,aAAa;gBAC/D,MAAMC,oBAAuCR,OAAO,IAAI,CAACM,eAAe,GAAG,CAACG,CAAAA,MACjE;wBACH,KAAKA;wBACL,MAAMH,aAAa,CAACG,IAAI;oBAC5B;gBAEJ,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAACD;gBAMpC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB;oBACjD,gBAAgBH,UAAU,cAAc;gBAC5C;gBAEAD,YAAY;oBACR,IAAI,CAAC,WAAW,GAAG;oBACnB,IAAI,CAAC,UAAU,GAAG;gBACtB;gBAIA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;oBACtB,OAAOE,cAAc,OAAO,CAAC,KAAK;oBAClC,WAAWA,cAAc,OAAO,CAAC,SAAS;oBAC1C,UAAUA,cAAc,OAAO,CAAC,QAAQ;gBAC5C;YACJ,EAAE,OAAOI,OAAO;gBACZN,YAAY;oBACR,IAAI,CAAC,KAAK,GAAGM;oBACb,IAAI,CAAC,UAAU,GAAG;oBAClBC,QAAQ,GAAG,CAAC,SAASD;gBACzB;YACJ;QACJ;aAEA,kBAAkB,GAAG;YACjB,IAAI,CAAC,UAAU,GAAG;QACtB;QAhII,IAAI,CAAC,WAAW,GAAG;YACf;gBAAE,MAAM;gBAAgB,OAAO;YAAe;YAC9C;gBAAE,MAAM;gBAAc,OAAO;YAAa;YACP,cAAnCE,QAAQ,GAAG,CAAC,kBAAkB,GACxB;gBAAE,MAAM;gBAAiB,OAAO;YAAgB,IAChDd;YACN;gBAAE,MAAM;gBAAU,OAAO;YAAe;SAC3C,CAAC,MAAM,CAACe;QAETC,mBAAmB,IAAI,EAAE,CAAC,GAAG;YAAE,UAAU;QAAK;QAC9C,IAAI,CAAC,UAAU;IACnB;IAEA,MAAc,aAA4B;QACtCV,YAAY;YACR,IAAI,CAAC,OAAO,GAAG;QACnB;QAEA,IAAI;YACA,MAAMW,cAAc,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB;YAC3DX,YAAY;gBACR,IAAI,CAAC,WAAW,GAAGW;gBACnB,IAAI,CAAC,UAAU,GAAGA;gBAClB,IAAI,CAAC,OAAO,GAAG;YACnB;YAEA,IAAI,CAACA,aACD,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAEvC,EAAE,OAAM;YACJX,YAAY;gBACR,IAAI,CAAC,OAAO,GAAG;YACnB;QACJ;IACJ;IAEA,IAAI,KAA+B;QAC/B,OAAO;YACH,OAAO,IAAI,CAAC,KAAK;YACjB,SAAS,IAAI,CAAC,OAAO;YACrB,aAAa,IAAI,CAAC,WAAW;YAC7B,YAAY,IAAI,CAAC,UAAU;YAC3B,aAAa,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI;YACpD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAACD,MAAMa;gBAC/B,IAAIC,QAAyB;gBAC7B,IAAID,UAAU,IAAI,CAAC,WAAW,EAC1BC,QAAQ;gBAGZ,IAAID,QAAQ,IAAI,CAAC,WAAW,EACxBC,QAAQ;gBAGZ,OAAO;oBACH,GAAGd,IAAI;oBACPc;gBACJ;YACJ;YACA,YAAY,IAAI,CAAC,UAAU;QAC/B;IACJ;AAqEJ;AAEO,MAAMC,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgB1B;IAChB,cAAc;QAAC2B;QAAkBC;QAA+BC;KAA0B;AAC9F"}
@@ -3,12 +3,14 @@ import { SystemInstallerPresenter } from "./abstractions.js";
3
3
  import { SystemInstallerGateway } from "./SystemInstallerGateway.js";
4
4
  import { SystemInstallerRepository } from "./SystemInstallerRepository.js";
5
5
  import { SystemInstallerPresenter as external_SystemInstallerPresenter_js_SystemInstallerPresenter } from "./SystemInstallerPresenter.js";
6
+ import { NewsletterSubscriptionService } from "../../../../features/newsletter/NewsletterSubscriptionService.js";
6
7
  const SystemInstallerFeature = createFeature({
7
8
  name: "SystemInstaller",
8
9
  register (container) {
9
10
  container.register(SystemInstallerGateway).inSingletonScope();
10
11
  container.register(SystemInstallerRepository).inSingletonScope();
11
12
  container.register(external_SystemInstallerPresenter_js_SystemInstallerPresenter).inSingletonScope();
13
+ container.register(NewsletterSubscriptionService).inSingletonScope();
12
14
  },
13
15
  resolve (container) {
14
16
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/presenters/SystemInstaller/feature.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { Container } from \"@webiny/di\";\nimport { SystemInstallerPresenter as SystemInstallerPresenterAbstraction } from \"./abstractions.js\";\nimport { SystemInstallerGateway } from \"./SystemInstallerGateway.js\";\nimport { SystemInstallerRepository } from \"./SystemInstallerRepository.js\";\nimport { SystemInstallerPresenter } from \"./SystemInstallerPresenter.js\";\n\nexport const SystemInstallerFeature = createFeature({\n name: \"SystemInstaller\",\n register(container: Container) {\n container.register(SystemInstallerGateway).inSingletonScope();\n container.register(SystemInstallerRepository).inSingletonScope();\n container.register(SystemInstallerPresenter).inSingletonScope();\n },\n resolve(container: Container) {\n return {\n presenter: container.resolve(SystemInstallerPresenterAbstraction)\n };\n }\n});\n"],"names":["SystemInstallerFeature","createFeature","container","SystemInstallerGateway","SystemInstallerRepository","SystemInstallerPresenter","SystemInstallerPresenterAbstraction"],"mappings":";;;;;AAOO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC,wBAAwB,gBAAgB;QAC3DD,UAAU,QAAQ,CAACE,2BAA2B,gBAAgB;QAC9DF,UAAU,QAAQ,CAACG,+DAA0B,gBAAgB;IACjE;IACA,SAAQH,SAAoB;QACxB,OAAO;YACH,WAAWA,UAAU,OAAO,CAACI;QACjC;IACJ;AACJ"}
1
+ {"version":3,"file":"presentation/installation/presenters/SystemInstaller/feature.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { Container } from \"@webiny/di\";\nimport { SystemInstallerPresenter as SystemInstallerPresenterAbstraction } from \"./abstractions.js\";\nimport { SystemInstallerGateway } from \"./SystemInstallerGateway.js\";\nimport { SystemInstallerRepository } from \"./SystemInstallerRepository.js\";\nimport { SystemInstallerPresenter } from \"./SystemInstallerPresenter.js\";\nimport { NewsletterSubscriptionService } from \"~/features/newsletter/NewsletterSubscriptionService.js\";\n\nexport const SystemInstallerFeature = createFeature({\n name: \"SystemInstaller\",\n register(container: Container) {\n container.register(SystemInstallerGateway).inSingletonScope();\n container.register(SystemInstallerRepository).inSingletonScope();\n container.register(SystemInstallerPresenter).inSingletonScope();\n container.register(NewsletterSubscriptionService).inSingletonScope();\n },\n resolve(container: Container) {\n return {\n presenter: container.resolve(SystemInstallerPresenterAbstraction)\n };\n }\n});\n"],"names":["SystemInstallerFeature","createFeature","container","SystemInstallerGateway","SystemInstallerRepository","SystemInstallerPresenter","NewsletterSubscriptionService","SystemInstallerPresenterAbstraction"],"mappings":";;;;;;AAQO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC,wBAAwB,gBAAgB;QAC3DD,UAAU,QAAQ,CAACE,2BAA2B,gBAAgB;QAC9DF,UAAU,QAAQ,CAACG,+DAA0B,gBAAgB;QAC7DH,UAAU,QAAQ,CAACI,+BAA+B,gBAAgB;IACtE;IACA,SAAQJ,SAAoB;QACxB,OAAO;YACH,WAAWA,UAAU,OAAO,CAACK;QACjC;IACJ;AACJ"}
@@ -12,6 +12,7 @@ declare class ListPresenterImpl<TRow> implements IListPresenter<TRow> {
12
12
  private _requeryScheduled;
13
13
  private _limit;
14
14
  private _initialized;
15
+ private _loadingMore;
15
16
  constructor();
16
17
  get vm(): IListViewModel<TRow>;
17
18
  actions: IListActions;
@@ -14,6 +14,7 @@ class ListPresenterImpl {
14
14
  this._requeryScheduled = false;
15
15
  this._limit = void 0;
16
16
  this._initialized = false;
17
+ this._loadingMore = false;
17
18
  this.actions = {
18
19
  search: {
19
20
  set: (query)=>{
@@ -77,6 +78,7 @@ class ListPresenterImpl {
77
78
  if (!this._dataSource) return;
78
79
  const meta = this._dataSource.meta;
79
80
  if (!meta.hasMoreItems || this._dataSource.loading) return;
81
+ this._loadingMore = true;
80
82
  try {
81
83
  await this._dataSource.loadMore(this.buildQuery(meta.cursor));
82
84
  runInAction(()=>{
@@ -86,6 +88,10 @@ class ListPresenterImpl {
86
88
  runInAction(()=>{
87
89
  this._error = this.toListError(err);
88
90
  });
91
+ } finally{
92
+ runInAction(()=>{
93
+ this._loadingMore = false;
94
+ });
89
95
  }
90
96
  },
91
97
  refresh: async ()=>{
@@ -116,8 +122,8 @@ class ListPresenterImpl {
116
122
  appliedQuery: this._appliedQuery,
117
123
  pagination: {
118
124
  hasMore: meta.hasMoreItems,
119
- loading,
120
- loadingMore: false,
125
+ loading: loading && !this._loadingMore,
126
+ loadingMore: this._loadingMore,
121
127
  totalCount: meta.totalCount,
122
128
  currentCount: rows.length
123
129
  },
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/listPresenter/ListPresenter.js","sources":["../../../src/presentation/listPresenter/ListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport {\n ListPresenter as Abstraction,\n type IListPresenter,\n type IListPresenterConfig,\n type IListViewModel,\n type IListActions,\n type IListError,\n type IDataSource,\n type IDataSourceQuery\n} from \"./abstractions.js\";\nimport { SelectionController } from \"./SelectionController.js\";\n\nclass ListPresenterImpl<TRow> implements IListPresenter<TRow> {\n private _sort: { field: string; direction: \"ASC\" | \"DESC\" } | null = null;\n private _filters: Record<string, unknown> = {};\n private _search = \"\";\n private _selection: SelectionController<TRow>;\n private _error: IListError | null = null;\n private _appliedQuery: IDataSourceQuery | null = null;\n private _dataSource: IDataSource<TRow> | null = null;\n private _debounceMs = 300;\n private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private _requeryScheduled = false;\n private _limit: number | undefined = undefined;\n private _initialized = false;\n\n constructor() {\n this._selection = new SelectionController<TRow>(\n () => this._dataSource?.rows ?? [],\n row => this.getRowId(row)\n );\n\n makeAutoObservable<ListPresenterImpl<TRow>, \"_debounceTimer\">(this, {\n _debounceTimer: false,\n vm: computed\n });\n }\n\n get vm(): IListViewModel<TRow> {\n const ds = this._dataSource;\n const rows = ds ? ds.rows : [];\n const meta = ds ? ds.meta : { cursor: null, hasMoreItems: false, totalCount: 0 };\n const loading = ds ? ds.loading : false;\n const hasFilters = Object.keys(this._filters).length > 0 || this._search.length > 0;\n\n return {\n rows,\n sort: this._sort,\n filters: this._filters,\n search: this._search,\n appliedQuery: this._appliedQuery,\n pagination: {\n hasMore: meta.hasMoreItems,\n loading,\n loadingMore: false,\n totalCount: meta.totalCount,\n currentCount: rows.length\n },\n selection: {\n selectedIds: this._selection.selectedIds,\n selectedCount: this._selection.selectedCount,\n allSelected: this._selection.allSelected\n },\n empty: rows.length === 0 && !loading,\n emptyWithFilters: rows.length === 0 && !loading && hasFilters,\n error: this._error\n };\n }\n\n actions: IListActions = {\n search: {\n set: (query: string) => {\n if (this._search === query) {\n return;\n }\n this._search = query;\n this.debouncedRequery();\n },\n clear: () => {\n if (this._search === \"\") {\n return;\n }\n this._search = \"\";\n this.requery();\n }\n },\n sort: {\n set: (field: string, direction: \"ASC\" | \"DESC\") => {\n this._sort = { field, direction };\n this.requery();\n },\n toggle: (field: string) => {\n if (this._sort && this._sort.field === field) {\n this._sort = {\n field,\n direction: this._sort.direction === \"ASC\" ? \"DESC\" : \"ASC\"\n };\n } else {\n this._sort = { field, direction: \"ASC\" };\n }\n this.requery();\n }\n },\n filter: {\n set: (key: string, value: unknown) => {\n this._filters = { ...this._filters, [key]: value };\n this.requery();\n },\n clear: (key: string) => {\n const { [key]: _, ...rest } = this._filters;\n this._filters = rest;\n this.requery();\n },\n clearAll: () => {\n this._filters = {};\n this.requery();\n }\n },\n selection: {\n toggle: (id: string) => this._selection.toggle(id),\n selectRangeTo: (id: string) => this._selection.selectRangeTo(id),\n selectAll: () => this._selection.selectAll(),\n deselectAll: () => this._selection.deselectAll(),\n selectRows: (ids: string[]) => this._selection.selectRows(ids),\n isSelected: (id: string) => this._selection.isSelected(id)\n },\n loadMore: async () => {\n if (!this._dataSource) {\n return;\n }\n const meta = this._dataSource.meta;\n if (!meta.hasMoreItems || this._dataSource.loading) {\n return;\n }\n try {\n await this._dataSource.loadMore(this.buildQuery(meta.cursor));\n runInAction(() => {\n this._error = null;\n });\n } catch (err) {\n runInAction(() => {\n this._error = this.toListError(err);\n });\n }\n },\n refresh: async () => {\n await this.executeQuery();\n }\n };\n\n init(config: IListPresenterConfig<TRow>): void {\n this._dataSource = config.dataSource;\n this._sort = config.initialSort ?? null;\n this._filters = config.initialFilters ?? {};\n this._debounceMs = config.debounceMs ?? 300;\n this._limit = config.limit;\n this._search = \"\";\n this._appliedQuery = null;\n this._selection.reset();\n this._initialized = true;\n this.executeQuery();\n }\n\n private buildQuery(cursor?: string | null): IDataSourceQuery {\n return {\n search: this._search || undefined,\n filters: Object.keys(this._filters).length > 0 ? this._filters : undefined,\n sort: this._sort ?? undefined,\n cursor: cursor ?? undefined,\n limit: this._limit\n };\n }\n\n private async executeQuery(): Promise<void> {\n if (!this._dataSource) {\n return;\n }\n this._error = null;\n const query = this.buildQuery();\n try {\n await this._dataSource.query(query);\n runInAction(() => {\n this._appliedQuery = query;\n });\n } catch (err) {\n runInAction(() => {\n this._error = this.toListError(err);\n });\n }\n }\n\n private requery(): void {\n this.clearDebounce();\n this._selection.reset();\n\n if (!this._requeryScheduled) {\n this._requeryScheduled = true;\n queueMicrotask(() => {\n this._requeryScheduled = false;\n this.executeQuery();\n });\n }\n }\n\n private debouncedRequery(): void {\n this.clearDebounce();\n this._debounceTimer = setTimeout(() => {\n this._selection.reset();\n this.executeQuery();\n }, this._debounceMs);\n }\n\n private clearDebounce(): void {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer);\n this._debounceTimer = null;\n }\n }\n\n private getRowId(row: TRow): string {\n return (row as any).id;\n }\n\n private toListError(err: unknown): IListError {\n if (err instanceof Error) {\n return { code: \"UNKNOWN\", message: err.message, retryable: true };\n }\n return { code: \"UNKNOWN\", message: String(err), retryable: true };\n }\n}\n\nexport const ListPresenter = Abstraction.createImplementation({\n implementation: ListPresenterImpl,\n dependencies: []\n});\n"],"names":["ListPresenterImpl","undefined","query","field","direction","key","value","_","rest","id","ids","meta","runInAction","err","SelectionController","row","makeAutoObservable","computed","ds","rows","loading","hasFilters","Object","config","cursor","queueMicrotask","setTimeout","clearTimeout","Error","String","ListPresenter","Abstraction"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/listPresenter/ListPresenter.js","sources":["../../../src/presentation/listPresenter/ListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport {\n ListPresenter as Abstraction,\n type IListPresenter,\n type IListPresenterConfig,\n type IListViewModel,\n type IListActions,\n type IListError,\n type IDataSource,\n type IDataSourceQuery\n} from \"./abstractions.js\";\nimport { SelectionController } from \"./SelectionController.js\";\n\nclass ListPresenterImpl<TRow> implements IListPresenter<TRow> {\n private _sort: { field: string; direction: \"ASC\" | \"DESC\" } | null = null;\n private _filters: Record<string, unknown> = {};\n private _search = \"\";\n private _selection: SelectionController<TRow>;\n private _error: IListError | null = null;\n private _appliedQuery: IDataSourceQuery | null = null;\n private _dataSource: IDataSource<TRow> | null = null;\n private _debounceMs = 300;\n private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private _requeryScheduled = false;\n private _limit: number | undefined = undefined;\n private _initialized = false;\n private _loadingMore = false;\n\n constructor() {\n this._selection = new SelectionController<TRow>(\n () => this._dataSource?.rows ?? [],\n row => this.getRowId(row)\n );\n\n makeAutoObservable<ListPresenterImpl<TRow>, \"_debounceTimer\">(this, {\n _debounceTimer: false,\n vm: computed\n });\n }\n\n get vm(): IListViewModel<TRow> {\n const ds = this._dataSource;\n const rows = ds ? ds.rows : [];\n const meta = ds ? ds.meta : { cursor: null, hasMoreItems: false, totalCount: 0 };\n const loading = ds ? ds.loading : false;\n const hasFilters = Object.keys(this._filters).length > 0 || this._search.length > 0;\n\n return {\n rows,\n sort: this._sort,\n filters: this._filters,\n search: this._search,\n appliedQuery: this._appliedQuery,\n pagination: {\n hasMore: meta.hasMoreItems,\n loading: loading && !this._loadingMore,\n loadingMore: this._loadingMore,\n totalCount: meta.totalCount,\n currentCount: rows.length\n },\n selection: {\n selectedIds: this._selection.selectedIds,\n selectedCount: this._selection.selectedCount,\n allSelected: this._selection.allSelected\n },\n empty: rows.length === 0 && !loading,\n emptyWithFilters: rows.length === 0 && !loading && hasFilters,\n error: this._error\n };\n }\n\n actions: IListActions = {\n search: {\n set: (query: string) => {\n if (this._search === query) {\n return;\n }\n this._search = query;\n this.debouncedRequery();\n },\n clear: () => {\n if (this._search === \"\") {\n return;\n }\n this._search = \"\";\n this.requery();\n }\n },\n sort: {\n set: (field: string, direction: \"ASC\" | \"DESC\") => {\n this._sort = { field, direction };\n this.requery();\n },\n toggle: (field: string) => {\n if (this._sort && this._sort.field === field) {\n this._sort = {\n field,\n direction: this._sort.direction === \"ASC\" ? \"DESC\" : \"ASC\"\n };\n } else {\n this._sort = { field, direction: \"ASC\" };\n }\n this.requery();\n }\n },\n filter: {\n set: (key: string, value: unknown) => {\n this._filters = { ...this._filters, [key]: value };\n this.requery();\n },\n clear: (key: string) => {\n const { [key]: _, ...rest } = this._filters;\n this._filters = rest;\n this.requery();\n },\n clearAll: () => {\n this._filters = {};\n this.requery();\n }\n },\n selection: {\n toggle: (id: string) => this._selection.toggle(id),\n selectRangeTo: (id: string) => this._selection.selectRangeTo(id),\n selectAll: () => this._selection.selectAll(),\n deselectAll: () => this._selection.deselectAll(),\n selectRows: (ids: string[]) => this._selection.selectRows(ids),\n isSelected: (id: string) => this._selection.isSelected(id)\n },\n loadMore: async () => {\n if (!this._dataSource) {\n return;\n }\n const meta = this._dataSource.meta;\n if (!meta.hasMoreItems || this._dataSource.loading) {\n return;\n }\n this._loadingMore = true;\n try {\n await this._dataSource.loadMore(this.buildQuery(meta.cursor));\n runInAction(() => {\n this._error = null;\n });\n } catch (err) {\n runInAction(() => {\n this._error = this.toListError(err);\n });\n } finally {\n runInAction(() => {\n this._loadingMore = false;\n });\n }\n },\n refresh: async () => {\n await this.executeQuery();\n }\n };\n\n init(config: IListPresenterConfig<TRow>): void {\n this._dataSource = config.dataSource;\n this._sort = config.initialSort ?? null;\n this._filters = config.initialFilters ?? {};\n this._debounceMs = config.debounceMs ?? 300;\n this._limit = config.limit;\n this._search = \"\";\n this._appliedQuery = null;\n this._selection.reset();\n this._initialized = true;\n this.executeQuery();\n }\n\n private buildQuery(cursor?: string | null): IDataSourceQuery {\n return {\n search: this._search || undefined,\n filters: Object.keys(this._filters).length > 0 ? this._filters : undefined,\n sort: this._sort ?? undefined,\n cursor: cursor ?? undefined,\n limit: this._limit\n };\n }\n\n private async executeQuery(): Promise<void> {\n if (!this._dataSource) {\n return;\n }\n this._error = null;\n const query = this.buildQuery();\n try {\n await this._dataSource.query(query);\n runInAction(() => {\n this._appliedQuery = query;\n });\n } catch (err) {\n runInAction(() => {\n this._error = this.toListError(err);\n });\n }\n }\n\n private requery(): void {\n this.clearDebounce();\n this._selection.reset();\n\n if (!this._requeryScheduled) {\n this._requeryScheduled = true;\n queueMicrotask(() => {\n this._requeryScheduled = false;\n this.executeQuery();\n });\n }\n }\n\n private debouncedRequery(): void {\n this.clearDebounce();\n this._debounceTimer = setTimeout(() => {\n this._selection.reset();\n this.executeQuery();\n }, this._debounceMs);\n }\n\n private clearDebounce(): void {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer);\n this._debounceTimer = null;\n }\n }\n\n private getRowId(row: TRow): string {\n return (row as any).id;\n }\n\n private toListError(err: unknown): IListError {\n if (err instanceof Error) {\n return { code: \"UNKNOWN\", message: err.message, retryable: true };\n }\n return { code: \"UNKNOWN\", message: String(err), retryable: true };\n }\n}\n\nexport const ListPresenter = Abstraction.createImplementation({\n implementation: ListPresenterImpl,\n dependencies: []\n});\n"],"names":["ListPresenterImpl","undefined","query","field","direction","key","value","_","rest","id","ids","meta","runInAction","err","SelectionController","row","makeAutoObservable","computed","ds","rows","loading","hasFilters","Object","config","cursor","queueMicrotask","setTimeout","clearTimeout","Error","String","ListPresenter","Abstraction"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { ListPresenter as external_ListPresenter_js_ListPresenter } from "./List
4
4
  const ListPresenterFeature = createFeature({
5
5
  name: "ListPresenter",
6
6
  register (container) {
7
- container.register(external_ListPresenter_js_ListPresenter).inSingletonScope();
7
+ container.register(external_ListPresenter_js_ListPresenter);
8
8
  },
9
9
  resolve (container) {
10
10
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/listPresenter/feature.js","sources":["../../../src/presentation/listPresenter/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ListPresenter as Abstraction } from \"./abstractions.js\";\nimport { ListPresenter } from \"./ListPresenter.js\";\n\nexport const ListPresenterFeature = createFeature({\n name: \"ListPresenter\",\n register(container) {\n container.register(ListPresenter).inSingletonScope();\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstraction)\n };\n }\n});\n"],"names":["ListPresenterFeature","createFeature","container","ListPresenter","Abstraction"],"mappings":";;;AAIO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,yCAAe,gBAAgB;IACtD;IACA,SAAQD,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACE;QACjC;IACJ;AACJ"}
1
+ {"version":3,"file":"presentation/listPresenter/feature.js","sources":["../../../src/presentation/listPresenter/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ListPresenter as Abstraction } from \"./abstractions.js\";\nimport { ListPresenter } from \"./ListPresenter.js\";\n\nexport const ListPresenterFeature = createFeature({\n name: \"ListPresenter\",\n register(container) {\n container.register(ListPresenter);\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstraction)\n };\n }\n});\n"],"names":["ListPresenterFeature","createFeature","container","ListPresenter","Abstraction"],"mappings":";;;AAIO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;IACA,SAAQD,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACE;QACjC;IACJ;AACJ"}