@umbraco-engage/backoffice 17.0.0-rc1 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/ab-testing/test/collection/elements/ab-test-variant-name-column-layout.element.d.ts +4 -2
  2. package/dist/ab-testing/test/components/ab-testing-test-card.element.js +3 -0
  3. package/dist/ab-testing/test/components/split-url-picker/ab-testing-test-split-url-picker.element.js +4 -2
  4. package/dist/ab-testing/test/components/test-advice/ab-testing-test-indication.element.js +2 -2
  5. package/dist/ab-testing/test/components/variant-picker/ab-testing-test-variant-picker.element.js +44 -5
  6. package/dist/ab-testing/test/conditions/constants.d.ts +1 -0
  7. package/dist/ab-testing/test/conditions/constants.js +1 -0
  8. package/dist/ab-testing/test/conditions/document-save-and-publish-visibility.condition.d.ts +7 -0
  9. package/dist/ab-testing/test/conditions/document-save-and-publish-visibility.condition.js +12 -0
  10. package/dist/ab-testing/test/conditions/index.d.ts +1 -0
  11. package/dist/ab-testing/test/conditions/index.js +1 -0
  12. package/dist/ab-testing/test/conditions/manifests.d.ts +7 -0
  13. package/dist/ab-testing/test/conditions/manifests.js +10 -0
  14. package/dist/ab-testing/test/index.d.ts +1 -0
  15. package/dist/ab-testing/test/index.js +1 -0
  16. package/dist/ab-testing/test/manifests.d.ts +6 -1
  17. package/dist/ab-testing/test/manifests.js +2 -0
  18. package/dist/ab-testing/test/repository/detail/ab-testing-test-detail-server.data-source.d.ts +1 -1
  19. package/dist/ab-testing/test/repository/detail/ab-testing-test-detail-server.data-source.js +2 -3
  20. package/dist/ab-testing/test/workspace/ab-testing-test-workspace.context.d.ts +1 -1
  21. package/dist/ab-testing/test/workspace/ab-testing-test-workspace.context.js +2 -6
  22. package/dist/ab-testing/test/workspace/actions/ab-test-action-base.d.ts +0 -1
  23. package/dist/ab-testing/test/workspace/actions/ab-test-action-base.js +0 -9
  24. package/dist/ab-testing/test/workspace/actions/index.d.ts +0 -1
  25. package/dist/ab-testing/test/workspace/actions/index.js +0 -1
  26. package/dist/ab-testing/test/workspace/actions/manifests.js +5 -13
  27. package/dist/ab-testing/test/workspace/actions/unschedule-test-action.js +0 -1
  28. package/dist/ab-testing/test/workspace/conditions/ab-testing-can-disable.condition.d.ts +8 -0
  29. package/dist/ab-testing/test/workspace/conditions/ab-testing-can-disable.condition.js +25 -0
  30. package/dist/ab-testing/test/workspace/conditions/ab-testing-can-preview.condition.d.ts +8 -0
  31. package/dist/ab-testing/test/workspace/conditions/ab-testing-can-preview.condition.js +31 -0
  32. package/dist/ab-testing/test/workspace/conditions/constants.d.ts +2 -0
  33. package/dist/ab-testing/test/workspace/conditions/constants.js +2 -0
  34. package/dist/ab-testing/test/workspace/conditions/manifests.js +13 -1
  35. package/dist/ab-testing/test/workspace/entity-actions/disable-variant.action.d.ts +8 -0
  36. package/dist/ab-testing/test/workspace/entity-actions/disable-variant.action.js +37 -0
  37. package/dist/ab-testing/test/workspace/entity-actions/manifests.d.ts +29 -0
  38. package/dist/ab-testing/test/workspace/entity-actions/manifests.js +34 -0
  39. package/dist/ab-testing/test/workspace/entity-actions/preview-variant.action.d.ts +8 -0
  40. package/dist/ab-testing/test/workspace/entity-actions/preview-variant.action.js +32 -0
  41. package/dist/ab-testing/test/workspace/manifests.d.ts +9 -2
  42. package/dist/ab-testing/test/workspace/manifests.js +5 -2
  43. package/dist/ab-testing/test/workspace/views/edit/ab-testing-test-editor.element.js +30 -6
  44. package/dist/ab-testing/test/workspace/views/scoring/ab-testing-test-scoring.element.js +49 -79
  45. package/dist/analytics/analytics-context.js +4 -0
  46. package/dist/analytics/components/heatmap/heatmap.element.d.ts +0 -2
  47. package/dist/analytics/components/heatmap/heatmap.element.js +24 -29
  48. package/dist/analytics/screens/heatmap-screen.element.js +23 -3
  49. package/dist/core/components/group-box/group-box.element.js +12 -5
  50. package/dist/core/components/scoring/entities.d.ts +4 -0
  51. package/dist/core/components/scoring/scoring-base.element.d.ts +3 -2
  52. package/dist/core/components/scoring/scoring-base.element.js +147 -25
  53. package/dist/core/components/tooltip/tooltip-element.js +2 -2
  54. package/dist/core/context/entities.d.ts +1 -0
  55. package/dist/core/context/workspace-context-base.d.ts +1 -1
  56. package/dist/core/context/workspace-context-base.js +12 -9
  57. package/dist/core/entities.d.ts +1 -0
  58. package/dist/core/lang/{en-us.js → en.js} +8 -1
  59. package/dist/core/lang/manifests.js +1 -1
  60. package/dist/core/path/edit-variant-workspace-path-pattern.class.js +8 -0
  61. package/dist/core/property/property-dataset-renderer.controller.d.ts +4 -0
  62. package/dist/core/property/property-dataset-renderer.controller.js +9 -0
  63. package/dist/generated/client/client.gen.d.ts +2 -0
  64. package/dist/generated/client/client.gen.js +228 -0
  65. package/dist/generated/client/index.d.ts +8 -0
  66. package/dist/generated/client/index.js +6 -0
  67. package/dist/generated/client/types.gen.d.ts +117 -0
  68. package/dist/generated/client/types.gen.js +2 -0
  69. package/dist/generated/client/utils.gen.d.ts +33 -0
  70. package/dist/generated/client/utils.gen.js +233 -0
  71. package/dist/generated/client.gen.d.ts +2 -2
  72. package/dist/generated/client.gen.js +2 -5
  73. package/dist/generated/core/auth.gen.d.ts +18 -0
  74. package/dist/generated/core/auth.gen.js +14 -0
  75. package/dist/generated/core/bodySerializer.gen.d.ts +25 -0
  76. package/dist/generated/core/bodySerializer.gen.js +57 -0
  77. package/dist/generated/core/params.gen.d.ts +43 -0
  78. package/dist/generated/core/params.gen.js +100 -0
  79. package/dist/generated/core/pathSerializer.gen.d.ts +33 -0
  80. package/dist/generated/core/pathSerializer.gen.js +114 -0
  81. package/dist/generated/core/queryKeySerializer.gen.d.ts +18 -0
  82. package/dist/generated/core/queryKeySerializer.gen.js +99 -0
  83. package/dist/generated/core/serverSentEvents.gen.d.ts +71 -0
  84. package/dist/generated/core/serverSentEvents.gen.js +135 -0
  85. package/dist/generated/core/types.gen.d.ts +78 -0
  86. package/dist/generated/core/types.gen.js +2 -0
  87. package/dist/generated/core/utils.gen.d.ts +19 -0
  88. package/dist/generated/core/utils.gen.js +87 -0
  89. package/dist/generated/sdk.gen.d.ts +135 -135
  90. package/dist/generated/sdk.gen.js +134 -804
  91. package/dist/generated/types.gen.d.ts +73 -8
  92. package/dist/index.js +6 -5
  93. package/dist/personalization/actions/entity-delete-base.action.d.ts +41 -0
  94. package/dist/personalization/actions/entity-delete-base.action.js +45 -0
  95. package/dist/personalization/actions/grouped-item-delete.action.d.ts +3 -3
  96. package/dist/personalization/actions/grouped-item-delete.action.js +9 -20
  97. package/dist/personalization/actions/grouped-item-edit.action.d.ts +3 -2
  98. package/dist/personalization/actions/grouped-item-edit.action.js +13 -20
  99. package/dist/personalization/actions/grouped-item-entity-edit-base.action.d.ts +13 -0
  100. package/dist/personalization/actions/grouped-item-entity-edit-base.action.js +45 -0
  101. package/dist/personalization/actions/index.d.ts +3 -3
  102. package/dist/personalization/actions/index.js +3 -3
  103. package/dist/personalization/actions/{applied-personalization-base.action.d.ts → personalization-base.action.d.ts} +2 -2
  104. package/dist/personalization/actions/{applied-personalization-base.action.js → personalization-base.action.js} +8 -6
  105. package/dist/personalization/applied-personalization/actions/delete.action.d.ts +2 -3
  106. package/dist/personalization/applied-personalization/actions/delete.action.js +8 -17
  107. package/dist/personalization/applied-personalization/actions/edit.action.d.ts +1 -1
  108. package/dist/personalization/applied-personalization/actions/edit.action.js +1 -1
  109. package/dist/personalization/applied-personalization/actions/preview.action.d.ts +1 -1
  110. package/dist/personalization/applied-personalization/actions/preview.action.js +1 -1
  111. package/dist/personalization/applied-personalization/index.d.ts +0 -1
  112. package/dist/personalization/applied-personalization/index.js +0 -1
  113. package/dist/personalization/campaign-scoring/campaign-group/collection/actions/campaign-group-delete.action.d.ts +9 -0
  114. package/dist/personalization/campaign-scoring/campaign-group/collection/actions/campaign-group-delete.action.js +16 -0
  115. package/dist/personalization/campaign-scoring/campaign-group/collection/manifests.js +9 -0
  116. package/dist/personalization/campaign-scoring/campaign-group/repository/detail/index.d.ts +1 -1
  117. package/dist/personalization/campaign-scoring/campaign-group/repository/detail/index.js +1 -1
  118. package/dist/personalization/campaign-scoring/campaign-group/repository/item/index.d.ts +1 -1
  119. package/dist/personalization/campaign-scoring/campaign-group/repository/item/index.js +1 -1
  120. package/dist/personalization/components/grouped-item/grouped-item-detail-editor-base.element.d.ts +3 -4
  121. package/dist/personalization/components/grouped-item/grouped-item-detail-editor-base.element.js +1 -6
  122. package/dist/personalization/components/grouped-item/grouped-item-list-editor-base.element.d.ts +8 -8
  123. package/dist/personalization/components/grouped-item/grouped-item-list-editor-base.element.js +33 -81
  124. package/dist/personalization/components/grouped-item/grouped-item-workspace-editor-base.element.d.ts +6 -11
  125. package/dist/personalization/components/grouped-item/grouped-item-workspace-editor-base.element.js +8 -13
  126. package/dist/personalization/components/grouped-scoring/collection/group-table-collection-view-base.element.js +15 -0
  127. package/dist/personalization/content-scoring/workspace/content-scoring-workspace-editor.element.d.ts +2 -2
  128. package/dist/personalization/content-scoring/workspace/content-scoring-workspace-editor.element.js +56 -130
  129. package/dist/personalization/content-scoring/workspace/content-scoring-workspace.context.d.ts +5 -5
  130. package/dist/personalization/content-scoring/workspace/content-scoring-workspace.context.js +25 -34
  131. package/dist/personalization/context/grouped-items-workspace-context.interface.d.ts +0 -2
  132. package/dist/personalization/context/grouped-items-workspace.context.d.ts +1 -4
  133. package/dist/personalization/context/grouped-items-workspace.context.js +7 -11
  134. package/dist/personalization/journeys/actions/delete.action.d.ts +8 -0
  135. package/dist/personalization/journeys/actions/delete.action.js +13 -0
  136. package/dist/personalization/journeys/actions/edit.action.d.ts +8 -0
  137. package/dist/personalization/journeys/actions/edit.action.js +12 -0
  138. package/dist/personalization/journeys/actions/manifests.d.ts +22 -0
  139. package/dist/personalization/journeys/actions/manifests.js +25 -0
  140. package/dist/personalization/journeys/constants.d.ts +1 -1
  141. package/dist/personalization/journeys/constants.js +1 -1
  142. package/dist/personalization/journeys/manifests.js +3 -1
  143. package/dist/personalization/journeys/workspace/customer-journey-workspace-editor.element.d.ts +0 -3
  144. package/dist/personalization/journeys/workspace/customer-journey-workspace-editor.element.js +1 -10
  145. package/dist/personalization/journeys/workspace/customer-journey-workspace.context.d.ts +1 -7
  146. package/dist/personalization/journeys/workspace/customer-journey-workspace.context.js +7 -6
  147. package/dist/personalization/journeys/workspace/views/edit/customer-journey-editor.element.js +4 -2
  148. package/dist/personalization/journeys/workspace/views/edit/customer-journey-steps-list-editor.element.d.ts +1 -0
  149. package/dist/personalization/journeys/workspace/views/edit/customer-journey-steps-list-editor.element.js +14 -4
  150. package/dist/personalization/personalized-variants/editor-view/personalized-variants-editor-view.element.js +2 -2
  151. package/dist/personalization/personalized-variants/workspace/personalized-variant-workspace.context.js +3 -7
  152. package/dist/personalization/personas/actions/delete.action.d.ts +8 -0
  153. package/dist/personalization/personas/actions/delete.action.js +13 -0
  154. package/dist/personalization/personas/actions/edit.action.d.ts +8 -0
  155. package/dist/personalization/personas/actions/edit.action.js +12 -0
  156. package/dist/personalization/personas/actions/manifests.d.ts +22 -0
  157. package/dist/personalization/personas/actions/manifests.js +25 -0
  158. package/dist/personalization/personas/constants.d.ts +2 -2
  159. package/dist/personalization/personas/constants.js +2 -2
  160. package/dist/personalization/personas/manifests.js +6 -4
  161. package/dist/personalization/personas/repository/detail/persona-group-detail-server.data-source.js +0 -2
  162. package/dist/personalization/personas/workspace/persona-group-workspace-editor.element.d.ts +0 -3
  163. package/dist/personalization/personas/workspace/persona-group-workspace-editor.element.js +1 -10
  164. package/dist/personalization/personas/workspace/persona-group-workspace.context.d.ts +1 -7
  165. package/dist/personalization/personas/workspace/persona-group-workspace.context.js +7 -6
  166. package/dist/personalization/personas/workspace/views/edit/persona-group-personas-list-editor.element.d.ts +1 -0
  167. package/dist/personalization/personas/workspace/views/edit/persona-group-personas-list-editor.element.js +14 -4
  168. package/dist/personalization/referral-scoring/manifests.js +1 -4
  169. package/dist/personalization/referral-scoring/referral-group/actions/delete.action.d.ts +9 -0
  170. package/dist/personalization/referral-scoring/referral-group/actions/delete.action.js +16 -0
  171. package/dist/personalization/referral-scoring/referral-group/manifests.js +10 -0
  172. package/dist/personalization/segments/actions/delete.action.d.ts +3 -4
  173. package/dist/personalization/segments/actions/delete.action.js +9 -21
  174. package/dist/personalization/segments/rules/base/segment-rule-base-grouped-extended-checkbox.element.d.ts +1 -1
  175. package/dist/profiles/insights/campaigns/campaigns-list.element.d.ts +1 -0
  176. package/dist/profiles/insights/campaigns/campaigns-list.element.js +9 -1
  177. package/dist/profiles/insights/customer-journeys/customer-journeys.element.js +3 -2
  178. package/dist/profiles/insights/engage-profile-insight.interface.js +7 -1
  179. package/dist/profiles/insights/goals/goals-table-collection-view.element.js +1 -1
  180. package/dist/profiles/insights/manifests.js +2 -0
  181. package/dist/profiles/insights/persona-groups/persona-groups.element.js +3 -2
  182. package/dist/reporting/components/reporting-chart-card/reporting-chart-card.element.d.ts +1 -0
  183. package/dist/reporting/components/reporting-chart-card/reporting-chart-card.element.js +5 -1
  184. package/dist/reporting/components/segment-selector/reporting-segment-selector.element.js +10 -20
  185. package/dist/start-page/components/license-viewer.element.js +4 -1
  186. package/dist/tsconfig.build.tsbuildinfo +1 -1
  187. package/dist/umbraco-package.json +1 -1
  188. package/package.json +8 -5
  189. package/dist/ab-testing/test/workspace/actions/submit-test-action.d.ts +0 -8
  190. package/dist/ab-testing/test/workspace/actions/submit-test-action.js +0 -11
  191. package/dist/personalization/applied-personalization/actions/index.d.ts +0 -3
  192. package/dist/personalization/applied-personalization/actions/index.js +0 -3
  193. /package/dist/core/lang/{en-us.d.ts → en.d.ts} +0 -0
@@ -1,8 +1,10 @@
1
1
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
2
- import type { AbTestDetailVariantInfoModel } from "../../../../generated/index.js";
3
2
  declare const elementName = "ue-ab-test-variant-name-column-layout";
4
3
  export declare class UeAbTestVariantNameColumnLayoutElement extends UmbLitElement {
5
- variant?: AbTestDetailVariantInfoModel;
4
+ variant?: {
5
+ description?: string | null;
6
+ name?: string | null;
7
+ };
6
8
  index: number;
7
9
  render(): import("lit-html").TemplateResult<1> | undefined;
8
10
  static styles: import("lit").CSSResult;
@@ -53,6 +53,9 @@ let UeAbTestingTestCardElement = class UeAbTestingTestCardElement extends UmbLit
53
53
  let date = this.test?.endTime;
54
54
  switch (this.test?.status) {
55
55
  case "Scheduled":
56
+ text = "startsOn";
57
+ date = this.test.startTime;
58
+ break;
56
59
  case "Running": {
57
60
  text = "startedOn";
58
61
  date = this.test.startTime;
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { UMB_DOCUMENT_ITEM_STORE_CONTEXT, } from "@umbraco-cms/backoffice/document";
7
+ import { UMB_DOCUMENT_TREE_STORE_CONTEXT, UmbDocumentTreeRepository, } from "@umbraco-cms/backoffice/document";
8
8
  import { css, customElement, html, state, } from "@umbraco-cms/backoffice/external/lit";
9
9
  import { UmbChangeEvent } from "@umbraco-cms/backoffice/event";
10
10
  import { UeVariantPickerBaseElement, } from "../../../../core/index.js";
@@ -12,13 +12,15 @@ import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../../workspace/index.
12
12
  const elementName = "ue-split-url-picker";
13
13
  let UeSplitUrlContentPickerElement = class UeSplitUrlContentPickerElement extends UeVariantPickerBaseElement {
14
14
  #workspaceContext;
15
+ //TODO: UMB_DOCUMENT_TREE_STORE_CONTEXT will be remove in Umbraco 18. Change this before using Umbraco 18.
15
16
  #documentItemStore;
17
+ #documentTreeRepo = new UmbDocumentTreeRepository(this);
16
18
  constructor() {
17
19
  super();
18
20
  this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
19
21
  this.#workspaceContext = context;
20
22
  });
21
- this.consumeContext(UMB_DOCUMENT_ITEM_STORE_CONTEXT, (context) => {
23
+ this.consumeContext(UMB_DOCUMENT_TREE_STORE_CONTEXT, (context) => {
22
24
  this.#documentItemStore = context;
23
25
  });
24
26
  }
@@ -69,8 +69,8 @@ let UeAbTestingTestIndicationElement = class UeAbTestingTestIndicationElement ex
69
69
  <!--Running and estimated runtime-->
70
70
  ${when((this._indication?.estimatedRequiredRuntimeRemainingInDays ?? 0) > 0, () => html ` <p>
71
71
  This test needs
72
- ${(this._indication?.requiredVisitorsTotal ?? 0) -
73
- (this._indication?.currentVisitors ?? 0)}
72
+ ${this.localize.number((this._indication?.requiredVisitorsTotal ?? 0) -
73
+ (this._indication?.currentVisitors ?? 0))}
74
74
  more visitors
75
75
  ${(this._indication?.estimatedRequiredRuntimeRemainingInDays ?? 0) >
76
76
  365
@@ -14,6 +14,8 @@ import { umbOpenModal } from "@umbraco-cms/backoffice/modal";
14
14
  import { UmbModalRouteRegistrationController } from "@umbraco-cms/backoffice/router";
15
15
  import { UMB_DOCUMENT_ENTITY_TYPE } from "@umbraco-cms/backoffice/document";
16
16
  import { UMB_WORKSPACE_MODAL } from "@umbraco-cms/backoffice/workspace";
17
+ import { ensurePathEndsWithSlash } from "@umbraco-cms/backoffice/utils";
18
+ import { UMB_SERVER_CONTEXT } from "@umbraco-cms/backoffice/server";
17
19
  const elementName = "ue-ab-test-variant-picker";
18
20
  let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends UmbLitElement {
19
21
  #workspaceContext;
@@ -60,6 +62,16 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
60
62
  async #editSinglePageVariant(variant) {
61
63
  if (!this._test || !this.#workspaceContext)
62
64
  return;
65
+ if (variant.isBenchmark) {
66
+ // this is the original variant, we don't want split-view.
67
+ // By not providing a segment, it will open the main document editor.
68
+ const url = ENGAGE_EDIT_VARIANT_PATH_PATTERN.generateLocal({
69
+ unique: this._test.umbracoPageVariants[0].unique,
70
+ culture: this._test.umbracoPageVariants[0].culture,
71
+ });
72
+ history.pushState(null, "", this.#modalPath + url);
73
+ return;
74
+ }
63
75
  // if variant is new, it will not have segment. Unfortunately that means we need to save the test,
64
76
  // then fetch it again, to populate the segment. The only thing we know about a new variant
65
77
  // is the name, so we use that to find the updated value.
@@ -78,7 +90,7 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
78
90
  culture: this._test.umbracoPageVariants[0].culture,
79
91
  segment: variant.segment,
80
92
  });
81
- window.history.pushState(null, "", this.#modalPath + url);
93
+ history.pushState(null, "", this.#modalPath + url);
82
94
  }
83
95
  async #editVariant(variant, label, index) {
84
96
  if (!this._test)
@@ -101,10 +113,26 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
101
113
  });
102
114
  }
103
115
  }
104
- // TODO => previewing requires save and publish of segmented content variants.
105
- // I (NW) haven't been able to decipher how this works in 13.
106
116
  async #previewVariant(variant) {
107
- alert("preview variant");
117
+ const unique = this._test?.umbracoPageVariants[0].unique;
118
+ const culture = this._test?.umbracoPageVariants[0].culture;
119
+ const segment = variant.segment;
120
+ const serverContext = await this.getContext(UMB_SERVER_CONTEXT);
121
+ if (!serverContext) {
122
+ throw new Error("Server context is missing");
123
+ }
124
+ const backofficePath = serverContext.getBackofficePath();
125
+ const previewUrl = new URL(ensurePathEndsWithSlash(backofficePath) + "preview", window.location.origin);
126
+ if (unique) {
127
+ previewUrl.searchParams.set("id", unique);
128
+ }
129
+ if (culture) {
130
+ previewUrl.searchParams.set("culture", culture);
131
+ }
132
+ if (segment) {
133
+ previewUrl.searchParams.set("segment", segment);
134
+ }
135
+ window.open(previewUrl.toString(), `umbpreview-${unique}`);
108
136
  }
109
137
  #onNameChange(e, variant, i) {
110
138
  if (!this._test)
@@ -114,6 +142,16 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
114
142
  variants: partialUpdateFrozenArray(this._test.variants ?? [], { ...variant, name }, (v) => this._test?.variants?.indexOf(v) === i),
115
143
  });
116
144
  }
145
+ #disablePreviewButton(variant) {
146
+ const result = variant.id == undefined || variant.name == null;
147
+ if (this._test?.testType == "SinglePage") {
148
+ //If test type is SinglePage, also check variant id, if it's 0, means that the variant hasn't been saved yet.
149
+ return result || variant.id == 0;
150
+ }
151
+ else {
152
+ return result;
153
+ }
154
+ }
117
155
  #renderVariant(variant, idx) {
118
156
  const label = String.fromCharCode(65 + idx);
119
157
  return html `<div class="variant">
@@ -129,6 +167,7 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
129
167
  @click=${() => this.#editVariant(variant, label, idx)}
130
168
  ></uui-button>
131
169
  <uui-button
170
+ .disabled=${this.#disablePreviewButton(variant)}
132
171
  .label=${this.localize.term("general_preview")}
133
172
  look="secondary"
134
173
  @click=${() => this.#previewVariant(variant)}
@@ -136,7 +175,7 @@ let UeAbTestVariantPickerElement = class UeAbTestVariantPickerElement extends Um
136
175
  <uui-button
137
176
  .label=${this.localize.term("general_delete")}
138
177
  look="secondary"
139
- ?disabled=${idx === 0}
178
+ ?disabled=${variant.isBenchmark}
140
179
  @click=${() => this.#deleteVariant(idx)}
141
180
  ><uui-icon name="icon-trash"></uui-icon
142
181
  ></uui-button>
@@ -0,0 +1 @@
1
+ export declare const ENGAGE_DOCUMENT_SAVE_AND_PUBLISH_VISIBILITY_CONDITION_ALIAS = "Engage.Condition.SaveAndPublishVisibility";
@@ -0,0 +1 @@
1
+ export const ENGAGE_DOCUMENT_SAVE_AND_PUBLISH_VISIBILITY_CONDITION_ALIAS = "Engage.Condition.SaveAndPublishVisibility";
@@ -0,0 +1,7 @@
1
+ import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
2
+ import { UmbConditionControllerArguments, UmbExtensionCondition } from "@umbraco-cms/backoffice/extension-api";
3
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
4
+ export declare class UeDocumentSaveAndPublishActionVisibilityCondition extends UmbConditionBase<any> implements UmbExtensionCondition {
5
+ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<any>);
6
+ }
7
+ export { UeDocumentSaveAndPublishActionVisibilityCondition as api };
@@ -0,0 +1,12 @@
1
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
2
+ import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../workspace/index.js";
3
+ export class UeDocumentSaveAndPublishActionVisibilityCondition extends UmbConditionBase {
4
+ constructor(host, args) {
5
+ super(host, args);
6
+ this.permitted = true;
7
+ this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
8
+ this.permitted = !context;
9
+ }).skipHost();
10
+ }
11
+ }
12
+ export { UeDocumentSaveAndPublishActionVisibilityCondition as api };
@@ -0,0 +1 @@
1
+ export * from "./constants.js";
@@ -0,0 +1 @@
1
+ export * from "./constants.js";
@@ -0,0 +1,7 @@
1
+ import { UeDocumentSaveAndPublishActionVisibilityCondition } from "./document-save-and-publish-visibility.condition.js";
2
+ export declare const manifests: {
3
+ type: string;
4
+ name: string;
5
+ alias: string;
6
+ api: typeof UeDocumentSaveAndPublishActionVisibilityCondition;
7
+ }[];
@@ -0,0 +1,10 @@
1
+ import { ENGAGE_DOCUMENT_SAVE_AND_PUBLISH_VISIBILITY_CONDITION_ALIAS } from "./constants.js";
2
+ import { UeDocumentSaveAndPublishActionVisibilityCondition } from "./document-save-and-publish-visibility.condition.js";
3
+ export const manifests = [
4
+ {
5
+ type: "condition",
6
+ name: "Engage Document Save And Publish Visiblity Condition",
7
+ alias: ENGAGE_DOCUMENT_SAVE_AND_PUBLISH_VISIBILITY_CONDITION_ALIAS,
8
+ api: UeDocumentSaveAndPublishActionVisibilityCondition,
9
+ },
10
+ ];
@@ -3,3 +3,4 @@ export * from "./repository/index.js";
3
3
  export * from "./workspace/index.js";
4
4
  export * from "./modal/index.js";
5
5
  export * from "./constants.js";
6
+ export * from "./conditions/index.js";
@@ -3,3 +3,4 @@ export * from "./repository/index.js";
3
3
  export * from "./workspace/index.js";
4
4
  export * from "./modal/index.js";
5
5
  export * from "./constants.js";
6
+ export * from "./conditions/index.js";
@@ -1 +1,6 @@
1
- export declare const manifests: import("@umbraco-cms/backoffice/extension-api").ManifestBase[];
1
+ export declare const manifests: (import("@umbraco-cms/backoffice/extension-api").ManifestBase | {
2
+ type: string;
3
+ name: string;
4
+ alias: string;
5
+ api: typeof import("./conditions/document-save-and-publish-visibility.condition.js").UeDocumentSaveAndPublishActionVisibilityCondition;
6
+ })[];
@@ -2,9 +2,11 @@ import { manifests as repositoryManifests } from "./repository/manifests.js";
2
2
  import { manifests as workspaceManifests } from "./workspace/manifests.js";
3
3
  import { manifests as modalManifests } from "./modal/manifests.js";
4
4
  import { manifests as componentManifests } from "./components/manifests.js";
5
+ import { manifests as conditionManifests } from "./conditions/manifests.js";
5
6
  export const manifests = [
6
7
  ...repositoryManifests,
7
8
  ...workspaceManifests,
8
9
  ...modalManifests,
9
10
  ...componentManifests,
11
+ ...conditionManifests,
10
12
  ];
@@ -15,7 +15,7 @@ export declare class UeAbTestingTestDetailServerDataSource implements UmbDetailD
15
15
  data: UeAbTestingTestDetailModel;
16
16
  error?: undefined;
17
17
  }>;
18
- update(body: DetailType, skipValidation?: boolean): Promise<{
18
+ update(body: DetailType): Promise<{
19
19
  error: import("@umbraco-cms/backoffice/resources").UmbApiError | import("@umbraco-cms/backoffice/resources").UmbCancelError | undefined;
20
20
  data?: undefined;
21
21
  } | {
@@ -25,9 +25,9 @@ export class UeAbTestingTestDetailServerDataSource {
25
25
  };
26
26
  }
27
27
  async create(model) {
28
- return await this.update(model, true);
28
+ return await this.update(model);
29
29
  }
30
- async update(body, skipValidation) {
30
+ async update(body) {
31
31
  if (!body)
32
32
  throw new Error("Test data is missing");
33
33
  const { data, error } = await tryExecute(this.#host, ABTestService.postAbTest({
@@ -35,7 +35,6 @@ export class UeAbTestingTestDetailServerDataSource {
35
35
  test: body.test,
36
36
  isInvertedGoal: body.isInvertedGoal,
37
37
  },
38
- query: { validate: skipValidation ? false : true },
39
38
  }));
40
39
  if (!data.validationResults.isValid) {
41
40
  await umbPeekError(this.#host, {
@@ -25,6 +25,6 @@ export declare class UeAbTestingTestWorkspaceContext extends UeWorkspaceContextB
25
25
  delete(): Promise<void>;
26
26
  updateTest(test: Partial<AbTestDtoModel>, save?: boolean): Promise<void>;
27
27
  disableVariant(id: number): Promise<void>;
28
- requestSave(next?: boolean): Promise<void>;
28
+ requestSave(): Promise<void>;
29
29
  }
30
30
  export { UeAbTestingTestWorkspaceContext as api };
@@ -125,7 +125,7 @@ export class UeAbTestingTestWorkspaceContext extends UeWorkspaceContextBase {
125
125
  variants: partialUpdateFrozenArray(test.variants ?? [], data, (x) => x.id === data.id),
126
126
  });
127
127
  }
128
- async requestSave(next = false) {
128
+ async requestSave() {
129
129
  let test = this.getData()?.test;
130
130
  if (!test)
131
131
  return;
@@ -135,11 +135,7 @@ export class UeAbTestingTestWorkspaceContext extends UeWorkspaceContextBase {
135
135
  goal: this.#goals.getValue().find((g) => g.id === test.goalId) ?? null,
136
136
  },
137
137
  });
138
- const isNew = this.getIsNew();
139
- await super.requestSave(next);
140
- if (isNew) {
141
- this.setIsNew(!next);
142
- }
138
+ await super.requestSave();
143
139
  await this.#hostWorkspaceContext?.reload();
144
140
  }
145
141
  }
@@ -9,5 +9,4 @@ export declare abstract class UeAbTestingTestActionBase extends UmbWorkspaceActi
9
9
  test?: AbTestDtoModel;
10
10
  constructor(host: UmbControllerHost, args: UmbWorkspaceActionArgs<UmbSubmittableWorkspaceContext>);
11
11
  closeModal(): Promise<void>;
12
- navigateTo(pathname: string): void;
13
12
  }
@@ -31,13 +31,4 @@ export class UeAbTestingTestActionBase extends UmbWorkspaceActionBase {
31
31
  }));
32
32
  modal.submit();
33
33
  }
34
- navigateTo(pathname) {
35
- let current = location.pathname;
36
- // Trim `/view/<slug>` (with optional trailing slash) from the end of the current pathname
37
- const trimViewSlug = (p) => p.replace(/\/view\/[^/]+\/?$/, "");
38
- const base = trimViewSlug(current).replace(/\/$/, "");
39
- const target = `${base}/view/${pathname}`;
40
- // navigate
41
- history.pushState(null, "", target);
42
- }
43
34
  }
@@ -5,4 +5,3 @@ export { UeAbTestingTestUnscheduleTestWorkspaceAction } from "./unschedule-test-
5
5
  export { UeAbTestingTestScheduleTestWorkspaceAction } from "./schedule-test-action.js";
6
6
  export { UeAbTestingTestStartTestWorkspaceAction } from "./start-test-action.js";
7
7
  export { UeAbTestingTestSaveTestWorkspaceAction } from "./save-test-action.js";
8
- export { UeAbTestingTestSubmitTestWorkspaceAction } from "./submit-test-action.js";
@@ -5,4 +5,3 @@ export { UeAbTestingTestUnscheduleTestWorkspaceAction } from "./unschedule-test-
5
5
  export { UeAbTestingTestScheduleTestWorkspaceAction } from "./schedule-test-action.js";
6
6
  export { UeAbTestingTestStartTestWorkspaceAction } from "./start-test-action.js";
7
7
  export { UeAbTestingTestSaveTestWorkspaceAction } from "./save-test-action.js";
8
- export { UeAbTestingTestSubmitTestWorkspaceAction } from "./submit-test-action.js";
@@ -7,7 +7,7 @@ import { UeAbTestingTestScheduleTestWorkspaceAction } from "./schedule-test-acti
7
7
  import { UeAbTestingTestSelectWinnerWorkspaceAction } from "./select-winner-action.js";
8
8
  import { UeAbTestingTestStartTestWorkspaceAction } from "./start-test-action.js";
9
9
  import { UeAbTestingTestUnscheduleTestWorkspaceAction } from "./unschedule-test-action.js";
10
- import { UeAbTestingTestSaveTestWorkspaceAction, UeAbTestingTestSubmitTestWorkspaceAction, } from "../index.js";
10
+ import { UeAbTestingTestSaveTestWorkspaceAction } from "../index.js";
11
11
  import { ENGAGE_ENTITY_IS_NOT_NEW_CONDITION_ALIAS, ENGAGE_WORKSPACE_VIEW_ACTIVE_CONDITION_ALIAS, } from "../../../../core/index.js";
12
12
  const actions = [
13
13
  {
@@ -31,7 +31,7 @@ const actions = [
31
31
  key: "Delete Test",
32
32
  color: "danger",
33
33
  forStatus: ["Draft", "Scheduled"],
34
- forView: ["edit", "scoring"],
34
+ forView: ["edit"],
35
35
  notNew: true,
36
36
  },
37
37
  {
@@ -40,7 +40,7 @@ const actions = [
40
40
  api: UeAbTestingTestUnscheduleTestWorkspaceAction,
41
41
  key: "Unschedule Test",
42
42
  forStatus: ["Scheduled"],
43
- forView: ["scoring"],
43
+ forView: ["edit"],
44
44
  },
45
45
  {
46
46
  weight: 40,
@@ -48,7 +48,7 @@ const actions = [
48
48
  api: UeAbTestingTestScheduleTestWorkspaceAction,
49
49
  key: "Schedule Test",
50
50
  forStatus: ["Draft"],
51
- forView: ["scoring"],
51
+ forView: ["edit"],
52
52
  },
53
53
  {
54
54
  weight: 10,
@@ -56,7 +56,7 @@ const actions = [
56
56
  api: UeAbTestingTestStartTestWorkspaceAction,
57
57
  key: "Start Test",
58
58
  forStatus: ["Draft"],
59
- forView: ["scoring"],
59
+ forView: ["edit"],
60
60
  },
61
61
  {
62
62
  weight: 10,
@@ -66,14 +66,6 @@ const actions = [
66
66
  forStatus: ["Draft"],
67
67
  forView: ["edit"],
68
68
  },
69
- {
70
- weight: 10,
71
- alias: "Engage.WorkspaceAction.AbTestingTest.SubmitTest",
72
- api: UeAbTestingTestSubmitTestWorkspaceAction,
73
- key: "Submit Test",
74
- forStatus: ["Draft"],
75
- forView: ["edit"],
76
- },
77
69
  ];
78
70
  export const manifests = actions.map((action) => {
79
71
  const conditions = [
@@ -10,7 +10,6 @@ export class UeAbTestingTestUnscheduleTestWorkspaceAction extends UeAbTestingTes
10
10
  content: "Are you sure you want to unschedule this A/B test?",
11
11
  });
12
12
  await this.workspaceContext?.updateTest({ startTime: null }, true);
13
- this.navigateTo("edit");
14
13
  }
15
14
  }
16
15
  export { UeAbTestingTestUnscheduleTestWorkspaceAction as api };
@@ -0,0 +1,8 @@
1
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
2
+ import { UmbConditionControllerArguments, UmbExtensionCondition } from "@umbraco-cms/backoffice/extension-api";
3
+ import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
4
+ export declare class UeAbTestingTestCanDisableVariantCondition extends UmbConditionBase<any> implements UmbExtensionCondition {
5
+ #private;
6
+ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<any>);
7
+ }
8
+ export { UeAbTestingTestCanDisableVariantCondition as api };
@@ -0,0 +1,25 @@
1
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
2
+ import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../ab-testing-test-workspace-context.token.js";
3
+ export class UeAbTestingTestCanDisableVariantCondition extends UmbConditionBase {
4
+ #disablableStatuses = [
5
+ "Running",
6
+ "Warning",
7
+ "Reliable",
8
+ "Scheduled",
9
+ ];
10
+ constructor(host, args) {
11
+ super(host, args);
12
+ const hostElement = host.getHostElement();
13
+ if (!hostElement.unique)
14
+ return;
15
+ this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
16
+ this.observe(context?.variants, (variants) => {
17
+ const variant = variants?.find((x) => x.unique === hostElement.unique);
18
+ if (!variant)
19
+ return;
20
+ this.permitted = this.#disablableStatuses.includes(variant.status);
21
+ });
22
+ });
23
+ }
24
+ }
25
+ export { UeAbTestingTestCanDisableVariantCondition as api };
@@ -0,0 +1,8 @@
1
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
2
+ import { UmbConditionControllerArguments, UmbExtensionCondition } from "@umbraco-cms/backoffice/extension-api";
3
+ import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
4
+ export declare class UeAbTestingTestCanPreviewVariantCondition extends UmbConditionBase<any> implements UmbExtensionCondition {
5
+ #private;
6
+ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<any>);
7
+ }
8
+ export { UeAbTestingTestCanPreviewVariantCondition as api };
@@ -0,0 +1,31 @@
1
+ import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry";
2
+ import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../ab-testing-test-workspace-context.token.js";
3
+ export class UeAbTestingTestCanPreviewVariantCondition extends UmbConditionBase {
4
+ #previewableStatuses = [
5
+ "Running",
6
+ "Warning",
7
+ "Reliable",
8
+ "Scheduled",
9
+ "Disabled",
10
+ ];
11
+ constructor(host, args) {
12
+ super(host, args);
13
+ const hostElement = host.getHostElement();
14
+ if (!hostElement.unique)
15
+ return;
16
+ this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
17
+ this.observe(context?.variants, (variants) => {
18
+ const variant = variants?.find((x) => x.unique === hostElement.unique);
19
+ if (!variant)
20
+ return;
21
+ const hasPageVariant = context
22
+ ?.getData()
23
+ ?.test.umbracoPageVariants?.at(0);
24
+ if (!hasPageVariant)
25
+ return;
26
+ this.permitted = this.#previewableStatuses.includes(variant.status);
27
+ });
28
+ });
29
+ }
30
+ }
31
+ export { UeAbTestingTestCanPreviewVariantCondition as api };
@@ -1 +1,3 @@
1
1
  export declare const ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.EntityActionVisibility";
2
+ export declare const ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.CanPreviewVariant";
3
+ export declare const ENGAGE_AB_TESTING_TEST_CAN_DISABLE_VARIANT_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.CanDisableVariant";
@@ -1 +1,3 @@
1
1
  export const ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.EntityActionVisibility";
2
+ export const ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.CanPreviewVariant";
3
+ export const ENGAGE_AB_TESTING_TEST_CAN_DISABLE_VARIANT_CONDITION = "Engage.Condition.ABTesting.Test.Workspace.CanDisableVariant";
@@ -1,4 +1,4 @@
1
- import { ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION } from "./constants.js";
1
+ import { ENGAGE_AB_TESTING_TEST_CAN_DISABLE_VARIANT_CONDITION, ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION, ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION, } from "./constants.js";
2
2
  export const manifests = [
3
3
  {
4
4
  type: "condition",
@@ -6,4 +6,16 @@ export const manifests = [
6
6
  alias: ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION,
7
7
  api: () => import("./ab-testing-test-entity-action-visibility.condition.js"),
8
8
  },
9
+ {
10
+ type: "condition",
11
+ name: "Engage AB Testing Test Can Preview Variant Condition",
12
+ alias: ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION,
13
+ api: () => import("./ab-testing-can-preview.condition.js"),
14
+ },
15
+ {
16
+ type: "condition",
17
+ name: "Engage AB Testing Test Can Disable Variant Condition",
18
+ alias: ENGAGE_AB_TESTING_TEST_CAN_DISABLE_VARIANT_CONDITION,
19
+ api: () => import("./ab-testing-can-disable.condition.js"),
20
+ },
9
21
  ];
@@ -0,0 +1,8 @@
1
+ import { UmbEntityActionArgs, UmbEntityActionBase } from "@umbraco-cms/backoffice/entity-action";
2
+ import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
3
+ export declare class UeDisableVariantAbTestScoringAction extends UmbEntityActionBase<any> {
4
+ #private;
5
+ constructor(host: UmbControllerHost, args: UmbEntityActionArgs<any>);
6
+ execute(): Promise<void>;
7
+ }
8
+ export { UeDisableVariantAbTestScoringAction as api };
@@ -0,0 +1,37 @@
1
+ import { UmbEntityActionBase, } from "@umbraco-cms/backoffice/entity-action";
2
+ import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../ab-testing-test-workspace-context.token.js";
3
+ import { umbConfirmModal } from "@umbraco-cms/backoffice/modal";
4
+ import { UmbLocalizationController } from "@umbraco-cms/backoffice/localization-api";
5
+ export class UeDisableVariantAbTestScoringAction extends UmbEntityActionBase {
6
+ #workspaceContext;
7
+ #localize = new UmbLocalizationController(this);
8
+ #testName;
9
+ #variantName;
10
+ #variantId;
11
+ constructor(host, args) {
12
+ super(host, args);
13
+ this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
14
+ this.#workspaceContext = context;
15
+ this.observe(context?.test, (test) => {
16
+ this.#testName = test?.name;
17
+ const variant = test?.variants.find((x) => x.unique === args.unique);
18
+ this.#variantId = variant?.id;
19
+ this.#variantName = variant?.name;
20
+ });
21
+ });
22
+ }
23
+ async execute() {
24
+ if (!this.#variantId)
25
+ return;
26
+ const disable = async () => {
27
+ await this.#workspaceContext?.disableVariant(this.#variantId);
28
+ };
29
+ await umbConfirmModal(this, {
30
+ content: this.#localize.term("engage_abTesting_confirmDisableVariantDescription"),
31
+ headline: this.#localize.term("engage_abTesting_confirmDisableVariant", this.#variantName, this.#testName),
32
+ })
33
+ .then(() => disable())
34
+ .catch(() => { });
35
+ }
36
+ }
37
+ export { UeDisableVariantAbTestScoringAction as api };
@@ -0,0 +1,29 @@
1
+ export declare const manifests: ({
2
+ type: string;
3
+ kind: string;
4
+ alias: string;
5
+ name: string;
6
+ api: () => Promise<typeof import("./preview-variant.action.js")>;
7
+ forEntityTypes: string[];
8
+ weight: number;
9
+ meta: {
10
+ icon: string;
11
+ label: string;
12
+ };
13
+ conditions: {
14
+ alias: string;
15
+ }[];
16
+ } | {
17
+ type: string;
18
+ kind: string;
19
+ alias: string;
20
+ name: string;
21
+ api: () => Promise<typeof import("./disable-variant.action.js")>;
22
+ forEntityTypes: string[];
23
+ weight: number;
24
+ meta: {
25
+ icon: string;
26
+ label: string;
27
+ };
28
+ conditions?: undefined;
29
+ })[];