@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,3 +1,3 @@
1
- export { UeCampaignGroupDetailRepository } from "./campaign-group-detail.repository.js";
1
+ export * from "./campaign-group-detail.repository.js";
2
2
  export * from "./campaign-group-detail-store-context.token.js";
3
3
  export * from "./constants.js";
@@ -1,2 +1,2 @@
1
- export { UeCampaignGroupItemRepository } from "./campaign-group-item.repository.js";
1
+ export * from "./campaign-group-item.repository.js";
2
2
  export * from "./campaign-group-item-store-context.token.js";
@@ -1,2 +1,2 @@
1
- export { UeCampaignGroupItemRepository } from "./campaign-group-item.repository.js";
1
+ export * from "./campaign-group-item.repository.js";
2
2
  export * from "./campaign-group-item-store-context.token.js";
@@ -1,12 +1,11 @@
1
1
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
2
2
  import type { UmbSubmittableWorkspaceContext } from "@umbraco-cms/backoffice/workspace";
3
3
  import type { UmbContextToken } from "@umbraco-cms/backoffice/context-api";
4
- import type { ENGAGE_GROUPED_ITEM_WORKSPACE_CONTEXT, UeGroupedItemWorkspaceContext } from "../../context/index.js";
4
+ import type { UeGroupedItemWorkspaceContext } from "../../context/index.js";
5
5
  import { type UeGroupedItemDetailModel } from "../../../core/index.js";
6
6
  export declare class UeGroupedItemDetailEditorBaseElement<EntityModel extends UeGroupedItemDetailModel> extends UmbLitElement {
7
- workspaceContext?: typeof ENGAGE_GROUPED_ITEM_WORKSPACE_CONTEXT.TYPE;
8
- data?: EntityModel;
9
- constructor(contextToken?: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<any, any>>);
7
+ protected data?: EntityModel;
8
+ constructor(contextToken: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<any, any>>);
10
9
  render(): import("lit-html").TemplateResult<1> | undefined;
11
10
  static styles: import("lit").CSSResult;
12
11
  }
@@ -10,13 +10,8 @@ import { UeTimeFormatOptions, } from "../../../core/index.js";
10
10
  export class UeGroupedItemDetailEditorBaseElement extends UmbLitElement {
11
11
  constructor(contextToken) {
12
12
  super();
13
- if (!contextToken)
14
- throw new Error("contextToken is missing");
15
13
  this.consumeContext(contextToken, (context) => {
16
- if (!context)
17
- return;
18
- this.workspaceContext = context;
19
- this.observe(this.workspaceContext.current, (current) => {
14
+ this.observe(context?.current, (current) => {
20
15
  this.data = current;
21
16
  });
22
17
  });
@@ -2,15 +2,15 @@ import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
2
2
  import type { UmbContextToken } from "@umbraco-cms/backoffice/context-api";
3
3
  import type { UmbSubmittableWorkspaceContext } from "@umbraco-cms/backoffice/workspace";
4
4
  import type { ENGAGE_GROUPED_ITEM_WORKSPACE_CONTEXT, UeGroupedItemWorkspaceContext } from "../../context/index.js";
5
- import type { UeGroupedItemListModel, UePropertyConfigData } from "../../../core/index.js";
6
- export declare class UeGroupedItemListEditorBaseElement<EntityItemModel extends UeGroupedItemListModel> extends UmbLitElement {
5
+ import type { UeGroupedItemListModel } from "../../../core/index.js";
6
+ export declare abstract class UeGroupedItemListEditorBaseElement<EntityItemModel extends UeGroupedItemListModel> extends UmbLitElement {
7
7
  #private;
8
- workspaceContext?: typeof ENGAGE_GROUPED_ITEM_WORKSPACE_CONTEXT.TYPE;
9
- sortable?: boolean;
10
- data?: Array<EntityItemModel>;
11
- addLabel?: string;
12
- editLabel?: string;
13
- constructor(properties: UePropertyConfigData<EntityItemModel>, contextToken: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<any, any>>);
8
+ protected workspaceContext?: typeof ENGAGE_GROUPED_ITEM_WORKSPACE_CONTEXT.TYPE;
9
+ protected sortable?: boolean;
10
+ protected data?: Array<EntityItemModel>;
11
+ protected addLabel: string;
12
+ protected abstract onAdd(idx?: number): Promise<unknown>;
13
+ constructor(contextToken: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<any, any>>, addLabel: string);
14
14
  render(): import("lit-html").TemplateResult<1>;
15
15
  static styles: import("lit").CSSResult;
16
16
  }
@@ -4,16 +4,14 @@ 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 { css, html, property, state, when, } from "@umbraco-cms/backoffice/external/lit";
7
+ import { css, html, property, repeat, state, when, } from "@umbraco-cms/backoffice/external/lit";
8
8
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
9
9
  import { UmbSorterController } from "@umbraco-cms/backoffice/sorter";
10
- import { umbConfirmModal, umbOpenModal } from "@umbraco-cms/backoffice/modal";
11
10
  export class UeGroupedItemListEditorBaseElement extends UmbLitElement {
12
- #properties;
13
11
  #sorter;
14
- constructor(properties, contextToken) {
12
+ constructor(contextToken, addLabel) {
15
13
  super();
16
- this.#properties = properties;
14
+ this.addLabel = addLabel;
17
15
  this.consumeContext(contextToken, (context) => {
18
16
  if (!context)
19
17
  return;
@@ -27,72 +25,31 @@ export class UeGroupedItemListEditorBaseElement extends UmbLitElement {
27
25
  #setSorter() {
28
26
  if (!this.sortable)
29
27
  return;
30
- this.#sorter =
31
- this.#sorter ??
32
- new UmbSorterController(this, {
33
- getUniqueOfElement: (element) => {
34
- return element.id;
35
- },
36
- getUniqueOfModel: (modelEntry) => {
37
- return modelEntry;
38
- },
39
- identifier: "Ue.SorterIdentifier.GroupedItem",
40
- itemSelector: "ue-group-box",
41
- containerSelector: "#items",
42
- onChange: ({ model }) => {
43
- this.workspaceContext?.sortItems(model);
44
- },
45
- onEnd: async () => {
46
- await this.workspaceContext?.requestSubmit();
47
- },
48
- });
49
- this.#sorter?.setModel(this.data?.map((x) => x.unique) ?? []);
50
- }
51
- async #onEdit(unique, position) {
52
- if (!this.workspaceContext)
53
- return;
54
- let current;
55
- if (!unique) {
56
- current = this.workspaceContext.createItem();
57
- }
58
- else {
59
- current = this.workspaceContext
60
- .getCurrent()
61
- ?.items.find((x) => x.unique === unique);
62
- }
63
- const value = await umbOpenModal(this, (await import("../../modal/index.js")).ENGAGE_GROUPED_ITEM_EDIT_ITEM_MODAL, {
64
- data: {
65
- current,
66
- properties: this.#properties,
67
- headline: (unique ? this.editLabel : this.addLabel) ?? "",
28
+ this.#sorter = new UmbSorterController(this, {
29
+ getUniqueOfElement: (element) => {
30
+ return element.id;
68
31
  },
69
- modal: {
70
- size: "medium",
32
+ getUniqueOfModel: (modelEntry) => {
33
+ return modelEntry;
34
+ },
35
+ identifier: "Ue.SorterIdentifier.GroupedItem",
36
+ itemSelector: "ue-group-box",
37
+ containerSelector: "#items",
38
+ onChange: ({ model }) => {
39
+ this.workspaceContext?.sortItems(model);
40
+ },
41
+ onEnd: async () => {
42
+ await this.workspaceContext?.requestSubmit();
71
43
  },
72
- }).catch(() => { });
73
- if (!value)
74
- return;
75
- this.workspaceContext.setItem(value, position);
76
- await this.workspaceContext.requestSubmit();
77
- }
78
- async #onAdd() {
79
- await this.#onEdit();
80
- }
81
- async #onAddInline(pos) {
82
- await this.#onEdit(undefined, pos);
83
- }
84
- async #onDelete(unique) {
85
- await umbConfirmModal(this, {
86
- headline: this.localize.term("actions_delete"),
87
- content: this.localize.term("engage_deleteItemsDescription", 1),
88
- color: "danger",
89
- confirmLabel: this.localize.term("actions_delete"),
90
44
  });
91
- await this.workspaceContext?.deleteItem(unique);
45
+ this.#sorter?.setModel(this.data?.map((x) => x.unique) ?? []);
46
+ }
47
+ async #onAdd(idx) {
48
+ await this.onAdd(idx);
92
49
  }
93
50
  #renderItems() {
94
- return this.data?.map((p, idx) => html `${when(this.sortable && this.data?.length && idx > 0, () => html `<uui-button-inline-create
95
- @click=${() => this.#onAddInline(idx)}
51
+ return repeat(this.data ?? [], (p) => p.unique, (p, idx) => html `${when(this.sortable && this.data?.length && idx > 0, () => html `<uui-button-inline-create
52
+ @click=${() => this.#onAdd(idx)}
96
53
  label="Create Item"
97
54
  ></uui-button-inline-create>`)}<ue-group-box
98
55
  style="${`--engage-bar-color: ${p.color?.value}`}"
@@ -100,19 +57,14 @@ export class UeGroupedItemListEditorBaseElement extends UmbLitElement {
100
57
  .name=${p.title}
101
58
  .description=${p.description}
102
59
  .iconUrl=${p.iconUrl}
103
- ><uui-action-bar slot="actions">
104
- <uui-button
105
- label=${this.editLabel ?? "edit"}
106
- @click=${() => this.#onEdit(p.unique)}
107
- >
108
- <uui-icon name="edit"></uui-icon>
109
- </uui-button>
110
- <uui-button
111
- label="delete"
112
- @click=${() => this.#onDelete(p.unique)}
113
- >
114
- <uui-icon name="delete"></uui-icon>
115
- </uui-button> </uui-action-bar
60
+ >
61
+ <ue-entity-actions-bundle
62
+ slot="actions"
63
+ .entityType=${p.entityType}
64
+ .unique=${p.unique}
65
+ .name=${p.title}
66
+ >
67
+ </ue-entity-actions-bundle
116
68
  ></ue-group-box>`);
117
69
  }
118
70
  render() {
@@ -120,7 +72,7 @@ export class UeGroupedItemListEditorBaseElement extends UmbLitElement {
120
72
  <uui-button
121
73
  @click=${this.#onAdd}
122
74
  look="placeholder"
123
- .label=${this.addLabel ?? ""}
75
+ .label=${this.localize.string(this.addLabel)}
124
76
  ></uui-button>`;
125
77
  }
126
78
  static { this.styles = css `
@@ -133,7 +85,7 @@ export class UeGroupedItemListEditorBaseElement extends UmbLitElement {
133
85
  }
134
86
 
135
87
  #items > ue-group-box:not(:first-of-type) {
136
- margin-top: var(--uui-size-layout-1);
88
+ margin-top: var(--uui-size-space-5);
137
89
  }
138
90
 
139
91
  :host([sortable]) #items > ue-group-box {
@@ -3,20 +3,15 @@ import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
3
3
  import type { IRoute } from "@umbraco-cms/backoffice/router";
4
4
  import type { UmbSubmittableWorkspaceContext } from "@umbraco-cms/backoffice/workspace";
5
5
  import type { UmbContextToken } from "@umbraco-cms/backoffice/context-api";
6
- import { type UeGroupedItemDetailModel, type UePropertyConfigData } from "../../../core/index.js";
6
+ import { type UeGroupedItemDetailModel } from "../../../core/index.js";
7
7
  export declare abstract class UeGroupedItemWorkspaceEditorBaseElement<EntityModel extends UeGroupedItemDetailModel> extends UmbLitElement {
8
8
  #private;
9
- properties?: UePropertyConfigData<EntityModel>;
10
- advancedProperties?: UePropertyConfigData<EntityModel>;
11
9
  private _data?;
12
- abstract headline: string;
13
- abstract addGroupLabel: string;
14
- abstract editModalHeadline?: string;
15
- abstract itemLabel: string;
16
- abstract icon: string;
17
- abstract personalizationSection: string;
18
- abstract routes: Array<IRoute>;
19
- constructor(contextToken?: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<EntityModel, any>>);
10
+ protected abstract headline: string;
11
+ protected abstract addGroupLabel: string;
12
+ protected abstract itemLabel: string;
13
+ protected abstract routes: Array<IRoute>;
14
+ constructor(contextToken: UmbContextToken<UmbSubmittableWorkspaceContext, UeGroupedItemWorkspaceContext<EntityModel, any>>);
20
15
  load(unique: string): void;
21
16
  render(): import("lit-html").TemplateResult<1>;
22
17
  static styles: import("lit").CSSResult[];
@@ -4,27 +4,26 @@ 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 { ENGAGE_CUSTOMER_JOURNEY_ENTITY_TYPE } from "../../journeys/constants.js";
8
7
  import { css, html, state } from "@umbraco-cms/backoffice/external/lit";
9
8
  import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
10
9
  import { umbOpenModal } from "@umbraco-cms/backoffice/modal";
11
10
  import { ENGAGE_GROUPED_ITEM_EDIT_DETAIL_MODAL } from "../../index.js";
12
11
  export class UeGroupedItemWorkspaceEditorBaseElement extends UmbLitElement {
13
12
  #workspaceContext;
13
+ #properties;
14
+ #advancedProperties;
14
15
  constructor(contextToken) {
15
16
  super();
16
- if (!contextToken)
17
- throw new Error("contextToken is missing");
18
17
  this.consumeContext(contextToken, (context) => {
19
18
  if (!context)
20
19
  return;
21
20
  this.#workspaceContext = context;
22
21
  this.observe(context.data, (data) => (this._data = data));
23
22
  this.observe(context.properties, (properties) => {
24
- this.properties = properties;
23
+ this.#properties = properties;
25
24
  });
26
25
  this.observe(context.advancedProperties, (advancedProperties) => {
27
- this.advancedProperties = advancedProperties;
26
+ this.#advancedProperties = advancedProperties;
28
27
  });
29
28
  });
30
29
  }
@@ -35,11 +34,7 @@ export class UeGroupedItemWorkspaceEditorBaseElement extends UmbLitElement {
35
34
  this.#workspaceContext?.setPath(unique);
36
35
  }
37
36
  #renderSidebar() {
38
- return html `<uui-box slot="sidebar">
39
- <div slot="headline">
40
- <uui-icon name=${this.icon}></uui-icon>
41
- ${this.headline}
42
- </div>
37
+ return html `<uui-box slot="sidebar" .headline=${this.headline}>
43
38
  ${this.#renderTree()}
44
39
  </uui-box>`;
45
40
  }
@@ -49,8 +44,8 @@ export class UeGroupedItemWorkspaceEditorBaseElement extends UmbLitElement {
49
44
  const value = await umbOpenModal(this, ENGAGE_GROUPED_ITEM_EDIT_DETAIL_MODAL, {
50
45
  data: {
51
46
  current: await this.#workspaceContext.createGroup(),
52
- properties: this.properties,
53
- advancedProperties: this.advancedProperties,
47
+ properties: this.#properties,
48
+ advancedProperties: this.#advancedProperties,
54
49
  headline: this.addGroupLabel,
55
50
  },
56
51
  modal: {
@@ -80,7 +75,7 @@ export class UeGroupedItemWorkspaceEditorBaseElement extends UmbLitElement {
80
75
  </div>
81
76
 
82
77
  <ue-entity-actions-bundle
83
- .entityType=${ENGAGE_CUSTOMER_JOURNEY_ENTITY_TYPE}
78
+ .entityType=${group.entityType}
84
79
  .unique=${group.unique}
85
80
  .label=${this.localize.term("actions_viewActionsFor", [
86
81
  group.title,
@@ -18,6 +18,11 @@ export class UeGroupCollectionTableViewBaseElement extends UeCollectionTableBase
18
18
  },
19
19
  ];
20
20
  this.appendColumns();
21
+ this.tableColumns.push({
22
+ name: "",
23
+ alias: "actions",
24
+ align: "right",
25
+ });
21
26
  }
22
27
  createTableItems(result) {
23
28
  this.tableItems = result.map((g) => {
@@ -41,6 +46,16 @@ ${g.description}</pre
41
46
  ],
42
47
  };
43
48
  this.appendData(item, g);
49
+ item.data.push({
50
+ columnAlias: "actions",
51
+ value: html `<umb-entity-actions-table-column-view
52
+ .value=${{
53
+ entityType: this._entityType,
54
+ unique: g.unique,
55
+ name: g.name,
56
+ }}
57
+ ></umb-entity-actions-table-column-view>`,
58
+ });
44
59
  return item;
45
60
  });
46
61
  }
@@ -3,10 +3,10 @@ declare const elementName = "ue-content-scoring-workspace-editor";
3
3
  export declare class UeContentScoringWorkspaceEditorElement extends UmbLitElement {
4
4
  #private;
5
5
  protected readonly defaultUpperScoreLimit = 10;
6
- private _personas?;
7
- private _journeys?;
8
6
  private _data?;
9
7
  private _buttonState;
8
+ private _journeys?;
9
+ private _personas?;
10
10
  constructor();
11
11
  render(): import("lit-html").TemplateResult<1> | undefined;
12
12
  static styles: import("lit").CSSResult;
@@ -13,147 +13,91 @@ let UeContentScoringWorkspaceEditorElement = class UeContentScoringWorkspaceEdit
13
13
  constructor() {
14
14
  super();
15
15
  this.defaultUpperScoreLimit = 10;
16
- this._buttonState = {
17
- None: undefined,
18
- Persona: undefined,
19
- Journey: undefined,
20
- };
21
16
  this.consumeContext(ENGAGE_CONTENT_SCORING_WORKSPACE_CONTEXT, (context) => {
22
17
  if (!context)
23
18
  return;
24
19
  this.#workspaceContext = context;
25
20
  this.observe(this.#workspaceContext.data, (data) => {
26
- if (data === undefined)
21
+ if (!data)
27
22
  return;
28
23
  this._data = data;
29
24
  });
30
- this.observe(this.#workspaceContext.personas, (personas) => {
31
- this._personas = personas;
32
- });
33
25
  this.observe(this.#workspaceContext.journeys, (journeys) => {
34
26
  this._journeys = journeys;
35
27
  });
28
+ this.observe(this.#workspaceContext.personas, (personas) => {
29
+ this._personas = personas;
30
+ });
36
31
  });
37
32
  }
33
+ #itemsOfType(type) {
34
+ return this._data?.items?.filter((x) => x.type === type) ?? [];
35
+ }
38
36
  #renderJourneys() {
39
37
  if (!this._journeys?.length)
40
38
  return;
41
- return html `<ue-divider
42
- .text=${this.localize.term("engage_availableCustomerJourneys")}
43
- ></ue-divider>
44
- ${this._journeys.map((p) => this.#renderGroup(p))}`;
39
+ const journeys = this.#itemsOfType("Journey");
40
+ return html `<uui-box
41
+ .headline=${this.localize.term("engage_availableCustomerJourneys")}
42
+ >
43
+ <ue-customer-journey-scoring
44
+ .config=${{ hideDivider: true }}
45
+ .value=${journeys.map((p) => ({
46
+ ...p,
47
+ unique: p.unique,
48
+ })) ?? []}
49
+ @change=${(e) => this.#onChange(e, "Journey")}
50
+ ></ue-customer-journey-scoring
51
+ ></uui-box>`;
45
52
  }
46
53
  #renderPersonas() {
47
54
  if (!this._personas?.length)
48
55
  return;
49
- return html `<ue-divider
50
- .text=${this.localize.term("engage_availablePersonaGroups")}
51
- ></ue-divider>
52
- ${this._personas.map((p) => this.#renderGroup(p))}`;
53
- }
54
- async #onValueChange(e, item, group) {
55
- const value = Number(e.target.value);
56
- //Enforce the upper score limit
57
- if (group.upperScoreLimit && value > group.upperScoreLimit) {
58
- e.target.value = group.upperScoreLimit.toString();
59
- }
60
- // Enforce non-negative values
61
- if (value < 0) {
62
- e.target.value = "0";
63
- }
64
- await this.#workspaceContext?.setItem(e.target.value, item);
56
+ const personas = this.#itemsOfType("Persona");
57
+ return html `<uui-box
58
+ .headline=${this.localize.term("engage_availablePersonaGroups")}
59
+ >
60
+ <ue-persona-group-scoring
61
+ .config=${{ hideDivider: true }}
62
+ .value=${personas.map((p) => ({
63
+ ...p,
64
+ unique: p.id.toString(),
65
+ })) ?? []}
66
+ @change=${(e) => this.#onChange(e, "Persona")}
67
+ >
68
+ </ue-persona-group-scoring
69
+ ></uui-box>`;
65
70
  }
66
- #getValue(item) {
67
- const score = this._data?.items.find((x) => x.entityId === item.id && x.type === item.entityType)?.score;
68
- return score ?? 0;
69
- }
70
- async #onSave(entityType) {
71
- this._buttonState = { ...this._buttonState, [entityType]: "waiting" };
72
- try {
73
- await this.#workspaceContext?.requestSave();
74
- this._buttonState = { ...this._buttonState, [entityType]: "success" };
75
- }
76
- catch {
77
- this._buttonState = { ...this._buttonState, [entityType]: "failed" };
78
- }
71
+ #onChange(e, type) {
72
+ const value = e.target.value;
73
+ this.#workspaceContext?.updateScores(value, type);
79
74
  }
80
75
  async #onSaveAll() {
81
- // Save all changes at once
82
- this._buttonState = {
83
- ...this._buttonState,
84
- None: "waiting",
85
- Persona: "waiting",
86
- Journey: "waiting",
87
- };
76
+ this._buttonState = "waiting";
88
77
  try {
89
78
  await this.#workspaceContext?.requestSave();
90
- this._buttonState = {
91
- ...this._buttonState,
92
- None: "success",
93
- Persona: "success",
94
- Journey: "success",
95
- };
79
+ this._buttonState = "success";
96
80
  }
97
81
  catch {
98
- this._buttonState = {
99
- ...this._buttonState,
100
- None: "failed",
101
- Persona: "failed",
102
- Journey: "failed",
103
- };
82
+ this._buttonState = "failed";
104
83
  }
105
84
  }
106
- #renderGroup(group) {
107
- //Hide groups without items
108
- if (!group.items?.length)
109
- return;
110
- return html `<uui-box .headline=${group.title ?? ""}>
111
- ${when(group.upperScoreLimit !== this.defaultUpperScoreLimit, () => html ` <div slot="header-actions">
112
- ${this.localize.term("engage_scoreFromTo", group.upperScoreLimit)}
113
- </div>`)}
114
- ${group.items.map((item) => html `<ue-group-box
115
- style=${`--engage-bar-color: ${item.color?.value}`}
116
- .name=${item.title}
117
- .description=${item.description}
118
- .iconUrl=${item.iconUrl}
119
- >
120
- ${group.upperScoreLimit && group.upperScoreLimit > 10
121
- ? html `<uui-input
122
- type="number"
123
- max=${group.upperScoreLimit}
124
- min="0"
125
- @change=${(e) => this.#onValueChange(e, item, group)}
126
- .value=${this.#getValue(item).toString()}
127
- ></uui-input>`
128
- : html `<umb-input-slider
129
- .max=${group.upperScoreLimit ?? 10}
130
- @change=${(e) => this.#onValueChange(e, item, group)}
131
- .valueLow=${this.#getValue(item)}
132
- ></umb-input-slider>`}
133
- </ue-group-box>`)}
134
- </uui-box>`;
135
- }
136
85
  render() {
137
86
  if (!this._data)
138
87
  return;
139
- const hasAnyGroups = (this._personas?.some((p) => p.items?.length > 0) ||
140
- this._journeys?.some((j) => j.items?.length > 0));
141
88
  return html `
142
- ${this.#renderPersonas()}
143
- ${this.#renderJourneys()}
144
- ${hasAnyGroups
145
- ? html `
146
- <div class="workspace-footer">
147
- <uui-button
148
- look="primary"
149
- color="positive"
150
- @click=${this.#onSaveAll}
151
- .state=${this._buttonState.None}
152
- .label=${this.localize.term("engage_saveScoring")}
153
- ></uui-button>
154
- </div>
155
- `
156
- : ""}
89
+ ${this.#renderPersonas()} ${this.#renderJourneys()}
90
+ ${when(this._data.items.length > 0, () => html `
91
+ <div class="workspace-footer">
92
+ <uui-button
93
+ look="primary"
94
+ color="positive"
95
+ @click=${this.#onSaveAll}
96
+ .state=${this._buttonState}
97
+ .label=${this.localize.term("engage_saveScoring")}
98
+ ></uui-button>
99
+ </div>
100
+ `)}
157
101
  `;
158
102
  }
159
103
  static { this.styles = css `
@@ -161,24 +105,6 @@ let UeContentScoringWorkspaceEditorElement = class UeContentScoringWorkspaceEdit
161
105
  margin-top: var(--uui-size-layout-1);
162
106
  }
163
107
 
164
- ue-group-box + ue-group-box {
165
- margin-top: var(--uui-size-5);
166
- }
167
-
168
- umb-input-slider {
169
- width: 100%;
170
- }
171
-
172
- ue-divider:first-child {
173
- margin-top: 0;
174
- }
175
-
176
- .box-footer {
177
- display: flex;
178
- justify-content: flex-end;
179
- margin-top: var(--uui-size-3);
180
- }
181
-
182
108
  .workspace-footer {
183
109
  display: flex;
184
110
  justify-content: flex-end;
@@ -188,16 +114,16 @@ let UeContentScoringWorkspaceEditorElement = class UeContentScoringWorkspaceEdit
188
114
  };
189
115
  __decorate([
190
116
  state()
191
- ], UeContentScoringWorkspaceEditorElement.prototype, "_personas", void 0);
117
+ ], UeContentScoringWorkspaceEditorElement.prototype, "_data", void 0);
192
118
  __decorate([
193
119
  state()
194
- ], UeContentScoringWorkspaceEditorElement.prototype, "_journeys", void 0);
120
+ ], UeContentScoringWorkspaceEditorElement.prototype, "_buttonState", void 0);
195
121
  __decorate([
196
122
  state()
197
- ], UeContentScoringWorkspaceEditorElement.prototype, "_data", void 0);
123
+ ], UeContentScoringWorkspaceEditorElement.prototype, "_journeys", void 0);
198
124
  __decorate([
199
125
  state()
200
- ], UeContentScoringWorkspaceEditorElement.prototype, "_buttonState", void 0);
126
+ ], UeContentScoringWorkspaceEditorElement.prototype, "_personas", void 0);
201
127
  UeContentScoringWorkspaceEditorElement = __decorate([
202
128
  customElement(elementName)
203
129
  ], UeContentScoringWorkspaceEditorElement);
@@ -1,8 +1,9 @@
1
1
  import { type UeContentScoringDetailModel } from "../entities.js";
2
2
  import type { UeContentScoringDetailRepository } from "../repository/detail/index.js";
3
- import type { UePersonaGroupDetailModel, UeCustomerJourneyDetailModel, UeScoringGroupEntityItemUnionModel } from "../../entities.js";
4
3
  import type { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api";
5
- import { UeWorkspaceContextBase } from "../../../core/index.js";
4
+ import { UeEntityScoreModel, UeWorkspaceContextBase } from "../../../core/index.js";
5
+ import { ContentScoringEntityTypeModel } from "../../../generated/index.js";
6
+ import { UePersonaGroupDetailModel, UeCustomerJourneyDetailModel } from "src/personalization/entities.js";
6
7
  export declare class UeContentScoringWorkspaceContext extends UeWorkspaceContextBase<UeContentScoringDetailModel, UeContentScoringDetailRepository> {
7
8
  #private;
8
9
  readonly IS_CONTENT_SCORING_WORKSPACE_CONTEXT = true;
@@ -10,8 +11,7 @@ export declare class UeContentScoringWorkspaceContext extends UeWorkspaceContext
10
11
  personas: import("rxjs").Observable<UePersonaGroupDetailModel[]>;
11
12
  journeys: import("rxjs").Observable<UeCustomerJourneyDetailModel[]>;
12
13
  constructor(host: UmbControllerHost, hostUnique: string);
13
- hostConnected(): Promise<import("@umbraco-cms/backoffice/repository").UmbRepositoryResponse<UeContentScoringDetailModel> | import("@umbraco-cms/backoffice/repository").UmbRepositoryResponseWithAsObservable<UeContentScoringDetailModel, UeContentScoringDetailModel>>;
14
- setItem(value: string, item: UeScoringGroupEntityItemUnionModel): Promise<void>;
14
+ hostConnected(): Promise<void>;
15
+ updateScores(value: UeEntityScoreModel[], typeMatch: ContentScoringEntityTypeModel): void;
15
16
  requestSave(): Promise<void>;
16
- destroy(): void;
17
17
  }