@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
@@ -0,0 +1,34 @@
1
+ import { ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION } from "../conditions/constants.js";
2
+ export const manifests = [
3
+ {
4
+ type: "entityAction",
5
+ kind: "default",
6
+ alias: "Engage.EntityAction.AbTest.PreviewVariantAction",
7
+ name: "Engage AB Test Preview Variant Action",
8
+ api: () => import("./preview-variant.action.js"),
9
+ forEntityTypes: ["engage-abtest-variant"],
10
+ weight: 200,
11
+ meta: {
12
+ icon: "icon-preview",
13
+ label: "#general_preview",
14
+ },
15
+ conditions: [
16
+ {
17
+ alias: ENGAGE_AB_TESTING_TEST_CAN_PREVIEW_VARIANT_CONDITION,
18
+ },
19
+ ],
20
+ },
21
+ {
22
+ type: "entityAction",
23
+ kind: "default",
24
+ alias: "Engage.EntityAction.AbTest.DisabledVariantAction",
25
+ name: "Engage AB Test Disable Variant Action",
26
+ api: () => import("./disable-variant.action.js"),
27
+ forEntityTypes: ["engage-abtest-variant"],
28
+ weight: 100,
29
+ meta: {
30
+ icon: "icon-block",
31
+ label: "#general_disable",
32
+ },
33
+ },
34
+ ];
@@ -0,0 +1,8 @@
1
+ import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
2
+ import { UmbEntityActionArgs, UmbEntityActionBase } from "@umbraco-cms/backoffice/entity-action";
3
+ export declare class UePreviewVariantAbTestScoringAction extends UmbEntityActionBase<any> {
4
+ #private;
5
+ constructor(host: UmbControllerHost, args: UmbEntityActionArgs<any>);
6
+ execute(): Promise<void>;
7
+ }
8
+ export { UePreviewVariantAbTestScoringAction as api };
@@ -0,0 +1,32 @@
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 { UeVariantPreviewController } from "../../../../core/index.js";
4
+ export class UePreviewVariantAbTestScoringAction extends UmbEntityActionBase {
5
+ #preview = new UeVariantPreviewController(this);
6
+ #test;
7
+ constructor(host, args) {
8
+ super(host, args);
9
+ this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
10
+ if (!context)
11
+ return;
12
+ this.observe(context?.test, (test) => {
13
+ this.#test = test;
14
+ });
15
+ });
16
+ }
17
+ async execute() {
18
+ if (!this.args.unique)
19
+ return;
20
+ const page = this.#test?.umbracoPageVariants?.[0];
21
+ if (!page)
22
+ return;
23
+ // unique is the key, but we need use the id for preview
24
+ const id = this.#test?.variants.find((x) => x.unique === this.args.unique)?.id;
25
+ if (!id)
26
+ return;
27
+ this.#preview?.preview(page.unique, null, page.culture, {
28
+ engagePreviewAbTestVariantId: id,
29
+ });
30
+ }
31
+ }
32
+ export { UePreviewVariantAbTestScoringAction as api };
@@ -26,10 +26,15 @@ export declare const manifests: (import("@umbraco-cms/backoffice/extension-api")
26
26
  icon: string;
27
27
  entityType?: undefined;
28
28
  };
29
- conditions: {
29
+ conditions: ({
30
30
  alias: string;
31
31
  match: string;
32
- }[];
32
+ oneOf?: undefined;
33
+ } | {
34
+ alias: string;
35
+ oneOf: string[];
36
+ match?: undefined;
37
+ })[];
33
38
  api?: undefined;
34
39
  } | {
35
40
  type: string;
@@ -47,8 +52,10 @@ export declare const manifests: (import("@umbraco-cms/backoffice/extension-api")
47
52
  conditions: ({
48
53
  alias: string;
49
54
  match: string;
55
+ oneOf?: undefined;
50
56
  } | {
51
57
  alias: string;
58
+ oneOf: string[];
52
59
  match?: undefined;
53
60
  })[];
54
61
  api?: undefined;
@@ -2,11 +2,13 @@ import { UMB_WORKSPACE_CONDITION_ALIAS } from "@umbraco-cms/backoffice/workspace
2
2
  import { ENGAGE_AB_TESTING_TEST_ENTITY_TYPE, ENGAGE_AB_TESTING_TEST_WORKSPACE_ALIAS, } from "../constants.js";
3
3
  import { manifests as actionManifests } from "./actions/manifests.js";
4
4
  import { manifests as conditionManifests } from "./conditions/manifests.js";
5
+ import { manifests as entityActionManifests } from "./entity-actions/manifests.js";
5
6
  import { ENGAGE_ENTITY_IS_NOT_NEW_CONDITION_ALIAS } from "src/core/conditions/index.js";
6
7
  import { ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION } from "./conditions/constants.js";
7
8
  export const manifests = [
8
9
  ...actionManifests,
9
10
  ...conditionManifests,
11
+ ...entityActionManifests,
10
12
  {
11
13
  type: "workspace",
12
14
  kind: "routable",
@@ -36,7 +38,7 @@ export const manifests = [
36
38
  },
37
39
  {
38
40
  alias: ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION,
39
- match: "Draft",
41
+ oneOf: ["Draft", "Scheduled"],
40
42
  },
41
43
  ],
42
44
  },
@@ -58,7 +60,8 @@ export const manifests = [
58
60
  match: ENGAGE_AB_TESTING_TEST_WORKSPACE_ALIAS,
59
61
  },
60
62
  {
61
- alias: ENGAGE_ENTITY_IS_NOT_NEW_CONDITION_ALIAS,
63
+ alias: ENGAGE_AB_TESTING_TEST_ENTITY_ACTION_VISIBILITY_CONDITION,
64
+ oneOf: ["Running", "Stopped", "Completed"],
62
65
  },
63
66
  ],
64
67
  },
@@ -22,17 +22,41 @@ let UeAbTestingTestEditorElement = class UeAbTestingTestEditorElement extends Um
22
22
  this.observe(context?.alias, (sectionAlias) => {
23
23
  if (!sectionAlias)
24
24
  return;
25
- this._setupRenderer = new UePropertyDataSetRendererController(this, ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, AbTestSetupProperties, this.#dataKey).withItems("testType", () => {
25
+ this._setupRenderer = new UePropertyDataSetRendererController(this, ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, AbTestSetupProperties, this.#dataKey).withItems("testType", (data) => {
26
26
  let testTypes = makeArray("ContentType", "MultiPage", "SinglePage", "SplitUrl");
27
- const testTypeToRemove = sectionAlias === UMB_CONTENT_SECTION_ALIAS
28
- ? "SplitUrl"
29
- : "SinglePage";
30
- testTypes = testTypes.filter((x) => x !== testTypeToRemove);
31
- return testTypes.map((x) => ({
27
+ // in the Engage section, we remove the incompatible test types
28
+ // only if they are not selected for this test,
29
+ let remove;
30
+ if (sectionAlias !== UMB_CONTENT_SECTION_ALIAS &&
31
+ data?.testType !== "SinglePage") {
32
+ remove = "SinglePage";
33
+ }
34
+ else if (data?.testType !== "SplitUrl") {
35
+ remove = "SplitUrl";
36
+ }
37
+ return testTypes
38
+ .filter((x) => x !== remove)
39
+ .map((x) => ({
32
40
  name: this.localize.term(`engage_abTesting_testType${x}`),
33
41
  value: x,
34
42
  }));
35
43
  });
44
+ // .withConfiguration("testType", (data) => ({
45
+ // disabled:
46
+ // sectionAlias === UMB_CONTENT_SECTION_ALIAS
47
+ // ? data?.testType === "SplitUrl"
48
+ // : data?.testType === "SinglePage",
49
+ // }))
50
+ // .withConfiguration("umbracoPageVariants", (data) => ({
51
+ // disabled:
52
+ // sectionAlias === UMB_CONTENT_SECTION_ALIAS &&
53
+ // data?.testType === "SplitUrl",
54
+ // }))
55
+ // .withConfiguration("variants", (data) => ({
56
+ // disabled:
57
+ // sectionAlias !== UMB_CONTENT_SECTION_ALIAS &&
58
+ // data?.testType === "SinglePage",
59
+ // }));
36
60
  });
37
61
  });
38
62
  this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
@@ -7,36 +7,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT } from "../../ab-testing-test-workspace-context.token.js";
8
8
  import { html, customElement, state, css, when, } from "@umbraco-cms/backoffice/external/lit";
9
9
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
10
- import { umbConfirmModal, umbOpenModal } from "@umbraco-cms/backoffice/modal";
11
- import { ENGAGE_READONLY_CODE_MODAL_ALIAS, UeTimeFormatOptions, UeVariantPreviewController, } from "../../../../../core/index.js";
10
+ import { umbOpenModal } from "@umbraco-cms/backoffice/modal";
11
+ import { ENGAGE_READONLY_CODE_MODAL_ALIAS, UeTimeFormatOptions, } from "../../../../../core/index.js";
12
12
  import "../../../collection/elements/ab-test-variant-warning-column-layout.element.js";
13
13
  import "../../../collection/elements/ab-test-variant-name-column-layout.element.js";
14
14
  import "../../../collection/elements/ab-test-variant-status-column-layout.element.js";
15
15
  import "../../../collection/elements/ab-test-variant-percentage-column-layout.element.js";
16
16
  const elementName = "ue-ab-testing-test-scoring";
17
17
  let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceViewEditElement extends UmbLitElement {
18
- #workspaceContext;
19
- #preview = new UeVariantPreviewController(this);
20
- #previewableVariantStatuses = [
21
- "Running",
22
- "Warning",
23
- "Reliable",
24
- "Scheduled",
25
- "Disabled",
26
- ];
27
- #disablableVariantStatuses = [
28
- "Running",
29
- "Warning",
30
- "Reliable",
31
- "Scheduled",
32
- ];
33
18
  constructor() {
34
19
  super();
35
20
  this._loading = true;
36
21
  this.consumeContext(ENGAGE_AB_TESTING_TEST_WORKSPACE_CONTEXT, (context) => {
37
22
  if (!context)
38
23
  return;
39
- this.#workspaceContext = context;
40
24
  this.observe(context.data, (data) => {
41
25
  this._test = data;
42
26
  this._loading = false;
@@ -49,33 +33,6 @@ let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceView
49
33
  });
50
34
  });
51
35
  }
52
- #canPreviewVariant(variant) {
53
- return (this._test?.test?.umbracoPageVariants?.[0] &&
54
- this.#previewableVariantStatuses.includes(variant.status));
55
- }
56
- #canDisableVariant(variant) {
57
- return this.#disablableVariantStatuses.includes(variant.status);
58
- }
59
- async #disableVariant(variant) {
60
- const disable = async () => {
61
- await this.#workspaceContext?.disableVariant(variant.id);
62
- };
63
- await umbConfirmModal(this, {
64
- content: this.localize.term("engage_abTesting_confirmDisableVariantDescription"),
65
- headline: this.localize.term("engage_abTesting_confirmDisableVariant", variant.name, this._test?.test?.name),
66
- })
67
- .then(() => disable())
68
- .catch(() => { });
69
- }
70
- // TODO => preview variant
71
- #previewVariant(e, variant) {
72
- const page = this._test?.test?.umbracoPageVariants?.[0];
73
- if (!page)
74
- return;
75
- this.#preview?.preview(page.unique, null, page.culture, {
76
- engagePreviewAbTestVariantId: variant.id,
77
- });
78
- }
79
36
  async #showCssJs(variant) {
80
37
  umbOpenModal(this, ENGAGE_READONLY_CODE_MODAL_ALIAS, {
81
38
  data: {
@@ -88,10 +45,18 @@ let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceView
88
45
  #renderGoalsTable(variant) {
89
46
  return html ` <uui-table class="nested">
90
47
  <uui-table-head>
91
- <uui-table-head-cell> Goal </uui-table-head-cell>
92
- <uui-table-head-cell> Completions </uui-table-head-cell>
93
- <uui-table-head-cell> Ratio </uui-table-head-cell>
94
- <uui-table-head-cell> Status </uui-table-head-cell>
48
+ <uui-table-head-cell
49
+ >${this.localize.term("engage_goal")}
50
+ </uui-table-head-cell>
51
+ <uui-table-head-cell>
52
+ ${this.localize.term("engage_completions")}
53
+ </uui-table-head-cell>
54
+ <uui-table-head-cell>
55
+ ${this.localize.term("engage_ratio")}
56
+ </uui-table-head-cell>
57
+ <uui-table-head-cell>
58
+ ${this.localize.term("engage_status")}
59
+ </uui-table-head-cell>
95
60
  </uui-table-head>
96
61
  ${variant.mainGoalComparisons?.map((comparison) => html `<uui-table-row .class="${comparison.isHurting ? "warning" : ""}"
97
62
  ><uui-table-cell
@@ -114,27 +79,40 @@ let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceView
114
79
  ></uui-table-row>`)}
115
80
  </uui-table>`;
116
81
  }
117
- // TODO => localize
118
82
  #renderTable() {
119
83
  return html `
120
84
  ${this._test?.variants?.map((variant, idx) => html `<uui-table>
121
- <uui-table-column style="width:250px"></uui-table-column>
122
- <uui-table-column style="width:80px"></uui-table-column>
123
- <uui-table-column style="width:80px"></uui-table-column>
85
+ <uui-table-column style="min-width:250px"></uui-table-column>
86
+ <uui-table-column style="min-width:80px"></uui-table-column>
87
+ <uui-table-column style="min-width:80px"></uui-table-column>
124
88
  <uui-table-column></uui-table-column>
125
89
  <uui-table-column></uui-table-column>
126
90
  <uui-table-column></uui-table-column>
127
91
  <uui-table-column></uui-table-column>
128
- <uui-table-column style="width:100px"></uui-table-column>
129
- <uui-table-column style="width:100px"></uui-table-column>
92
+ <uui-table-column style="min-width:100px"></uui-table-column>
93
+ <uui-table-column style="min-width:100px"></uui-table-column>
130
94
  <uui-table-head>
131
- <uui-table-head-cell>Variant</uui-table-head-cell>
132
- <uui-table-head-cell>Visitors</uui-table-head-cell>
133
- <uui-table-head-cell>Pageviews</uui-table-head-cell>
134
- <uui-table-head-cell>Goal completions</uui-table-head-cell>
135
- <uui-table-head-cell>Conversion rate</uui-table-head-cell>
136
- <uui-table-head-cell>Macro conversion</uui-table-head-cell>
137
- <uui-table-head-cell>Status</uui-table-head-cell>
95
+ <uui-table-head-cell
96
+ >${this.localize.term("engage_variant")}</uui-table-head-cell
97
+ >
98
+ <uui-table-head-cell
99
+ >${this.localize.term("engage_visitors")}</uui-table-head-cell
100
+ >
101
+ <uui-table-head-cell
102
+ >${this.localize.term("engage_pageviews")}</uui-table-head-cell
103
+ >
104
+ <uui-table-head-cell
105
+ >${this.localize.term("engage_analytics_goalCompletionsAll")}</uui-table-head-cell
106
+ >
107
+ <uui-table-head-cell
108
+ >${this.localize.term("engage_conversionRate")}</uui-table-head-cell
109
+ >
110
+ <uui-table-head-cell
111
+ >${this.localize.term("engage_macroConversion")}</uui-table-head-cell
112
+ >
113
+ <uui-table-head-cell
114
+ >${this.localize.term("engage_status")}</uui-table-head-cell
115
+ >
138
116
  <uui-table-head-cell>CSS / JS</uui-table-head-cell>
139
117
  <uui-table-head-cell></uui-table-head-cell>
140
118
  </uui-table-head>
@@ -191,22 +169,13 @@ let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceView
191
169
  ></uui-button>`)}
192
170
  </uui-table-cell>
193
171
  <uui-table-cell>
194
- <uui-action-bar>
195
- ${when(this.#canPreviewVariant(variant), () => html ` <uui-button
196
- compact
197
- label="Preview"
198
- @click=${(e) => this.#previewVariant(e, variant)}
199
- look="secondary"
200
- ><uui-icon name="icon-preview"></uui-icon
201
- ></uui-button>`)}
202
- ${when(idx > 0 && this.#canDisableVariant(variant), () => html ` <uui-button
203
- compact
204
- label="Disable"
205
- @click=${() => this.#disableVariant(variant)}
206
- look="secondary"
207
- ><uui-icon name="icon-block"></uui-icon
208
- ></uui-button>`)}</uui-action-bar
209
- >
172
+ <ue-entity-actions-bundle
173
+ .entityType=${"engage-abtest-variant"}
174
+ .unique=${variant.unique}
175
+ .label=${this.localize.term("actions_viewActionsFor", [
176
+ variant.name,
177
+ ])}
178
+ ></ue-entity-actions-bundle>
210
179
  </uui-table-cell>
211
180
  </uui-table-row>
212
181
  </uui-table>
@@ -218,7 +187,8 @@ let UeAbTestingTestWorkspaceViewEditElement = class UeAbTestingTestWorkspaceView
218
187
  <uui-box
219
188
  .headline=${this.localize.term("engage_abTesting_scoringOverview")}
220
189
  >
221
- ${when(this._generationStatus?.lastGenerated, () => html ` <small slot="header-actions"
190
+ ${when(this._test?.test.status != "Draft" &&
191
+ this._generationStatus?.lastGenerated, () => html ` <small slot="header-actions"
222
192
  >${this.localize.term("engage_lastUpdated", this.localize.date(this._generationStatus.lastGenerated, UeTimeFormatOptions))}</small
223
193
  >`)}
224
194
  ${when(this._loading, () => html `<uui-loader></uui-loader>`, () => this.#renderTable())}
@@ -126,6 +126,8 @@ export class UeAnalyticsContext extends UmbContextBase {
126
126
  return dateRange;
127
127
  }
128
128
  async #buildPrimaryQueryConfig(config) {
129
+ if (config.startDate && config.endDate)
130
+ return config;
129
131
  const dateRange = await this.#awaitDateRange();
130
132
  return {
131
133
  ...config,
@@ -139,6 +141,8 @@ export class UeAnalyticsContext extends UmbContextBase {
139
141
  const dateRange = await this.#awaitDateRange();
140
142
  if (!dateRange.compare)
141
143
  return;
144
+ if (config.startDate && config.endDate)
145
+ return config;
142
146
  return {
143
147
  ...config,
144
148
  ...{
@@ -10,11 +10,9 @@ export declare class UeHeatmapElement extends UmbLitElement {
10
10
  private _averageFold;
11
11
  private _pageHeight;
12
12
  private _documentUrl;
13
- private _defaultCulture;
14
13
  private _iframeBox?;
15
14
  private _iframe?;
16
15
  private _indicatorBox?;
17
- constructor();
18
16
  protected firstUpdated(): Promise<void>;
19
17
  render(): import("lit-html").TemplateResult<1>;
20
18
  static styles: import("lit").CSSResult;
@@ -8,8 +8,15 @@ import { UmbDocumentUrlRepository } from "@umbraco-cms/backoffice/document";
8
8
  import { css, customElement, html, property, query, state, when, } from "@umbraco-cms/backoffice/external/lit";
9
9
  import { UMB_APP_LANGUAGE_CONTEXT } from "@umbraco-cms/backoffice/language";
10
10
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
11
+ import { firstValueFrom } from "rxjs";
11
12
  const elementName = "ue-heatmap";
12
13
  let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.#documentUrlRepository = new UmbDocumentUrlRepository(this);
17
+ this._averageFold = 1080;
18
+ this._pageHeight = 0;
19
+ }
13
20
  #documentUrlRepository;
14
21
  #data;
15
22
  #querystring;
@@ -54,17 +61,6 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
54
61
  this.#generateHeatmap();
55
62
  }
56
63
  }
57
- constructor() {
58
- super();
59
- this.#documentUrlRepository = new UmbDocumentUrlRepository(this);
60
- this._averageFold = 1080;
61
- this._pageHeight = 0;
62
- this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (instance) => {
63
- this.observe(instance?.appDefaultLanguage, (value) => {
64
- this._defaultCulture = value?.unique;
65
- });
66
- });
67
- }
68
64
  async firstUpdated() {
69
65
  await this.#requestUrls();
70
66
  this.#generateHeatmap();
@@ -100,7 +96,15 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
100
96
  const { data } = await this.#documentUrlRepository.requestItems([
101
97
  this.#data.unique,
102
98
  ]);
103
- this._documentUrl = data?.[0].urls.find((x) => x.culture === (this.#data?.culture ?? this._defaultCulture))?.url;
99
+ const culture = this.#data?.culture ?? (await this.#getDefaultCulture());
100
+ this._documentUrl = data?.[0].urls.find((x) => x.culture === culture)?.url;
101
+ }
102
+ async #getDefaultCulture() {
103
+ const context = await this.getContext(UMB_APP_LANGUAGE_CONTEXT);
104
+ if (!context)
105
+ return undefined;
106
+ const appDefaultLanguage = await firstValueFrom(context.appDefaultLanguage);
107
+ return appDefaultLanguage?.unique ?? undefined;
104
108
  }
105
109
  #generateHeatmap() {
106
110
  if (!this._documentUrl || !this._iframe)
@@ -113,7 +117,7 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
113
117
  this._iframe.src = this._documentUrl + this.#querystring;
114
118
  }
115
119
  #renderHeatmap() {
116
- return when(!this.#data?.visitorPercentagesPerPixel?.length, () => html `<div id="no-data">
120
+ return when(!this.#data?.visitorPercentagesPerPixel?.length, () => html `<uui-box>
117
121
  <p>${this.localize.term("engage_analytics_heatmapNoData")}</p>
118
122
  <uui-button
119
123
  look="primary"
@@ -121,7 +125,8 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
121
125
  target="_blank"
122
126
  label=${this.localize.term("engage_learnMore")}
123
127
  ></uui-button>
124
- </div>`, () => html `<div id="iframe-box">
128
+ </uui-box>`, () => html `<div id="main">
129
+ <div id="iframe-box">
125
130
  <div class="scrollmap"></div>
126
131
  <div class="scrollmap blend"></div>
127
132
  <div id="lines">
@@ -153,18 +158,19 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
153
158
  <span>${this.localize.term("engage_hot")}</span>
154
159
  <div id="legend-gradient"></div>
155
160
  <span>${this.localize.term("engage_cold")}</span>
156
- </div>`);
161
+ </div>
162
+ </div>`);
157
163
  }
158
164
  #renderNoUrl() {
159
- return html `<div id="no-data">
165
+ return html `<uui-box>
160
166
  <p>${this.localize.term("engage_analytics_heatmapNoUrl")}</p>
161
- </div>`;
167
+ </uui-box>`;
162
168
  }
163
169
  render() {
164
170
  return when(this._documentUrl, () => this.#renderHeatmap(), () => this.#renderNoUrl());
165
171
  }
166
172
  static { this.styles = css `
167
- :host {
173
+ #main {
168
174
  border: 1px solid var(--uui-color-border);
169
175
  border-radius: var(--uui-border-radius);
170
176
  padding: var(--uui-size-layout-1);
@@ -219,14 +225,6 @@ let UeHeatmapElement = class UeHeatmapElement extends UmbLitElement {
219
225
  mix-blend-mode: darken;
220
226
  }
221
227
 
222
- #no-data {
223
- display: flex;
224
- flex-direction: column;
225
- align-items: center;
226
- justify-content: center;
227
- text-align: center;
228
- }
229
-
230
228
  #indicator {
231
229
  position: absolute;
232
230
  left: 0;
@@ -359,9 +357,6 @@ __decorate([
359
357
  __decorate([
360
358
  state()
361
359
  ], UeHeatmapElement.prototype, "_documentUrl", void 0);
362
- __decorate([
363
- state()
364
- ], UeHeatmapElement.prototype, "_defaultCulture", void 0);
365
360
  __decorate([
366
361
  query("#iframe-box")
367
362
  ], UeHeatmapElement.prototype, "_iframeBox", void 0);
@@ -11,6 +11,8 @@ import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from "@umbraco-cms/backoffice/document
11
11
  import { tryExecute } from "@umbraco-cms/backoffice/resources";
12
12
  import { makeArray, } from "../../core/index.js";
13
13
  import { HeatmapsService, } from "../../generated/index.js";
14
+ import { UMB_APP_LANGUAGE_CONTEXT } from "@umbraco-cms/backoffice/language";
15
+ import { firstValueFrom } from "@umbraco-cms/backoffice/external/rxjs";
14
16
  const elementName = "ue-analytics-heatmap";
15
17
  let UeAnalyticsHeatmapElement = class UeAnalyticsHeatmapElement extends UmbLitElement {
16
18
  constructor() {
@@ -22,8 +24,7 @@ let UeAnalyticsHeatmapElement = class UeAnalyticsHeatmapElement extends UmbLitEl
22
24
  if (!context)
23
25
  return;
24
26
  this._documentUnique = context.getUnique()?.toString();
25
- this._documentCulture =
26
- context.splitView.getActiveVariants()[0]?.culture ?? undefined;
27
+ this._documentCulture = context.splitView.getActiveVariants()[0]?.culture;
27
28
  await this.#getHeatmapPageVariants();
28
29
  });
29
30
  this.consumeContext(ENGAGE_ANALYTICS_CONTEXT, (context) => {
@@ -35,9 +36,22 @@ let UeAnalyticsHeatmapElement = class UeAnalyticsHeatmapElement extends UmbLitEl
35
36
  });
36
37
  });
37
38
  }
39
+ async #getDefaultCulture() {
40
+ const context = await this.getContext(UMB_APP_LANGUAGE_CONTEXT);
41
+ if (!context)
42
+ return undefined;
43
+ const appDefaultLanguage = await firstValueFrom(context.appDefaultLanguage);
44
+ return appDefaultLanguage?.unique ?? undefined;
45
+ }
38
46
  async #getHeatmapPageVariants() {
47
+ this._documentCulture ??= await this.#getDefaultCulture();
48
+ if (!this._documentUnique)
49
+ return;
39
50
  const { data } = await tryExecute(this, HeatmapsService.getHeatmapsVariants({
40
- query: { unique: this._documentUnique, culture: this._documentCulture },
51
+ query: {
52
+ unique: this._documentUnique,
53
+ culture: this._documentCulture,
54
+ },
41
55
  }));
42
56
  this._variants =
43
57
  data
@@ -52,6 +66,7 @@ let UeAnalyticsHeatmapElement = class UeAnalyticsHeatmapElement extends UmbLitEl
52
66
  }
53
67
  }
54
68
  async #getHeatmap() {
69
+ this._documentCulture ??= await this.#getDefaultCulture();
55
70
  if (!this._documentUnique)
56
71
  return;
57
72
  this._loading = true;
@@ -170,6 +185,11 @@ let UeAnalyticsHeatmapElement = class UeAnalyticsHeatmapElement extends UmbLitEl
170
185
  .header-control {
171
186
  display: flex;
172
187
  flex-direction: column;
188
+
189
+ uui-select {
190
+ height: 100%;
191
+ --uui-select-height: 100%;
192
+ }
173
193
  }
174
194
  `; }
175
195
  };
@@ -28,10 +28,11 @@ let UeGroupBoxElement = class UeGroupBoxElement extends UmbLitElement {
28
28
  ${when(this._iconUrl, () => html `<img .src=${this._iconUrl} alt="" />`)}
29
29
  </div>
30
30
  <div id="content">
31
- <strong>${this.name}</strong><small>${this.description}</small>
31
+ <strong>${this.name}</strong>${when(this.description, (desc) => html `<small>${desc}</small>`)}
32
+ <slot name="secondary"></slot>
32
33
  </div>
33
34
  </div>
34
- <slot id="content-slot"></slot>
35
+ <slot id="content-slot" name="primary"></slot>
35
36
  <slot name="actions"></slot> `;
36
37
  }
37
38
  static { this.styles = css `
@@ -40,10 +41,15 @@ let UeGroupBoxElement = class UeGroupBoxElement extends UmbLitElement {
40
41
  gap: var(--uui-size-5);
41
42
  }
42
43
 
44
+ slot {
45
+ display: contents;
46
+ }
47
+
43
48
  #step {
44
49
  display: flex;
45
50
  gap: var(--uui-size-5);
46
- width: 60%;
51
+ max-width: 75%;
52
+ flex: 1;
47
53
  }
48
54
 
49
55
  #bar {
@@ -69,18 +75,19 @@ let UeGroupBoxElement = class UeGroupBoxElement extends UmbLitElement {
69
75
  display: flex;
70
76
  flex-direction: column;
71
77
  min-width: 150px;
78
+ flex: 1;
72
79
 
73
80
  small {
74
81
  line-height: 1.4;
75
82
  }
76
83
  }
77
84
 
78
- #content-slot {
85
+ ::slotted([slot="primary"]) {
79
86
  margin-left: auto;
80
87
  display: flex;
81
88
  }
82
89
 
83
- slot[name="actions"] {
90
+ ::slotted([slot="actions"]) {
84
91
  align-self: center;
85
92
  display: block;
86
93
  }
@@ -1,7 +1,11 @@
1
+ import { MinimumDeviationTypeModel } from "src/generated/types.gen";
1
2
  export interface UeScoreableGroupModel {
2
3
  title?: string | null;
3
4
  upperScoreLimit?: number | null;
4
5
  items: Array<UeScoreableItemModel>;
6
+ minimumDeviation?: number | null;
7
+ minimumDeviationType?: MinimumDeviationTypeModel;
8
+ minimumParticipationScoreThreshold?: number | null;
5
9
  }
6
10
  export interface UeScoringElementConfig {
7
11
  hideDivider?: boolean;