@webiny/app-website-builder 6.6.0-alpha.0 → 6.6.0-alpha.1
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/BaseEditor/commandHandlers/CloneElement.d.ts +1 -0
- package/BaseEditor/commandHandlers/CloneElement.js +17 -0
- package/BaseEditor/commandHandlers/CloneElement.js.map +1 -0
- package/BaseEditor/commandHandlers/index.js +2 -1
- package/BaseEditor/commandHandlers/index.js.map +1 -1
- package/BaseEditor/commands.d.ts +3 -0
- package/BaseEditor/commands.js +2 -0
- package/BaseEditor/commands.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/usePreviewLink.js +4 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/usePreviewLink.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
- package/BaseEditor/defaultConfig/DefaultEditorConfig.js +9 -0
- package/BaseEditor/defaultConfig/DefaultEditorConfig.js.map +1 -1
- package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
- package/BaseEditor/defaultConfig/ElementInputRenderers.js +4 -0
- package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.d.ts +2 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.js +25 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/CloneElementAction.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.d.ts +2 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.js +26 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementActions/DeleteElementAction.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js +12 -2
- package/BaseEditor/defaultConfig/Sidebar/ElementPreview.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js +1 -6
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementInputs.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettings.js +11 -2
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettings.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js +7 -7
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleProperties.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
- package/DocumentEditor/DocumentEditor.d.ts +14 -5
- package/DocumentEditor/DocumentEditor.js +10 -6
- package/DocumentEditor/DocumentEditor.js.map +1 -1
- package/DocumentEditor/StateInspector.d.ts +4 -2
- package/Extension.js +7 -1
- package/Extension.js.map +1 -1
- package/ecommerce/components/ResourcePage.d.ts +6 -2
- package/ecommerce/components/ResourcesList.d.ts +4 -4
- package/ecommerce/components/ResourcesPicker.d.ts +9 -4
- package/editorSdk/CommandBus.js.map +1 -1
- package/editorSdk/utils/$cloneElement.d.ts +2 -0
- package/editorSdk/utils/$cloneElement.js +112 -0
- package/editorSdk/utils/$cloneElement.js.map +1 -0
- package/editorSdk/utils/index.d.ts +1 -0
- package/editorSdk/utils/index.js +1 -0
- package/features/experiments/ExperimentsGateway.d.ts +30 -0
- package/features/experiments/ExperimentsGateway.js +326 -0
- package/features/experiments/ExperimentsGateway.js.map +1 -0
- package/features/experiments/abstractions.d.ts +25 -0
- package/features/experiments/abstractions.js +5 -0
- package/features/experiments/abstractions.js.map +1 -0
- package/features/experiments/feature.d.ts +3 -0
- package/features/experiments/feature.js +17 -0
- package/features/experiments/feature.js.map +1 -0
- package/features/experiments/index.d.ts +3 -0
- package/features/experiments/index.js +2 -0
- package/features/experiments/types.d.ts +61 -0
- package/features/experiments/types.js +0 -0
- package/inputRenderers/ColorPickerInput.d.ts +3 -0
- package/inputRenderers/ColorPickerInput.js +29 -0
- package/inputRenderers/ColorPickerInput.js.map +1 -0
- package/inputRenderers/FileInput.js +93 -8
- package/inputRenderers/FileInput.js.map +1 -1
- package/inputRenderers/LexicalInput/LexicalEditor.js +15 -8
- package/inputRenderers/LexicalInput/LexicalEditor.js.map +1 -1
- package/inputRenderers/LexicalInput/TypographyDropDown.js +3 -2
- package/inputRenderers/LexicalInput/TypographyDropDown.js.map +1 -1
- package/inputRenderers/LexicalInput/wbStaticToolbar.css +72 -103
- package/modules/AbTesting.d.ts +2 -0
- package/modules/AbTesting.js +19 -0
- package/modules/AbTesting.js.map +1 -0
- package/package.json +28 -28
- package/presentation/components/LanguageCodeTag.js +5 -4
- package/presentation/components/LanguageCodeTag.js.map +1 -1
- package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.d.ts +30 -0
- package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.js +202 -0
- package/presentation/experiments/ExperimentForm/ExperimentFormPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.d.ts +65 -0
- package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.js +5 -0
- package/presentation/experiments/ExperimentForm/abstractions/ExperimentFormPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentForm/components/ExperimentFormView.d.ts +12 -0
- package/presentation/experiments/ExperimentForm/components/ExperimentFormView.js +149 -0
- package/presentation/experiments/ExperimentForm/components/ExperimentFormView.js.map +1 -0
- package/presentation/experiments/ExperimentForm/components/VariantSplitRow.d.ts +17 -0
- package/presentation/experiments/ExperimentForm/components/VariantSplitRow.js +122 -0
- package/presentation/experiments/ExperimentForm/components/VariantSplitRow.js.map +1 -0
- package/presentation/experiments/ExperimentForm/feature.d.ts +3 -0
- package/presentation/experiments/ExperimentForm/feature.js +17 -0
- package/presentation/experiments/ExperimentForm/feature.js.map +1 -0
- package/presentation/experiments/ExperimentForm/index.d.ts +3 -0
- package/presentation/experiments/ExperimentForm/index.js +3 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.d.ts +18 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.js +25 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorDataSource.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.d.ts +67 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.js +224 -0
- package/presentation/experiments/ExperimentsEditor/ExperimentsEditorPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.d.ts +10 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.js +5 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorDataSource.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.d.ts +58 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.js +5 -0
- package/presentation/experiments/ExperimentsEditor/abstractions/ExperimentsEditorPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.d.ts +15 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.js +110 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentIndicator.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.d.ts +9 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.js +178 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentPreviewToolbar.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.d.ts +11 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.js +51 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsButton.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.d.ts +14 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.js +147 -0
- package/presentation/experiments/ExperimentsEditor/components/ExperimentsSwitcher.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/feature.d.ts +3 -0
- package/presentation/experiments/ExperimentsEditor/feature.js +21 -0
- package/presentation/experiments/ExperimentsEditor/feature.js.map +1 -0
- package/presentation/experiments/ExperimentsEditor/index.d.ts +4 -0
- package/presentation/experiments/ExperimentsEditor/index.js +3 -0
- package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.d.ts +39 -0
- package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.js +219 -0
- package/presentation/experiments/ExperimentsManager/ExperimentsManagerPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.d.ts +52 -0
- package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.js +5 -0
- package/presentation/experiments/ExperimentsManager/abstractions/ExperimentsManagerPresenter.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentCard.d.ts +10 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentCard.js +296 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentCard.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.d.ts +2 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.js +92 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsDrawerView.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.d.ts +6 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.js +103 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsEmptyState.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.d.ts +9 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.js +58 -0
- package/presentation/experiments/ExperimentsManager/components/ExperimentsListView.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/feature.d.ts +3 -0
- package/presentation/experiments/ExperimentsManager/feature.js +17 -0
- package/presentation/experiments/ExperimentsManager/feature.js.map +1 -0
- package/presentation/experiments/ExperimentsManager/index.d.ts +4 -0
- package/presentation/experiments/ExperimentsManager/index.js +3 -0
- package/presentation/experiments/VariantPageEditorConfig.d.ts +7 -0
- package/presentation/experiments/VariantPageEditorConfig.js +26 -0
- package/presentation/experiments/VariantPageEditorConfig.js.map +1 -0
- package/presentation/experiments/config/ExperimentsEditorConfig.d.ts +8 -0
- package/presentation/experiments/config/ExperimentsEditorConfig.js +21 -0
- package/presentation/experiments/config/ExperimentsEditorConfig.js.map +1 -0
- package/presentation/experiments/config/VariantAutoSave.d.ts +5 -0
- package/presentation/experiments/config/VariantAutoSave.js +41 -0
- package/presentation/experiments/config/VariantAutoSave.js.map +1 -0
- package/presentation/experiments/shared/variantColors.d.ts +11 -0
- package/presentation/experiments/shared/variantColors.js +13 -0
- package/presentation/experiments/shared/variantColors.js.map +1 -0
- package/presentation/experiments/shared/variantDocument.d.ts +16 -0
- package/presentation/experiments/shared/variantDocument.js +31 -0
- package/presentation/experiments/shared/variantDocument.js.map +1 -0
- package/presentation/navigation/Extension.js +9 -5
- package/presentation/navigation/Extension.js.map +1 -1
- package/presentation/navigation/NextjsConfig/NextjsConfigDialog.d.ts +2 -2
- package/presentation/navigation/StarterKitConfigDialog.js +1 -1
- package/presentation/navigation/StarterKitConfigDialog.js.map +1 -1
- package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
- package/presentation/pages/CreatePage/CreatePagePresenter.js +1 -1
- package/presentation/pages/CreatePage/CreatePagePresenter.js.map +1 -1
- package/presentation/pages/CreatePage/WithLanguageSelector.js +3 -3
- package/presentation/pages/CreatePage/WithLanguageSelector.js.map +1 -1
- package/presentation/pages/CreatePage/feature.js +3 -3
- package/presentation/pages/CreatePage/feature.js.map +1 -1
- package/presentation/pages/PageEditor/PageEditor.experiments.d.ts +2 -0
- package/presentation/pages/PageEditor/PageEditor.experiments.js +54 -0
- package/presentation/pages/PageEditor/PageEditor.experiments.js.map +1 -0
- package/presentation/pages/PageEditor/PageEditorSurface.d.ts +15 -0
- package/presentation/pages/PageEditor/PageEditorSurface.js +63 -0
- package/presentation/pages/PageEditor/PageEditorSurface.js.map +1 -0
- package/presentation/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +2 -2
- package/presentation/pages/PageEditor/pageDocument.d.ts +4 -0
- package/presentation/pages/PageEditor/pageDocument.js +15 -0
- package/presentation/pages/PageEditor/pageDocument.js.map +1 -0
- package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
- package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
- package/presentation/pages/PageList/components/PagesList.js +2 -1
- package/presentation/pages/PageList/components/PagesList.js.map +1 -1
- package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
- package/presentation/pages/PageList/components/WbPagesBreadcrumbs.d.ts +9 -0
- package/presentation/pages/PageList/components/WbPagesBreadcrumbs.js +40 -0
- package/presentation/pages/PageList/components/WbPagesBreadcrumbs.js.map +1 -0
- package/presentation/pages/TranslatePage/TranslatePageConfig.d.ts +1 -1
- package/presentation/pages/TranslatePage/TranslatePageConfig.js +6 -2
- package/presentation/pages/TranslatePage/TranslatePageConfig.js.map +1 -1
- package/presentation/pages/TranslatePage/TranslatePageDialog.js +22 -10
- package/presentation/pages/TranslatePage/TranslatePageDialog.js.map +1 -1
- package/presentation/pages/TranslatePage/translatePageSchema.d.ts +1 -1
- package/presentation/pages/TranslatePage/translatePageSchema.js +1 -1
- package/presentation/pages/TranslatePage/translatePageSchema.js.map +1 -1
- package/presentation/pages/TrashBin/WbTrashBin.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
- package/shared/fileManagerItemToValue.d.ts +8 -9
- package/shared/fileManagerItemToValue.js +22 -7
- package/shared/fileManagerItemToValue.js.map +1 -1
- package/inputRenderers/LexicalInput/icons/list-ol.js +0 -20
- package/inputRenderers/LexicalInput/icons/list-ol.js.map +0 -1
- package/inputRenderers/LexicalInput/icons/list-ol.svg +0 -1
- package/inputRenderers/LexicalInput/icons/list-ul.js +0 -18
- package/inputRenderers/LexicalInput/icons/list-ul.js.map +0 -1
- package/inputRenderers/LexicalInput/icons/list-ul.svg +0 -1
- package/static/svg/list-ol.d64946f3.svg +0 -1
- package/static/svg/list-ul.1d54da3f.svg +0 -1
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { ExperimentsGateway } from "./abstractions.js";
|
|
2
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient";
|
|
3
|
+
const EXPERIMENT_FIELDS = `
|
|
4
|
+
id
|
|
5
|
+
entryId
|
|
6
|
+
pageEntryId
|
|
7
|
+
baselineRevisionId
|
|
8
|
+
status
|
|
9
|
+
name
|
|
10
|
+
trafficSplit
|
|
11
|
+
targeting
|
|
12
|
+
analytics
|
|
13
|
+
startedOn
|
|
14
|
+
stoppedOn
|
|
15
|
+
winningVariantId
|
|
16
|
+
`;
|
|
17
|
+
const VARIANT_FIELDS = `
|
|
18
|
+
id
|
|
19
|
+
entryId
|
|
20
|
+
experimentId
|
|
21
|
+
name
|
|
22
|
+
status
|
|
23
|
+
`;
|
|
24
|
+
const VARIANT_CONTENT_FIELDS = `
|
|
25
|
+
${VARIANT_FIELDS}
|
|
26
|
+
properties
|
|
27
|
+
metadata
|
|
28
|
+
bindings
|
|
29
|
+
elements
|
|
30
|
+
extensions
|
|
31
|
+
`;
|
|
32
|
+
const ERROR_FIELDS = `
|
|
33
|
+
code
|
|
34
|
+
message
|
|
35
|
+
data
|
|
36
|
+
`;
|
|
37
|
+
class ExperimentsGatewayImpl {
|
|
38
|
+
constructor(client){
|
|
39
|
+
this.client = client;
|
|
40
|
+
}
|
|
41
|
+
unwrap(envelope, fallbackMessage) {
|
|
42
|
+
if (envelope.error) throw new Error(envelope.error.message || fallbackMessage);
|
|
43
|
+
return envelope.data;
|
|
44
|
+
}
|
|
45
|
+
async listExperiments(pageEntryId) {
|
|
46
|
+
const response = await this.client.execute({
|
|
47
|
+
query: `
|
|
48
|
+
query ListExperiments($pageEntryId: String!) {
|
|
49
|
+
websiteBuilder {
|
|
50
|
+
listExperiments(pageEntryId: $pageEntryId) {
|
|
51
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
52
|
+
error { ${ERROR_FIELDS} }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
`,
|
|
57
|
+
variables: {
|
|
58
|
+
pageEntryId
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return this.unwrap(response.websiteBuilder.listExperiments, "Could not list experiments.") ?? [];
|
|
62
|
+
}
|
|
63
|
+
async getExperiment(id) {
|
|
64
|
+
const response = await this.client.execute({
|
|
65
|
+
query: `
|
|
66
|
+
query GetExperiment($id: ID!) {
|
|
67
|
+
websiteBuilder {
|
|
68
|
+
getExperiment(id: $id) {
|
|
69
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
70
|
+
error { ${ERROR_FIELDS} }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
`,
|
|
75
|
+
variables: {
|
|
76
|
+
id
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return this.unwrap(response.websiteBuilder.getExperiment, "Could not load experiment.");
|
|
80
|
+
}
|
|
81
|
+
async listVariants(experimentId) {
|
|
82
|
+
const response = await this.client.execute({
|
|
83
|
+
query: `
|
|
84
|
+
query ListVariants($experimentId: String!) {
|
|
85
|
+
websiteBuilder {
|
|
86
|
+
listVariants(experimentId: $experimentId) {
|
|
87
|
+
data { ${VARIANT_FIELDS} }
|
|
88
|
+
error { ${ERROR_FIELDS} }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
`,
|
|
93
|
+
variables: {
|
|
94
|
+
experimentId
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return this.unwrap(response.websiteBuilder.listVariants, "Could not list variants.") ?? [];
|
|
98
|
+
}
|
|
99
|
+
async getVariant(id) {
|
|
100
|
+
const response = await this.client.execute({
|
|
101
|
+
query: `
|
|
102
|
+
query GetVariant($id: ID!) {
|
|
103
|
+
websiteBuilder {
|
|
104
|
+
getVariant(id: $id) {
|
|
105
|
+
data { ${VARIANT_CONTENT_FIELDS} }
|
|
106
|
+
error { ${ERROR_FIELDS} }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
`,
|
|
111
|
+
variables: {
|
|
112
|
+
id
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return this.unwrap(response.websiteBuilder.getVariant, "Could not load variant.");
|
|
116
|
+
}
|
|
117
|
+
async createExperiment(input) {
|
|
118
|
+
const response = await this.client.execute({
|
|
119
|
+
query: `
|
|
120
|
+
mutation CreateExperiment($data: WbExperimentCreateInput!) {
|
|
121
|
+
websiteBuilder {
|
|
122
|
+
createExperiment(data: $data) {
|
|
123
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
124
|
+
error { ${ERROR_FIELDS} }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
`,
|
|
129
|
+
variables: {
|
|
130
|
+
data: input
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
return this.unwrap(response.websiteBuilder.createExperiment, "Could not create experiment.");
|
|
134
|
+
}
|
|
135
|
+
async updateExperiment(id, input) {
|
|
136
|
+
const response = await this.client.execute({
|
|
137
|
+
query: `
|
|
138
|
+
mutation UpdateExperiment($id: ID!, $data: WbExperimentUpdateInput!) {
|
|
139
|
+
websiteBuilder {
|
|
140
|
+
updateExperiment(id: $id, data: $data) {
|
|
141
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
142
|
+
error { ${ERROR_FIELDS} }
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
`,
|
|
147
|
+
variables: {
|
|
148
|
+
id,
|
|
149
|
+
data: input
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return this.unwrap(response.websiteBuilder.updateExperiment, "Could not update experiment.");
|
|
153
|
+
}
|
|
154
|
+
async startExperiment(id) {
|
|
155
|
+
const response = await this.client.execute({
|
|
156
|
+
query: `
|
|
157
|
+
mutation StartExperiment($id: ID!) {
|
|
158
|
+
websiteBuilder {
|
|
159
|
+
startExperiment(id: $id) {
|
|
160
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
161
|
+
error { ${ERROR_FIELDS} }
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
`,
|
|
166
|
+
variables: {
|
|
167
|
+
id
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
return this.unwrap(response.websiteBuilder.startExperiment, "Could not start experiment.");
|
|
171
|
+
}
|
|
172
|
+
async stopExperiment(id) {
|
|
173
|
+
const response = await this.client.execute({
|
|
174
|
+
query: `
|
|
175
|
+
mutation StopExperiment($id: ID!) {
|
|
176
|
+
websiteBuilder {
|
|
177
|
+
stopExperiment(id: $id) {
|
|
178
|
+
data { ${EXPERIMENT_FIELDS} }
|
|
179
|
+
error { ${ERROR_FIELDS} }
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
`,
|
|
184
|
+
variables: {
|
|
185
|
+
id
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
return this.unwrap(response.websiteBuilder.stopExperiment, "Could not stop experiment.");
|
|
189
|
+
}
|
|
190
|
+
async deleteExperiment(id) {
|
|
191
|
+
const response = await this.client.execute({
|
|
192
|
+
query: `
|
|
193
|
+
mutation DeleteExperiment($id: ID!) {
|
|
194
|
+
websiteBuilder {
|
|
195
|
+
deleteExperiment(id: $id) {
|
|
196
|
+
data
|
|
197
|
+
error { ${ERROR_FIELDS} }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
`,
|
|
202
|
+
variables: {
|
|
203
|
+
id
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
return this.unwrap(response.websiteBuilder.deleteExperiment, "Could not delete experiment.") ?? false;
|
|
207
|
+
}
|
|
208
|
+
async pauseExperiment(experimentEntryId) {
|
|
209
|
+
const response = await this.client.execute({
|
|
210
|
+
query: `
|
|
211
|
+
mutation PauseExperiment($experimentId: String!) {
|
|
212
|
+
websiteBuilder {
|
|
213
|
+
pauseExperiment(experimentId: $experimentId) {
|
|
214
|
+
data
|
|
215
|
+
error { ${ERROR_FIELDS} }
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
`,
|
|
220
|
+
variables: {
|
|
221
|
+
experimentId: experimentEntryId
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return this.unwrap(response.websiteBuilder.pauseExperiment, "Could not pause experiment.") ?? false;
|
|
225
|
+
}
|
|
226
|
+
async resumeExperiment(experimentEntryId) {
|
|
227
|
+
const response = await this.client.execute({
|
|
228
|
+
query: `
|
|
229
|
+
mutation ResumeExperiment($experimentId: String!) {
|
|
230
|
+
websiteBuilder {
|
|
231
|
+
resumeExperiment(experimentId: $experimentId) {
|
|
232
|
+
data
|
|
233
|
+
error { ${ERROR_FIELDS} }
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
`,
|
|
238
|
+
variables: {
|
|
239
|
+
experimentId: experimentEntryId
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
return this.unwrap(response.websiteBuilder.resumeExperiment, "Could not resume experiment.") ?? false;
|
|
243
|
+
}
|
|
244
|
+
async getExperimentPaused(experimentEntryId) {
|
|
245
|
+
const response = await this.client.execute({
|
|
246
|
+
query: `
|
|
247
|
+
query GetExperimentPaused($experimentId: String!) {
|
|
248
|
+
websiteBuilder {
|
|
249
|
+
getExperimentPaused(experimentId: $experimentId) {
|
|
250
|
+
data
|
|
251
|
+
error { ${ERROR_FIELDS} }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
`,
|
|
256
|
+
variables: {
|
|
257
|
+
experimentId: experimentEntryId
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
return this.unwrap(response.websiteBuilder.getExperimentPaused, "Could not read the experiment status.") ?? false;
|
|
261
|
+
}
|
|
262
|
+
async createVariant(input) {
|
|
263
|
+
const response = await this.client.execute({
|
|
264
|
+
query: `
|
|
265
|
+
mutation CreateVariant($data: WbVariantCreateInput!) {
|
|
266
|
+
websiteBuilder {
|
|
267
|
+
createVariant(data: $data) {
|
|
268
|
+
data { ${VARIANT_FIELDS} }
|
|
269
|
+
error { ${ERROR_FIELDS} }
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
`,
|
|
274
|
+
variables: {
|
|
275
|
+
data: input
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
return this.unwrap(response.websiteBuilder.createVariant, "Could not create variant.");
|
|
279
|
+
}
|
|
280
|
+
async updateVariant(id, input) {
|
|
281
|
+
const response = await this.client.execute({
|
|
282
|
+
query: `
|
|
283
|
+
mutation UpdateVariant($id: ID!, $data: WbVariantUpdateInput!) {
|
|
284
|
+
websiteBuilder {
|
|
285
|
+
updateVariant(id: $id, data: $data) {
|
|
286
|
+
data { ${VARIANT_FIELDS} }
|
|
287
|
+
error { ${ERROR_FIELDS} }
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
`,
|
|
292
|
+
variables: {
|
|
293
|
+
id,
|
|
294
|
+
data: input
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
return this.unwrap(response.websiteBuilder.updateVariant, "Could not update variant.");
|
|
298
|
+
}
|
|
299
|
+
async deleteVariant(id) {
|
|
300
|
+
const response = await this.client.execute({
|
|
301
|
+
query: `
|
|
302
|
+
mutation DeleteVariant($id: ID!) {
|
|
303
|
+
websiteBuilder {
|
|
304
|
+
deleteVariant(id: $id) {
|
|
305
|
+
data
|
|
306
|
+
error { ${ERROR_FIELDS} }
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
`,
|
|
311
|
+
variables: {
|
|
312
|
+
id
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
return this.unwrap(response.websiteBuilder.deleteVariant, "Could not delete variant.") ?? false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
const ExperimentsGateway_ExperimentsGateway = ExperimentsGateway.createImplementation({
|
|
319
|
+
implementation: ExperimentsGatewayImpl,
|
|
320
|
+
dependencies: [
|
|
321
|
+
MainGraphQLClient
|
|
322
|
+
]
|
|
323
|
+
});
|
|
324
|
+
export { ExperimentsGateway_ExperimentsGateway as ExperimentsGateway };
|
|
325
|
+
|
|
326
|
+
//# sourceMappingURL=ExperimentsGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/experiments/ExperimentsGateway.js","sources":["../../../src/features/experiments/ExperimentsGateway.ts"],"sourcesContent":["import { ExperimentsGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type {\n CreateExperimentInput,\n ExperimentDto,\n UpdateExperimentInput,\n UpdateVariantInput,\n VariantContentDto,\n VariantDto\n} from \"./types.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\n\nconst EXPERIMENT_FIELDS = /* GraphQL */ `\n id\n entryId\n pageEntryId\n baselineRevisionId\n status\n name\n trafficSplit\n targeting\n analytics\n startedOn\n stoppedOn\n winningVariantId\n`;\n\nconst VARIANT_FIELDS = /* GraphQL */ `\n id\n entryId\n experimentId\n name\n status\n`;\n\nconst VARIANT_CONTENT_FIELDS = /* GraphQL */ `\n ${VARIANT_FIELDS}\n properties\n metadata\n bindings\n elements\n extensions\n`;\n\nconst ERROR_FIELDS = /* GraphQL */ `\n code\n message\n data\n`;\n\ntype Envelope<T> = { data: T; error: null } | { data: null; error: { message: string } };\n\nclass ExperimentsGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n private unwrap<T>(envelope: Envelope<T>, fallbackMessage: string): T {\n if (envelope.error) {\n throw new Error(envelope.error.message || fallbackMessage);\n }\n return envelope.data as T;\n }\n\n async listExperiments(pageEntryId: string): Promise<ExperimentDto[]> {\n const response = await this.client.execute<{\n websiteBuilder: { listExperiments: Envelope<ExperimentDto[]> };\n }>({\n query: /* GraphQL */ `\n query ListExperiments($pageEntryId: String!) {\n websiteBuilder {\n listExperiments(pageEntryId: $pageEntryId) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { pageEntryId }\n });\n return (\n this.unwrap(response.websiteBuilder.listExperiments, \"Could not list experiments.\") ??\n []\n );\n }\n\n async getExperiment(id: string): Promise<ExperimentDto | null> {\n const response = await this.client.execute<{\n websiteBuilder: { getExperiment: Envelope<ExperimentDto | null> };\n }>({\n query: /* GraphQL */ `\n query GetExperiment($id: ID!) {\n websiteBuilder {\n getExperiment(id: $id) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return this.unwrap(response.websiteBuilder.getExperiment, \"Could not load experiment.\");\n }\n\n async listVariants(experimentId: string): Promise<VariantDto[]> {\n const response = await this.client.execute<{\n websiteBuilder: { listVariants: Envelope<VariantDto[]> };\n }>({\n query: /* GraphQL */ `\n query ListVariants($experimentId: String!) {\n websiteBuilder {\n listVariants(experimentId: $experimentId) {\n data { ${VARIANT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { experimentId }\n });\n return this.unwrap(response.websiteBuilder.listVariants, \"Could not list variants.\") ?? [];\n }\n\n async getVariant(id: string): Promise<VariantContentDto | null> {\n const response = await this.client.execute<{\n websiteBuilder: { getVariant: Envelope<VariantContentDto | null> };\n }>({\n query: /* GraphQL */ `\n query GetVariant($id: ID!) {\n websiteBuilder {\n getVariant(id: $id) {\n data { ${VARIANT_CONTENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return this.unwrap(response.websiteBuilder.getVariant, \"Could not load variant.\");\n }\n\n async createExperiment(input: CreateExperimentInput): Promise<ExperimentDto> {\n const response = await this.client.execute<{\n websiteBuilder: { createExperiment: Envelope<ExperimentDto> };\n }>({\n query: /* GraphQL */ `\n mutation CreateExperiment($data: WbExperimentCreateInput!) {\n websiteBuilder {\n createExperiment(data: $data) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { data: input }\n });\n return this.unwrap(\n response.websiteBuilder.createExperiment,\n \"Could not create experiment.\"\n );\n }\n\n async updateExperiment(id: string, input: UpdateExperimentInput): Promise<ExperimentDto> {\n const response = await this.client.execute<{\n websiteBuilder: { updateExperiment: Envelope<ExperimentDto> };\n }>({\n query: /* GraphQL */ `\n mutation UpdateExperiment($id: ID!, $data: WbExperimentUpdateInput!) {\n websiteBuilder {\n updateExperiment(id: $id, data: $data) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id, data: input }\n });\n return this.unwrap(\n response.websiteBuilder.updateExperiment,\n \"Could not update experiment.\"\n );\n }\n\n async startExperiment(id: string): Promise<ExperimentDto> {\n const response = await this.client.execute<{\n websiteBuilder: { startExperiment: Envelope<ExperimentDto> };\n }>({\n query: /* GraphQL */ `\n mutation StartExperiment($id: ID!) {\n websiteBuilder {\n startExperiment(id: $id) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return this.unwrap(response.websiteBuilder.startExperiment, \"Could not start experiment.\");\n }\n\n async stopExperiment(id: string): Promise<ExperimentDto> {\n const response = await this.client.execute<{\n websiteBuilder: { stopExperiment: Envelope<ExperimentDto> };\n }>({\n query: /* GraphQL */ `\n mutation StopExperiment($id: ID!) {\n websiteBuilder {\n stopExperiment(id: $id) {\n data { ${EXPERIMENT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return this.unwrap(response.websiteBuilder.stopExperiment, \"Could not stop experiment.\");\n }\n\n async deleteExperiment(id: string): Promise<boolean> {\n const response = await this.client.execute<{\n websiteBuilder: { deleteExperiment: Envelope<boolean> };\n }>({\n query: /* GraphQL */ `\n mutation DeleteExperiment($id: ID!) {\n websiteBuilder {\n deleteExperiment(id: $id) {\n data\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return (\n this.unwrap(response.websiteBuilder.deleteExperiment, \"Could not delete experiment.\") ??\n false\n );\n }\n\n async pauseExperiment(experimentEntryId: string): Promise<boolean> {\n const response = await this.client.execute<{\n websiteBuilder: { pauseExperiment: Envelope<boolean> };\n }>({\n query: /* GraphQL */ `\n mutation PauseExperiment($experimentId: String!) {\n websiteBuilder {\n pauseExperiment(experimentId: $experimentId) {\n data\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { experimentId: experimentEntryId }\n });\n return (\n this.unwrap(response.websiteBuilder.pauseExperiment, \"Could not pause experiment.\") ??\n false\n );\n }\n\n async resumeExperiment(experimentEntryId: string): Promise<boolean> {\n const response = await this.client.execute<{\n websiteBuilder: { resumeExperiment: Envelope<boolean> };\n }>({\n query: /* GraphQL */ `\n mutation ResumeExperiment($experimentId: String!) {\n websiteBuilder {\n resumeExperiment(experimentId: $experimentId) {\n data\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { experimentId: experimentEntryId }\n });\n return (\n this.unwrap(response.websiteBuilder.resumeExperiment, \"Could not resume experiment.\") ??\n false\n );\n }\n\n async getExperimentPaused(experimentEntryId: string): Promise<boolean> {\n const response = await this.client.execute<{\n websiteBuilder: { getExperimentPaused: Envelope<boolean> };\n }>({\n query: /* GraphQL */ `\n query GetExperimentPaused($experimentId: String!) {\n websiteBuilder {\n getExperimentPaused(experimentId: $experimentId) {\n data\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { experimentId: experimentEntryId }\n });\n return (\n this.unwrap(\n response.websiteBuilder.getExperimentPaused,\n \"Could not read the experiment status.\"\n ) ?? false\n );\n }\n\n async createVariant(input: { experimentId: string; name: string }): Promise<VariantDto> {\n const response = await this.client.execute<{\n websiteBuilder: { createVariant: Envelope<VariantDto> };\n }>({\n query: /* GraphQL */ `\n mutation CreateVariant($data: WbVariantCreateInput!) {\n websiteBuilder {\n createVariant(data: $data) {\n data { ${VARIANT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { data: input }\n });\n return this.unwrap(response.websiteBuilder.createVariant, \"Could not create variant.\");\n }\n\n async updateVariant(id: string, input: UpdateVariantInput): Promise<VariantDto> {\n const response = await this.client.execute<{\n websiteBuilder: { updateVariant: Envelope<VariantDto> };\n }>({\n query: /* GraphQL */ `\n mutation UpdateVariant($id: ID!, $data: WbVariantUpdateInput!) {\n websiteBuilder {\n updateVariant(id: $id, data: $data) {\n data { ${VARIANT_FIELDS} }\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id, data: input }\n });\n return this.unwrap(response.websiteBuilder.updateVariant, \"Could not update variant.\");\n }\n\n async deleteVariant(id: string): Promise<boolean> {\n const response = await this.client.execute<{\n websiteBuilder: { deleteVariant: Envelope<boolean> };\n }>({\n query: /* GraphQL */ `\n mutation DeleteVariant($id: ID!) {\n websiteBuilder {\n deleteVariant(id: $id) {\n data\n error { ${ERROR_FIELDS} }\n }\n }\n }\n `,\n variables: { id }\n });\n return (\n this.unwrap(response.websiteBuilder.deleteVariant, \"Could not delete variant.\") ?? false\n );\n }\n}\n\nexport const ExperimentsGateway = GatewayAbstraction.createImplementation({\n implementation: ExperimentsGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["EXPERIMENT_FIELDS","VARIANT_FIELDS","VARIANT_CONTENT_FIELDS","ERROR_FIELDS","ExperimentsGatewayImpl","client","envelope","fallbackMessage","Error","pageEntryId","response","id","experimentId","input","experimentEntryId","ExperimentsGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CreateExperimentInput, ExperimentDto, UpdateExperimentInput, UpdateVariantInput, VariantContentDto, VariantDto } from "./types.js";
|
|
2
|
+
export interface IExperimentsGateway {
|
|
3
|
+
listExperiments(pageEntryId: string): Promise<ExperimentDto[]>;
|
|
4
|
+
getExperiment(id: string): Promise<ExperimentDto | null>;
|
|
5
|
+
listVariants(experimentId: string): Promise<VariantDto[]>;
|
|
6
|
+
getVariant(id: string): Promise<VariantContentDto | null>;
|
|
7
|
+
createExperiment(input: CreateExperimentInput): Promise<ExperimentDto>;
|
|
8
|
+
updateExperiment(id: string, input: UpdateExperimentInput): Promise<ExperimentDto>;
|
|
9
|
+
startExperiment(id: string): Promise<ExperimentDto>;
|
|
10
|
+
stopExperiment(id: string): Promise<ExperimentDto>;
|
|
11
|
+
deleteExperiment(id: string): Promise<boolean>;
|
|
12
|
+
pauseExperiment(experimentEntryId: string): Promise<boolean>;
|
|
13
|
+
resumeExperiment(experimentEntryId: string): Promise<boolean>;
|
|
14
|
+
getExperimentPaused(experimentEntryId: string): Promise<boolean>;
|
|
15
|
+
createVariant(input: {
|
|
16
|
+
experimentId: string;
|
|
17
|
+
name: string;
|
|
18
|
+
}): Promise<VariantDto>;
|
|
19
|
+
updateVariant(id: string, input: UpdateVariantInput): Promise<VariantDto>;
|
|
20
|
+
deleteVariant(id: string): Promise<boolean>;
|
|
21
|
+
}
|
|
22
|
+
export declare const ExperimentsGateway: import("@webiny/di").Abstraction<IExperimentsGateway>;
|
|
23
|
+
export declare namespace ExperimentsGateway {
|
|
24
|
+
type Interface = IExperimentsGateway;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/experiments/abstractions.js","sources":["../../../src/features/experiments/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type {\n CreateExperimentInput,\n ExperimentDto,\n UpdateExperimentInput,\n UpdateVariantInput,\n VariantContentDto,\n VariantDto\n} from \"./types.js\";\n\nexport interface IExperimentsGateway {\n listExperiments(pageEntryId: string): Promise<ExperimentDto[]>;\n getExperiment(id: string): Promise<ExperimentDto | null>;\n listVariants(experimentId: string): Promise<VariantDto[]>;\n getVariant(id: string): Promise<VariantContentDto | null>;\n createExperiment(input: CreateExperimentInput): Promise<ExperimentDto>;\n updateExperiment(id: string, input: UpdateExperimentInput): Promise<ExperimentDto>;\n startExperiment(id: string): Promise<ExperimentDto>;\n stopExperiment(id: string): Promise<ExperimentDto>;\n deleteExperiment(id: string): Promise<boolean>;\n // Runtime kill-switch, keyed on the experiment entryId (matches the serving/getPageExperiment id).\n pauseExperiment(experimentEntryId: string): Promise<boolean>;\n resumeExperiment(experimentEntryId: string): Promise<boolean>;\n getExperimentPaused(experimentEntryId: string): Promise<boolean>;\n createVariant(input: { experimentId: string; name: string }): Promise<VariantDto>;\n updateVariant(id: string, input: UpdateVariantInput): Promise<VariantDto>;\n deleteVariant(id: string): Promise<boolean>;\n}\n\nexport const ExperimentsGateway = createAbstraction<IExperimentsGateway>(\n \"WebsiteBuilder/ExperimentsGateway\"\n);\n\nexport namespace ExperimentsGateway {\n export type Interface = IExperimentsGateway;\n}\n"],"names":["ExperimentsGateway","createAbstraction"],"mappings":";AA6BO,MAAMA,qBAAqBC,kBAC9B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { ExperimentsGateway } from "./abstractions.js";
|
|
3
|
+
import { ExperimentsGateway as external_ExperimentsGateway_js_ExperimentsGateway } from "./ExperimentsGateway.js";
|
|
4
|
+
const ExperimentsFeature = createFeature({
|
|
5
|
+
name: "WebsiteBuilder/Experiments",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(external_ExperimentsGateway_js_ExperimentsGateway).inSingletonScope();
|
|
8
|
+
},
|
|
9
|
+
resolve (container) {
|
|
10
|
+
return {
|
|
11
|
+
gateway: container.resolve(ExperimentsGateway)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
export { ExperimentsFeature };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/experiments/feature.js","sources":["../../../src/features/experiments/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ExperimentsGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { ExperimentsGateway } from \"./ExperimentsGateway.js\";\n\nexport const ExperimentsFeature = createFeature({\n name: \"WebsiteBuilder/Experiments\",\n register(container) {\n container.register(ExperimentsGateway).inSingletonScope();\n },\n resolve(container) {\n return {\n gateway: container.resolve(GatewayAbstraction)\n };\n }\n});\n"],"names":["ExperimentsFeature","createFeature","container","ExperimentsGateway","GatewayAbstraction"],"mappings":";;;AAIO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,mDAAoB,gBAAgB;IAC3D;IACA,SAAQD,SAAS;QACb,OAAO;YACH,SAASA,UAAU,OAAO,CAACE;QAC/B;IACJ;AACJ"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface ExperimentDto {
|
|
2
|
+
id: string;
|
|
3
|
+
entryId: string;
|
|
4
|
+
pageEntryId: string;
|
|
5
|
+
baselineRevisionId: string;
|
|
6
|
+
status: string;
|
|
7
|
+
name: string;
|
|
8
|
+
trafficSplit: {
|
|
9
|
+
control: number;
|
|
10
|
+
variants: Record<string, number>;
|
|
11
|
+
} | null;
|
|
12
|
+
targeting: Record<string, any> | null;
|
|
13
|
+
analytics: Record<string, any> | null;
|
|
14
|
+
startedOn: string | null;
|
|
15
|
+
stoppedOn: string | null;
|
|
16
|
+
winningVariantId: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface VariantDto {
|
|
19
|
+
id: string;
|
|
20
|
+
entryId: string;
|
|
21
|
+
experimentId: string;
|
|
22
|
+
name: string;
|
|
23
|
+
status: string;
|
|
24
|
+
}
|
|
25
|
+
/** A variant with its full, editable page content. */
|
|
26
|
+
export interface VariantContentDto extends VariantDto {
|
|
27
|
+
properties: Record<string, any> | null;
|
|
28
|
+
metadata: Record<string, any> | null;
|
|
29
|
+
bindings: Record<string, any> | null;
|
|
30
|
+
elements: Record<string, any> | null;
|
|
31
|
+
extensions: Record<string, any> | null;
|
|
32
|
+
}
|
|
33
|
+
export interface UpdateVariantInput {
|
|
34
|
+
name?: string;
|
|
35
|
+
status?: string;
|
|
36
|
+
properties?: Record<string, any>;
|
|
37
|
+
metadata?: Record<string, any>;
|
|
38
|
+
bindings?: Record<string, any>;
|
|
39
|
+
elements?: Record<string, any>;
|
|
40
|
+
extensions?: Record<string, any>;
|
|
41
|
+
}
|
|
42
|
+
export interface CreateExperimentInput {
|
|
43
|
+
pageEntryId: string;
|
|
44
|
+
baselineRevisionId: string;
|
|
45
|
+
name: string;
|
|
46
|
+
trafficSplit?: {
|
|
47
|
+
control: number;
|
|
48
|
+
variants: Record<string, number>;
|
|
49
|
+
};
|
|
50
|
+
targeting?: Record<string, any>;
|
|
51
|
+
analytics?: Record<string, any>;
|
|
52
|
+
}
|
|
53
|
+
export interface UpdateExperimentInput {
|
|
54
|
+
name?: string;
|
|
55
|
+
trafficSplit?: {
|
|
56
|
+
control: number;
|
|
57
|
+
variants: Record<string, number>;
|
|
58
|
+
};
|
|
59
|
+
targeting?: Record<string, any>;
|
|
60
|
+
analytics?: Record<string, any>;
|
|
61
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { ColorPicker } from "@webiny/admin-ui";
|
|
3
|
+
const ColorPickerInputRenderer = ({ value, onChange, onPreviewChange, input, label })=>{
|
|
4
|
+
const commitValue = (newValue)=>{
|
|
5
|
+
onChange(({ value })=>{
|
|
6
|
+
value.set(newValue);
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
const previewValue = (newValue)=>{
|
|
10
|
+
onPreviewChange(({ value })=>{
|
|
11
|
+
value.set(newValue);
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
return /*#__PURE__*/ react.createElement(ColorPicker, {
|
|
15
|
+
size: "md",
|
|
16
|
+
variant: "secondary",
|
|
17
|
+
value: value,
|
|
18
|
+
onChange: (newValue)=>{
|
|
19
|
+
previewValue(newValue);
|
|
20
|
+
commitValue(newValue);
|
|
21
|
+
},
|
|
22
|
+
label: label,
|
|
23
|
+
hint: input.description,
|
|
24
|
+
note: input.helperText
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
export { ColorPickerInputRenderer };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=ColorPickerInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputRenderers/ColorPickerInput.js","sources":["../../src/inputRenderers/ColorPickerInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { ColorPicker } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\n\nexport const ColorPickerInputRenderer = ({\n value,\n onChange,\n onPreviewChange,\n input,\n label\n}: ElementInputRendererProps) => {\n const commitValue = (newValue: string) => {\n onChange(({ value }) => {\n value.set(newValue);\n });\n };\n\n const previewValue = (newValue: string) => {\n onPreviewChange(({ value }) => {\n value.set(newValue);\n });\n };\n\n return (\n <ColorPicker\n size={\"md\"}\n variant={\"secondary\"}\n value={value}\n onChange={(newValue: string) => {\n previewValue(newValue);\n commitValue(newValue);\n }}\n label={label}\n hint={input.description}\n note={input.helperText}\n />\n );\n};\n"],"names":["ColorPickerInputRenderer","value","onChange","onPreviewChange","input","label","commitValue","newValue","previewValue","ColorPicker"],"mappings":";;AAIO,MAAMA,2BAA2B,CAAC,EACrCC,KAAK,EACLC,QAAQ,EACRC,eAAe,EACfC,KAAK,EACLC,KAAK,EACmB;IACxB,MAAMC,cAAc,CAACC;QACjBL,SAAS,CAAC,EAAED,KAAK,EAAE;YACfA,MAAM,GAAG,CAACM;QACd;IACJ;IAEA,MAAMC,eAAe,CAACD;QAClBJ,gBAAgB,CAAC,EAAEF,KAAK,EAAE;YACtBA,MAAM,GAAG,CAACM;QACd;IACJ;IAEA,OAAO,WAAP,GACI,oBAACE,aAAWA;QACR,MAAM;QACN,SAAS;QACT,OAAOR;QACP,UAAU,CAACM;YACPC,aAAaD;YACbD,YAAYC;QAChB;QACA,OAAOF;QACP,MAAMD,MAAM,WAAW;QACvB,MAAMA,MAAM,UAAU;;AAGlC"}
|