@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.
- package/base/Base/DefaultFieldRenderers.js +4 -0
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/LexicalRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/LexicalRenderer.js +48 -0
- package/base/Base/FieldRenderers/LexicalRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base.js +2 -1
- package/base/Base.js.map +1 -1
- package/base/providers/UiProviders.js +6 -2
- package/base/providers/UiProviders.js.map +1 -1
- package/base/ui/FileManager.d.ts +15 -14
- package/base/ui/FileManager.js +5 -2
- package/base/ui/FileManager.js.map +1 -1
- package/components/LexicalEditor/DefaultLexicalEditorConfig.d.ts +2 -0
- package/components/LexicalEditor/DefaultLexicalEditorConfig.js +81 -0
- package/components/LexicalEditor/DefaultLexicalEditorConfig.js.map +1 -0
- package/components/LexicalEditor/TypographyDropDown.d.ts +8 -0
- package/components/LexicalEditor/TypographyDropDown.js +60 -0
- package/components/LexicalEditor/TypographyDropDown.js.map +1 -0
- package/config/AdminConfig/Menu/MenuItem.d.ts +1 -0
- package/config/AdminConfig/Menu/MenuItem.js +2 -1
- package/config/AdminConfig/Menu/MenuItem.js.map +1 -1
- package/config/AdminConfig/Menu/MenuLink.d.ts +1 -0
- package/config/AdminConfig/Menu/MenuLink.js +2 -1
- package/config/AdminConfig/Menu/MenuLink.js.map +1 -1
- package/config/AdminConfig/Menu.d.ts +2 -0
- package/config/AdminConfig.d.ts +2 -0
- package/config/AdminConfig.js +1 -0
- package/config/AdminConfig.js.map +1 -1
- package/exports/admin/ui/file-manager.d.ts +3 -0
- package/exports/admin/ui/file-manager.js +2 -0
- package/exports/admin/ui/lexical.d.ts +1 -0
- package/exports/admin/ui/lexical.js +1 -0
- package/exports/admin/ui.d.ts +0 -1
- package/exports/admin/ui.js +0 -1
- package/features/fileUrlFormatter/abstractions.d.ts +6 -0
- package/features/fileUrlFormatter/abstractions.js +5 -0
- package/features/fileUrlFormatter/abstractions.js.map +1 -0
- package/features/formModel/FormModel.js +2 -2
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +3 -1
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/demo/FieldRenderersDemoPresenter.js +6 -1
- package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -1
- package/features/formModel/feature.js +2 -1
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/LexicalFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/LexicalFieldType.js +23 -0
- package/features/formModel/fieldTypes/LexicalFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/index.d.ts +1 -0
- package/features/formModel/fieldTypes/index.js +1 -0
- package/features/formModel/renderers.d.ts +1 -0
- package/features/formModel/renderers.js +1 -0
- package/features/newsletter/NewsletterSubscriptionService.d.ts +13 -0
- package/features/newsletter/NewsletterSubscriptionService.js +36 -0
- package/features/newsletter/NewsletterSubscriptionService.js.map +1 -0
- package/features/newsletter/abstractions.d.ts +11 -0
- package/features/newsletter/abstractions.js +5 -0
- package/features/newsletter/abstractions.js.map +1 -0
- package/features/newsletter/index.d.ts +1 -0
- package/features/newsletter/index.js +1 -0
- package/index.d.ts +2 -1
- package/index.js +2 -1
- package/package.json +31 -27
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.d.ts +1 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js +6 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleRestartInstallation.js.map +1 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.d.ts +2 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +27 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -0
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js +4 -4
- package/presentation/installation/components/SystemInstaller/steps/FinishSetup.js.map +1 -1
- package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.d.ts +3 -1
- package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js +9 -3
- package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
- package/presentation/installation/presenters/SystemInstaller/feature.js +2 -0
- package/presentation/installation/presenters/SystemInstaller/feature.js.map +1 -1
- package/presentation/listPresenter/ListPresenter.d.ts +1 -0
- package/presentation/listPresenter/ListPresenter.js +8 -2
- package/presentation/listPresenter/ListPresenter.js.map +1 -1
- package/presentation/listPresenter/feature.js +1 -1
- 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={
|
|
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
|
});
|
package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map
CHANGED
|
@@ -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
|
|
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":"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"}
|
|
@@ -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":"
|
|
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"}
|
|
@@ -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:
|
|
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)
|
|
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)
|
|
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"}
|