@umbraco-cms/backoffice 14.0.0--preview004-478ab905 → 14.0.0--preview004-eaff2f45

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 (117) hide show
  1. package/dist-cms/apps/app/app.context.js +1 -1
  2. package/dist-cms/custom-elements.json +184 -173
  3. package/dist-cms/packages/core/collection/default/collection-default.context.js +1 -1
  4. package/dist-cms/packages/core/components/property-type-based-property/property-type-based-property.element.js +2 -2
  5. package/dist-cms/packages/core/components/variant-selector/variant-selector.element.js +4 -3
  6. package/dist-cms/packages/core/data-type/components/property-editor-config/property-editor-config.element.d.ts +1 -1
  7. package/dist-cms/packages/core/data-type/components/property-editor-config/property-editor-config.element.js +9 -8
  8. package/dist-cms/packages/core/data-type/index.d.ts +0 -1
  9. package/dist-cms/packages/core/data-type/index.js +0 -1
  10. package/dist-cms/packages/core/data-type/workspace/data-type-workspace-editor.element.js +1 -1
  11. package/dist-cms/packages/core/data-type/workspace/data-type-workspace.context.d.ts +3 -3
  12. package/dist-cms/packages/core/data-type/workspace/data-type-workspace.context.js +44 -6
  13. package/dist-cms/packages/core/data-type/workspace/views/details/data-type-details-workspace-view.element.js +2 -2
  14. package/dist-cms/packages/core/data-type/workspace/views/info/workspace-view-data-type-info.element.js +6 -6
  15. package/dist-cms/packages/core/modal/common/embedded-media/embedded-media-modal.element.js +12 -12
  16. package/dist-cms/packages/core/modal/common/section-picker/section-picker-modal.element.js +4 -9
  17. package/dist-cms/packages/core/property/index.d.ts +4 -0
  18. package/dist-cms/packages/core/property/index.js +4 -0
  19. package/dist-cms/packages/core/property/property/index.d.ts +2 -0
  20. package/dist-cms/packages/core/property/property/index.js +2 -0
  21. package/dist-cms/packages/core/{workspace/workspace-property/workspace-property.context.d.ts → property/property/property.context.d.ts} +3 -3
  22. package/dist-cms/packages/core/{workspace/workspace-property/workspace-property.context.js → property/property/property.context.js} +15 -15
  23. package/dist-cms/packages/core/{workspace/workspace-property/workspace-property.element.d.ts → property/property/property.element.d.ts} +9 -10
  24. package/dist-cms/packages/core/{workspace/workspace-property/workspace-property.element.js → property/property/property.element.js} +63 -56
  25. package/dist-cms/packages/core/property/property-dataset/index.d.ts +6 -0
  26. package/dist-cms/packages/core/property/property-dataset/index.js +6 -0
  27. package/dist-cms/packages/core/property/property-dataset/nameable-property-dataset-context.interface.d.ts +7 -0
  28. package/dist-cms/packages/core/property/property-dataset/nameable-property-dataset-context.token.d.ts +5 -0
  29. package/dist-cms/packages/core/property/property-dataset/nameable-property-dataset-context.token.js +4 -0
  30. package/dist-cms/packages/core/property/property-dataset/property-dataset-base-context.d.ts +33 -0
  31. package/dist-cms/packages/core/property/property-dataset/property-dataset-base-context.js +58 -0
  32. package/dist-cms/packages/core/{workspace/variant-context/variant-context.interface.d.ts → property/property-dataset/property-dataset-context.interface.d.ts} +7 -6
  33. package/dist-cms/packages/core/property/property-dataset/property-dataset-context.token.d.ts +3 -0
  34. package/dist-cms/packages/core/property/property-dataset/property-dataset-context.token.js +2 -0
  35. package/dist-cms/packages/core/property/property-dataset/property-dataset.element.d.ts +67 -0
  36. package/dist-cms/packages/core/property/property-dataset/property-dataset.element.js +119 -0
  37. package/dist-cms/packages/core/property/property-layout/index.d.ts +1 -0
  38. package/dist-cms/packages/core/property/property-layout/index.js +1 -0
  39. package/dist-cms/packages/core/{workspace/workspace-property-layout/workspace-property-layout.element.d.ts → property/property-layout/property-layout.element.d.ts} +4 -4
  40. package/dist-cms/packages/core/{workspace/workspace-property-layout/workspace-property-layout.element.js → property/property-layout/property-layout.element.js} +12 -12
  41. package/dist-cms/packages/core/property/types/index.d.ts +1 -0
  42. package/dist-cms/packages/core/property/types/index.js +1 -0
  43. package/dist-cms/packages/core/property/types/property-value-data.type.d.ts +4 -0
  44. package/dist-cms/packages/core/property/types/property-value-data.type.js +1 -0
  45. package/dist-cms/packages/core/property-action/common/clear/property-action-clear.element.js +2 -2
  46. package/dist-cms/packages/core/property-editor/uis/block-grid/property-editor-ui-block-grid.element.js +2 -2
  47. package/dist-cms/packages/core/property-editor/uis/block-list/config/block-configuration/property-editor-ui-block-list-block-configuration.element.js +1 -1
  48. package/dist-cms/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.element.js +2 -2
  49. package/dist-cms/packages/core/property-editor/uis/text-box/property-editor-ui-text-box.element.js +5 -2
  50. package/dist-cms/packages/core/tree/tree-item-base/tree-item-base.context.js +6 -6
  51. package/dist-cms/packages/core/tree/tree.context.d.ts +3 -21
  52. package/dist-cms/packages/core/tree/tree.context.js +1 -37
  53. package/dist-cms/packages/core/tree/tree.element.js +6 -6
  54. package/dist-cms/packages/core/workspace/index.d.ts +1 -3
  55. package/dist-cms/packages/core/workspace/index.js +1 -3
  56. package/dist-cms/packages/core/workspace/workspace-context/workspace-invariantable-context.interface.d.ts +3 -2
  57. package/dist-cms/packages/core/workspace/workspace-context/workspace-variantable-context.interface.d.ts +2 -2
  58. package/dist-cms/packages/core/workspace/workspace-modal/workspace-modal.element.d.ts +1 -1
  59. package/dist-cms/packages/core/workspace/workspace-modal/workspace-modal.element.js +2 -2
  60. package/dist-cms/packages/core/workspace/workspace-property-dataset/index.d.ts +1 -0
  61. package/dist-cms/packages/core/workspace/workspace-property-dataset/index.js +1 -0
  62. package/dist-cms/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.d.ts +26 -0
  63. package/dist-cms/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.js +44 -0
  64. package/dist-cms/packages/core/workspace/workspace-split-view/workspace-split-view.context.js +1 -1
  65. package/dist-cms/packages/dictionary/dictionary/workspace/views/editor/workspace-view-dictionary-editor.element.js +2 -2
  66. package/dist-cms/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit-property.element.js +1 -1
  67. package/dist-cms/packages/documents/document-types/workspace/views/settings/document-type-workspace-view-settings.element.js +8 -8
  68. package/dist-cms/packages/documents/document-types/workspace/views/structure/document-type-workspace-view-structure.element.js +6 -6
  69. package/dist-cms/packages/documents/document-types/workspace/views/templates/document-type-workspace-view-templates.element.js +4 -4
  70. package/dist-cms/packages/documents/documents/{variant-context/document-variant-context.d.ts → property-dataset-context/document-property-dataset-context.d.ts} +4 -4
  71. package/dist-cms/packages/documents/documents/{variant-context/document-variant-context.js → property-dataset-context/document-property-dataset-context.js} +6 -8
  72. package/dist-cms/packages/documents/documents/property-dataset-context/document-property-dataset-context.token.d.ts +5 -0
  73. package/dist-cms/packages/documents/documents/{variant-context/document-variant-context.token.js → property-dataset-context/document-property-dataset-context.token.js} +1 -1
  74. package/dist-cms/packages/documents/documents/workspace/document-workspace.context.d.ts +2 -2
  75. package/dist-cms/packages/documents/documents/workspace/document-workspace.context.js +3 -3
  76. package/dist-cms/packages/media/media-types/workspace/views/design/media-type-workspace-view-edit-property.element.js +1 -1
  77. package/dist-cms/packages/media/media-types/workspace/views/structure/media-type-workspace-view-structure.element.js +6 -6
  78. package/dist-cms/packages/packages/package-builder/workspace/workspace-package-builder.element.js +15 -29
  79. package/dist-cms/packages/settings/languages/modals/language-picker/language-picker-modal.element.js +1 -1
  80. package/dist-cms/packages/settings/languages/workspace/language/views/details/language-details-workspace-view.element.js +8 -8
  81. package/dist-cms/packages/settings/relation-types/workspace/views/relation-type/relation-type-workspace-view-relation-type.element.js +6 -6
  82. package/dist-cms/packages/tags/property-editors/tags/property-editor-ui-tags.element.js +2 -2
  83. package/dist-cms/packages/user/user/modals/user-picker/user-picker-modal.element.js +1 -1
  84. package/dist-cms/packages/user/user/workspace/components/user-workspace-access-settings/user-workspace-access-settings.element.js +6 -6
  85. package/dist-cms/packages/user/user/workspace/components/user-workspace-profile-settings/user-workspace-profile-settings.element.js +4 -4
  86. package/dist-cms/packages/user/user-group/modals/user-group-picker/user-group-picker-modal.element.js +1 -1
  87. package/dist-cms/packages/user/user-group/workspace/user-group-workspace-editor.element.js +6 -6
  88. package/dist-cms/shared/utils/index.d.ts +1 -1
  89. package/dist-cms/shared/utils/index.js +1 -1
  90. package/dist-cms/shared/utils/{selection-manager.d.ts → selection-manager/selection.manager.d.ts} +17 -1
  91. package/dist-cms/shared/utils/{selection-manager.js → selection-manager/selection.manager.js} +48 -6
  92. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  93. package/dist-cms/vscode-html-custom-data.json +63 -68
  94. package/examples/dashboard-with-property-dataset/README.md +5 -0
  95. package/examples/dashboard-with-property-dataset/dataset-dashboard.ts +75 -0
  96. package/examples/dashboard-with-property-dataset/index.ts +15 -0
  97. package/package.json +4 -1
  98. package/dist-cms/packages/core/data-type/variant-context/data-type-variant-context.d.ts +0 -7
  99. package/dist-cms/packages/core/data-type/variant-context/data-type-variant-context.js +0 -7
  100. package/dist-cms/packages/core/data-type/variant-context/data-type-variant-context.token.d.ts +0 -5
  101. package/dist-cms/packages/core/data-type/variant-context/data-type-variant-context.token.js +0 -3
  102. package/dist-cms/packages/core/data-type/variant-context/index.d.ts +0 -2
  103. package/dist-cms/packages/core/data-type/variant-context/index.js +0 -2
  104. package/dist-cms/packages/core/workspace/variant-context/index.d.ts +0 -5
  105. package/dist-cms/packages/core/workspace/variant-context/index.js +0 -5
  106. package/dist-cms/packages/core/workspace/variant-context/invariant-workspace-variant-context.d.ts +0 -29
  107. package/dist-cms/packages/core/workspace/variant-context/invariant-workspace-variant-context.js +0 -48
  108. package/dist-cms/packages/core/workspace/variant-context/nameable-variant-context.interface.d.ts +0 -7
  109. package/dist-cms/packages/core/workspace/variant-context/nameable-variant-context.token.d.ts +0 -5
  110. package/dist-cms/packages/core/workspace/variant-context/nameable-variant-context.token.js +0 -3
  111. package/dist-cms/packages/core/workspace/variant-context/variant-context.token.d.ts +0 -3
  112. package/dist-cms/packages/core/workspace/variant-context/variant-context.token.js +0 -2
  113. package/dist-cms/packages/core/workspace/workspace-property/index.d.ts +0 -2
  114. package/dist-cms/packages/core/workspace/workspace-property/index.js +0 -2
  115. package/dist-cms/packages/documents/documents/variant-context/document-variant-context.token.d.ts +0 -5
  116. /package/dist-cms/packages/core/{workspace/variant-context/nameable-variant-context.interface.js → property/property-dataset/nameable-property-dataset-context.interface.js} +0 -0
  117. /package/dist-cms/packages/core/{workspace/variant-context/variant-context.interface.js → property/property-dataset/property-dataset-context.interface.js} +0 -0
@@ -39,7 +39,7 @@ let UmbRelationTypeWorkspaceViewRelationTypeElement = class UmbRelationTypeWorks
39
39
  render() {
40
40
  return html `
41
41
  <uui-box>
42
- <umb-workspace-property-layout label="Direction">
42
+ <umb-property-layout label="Direction">
43
43
  <uui-radio-group
44
44
  value=${ifDefined(this._relationType?.isBidirectional)}
45
45
  @change=${this.#handleDirectionChange}
@@ -47,15 +47,15 @@ let UmbRelationTypeWorkspaceViewRelationTypeElement = class UmbRelationTypeWorks
47
47
  <uui-radio label="Parent to child" value="false"></uui-radio>
48
48
  <uui-radio label="Bidirectional" value="true"></uui-radio>
49
49
  </uui-radio-group>
50
- </umb-workspace-property-layout>
51
- <umb-workspace-property-layout label="Parent">${this.#renderParentProperty()}</umb-workspace-property-layout>
52
- <umb-workspace-property-layout label="Child"> ${this.#renderChildProperty()} </umb-workspace-property-layout>
53
- <umb-workspace-property-layout label="Is dependency">
50
+ </umb-property-layout>
51
+ <umb-property-layout label="Parent">${this.#renderParentProperty()}</umb-property-layout>
52
+ <umb-property-layout label="Child"> ${this.#renderChildProperty()} </umb-property-layout>
53
+ <umb-property-layout label="Is dependency">
54
54
  <uui-toggle
55
55
  slot="editor"
56
56
  @change=${this.#handleIsDependencyChange}
57
57
  .checked=${this._relationType?.isDependency ?? false}></uui-toggle>
58
- </umb-workspace-property-layout>
58
+ </umb-property-layout>
59
59
  </uui-box>
60
60
  `;
61
61
  }
@@ -4,9 +4,9 @@ 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_PROPERTY_CONTEXT } from '../../../core/property/index.js';
7
8
  import { html, customElement, property, state, ifDefined } from '../../../../external/lit/index.js';
8
9
  import { UmbTextStyles } from '../../../../shared/style/index.js';
9
- import { UMB_WORKSPACE_PROPERTY_CONTEXT_TOKEN } from '../../../core/workspace/index.js';
10
10
  import { UmbLitElement } from '../../../../shared/lit-element/index.js';
11
11
  /**
12
12
  * @element umb-property-editor-ui-tags
@@ -26,7 +26,7 @@ let UmbPropertyEditorUITagsElement = class UmbPropertyEditorUITagsElement extend
26
26
  constructor() {
27
27
  super();
28
28
  this._value = [];
29
- this.consumeContext(UMB_WORKSPACE_PROPERTY_CONTEXT_TOKEN, (context) => {
29
+ this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => {
30
30
  this.observe(context.variantId, (id) => {
31
31
  if (id && id.culture !== undefined) {
32
32
  this._culture = id.culture;
@@ -13,7 +13,7 @@ let UmbUserPickerModalElement = class UmbUserPickerModalElement extends UmbModal
13
13
  constructor() {
14
14
  super(...arguments);
15
15
  this._users = [];
16
- this.#selectionManager = new UmbSelectionManager();
16
+ this.#selectionManager = new UmbSelectionManager(this);
17
17
  this.#userCollectionRepository = new UmbUserCollectionRepository(this);
18
18
  }
19
19
  #selectionManager;
@@ -33,30 +33,30 @@ let UmbUserWorkspaceAccessSettingsElement = class UmbUserWorkspaceAccessSettings
33
33
  return html ` <uui-box>
34
34
  <div slot="headline"><umb-localize key="user_assignAccess">Assign Access</umb-localize></div>
35
35
  <div id="assign-access">
36
- <umb-workspace-property-layout
36
+ <umb-property-layout
37
37
  label="${this.localize.term('general_groups')}"
38
38
  description="${this.localize.term('user_groupsHelp')}">
39
39
  <umb-user-group-input
40
40
  slot="editor"
41
41
  .selectedIds=${this._user?.userGroupIds ?? []}
42
42
  @change=${this.#onUserGroupsChange}></umb-user-group-input>
43
- </umb-workspace-property-layout>
44
- <umb-workspace-property-layout
43
+ </umb-property-layout>
44
+ <umb-property-layout
45
45
  label=${this.localize.term('user_startnodes')}
46
46
  description=${this.localize.term('user_startnodeshelp')}>
47
47
  <umb-input-document
48
48
  .selectedIds=${this._user?.contentStartNodeIds ?? []}
49
49
  @change=${this.#onDocumentStartNodeChange}
50
50
  slot="editor"></umb-input-document>
51
- </umb-workspace-property-layout>
52
- <umb-workspace-property-layout
51
+ </umb-property-layout>
52
+ <umb-property-layout
53
53
  label=${this.localize.term('user_mediastartnodes')}
54
54
  description=${this.localize.term('user_mediastartnodeshelp')}>
55
55
  <umb-input-media
56
56
  .selectedIds=${this._user?.mediaStartNodeIds ?? []}
57
57
  @change=${this.#onMediaStartNodeChange}
58
58
  slot="editor"></umb-input-media>
59
- </umb-workspace-property-layout>
59
+ </umb-property-layout>
60
60
  </div>
61
61
  </uui-box>
62
62
 
@@ -31,19 +31,19 @@ let UmbUserWorkspaceProfileSettingsElement = class UmbUserWorkspaceProfileSettin
31
31
  }
32
32
  #renderEmailProperty() {
33
33
  return html `
34
- <umb-workspace-property-layout label="${this.localize.term('general_email')}">
34
+ <umb-property-layout label="${this.localize.term('general_email')}">
35
35
  <uui-input
36
36
  slot="editor"
37
37
  name="email"
38
38
  label="${this.localize.term('general_email')}"
39
39
  readonly
40
40
  value=${ifDefined(this._user?.email)}></uui-input>
41
- </umb-workspace-property-layout>
41
+ </umb-property-layout>
42
42
  `;
43
43
  }
44
44
  #renderUILanguageProperty() {
45
45
  return html `
46
- <umb-workspace-property-layout
46
+ <umb-property-layout
47
47
  label="${this.localize.term('user_language')}"
48
48
  description=${this.localize.term('user_languageHelp')}>
49
49
  <umb-ui-culture-input
@@ -52,7 +52,7 @@ let UmbUserWorkspaceProfileSettingsElement = class UmbUserWorkspaceProfileSettin
52
52
  @change="${this.#onLanguageChange}"
53
53
  name="language"
54
54
  label="${this.localize.term('user_language')}"></umb-ui-culture-input>
55
- </umb-workspace-property-layout>
55
+ </umb-property-layout>
56
56
  `;
57
57
  }
58
58
  static { this.styles = [
@@ -14,7 +14,7 @@ let UmbUserGroupPickerModalElement = class UmbUserGroupPickerModalElement extend
14
14
  constructor() {
15
15
  super(...arguments);
16
16
  this._userGroups = [];
17
- this.#selectionManager = new UmbSelectionManager();
17
+ this.#selectionManager = new UmbSelectionManager(this);
18
18
  this.#userGroupCollectionRepository = new UmbUserGroupCollectionRepository(this);
19
19
  }
20
20
  #selectionManager;
@@ -83,15 +83,15 @@ let UmbUserGroupWorkspaceEditorElement = class UmbUserGroupWorkspaceEditorElemen
83
83
  return html `
84
84
  <uui-box>
85
85
  <div slot="headline"><umb-localize key="user_assignAccess"></umb-localize></div>
86
- <umb-workspace-property-layout
86
+ <umb-property-layout
87
87
  label=${this.localize.term('main_sections')}
88
88
  description=${this.localize.term('user_sectionsHelp')}>
89
89
  <umb-input-section
90
90
  slot="editor"
91
91
  .value=${this._userGroup.sections ?? []}
92
92
  @change=${this.#onSectionsChange}></umb-input-section>
93
- </umb-workspace-property-layout>
94
- <umb-workspace-property-layout
93
+ </umb-property-layout>
94
+ <umb-property-layout
95
95
  label=${this.localize.term('defaultdialogs_selectContentStartNode')}
96
96
  description=${this.localize.term('user_startnodehelp')}>
97
97
  <umb-input-document
@@ -99,8 +99,8 @@ let UmbUserGroupWorkspaceEditorElement = class UmbUserGroupWorkspaceEditorElemen
99
99
  max="1"
100
100
  .selectedIds=${this._userGroup.documentStartNodeId ? [this._userGroup.documentStartNodeId] : []}
101
101
  @change=${this.#onDocumentStartNodeChange}></umb-input-document>
102
- </umb-workspace-property-layout>
103
- <umb-workspace-property-layout
102
+ </umb-property-layout>
103
+ <umb-property-layout
104
104
  label=${this.localize.term('defaultdialogs_selectMediaStartNode')}
105
105
  description=${this.localize.term('user_mediastartnodehelp')}>
106
106
  <umb-input-media
@@ -108,7 +108,7 @@ let UmbUserGroupWorkspaceEditorElement = class UmbUserGroupWorkspaceEditorElemen
108
108
  max="1"
109
109
  .selectedIds=${this._userGroup.mediaStartNodeId ? [this._userGroup.mediaStartNodeId] : []}
110
110
  @change=${this.#onMediaStartNodeChange}></umb-input-media>
111
- </umb-workspace-property-layout>
111
+ </umb-property-layout>
112
112
  </uui-box>
113
113
 
114
114
  <uui-box>
@@ -8,7 +8,7 @@ export * from './pagination-manager/pagination.manager.js';
8
8
  export * from './path-decode.function.js';
9
9
  export * from './path-encode.function.js';
10
10
  export * from './path-folder-name.function.js';
11
- export * from './selection-manager.js';
11
+ export * from './selection-manager/selection.manager.js';
12
12
  export * from './udi-service.js';
13
13
  export * from './umbraco-path.function.js';
14
14
  export * from './split-string-to-array.js';
@@ -8,7 +8,7 @@ export * from './pagination-manager/pagination.manager.js';
8
8
  export * from './path-decode.function.js';
9
9
  export * from './path-encode.function.js';
10
10
  export * from './path-folder-name.function.js';
11
- export * from './selection-manager.js';
11
+ export * from './selection-manager/selection.manager.js';
12
12
  export * from './udi-service.js';
13
13
  export * from './umbraco-path.function.js';
14
14
  export * from './split-string-to-array.js';
@@ -1,12 +1,28 @@
1
+ import { UmbBaseController } from '../../../libs/class-api/index.js';
2
+ import { UmbControllerHost } from '../../../libs/controller-api/index.js';
1
3
  /**
2
4
  * Manages the selection of items.
3
5
  * @export
4
6
  * @class UmbSelectionManager
5
7
  */
6
- export declare class UmbSelectionManager {
8
+ export declare class UmbSelectionManager extends UmbBaseController {
7
9
  #private;
10
+ readonly selectable: import("rxjs").Observable<boolean>;
8
11
  readonly selection: import("rxjs").Observable<(string | null)[]>;
9
12
  readonly multiple: import("rxjs").Observable<boolean>;
13
+ constructor(host: UmbControllerHost);
14
+ /**
15
+ * Returns whether items can be selected.
16
+ * @return {*}
17
+ * @memberof UmbSelectionManager
18
+ */
19
+ getSelectable(): boolean;
20
+ /**
21
+ * Sets whether items can be selected.
22
+ * @param {boolean} value
23
+ * @memberof UmbSelectionManager
24
+ */
25
+ setSelectable(value: boolean): void;
10
26
  /**
11
27
  * Returns the current selection.
12
28
  * @return {*}
@@ -1,18 +1,40 @@
1
- import { UmbArrayState, UmbBooleanState } from '../../libs/observable-api/index.js';
1
+ import { UmbBaseController } from '../../../libs/class-api/index.js';
2
+ import { UmbSelectionChangeEvent } from '../../../packages/core/event/index.js';
3
+ import { UmbArrayState, UmbBooleanState } from '../../../libs/observable-api/index.js';
2
4
  /**
3
5
  * Manages the selection of items.
4
6
  * @export
5
7
  * @class UmbSelectionManager
6
8
  */
7
- export class UmbSelectionManager {
8
- constructor() {
9
+ export class UmbSelectionManager extends UmbBaseController {
10
+ #selectable;
11
+ #selection;
12
+ #multiple;
13
+ constructor(host) {
14
+ super(host);
15
+ this.#selectable = new UmbBooleanState(false);
16
+ this.selectable = this.#selectable.asObservable();
9
17
  this.#selection = new UmbArrayState([], (x) => x);
10
18
  this.selection = this.#selection.asObservable();
11
19
  this.#multiple = new UmbBooleanState(false);
12
20
  this.multiple = this.#multiple.asObservable();
13
21
  }
14
- #selection;
15
- #multiple;
22
+ /**
23
+ * Returns whether items can be selected.
24
+ * @return {*}
25
+ * @memberof UmbSelectionManager
26
+ */
27
+ getSelectable() {
28
+ return this.#selectable.getValue();
29
+ }
30
+ /**
31
+ * Sets whether items can be selected.
32
+ * @param {boolean} value
33
+ * @memberof UmbSelectionManager
34
+ */
35
+ setSelectable(value) {
36
+ this.#selectable.next(value);
37
+ }
16
38
  /**
17
39
  * Returns the current selection.
18
40
  * @return {*}
@@ -27,9 +49,12 @@ export class UmbSelectionManager {
27
49
  * @memberof UmbSelectionManager
28
50
  */
29
51
  setSelection(value) {
52
+ if (this.getSelectable() === false)
53
+ return;
30
54
  if (value === undefined)
31
55
  throw new Error('Value cannot be undefined');
32
- this.#selection.next(value);
56
+ const newSelection = this.getMultiple() ? value : [value[0]];
57
+ this.#selection.next(newSelection);
33
58
  }
34
59
  /**
35
60
  * Returns whether multiple items can be selected.
@@ -46,6 +71,11 @@ export class UmbSelectionManager {
46
71
  */
47
72
  setMultiple(value) {
48
73
  this.#multiple.next(value);
74
+ /* If multiple is set to false, and the current selection is more than one,
75
+ then we need to set the selection to the first item. */
76
+ if (value === false && this.getSelection().length > 1) {
77
+ this.setSelection([this.getSelection()[0]]);
78
+ }
49
79
  }
50
80
  /**
51
81
  * Toggles the given unique id in the current selection.
@@ -53,6 +83,8 @@ export class UmbSelectionManager {
53
83
  * @memberof UmbSelectionManager
54
84
  */
55
85
  toggleSelect(unique) {
86
+ if (this.getSelectable() === false)
87
+ return;
56
88
  this.isSelected(unique) ? this.deselect(unique) : this.select(unique);
57
89
  }
58
90
  /**
@@ -61,8 +93,13 @@ export class UmbSelectionManager {
61
93
  * @memberof UmbSelectionManager
62
94
  */
63
95
  select(unique) {
96
+ if (this.getSelectable() === false)
97
+ return;
98
+ if (this.isSelected(unique))
99
+ return;
64
100
  const newSelection = this.getMultiple() ? [...this.getSelection(), unique] : [unique];
65
101
  this.#selection.next(newSelection);
102
+ this.getHostElement().dispatchEvent(new UmbSelectionChangeEvent());
66
103
  }
67
104
  /**
68
105
  * Removes the given unique id from the current selection.
@@ -70,8 +107,11 @@ export class UmbSelectionManager {
70
107
  * @memberof UmbSelectionManager
71
108
  */
72
109
  deselect(unique) {
110
+ if (this.getSelectable() === false)
111
+ return;
73
112
  const newSelection = this.getSelection().filter((x) => x !== unique);
74
113
  this.#selection.next(newSelection);
114
+ this.getHostElement().dispatchEvent(new UmbSelectionChangeEvent());
75
115
  }
76
116
  /**
77
117
  * Returns true if the given unique id is selected.
@@ -87,6 +127,8 @@ export class UmbSelectionManager {
87
127
  * @memberof UmbSelectionManager
88
128
  */
89
129
  clearSelection() {
130
+ if (this.getSelectable() === false)
131
+ return;
90
132
  this.#selection.next([]);
91
133
  }
92
134
  }