@umbraco-cms/backoffice 14.0.0-40e04294 → 14.0.0-45828375

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 (164) hide show
  1. package/dist-cms/apps/app/app.element.js +0 -3
  2. package/dist-cms/assets/lang/da-dk.js +3 -0
  3. package/dist-cms/assets/lang/da-dk.ts +3 -0
  4. package/dist-cms/assets/lang/en-us.js +21 -18
  5. package/dist-cms/assets/lang/en-us.ts +21 -18
  6. package/dist-cms/custom-elements.json +149 -19
  7. package/dist-cms/mocks/browser-handlers.js +1 -1
  8. package/dist-cms/mocks/data/entity.data.d.ts +1 -1
  9. package/dist-cms/mocks/data/entity.data.js +1 -9
  10. package/dist-cms/mocks/data/media.data.d.ts +2 -1
  11. package/dist-cms/mocks/data/media.data.js +11 -0
  12. package/dist-cms/mocks/data/user-group.data.d.ts +17 -0
  13. package/dist-cms/mocks/data/user-group.data.js +61 -0
  14. package/dist-cms/mocks/data/user.data.d.ts +15 -0
  15. package/dist-cms/mocks/data/{users.data.js → user.data.js} +27 -41
  16. package/dist-cms/mocks/handlers/dictionary.handlers.js +2 -2
  17. package/dist-cms/mocks/handlers/media.handlers.js +8 -0
  18. package/dist-cms/mocks/handlers/partial-views.handlers.js +3 -3
  19. package/dist-cms/mocks/handlers/user-group/collection.handlers.d.ts +1 -0
  20. package/dist-cms/mocks/handlers/user-group/collection.handlers.js +10 -0
  21. package/dist-cms/mocks/handlers/user-group/detail.handlers.d.ts +1 -0
  22. package/dist-cms/mocks/handlers/user-group/detail.handlers.js +37 -0
  23. package/dist-cms/mocks/handlers/user-group/index.js +4 -0
  24. package/dist-cms/mocks/handlers/user-group/item.handlers.d.ts +1 -0
  25. package/dist-cms/mocks/handlers/user-group/item.handlers.js +13 -0
  26. package/dist-cms/mocks/handlers/user-group/slug.d.ts +1 -0
  27. package/dist-cms/mocks/handlers/user-group/slug.js +1 -0
  28. package/dist-cms/mocks/handlers/user.handlers.js +15 -1
  29. package/dist-cms/packages/core/components/input-list-base/input-list-base.js +1 -1
  30. package/dist-cms/packages/core/components/input-section/input-section.element.d.ts +2 -2
  31. package/dist-cms/packages/core/components/input-section/input-section.element.js +5 -5
  32. package/dist-cms/packages/core/extension-registry/conditions/types.d.ts +3 -2
  33. package/dist-cms/packages/core/extension-registry/models/index.d.ts +5 -1
  34. package/dist-cms/packages/core/extension-registry/models/index.js +2 -0
  35. package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.d.ts +8 -0
  36. package/dist-cms/packages/core/extension-registry/models/user-granular-permission.model.js +1 -0
  37. package/dist-cms/packages/core/extension-registry/models/user-permission.model.d.ts +11 -0
  38. package/dist-cms/packages/core/extension-registry/models/user-permission.model.js +1 -0
  39. package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.d.ts +19 -0
  40. package/dist-cms/packages/core/modal/common/entity-user-permission-settings/entity-user-permission-settings-modal.element.js +97 -0
  41. package/dist-cms/packages/core/modal/common/manifests.js +6 -0
  42. package/dist-cms/packages/core/modal/common/tree-picker/tree-picker-modal.element.js +5 -3
  43. package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.d.ts +7 -0
  44. package/dist-cms/packages/core/modal/token/entity-user-permission-settings-modal.token.js +4 -0
  45. package/dist-cms/packages/core/modal/token/index.d.ts +1 -0
  46. package/dist-cms/packages/core/modal/token/index.js +1 -0
  47. package/dist-cms/packages/core/picker-input/picker-input.context.js +1 -3
  48. package/dist-cms/packages/core/tree/tree.context.js +3 -2
  49. package/dist-cms/packages/documents/documents/components/index.d.ts +1 -0
  50. package/dist-cms/packages/documents/documents/components/index.js +1 -0
  51. package/dist-cms/packages/documents/documents/components/input-document/input-document.context.d.ts +6 -0
  52. package/dist-cms/packages/documents/documents/components/input-document/input-document.context.js +7 -0
  53. package/dist-cms/packages/documents/documents/components/input-document/input-document.element.d.ts +7 -12
  54. package/dist-cms/packages/documents/documents/components/input-document/input-document.element.js +51 -64
  55. package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.d.ts +23 -0
  56. package/dist-cms/packages/documents/documents/components/input-document-granular-permission/input-document-granular-permission.element.js +102 -0
  57. package/dist-cms/packages/documents/documents/entity-actions/create/manifests.js +9 -0
  58. package/dist-cms/packages/documents/documents/entity-actions/manifests.js +1 -1
  59. package/dist-cms/packages/documents/documents/entity-actions/permissions.action.d.ts +2 -1
  60. package/dist-cms/packages/documents/documents/entity-actions/permissions.action.js +22 -2
  61. package/dist-cms/packages/documents/documents/index.d.ts +2 -0
  62. package/dist-cms/packages/documents/documents/index.js +2 -0
  63. package/dist-cms/packages/documents/documents/manifests.d.ts +4 -0
  64. package/dist-cms/packages/documents/documents/manifests.js +2 -0
  65. package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.d.ts +4 -0
  66. package/dist-cms/packages/documents/documents/recycle-bin/entity-action/manifests.js +6 -0
  67. package/dist-cms/packages/documents/documents/recycle-bin/manifests.d.ts +4 -0
  68. package/dist-cms/packages/documents/documents/repository/document.repository.js +4 -4
  69. package/dist-cms/packages/documents/documents/repository/manifests.d.ts +3 -2
  70. package/dist-cms/packages/documents/documents/repository/manifests.js +9 -1
  71. package/dist-cms/packages/documents/documents/user-permissions/index.d.ts +1 -0
  72. package/dist-cms/packages/documents/documents/user-permissions/index.js +1 -0
  73. package/dist-cms/packages/documents/documents/user-permissions/manifests.d.ts +19 -0
  74. package/dist-cms/packages/documents/documents/user-permissions/manifests.js +196 -0
  75. package/dist-cms/packages/documents/manifests.d.ts +4 -0
  76. package/dist-cms/packages/media/manifests.d.ts +2 -1
  77. package/dist-cms/packages/media/manifests.js +1 -0
  78. package/dist-cms/packages/media/media/components/index.d.ts +1 -0
  79. package/dist-cms/packages/media/media/components/index.js +1 -0
  80. package/dist-cms/packages/media/media/components/input-media/input-media.context.d.ts +6 -0
  81. package/dist-cms/packages/media/media/components/input-media/input-media.context.js +7 -0
  82. package/dist-cms/packages/media/media/components/input-media/input-media.element.d.ts +7 -15
  83. package/dist-cms/packages/media/media/components/input-media/input-media.element.js +50 -72
  84. package/dist-cms/packages/media/media/index.d.ts +2 -0
  85. package/dist-cms/packages/media/media/index.js +1 -1
  86. package/dist-cms/packages/media/media/manifests.d.ts +1 -1
  87. package/dist-cms/packages/media/media/manifests.js +2 -0
  88. package/dist-cms/packages/media/media/repository/manifests.d.ts +3 -2
  89. package/dist-cms/packages/media/media/repository/manifests.js +9 -1
  90. package/dist-cms/packages/media/media/repository/media-item.store.d.ts +20 -0
  91. package/dist-cms/packages/media/media/repository/media-item.store.js +23 -0
  92. package/dist-cms/packages/media/media/repository/media.repository.d.ts +6 -0
  93. package/dist-cms/packages/media/media/repository/media.repository.js +22 -0
  94. package/dist-cms/packages/media/media/repository/sources/media-item.server.data.d.ts +24 -0
  95. package/dist-cms/packages/media/media/repository/sources/media-item.server.data.js +31 -0
  96. package/dist-cms/packages/media/media/user-permissions/index.d.ts +1 -0
  97. package/dist-cms/packages/media/media/user-permissions/index.js +1 -0
  98. package/dist-cms/packages/media/media/user-permissions/manifests.d.ts +4 -0
  99. package/dist-cms/packages/media/media/user-permissions/manifests.js +27 -0
  100. package/dist-cms/packages/users/current-user/conditions/index.d.ts +1 -0
  101. package/dist-cms/packages/users/current-user/conditions/index.js +1 -0
  102. package/dist-cms/packages/users/current-user/conditions/user-permission.condition.d.ts +18 -0
  103. package/dist-cms/packages/users/current-user/conditions/user-permission.condition.js +23 -0
  104. package/dist-cms/packages/users/current-user/index.d.ts +1 -0
  105. package/dist-cms/packages/users/current-user/index.js +1 -0
  106. package/dist-cms/packages/users/current-user/manifests.js +7 -1
  107. package/dist-cms/packages/users/current-user/modals/current-user/current-user-modal.element.js +7 -7
  108. package/dist-cms/packages/users/index.d.ts +4 -2
  109. package/dist-cms/packages/users/index.js +4 -2
  110. package/dist-cms/packages/users/manifests.d.ts +2 -0
  111. package/dist-cms/packages/users/manifests.js +3 -0
  112. package/dist-cms/packages/users/user-groups/collection/user-group-collection-header.element.js +2 -2
  113. package/dist-cms/packages/users/user-groups/collection/user-group-collection-view.element.js +6 -6
  114. package/dist-cms/packages/users/user-groups/components/index.d.ts +1 -0
  115. package/dist-cms/packages/users/user-groups/components/index.js +1 -0
  116. package/dist-cms/packages/users/user-groups/entity-actions/manifests.d.ts +2 -0
  117. package/dist-cms/packages/users/user-groups/entity-actions/manifests.js +19 -0
  118. package/dist-cms/packages/users/user-groups/index.d.ts +2 -0
  119. package/dist-cms/packages/users/user-groups/index.js +2 -0
  120. package/dist-cms/packages/users/user-groups/manifests.d.ts +1 -1
  121. package/dist-cms/packages/users/user-groups/manifests.js +2 -0
  122. package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.d.ts +16 -0
  123. package/dist-cms/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.js +69 -0
  124. package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.d.ts +14 -0
  125. package/dist-cms/packages/users/user-groups/workspace/components/user-group-granular-permission-list.element.js +31 -0
  126. package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.d.ts +2 -0
  127. package/dist-cms/packages/users/user-groups/workspace/user-group-workspace-editor.element.js +57 -56
  128. package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.d.ts +12 -0
  129. package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.context.js +20 -0
  130. package/dist-cms/packages/users/user-groups/workspace/user-group-workspace.element.js +1 -1
  131. package/dist-cms/packages/users/users/collection/user-collection-header.element.js +18 -11
  132. package/dist-cms/packages/users/users/collection/views/grid/user-collection-grid-view.element.js +6 -6
  133. package/dist-cms/packages/users/users/collection/views/table/column-layouts/status/user-table-status-column-layout.element.js +3 -3
  134. package/dist-cms/packages/users/users/components/index.d.ts +3 -0
  135. package/dist-cms/packages/users/users/components/index.js +3 -0
  136. package/dist-cms/packages/users/users/components/user-input/user-input.element.js +2 -2
  137. package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.d.ts +15 -0
  138. package/dist-cms/packages/users/users/components/user-permission-setting/user-permission-setting.element.js +66 -0
  139. package/dist-cms/packages/users/users/index.d.ts +2 -0
  140. package/dist-cms/packages/users/users/index.js +2 -0
  141. package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.d.ts +3 -1
  142. package/dist-cms/packages/users/users/modals/user-picker/user-picker-modal.element.js +20 -25
  143. package/dist-cms/packages/users/users/repository/index.d.ts +1 -0
  144. package/dist-cms/packages/users/users/repository/index.js +1 -0
  145. package/dist-cms/packages/users/users/repository/user.repository.js +1 -1
  146. package/dist-cms/packages/users/users/workspace/user-workspace-editor.element.js +73 -56
  147. package/dist-cms/packages/users/utils.d.ts +5 -2
  148. package/dist-cms/packages/users/utils.js +14 -14
  149. package/dist-cms/shared/auth/auth-flow.d.ts +0 -4
  150. package/dist-cms/shared/auth/auth-flow.js +6 -25
  151. package/dist-cms/shared/repository/repository-items.manager.js +5 -0
  152. package/dist-cms/shared/umb-events/index.d.ts +1 -0
  153. package/dist-cms/shared/umb-events/index.js +1 -0
  154. package/dist-cms/shared/umb-events/selected.event.d.ts +3 -0
  155. package/dist-cms/shared/umb-events/selected.event.js +6 -0
  156. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  157. package/dist-cms/umbraco-package-schema.json +154 -0
  158. package/dist-cms/vscode-html-custom-data.json +66 -18
  159. package/package.json +1 -1
  160. package/dist-cms/mocks/data/user-groups.data.d.ts +0 -9
  161. package/dist-cms/mocks/data/user-groups.data.js +0 -21
  162. package/dist-cms/mocks/data/users.data.d.ts +0 -16
  163. package/dist-cms/mocks/handlers/user-group.handlers.js +0 -17
  164. /package/dist-cms/mocks/handlers/{user-group.handlers.d.ts → user-group/index.d.ts} +0 -0
@@ -33,3 +33,4 @@ export * from './data-type-picker-modal.token.js';
33
33
  export * from './workspace-modal.token.js';
34
34
  export * from './data-type-picker-flow-modal.token.js';
35
35
  export * from './data-type-picker-flow-data-type-picker-modal.token.js';
36
+ export * from './entity-user-permission-settings-modal.token.js';
@@ -48,9 +48,6 @@ export class UmbPickerInputContext {
48
48
  });
49
49
  }
50
50
  async requestRemoveItem(unique) {
51
- await this.#init;
52
- if (!this.repository)
53
- throw new Error('Repository is not initialized');
54
51
  // TODO: id won't always be available on the model, so we need to get the unique property from somewhere. Maybe the repository?
55
52
  const item = this.#itemManager.getItems().find((item) => this.#getUnique(item) === unique);
56
53
  if (!item)
@@ -67,5 +64,6 @@ export class UmbPickerInputContext {
67
64
  #removeItem(unique) {
68
65
  const newSelection = this.getSelection().filter((value) => value !== unique);
69
66
  this.setSelection(newSelection);
67
+ this.host.dispatchEvent(new UmbChangeEvent());
70
68
  }
71
69
  }
@@ -3,6 +3,7 @@ import { UmbBooleanState } from '../../../libs/observable-api/index.js';
3
3
  import { UmbBaseController } from '../../../libs/controller-api/index.js';
4
4
  import { createExtensionClass } from '../../../libs/extension-api/index.js';
5
5
  import { UmbSelectionManagerBase } from '../../../shared/utils/index.js';
6
+ import { UmbSelectedEvent } from '../../../shared/umb-events/index.js';
6
7
  export class UmbTreeContextBase extends UmbBaseController {
7
8
  #selectionManager;
8
9
  #selectable;
@@ -62,11 +63,11 @@ export class UmbTreeContextBase extends UmbBaseController {
62
63
  if (!this.getSelectable())
63
64
  return;
64
65
  this.#selectionManager.select(unique);
65
- this._host.getHostElement().dispatchEvent(new CustomEvent('selected'));
66
+ this._host.getHostElement().dispatchEvent(new UmbSelectedEvent());
66
67
  }
67
68
  deselect(unique) {
68
69
  this.#selectionManager.deselect(unique);
69
- this._host.getHostElement().dispatchEvent(new CustomEvent('selected'));
70
+ this._host.getHostElement().dispatchEvent(new UmbSelectedEvent());
70
71
  }
71
72
  async requestTreeRoot() {
72
73
  await this.#init;
@@ -1 +1,2 @@
1
1
  export * from './input-document/input-document.element.js';
2
+ export * from './input-document-granular-permission/input-document-granular-permission.element.js';
@@ -1 +1,2 @@
1
1
  export * from './input-document/input-document.element.js';
2
+ export * from './input-document-granular-permission/input-document-granular-permission.element.js';
@@ -0,0 +1,6 @@
1
+ import { UmbPickerInputContext } from '../../../../core/picker-input/index.js';
2
+ import { UmbControllerHostElement } from '../../../../../libs/controller-api/index.js';
3
+ import { DocumentItemResponseModel } from '../../../../../external/backend-api/index.js';
4
+ export declare class UmbDocumentPickerContext extends UmbPickerInputContext<DocumentItemResponseModel> {
5
+ constructor(host: UmbControllerHostElement);
6
+ }
@@ -0,0 +1,7 @@
1
+ import { UmbPickerInputContext } from '../../../../core/picker-input/index.js';
2
+ import { UMB_DOCUMENT_PICKER_MODAL } from '../../../../core/modal/index.js';
3
+ export class UmbDocumentPickerContext extends UmbPickerInputContext {
4
+ constructor(host) {
5
+ super(host, 'Umb.Repository.Document', UMB_DOCUMENT_PICKER_MODAL);
6
+ }
7
+ }
@@ -1,13 +1,15 @@
1
1
  import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
2
2
  declare const UmbInputDocumentElement_base: (new (...args: any[]) => import("../../../../../external/uui/index.js").FormControlMixinInterface) & typeof UmbLitElement;
3
3
  export declare class UmbInputDocumentElement extends UmbInputDocumentElement_base {
4
+ #private;
4
5
  /**
5
6
  * This is a minimum amount of selected items in this input.
6
7
  * @type {number}
7
8
  * @attr
8
- * @default undefined
9
+ * @default 0
9
10
  */
10
- min?: number;
11
+ get min(): number;
12
+ set min(value: number);
11
13
  /**
12
14
  * Min validation message.
13
15
  * @type {boolean}
@@ -19,9 +21,10 @@ export declare class UmbInputDocumentElement extends UmbInputDocumentElement_bas
19
21
  * This is a maximum amount of selected items in this input.
20
22
  * @type {number}
21
23
  * @attr
22
- * @default undefined
24
+ * @default Infinity
23
25
  */
24
- max?: number;
26
+ get max(): number;
27
+ set max(value: number);
25
28
  /**
26
29
  * Max validation message.
27
30
  * @type {boolean}
@@ -29,20 +32,12 @@ export declare class UmbInputDocumentElement extends UmbInputDocumentElement_bas
29
32
  * @default
30
33
  */
31
34
  maxMessage: string;
32
- private _selectedIds;
33
35
  get selectedIds(): Array<string>;
34
36
  set selectedIds(ids: Array<string>);
35
37
  set value(idsString: string);
36
38
  private _items?;
37
- private _modalContext?;
38
- private _documentStore?;
39
- private _pickedItemsObserver?;
40
39
  constructor();
41
40
  protected getFormElement(): undefined;
42
- private _observePickedDocuments;
43
- private _openPicker;
44
- private _removeItem;
45
- private _setSelection;
46
41
  render(): import("lit-html").TemplateResult<1>;
47
42
  private _renderItem;
48
43
  static styles: import("@lit/reactive-element/css-tag.js").CSSResult[];
@@ -4,25 +4,46 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from '../../repository/document.tree.store.js';
8
- import { css, html, nothing, customElement, property, state, ifDefined } from '../../../../../external/lit/index.js';
7
+ import { UmbDocumentPickerContext } from './input-document.context.js';
8
+ import { css, html, customElement, property, state, ifDefined } from '../../../../../external/lit/index.js';
9
9
  import { FormControlMixin } from '../../../../../external/uui/index.js';
10
- import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UMB_CONFIRM_MODAL, UMB_DOCUMENT_PICKER_MODAL, } from '../../../../core/modal/index.js';
11
10
  import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
12
11
  export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormControlMixin(UmbLitElement) {
12
+ /**
13
+ * This is a minimum amount of selected items in this input.
14
+ * @type {number}
15
+ * @attr
16
+ * @default 0
17
+ */
18
+ get min() {
19
+ return this.#pickerContext.min;
20
+ }
21
+ set min(value) {
22
+ this.#pickerContext.min = value;
23
+ }
24
+ /**
25
+ * This is a maximum amount of selected items in this input.
26
+ * @type {number}
27
+ * @attr
28
+ * @default Infinity
29
+ */
30
+ get max() {
31
+ return this.#pickerContext.max;
32
+ }
33
+ set max(value) {
34
+ this.#pickerContext.max = value;
35
+ }
13
36
  get selectedIds() {
14
- return this._selectedIds;
37
+ return this.#pickerContext.getSelection();
15
38
  }
16
39
  set selectedIds(ids) {
17
- this._selectedIds = ids;
18
- super.value = ids.join(',');
19
- this._observePickedDocuments();
40
+ this.#pickerContext.setSelection(ids);
20
41
  }
21
42
  set value(idsString) {
22
- if (idsString !== this._value) {
23
- this.selectedIds = idsString.split(/[ ,]+/);
24
- }
43
+ // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection.
44
+ this.selectedIds = idsString.split(/[ ,]+/);
25
45
  }
46
+ #pickerContext;
26
47
  constructor() {
27
48
  super();
28
49
  /**
@@ -39,69 +60,35 @@ export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormC
39
60
  * @default
40
61
  */
41
62
  this.maxMessage = 'This field exceeds the allowed amount of items';
42
- // TODO: do we need both selectedIds and value? If we just use value we follow the same pattern as native form controls.
43
- this._selectedIds = [];
44
- this.addValidator('rangeUnderflow', () => this.minMessage, () => !!this.min && this._selectedIds.length < this.min);
45
- this.addValidator('rangeOverflow', () => this.maxMessage, () => !!this.max && this._selectedIds.length > this.max);
46
- this.consumeContext(UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN, (instance) => {
47
- this._documentStore = instance;
48
- this._observePickedDocuments();
49
- });
50
- this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => {
51
- this._modalContext = instance;
52
- });
63
+ this.#pickerContext = new UmbDocumentPickerContext(this);
64
+ this.addValidator('rangeUnderflow', () => this.minMessage, () => !!this.min && this.#pickerContext.getSelection().length < this.min);
65
+ this.addValidator('rangeOverflow', () => this.maxMessage, () => !!this.max && this.#pickerContext.getSelection().length > this.max);
66
+ this.observe(this.#pickerContext.selection, (selection) => (super.value = selection.join(',')));
67
+ this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems));
53
68
  }
54
69
  getFormElement() {
55
70
  return undefined;
56
71
  }
57
- _observePickedDocuments() {
58
- this._pickedItemsObserver?.destroy();
59
- if (!this._documentStore)
60
- return;
61
- // TODO: consider changing this to the list data endpoint when it is available
62
- this._pickedItemsObserver = this.observe(this._documentStore.items(this._selectedIds), (items) => {
63
- this._items = items;
64
- });
65
- }
66
- _openPicker() {
67
- // We send a shallow copy(good enough as its just an array of ids) of our this._selectedIds, as we don't want the modal to manipulate our data:
68
- const modalContext = this._modalContext?.open(UMB_DOCUMENT_PICKER_MODAL, {
69
- multiple: this.max === 1 ? false : true,
70
- selection: [...this._selectedIds],
71
- });
72
- modalContext?.onSubmit().then(({ selection }) => {
73
- this._setSelection(selection);
74
- });
75
- }
76
- async _removeItem(item) {
77
- const modalContext = this._modalContext?.open(UMB_CONFIRM_MODAL, {
78
- color: 'danger',
79
- headline: `Remove ${item.name}?`,
80
- content: 'Are you sure you want to remove this item',
81
- confirmLabel: 'Remove',
82
- });
83
- await modalContext?.onSubmit();
84
- const newSelection = this._selectedIds.filter((value) => value !== item.id);
85
- this._setSelection(newSelection);
86
- }
87
- _setSelection(newSelection) {
88
- this.selectedIds = newSelection;
89
- this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }));
90
- }
91
72
  render() {
92
73
  return html `
93
- ${this._items?.map((item) => this._renderItem(item))}
94
- <uui-button id="add-button" look="placeholder" @click=${this._openPicker} label="open">Add</uui-button>
74
+ <uui-ref-list>${this._items?.map((item) => this._renderItem(item))}</uui-ref-list>
75
+ <uui-button id="add-button" look="placeholder" @click=${() => this.#pickerContext.openPicker()} label="open"
76
+ >Add</uui-button
77
+ >
95
78
  `;
96
79
  }
97
80
  _renderItem(item) {
98
- // TODO: remove when we have a way to handle trashed items
99
- const tempItem = item;
81
+ if (!item.id)
82
+ return;
100
83
  return html `
101
- <uui-ref-node name=${ifDefined(item.name === null ? undefined : item.name)} detail=${ifDefined(item.id)}>
102
- ${tempItem.isTrashed ? html ` <uui-tag size="s" slot="tag" color="danger">Trashed</uui-tag> ` : nothing}
84
+ <uui-ref-node name=${ifDefined(item.name)} detail=${ifDefined(item.id)}>
85
+ <!-- TODO: implement is trashed <uui-tag size="s" slot="tag" color="danger">Trashed</uui-tag> -->
103
86
  <uui-action-bar slot="actions">
104
- <uui-button @click=${() => this._removeItem(item)} label="Remove document ${item.name}">Remove</uui-button>
87
+ <uui-button
88
+ @click=${() => this.#pickerContext.requestRemoveItem(item.id)}
89
+ label="Remove document ${item.name}"
90
+ >Remove</uui-button
91
+ >
105
92
  </uui-action-bar>
106
93
  </uui-ref-node>
107
94
  `;
@@ -116,13 +103,13 @@ export let UmbInputDocumentElement = class UmbInputDocumentElement extends FormC
116
103
  };
117
104
  __decorate([
118
105
  property({ type: Number })
119
- ], UmbInputDocumentElement.prototype, "min", void 0);
106
+ ], UmbInputDocumentElement.prototype, "min", null);
120
107
  __decorate([
121
108
  property({ type: String, attribute: 'min-message' })
122
109
  ], UmbInputDocumentElement.prototype, "minMessage", void 0);
123
110
  __decorate([
124
111
  property({ type: Number })
125
- ], UmbInputDocumentElement.prototype, "max", void 0);
112
+ ], UmbInputDocumentElement.prototype, "max", null);
126
113
  __decorate([
127
114
  property({ type: String, attribute: 'min-message' })
128
115
  ], UmbInputDocumentElement.prototype, "maxMessage", void 0);
@@ -0,0 +1,23 @@
1
+ import { PropertyValueMap } from '../../../../../external/lit/index.js';
2
+ import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
3
+ declare const UmbInputDocumentGranularPermissionElement_base: (new (...args: any[]) => import("../../../../../external/uui/index.js").FormControlMixinInterface) & typeof UmbLitElement;
4
+ export declare class UmbInputDocumentGranularPermissionElement extends UmbInputDocumentGranularPermissionElement_base {
5
+ #private;
6
+ private _selectedIds;
7
+ get selectedIds(): Array<string>;
8
+ set selectedIds(ids: Array<string>);
9
+ set value(idsString: string);
10
+ private _items?;
11
+ constructor();
12
+ protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
13
+ protected getFormElement(): undefined;
14
+ disconnectedCallback(): void;
15
+ render(): import("lit-html").TemplateResult<1>;
16
+ static styles: import("@lit/reactive-element/css-tag").CSSResult[];
17
+ }
18
+ export default UmbInputDocumentGranularPermissionElement;
19
+ declare global {
20
+ interface HTMLElementTagNameMap {
21
+ 'umb-input-document-granular-permission': UmbInputDocumentGranularPermissionElement;
22
+ }
23
+ }
@@ -0,0 +1,102 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, customElement, property, state } from '../../../../../external/lit/index.js';
8
+ import { FormControlMixin } from '../../../../../external/uui/index.js';
9
+ import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UMB_CONFIRM_MODAL, UMB_DOCUMENT_PICKER_MODAL, } from '../../../../core/modal/index.js';
10
+ import { UmbLitElement } from '../../../../../shared/lit-element/index.js';
11
+ import { UmbDocumentRepository } from '../../index.js';
12
+ import { UmbChangeEvent } from '../../../../../shared/umb-events/index.js';
13
+ export let UmbInputDocumentGranularPermissionElement = class UmbInputDocumentGranularPermissionElement extends FormControlMixin(UmbLitElement) {
14
+ get selectedIds() {
15
+ return this._selectedIds;
16
+ }
17
+ set selectedIds(ids) {
18
+ this._selectedIds = ids;
19
+ super.value = ids.join(',');
20
+ this.#observePickedDocuments();
21
+ }
22
+ set value(idsString) {
23
+ if (idsString !== this._value) {
24
+ this.selectedIds = idsString.split(/[ ,]+/);
25
+ }
26
+ }
27
+ #documentRepository;
28
+ #modalContext;
29
+ #pickedItemsObserver;
30
+ constructor() {
31
+ super();
32
+ this._selectedIds = [];
33
+ this.#documentRepository = new UmbDocumentRepository(this);
34
+ this.consumeContext(UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => (this.#modalContext = instance));
35
+ }
36
+ firstUpdated(_changedProperties) {
37
+ super.firstUpdated(_changedProperties);
38
+ this.#observePickedDocuments();
39
+ }
40
+ getFormElement() {
41
+ return undefined;
42
+ }
43
+ async #observePickedDocuments() {
44
+ this.#pickedItemsObserver?.destroy();
45
+ const { asObservable } = await this.#documentRepository.requestItems(this._selectedIds);
46
+ this.#pickedItemsObserver = this.observe(asObservable(), (items) => (this._items = items));
47
+ }
48
+ #openDocumentPicker() {
49
+ // We send a shallow copy(good enough as its just an array of ids) of our this._selectedIds, as we don't want the modal to manipulate our data:
50
+ const modalContext = this.#modalContext?.open(UMB_DOCUMENT_PICKER_MODAL, {
51
+ selection: [...this._selectedIds],
52
+ });
53
+ modalContext?.onSubmit().then(({ selection }) => {
54
+ //this.#setSelection(selection);
55
+ });
56
+ }
57
+ async #removeItem(item) {
58
+ const modalContext = this.#modalContext?.open(UMB_CONFIRM_MODAL, {
59
+ color: 'danger',
60
+ headline: `Remove ${item.name}?`,
61
+ content: 'Are you sure you want to remove this item',
62
+ confirmLabel: 'Remove',
63
+ });
64
+ await modalContext?.onSubmit();
65
+ const newSelection = this._selectedIds.filter((value) => value !== item.id);
66
+ this.#setSelection(newSelection);
67
+ }
68
+ #setSelection(newSelection) {
69
+ this.selectedIds = newSelection;
70
+ this.dispatchEvent(new UmbChangeEvent());
71
+ }
72
+ disconnectedCallback() {
73
+ super.disconnectedCallback();
74
+ this.#pickedItemsObserver?.destroy();
75
+ }
76
+ render() {
77
+ return html `
78
+ ${this._items?.map((item) => this.#renderItem(item))}
79
+ <uui-button id="add-button" look="placeholder" @click=${this.#openDocumentPicker} label="open">Add</uui-button>
80
+ `;
81
+ }
82
+ #renderItem(item) {
83
+ return html ` <div>Render something here</div> `;
84
+ }
85
+ static { this.styles = [
86
+ css `
87
+ #add-button {
88
+ width: 100%;
89
+ }
90
+ `,
91
+ ]; }
92
+ };
93
+ __decorate([
94
+ property()
95
+ ], UmbInputDocumentGranularPermissionElement.prototype, "value", null);
96
+ __decorate([
97
+ state()
98
+ ], UmbInputDocumentGranularPermissionElement.prototype, "_items", void 0);
99
+ UmbInputDocumentGranularPermissionElement = __decorate([
100
+ customElement('umb-input-document-granular-permission')
101
+ ], UmbInputDocumentGranularPermissionElement);
102
+ export default UmbInputDocumentGranularPermissionElement;
@@ -14,6 +14,15 @@ const entityActions = [
14
14
  api: UmbCreateDocumentEntityAction,
15
15
  entityTypes: [DOCUMENT_ROOT_ENTITY_TYPE, DOCUMENT_ENTITY_TYPE],
16
16
  },
17
+ conditions: [
18
+ {
19
+ alias: 'Umb.Condition.UserPermission',
20
+ // TODO: investigate why the match property is not typed
21
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
22
+ //@ts-ignore
23
+ match: 'Umb.UserPermission.Document.Create',
24
+ },
25
+ ],
17
26
  },
18
27
  ];
19
28
  const modals = [
@@ -18,7 +18,7 @@ const entityActions = [
18
18
  weight: 800,
19
19
  meta: {
20
20
  icon: 'umb:blueprint',
21
- label: 'Create Content Template (TBD)',
21
+ label: 'Create Document Blueprint (TBD)',
22
22
  repositoryAlias: DOCUMENT_REPOSITORY_ALIAS,
23
23
  api: UmbCreateDocumentBlueprintEntityAction,
24
24
  entityTypes: [DOCUMENT_ENTITY_TYPE],
@@ -1,7 +1,8 @@
1
- import { UmbDocumentRepository } from '../repository/document.repository.js';
1
+ import { type UmbDocumentRepository } from '../repository/document.repository.js';
2
2
  import { UmbEntityActionBase } from '../../../core/entity-action/index.js';
3
3
  import { UmbControllerHostElement } from '../../../../libs/controller-api/index.js';
4
4
  export declare class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase<UmbDocumentRepository> {
5
+ #private;
5
6
  constructor(host: UmbControllerHostElement, repositoryAlias: string, unique: string);
6
7
  execute(): Promise<void>;
7
8
  }
@@ -1,10 +1,30 @@
1
1
  import { UmbEntityActionBase } from '../../../core/entity-action/index.js';
2
+ import { UmbContextConsumerController } from '../../../../libs/context-api/index.js';
3
+ import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, } from '../../../core/modal/index.js';
2
4
  export class UmbDocumentPermissionsEntityAction extends UmbEntityActionBase {
5
+ #modalContext;
3
6
  constructor(host, repositoryAlias, unique) {
4
7
  super(host, repositoryAlias, unique);
8
+ new UmbContextConsumerController(this.host, UMB_MODAL_MANAGER_CONTEXT_TOKEN, (instance) => {
9
+ this.#modalContext = instance;
10
+ });
5
11
  }
6
12
  async execute() {
7
- console.log(`execute for: ${this.unique}`);
8
- await this.repository?.setPermissions();
13
+ alert('WIP Permissions dialog');
14
+ if (!this.repository)
15
+ return;
16
+ if (!this.#modalContext)
17
+ return;
18
+ // TODO: we don't get "type" as part of the item
19
+ //const { data, error } = await this.repository.requestItems([this.unique]);
20
+ /*
21
+ const modalContext = this.#modalContext.open(UMB_ENTITY_USER_PERMISSION_MODAL, {
22
+ unique: this.unique,
23
+ entityType: ['document'],
24
+ });
25
+ */
26
+ // const { selection } = await modalContext.onSubmit();
27
+ // console.log(selection);
28
+ // await this.repository?.setPermissions();
9
29
  }
10
30
  }
@@ -1,6 +1,8 @@
1
1
  export * from './repository/index.js';
2
2
  export * from './workspace/index.js';
3
3
  export * from './recycle-bin/index.js';
4
+ export * from './user-permissions/index.js';
5
+ export * from './components/index.js';
4
6
  import './components/index.js';
5
7
  export declare const DOCUMENT_ROOT_ENTITY_TYPE = "document-root";
6
8
  export declare const DOCUMENT_ENTITY_TYPE = "document";
@@ -1,6 +1,8 @@
1
1
  export * from './repository/index.js';
2
2
  export * from './workspace/index.js';
3
3
  export * from './recycle-bin/index.js';
4
+ export * from './user-permissions/index.js';
5
+ export * from './components/index.js';
4
6
  import './components/index.js';
5
7
  export const DOCUMENT_ROOT_ENTITY_TYPE = 'document-root';
6
8
  export const DOCUMENT_ENTITY_TYPE = 'document';
@@ -10,4 +10,8 @@ export declare const manifests: (import("../../../libs/extension-api/types.js").
10
10
  api: typeof import("../../core/index.js").UmbTrashEntityAction;
11
11
  entityTypes: string[];
12
12
  };
13
+ conditions: {
14
+ alias: string;
15
+ match: string;
16
+ }[];
13
17
  })[];
@@ -6,6 +6,7 @@ import { manifests as workspaceManifests } from './workspace/manifests.js';
6
6
  import { manifests as entityActionManifests } from './entity-actions/manifests.js';
7
7
  import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js';
8
8
  import { manifests as propertyEditorManifests } from './property-editors/manifests.js';
9
+ import { manifests as userPermissionManifests } from './user-permissions/manifests.js';
9
10
  import { manifests as recycleBinManifests } from './recycle-bin/manifests.js';
10
11
  export const manifests = [
11
12
  ...collectionManifests,
@@ -16,5 +17,6 @@ export const manifests = [
16
17
  ...entityActionManifests,
17
18
  ...entityBulkActionManifests,
18
19
  ...propertyEditorManifests,
20
+ ...userPermissionManifests,
19
21
  ...recycleBinManifests,
20
22
  ];
@@ -11,4 +11,8 @@ export declare const manifests: {
11
11
  api: typeof UmbTrashEntityAction;
12
12
  entityTypes: string[];
13
13
  };
14
+ conditions: {
15
+ alias: string;
16
+ match: string;
17
+ }[];
14
18
  }[];
@@ -14,5 +14,11 @@ export const manifests = [
14
14
  api: UmbTrashEntityAction,
15
15
  entityTypes: [DOCUMENT_ENTITY_TYPE],
16
16
  },
17
+ conditions: [
18
+ {
19
+ alias: 'Umb.Condition.UserPermission',
20
+ match: 'Umb.UserPermission.Document.Delete',
21
+ },
22
+ ],
17
23
  },
18
24
  ];
@@ -10,4 +10,8 @@ export declare const manifests: (import("../../../core/index.js").ManifestMenuIt
10
10
  api: typeof import("../../../core/index.js").UmbTrashEntityAction;
11
11
  entityTypes: string[];
12
12
  };
13
+ conditions: {
14
+ alias: string;
15
+ match: string;
16
+ }[];
13
17
  })[];
@@ -25,16 +25,16 @@ export class UmbDocumentRepository {
25
25
  this.#init = Promise.all([
26
26
  new UmbContextConsumerController(this.#host, UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN, (instance) => {
27
27
  this.#treeStore = instance;
28
- }),
28
+ }).asPromise(),
29
29
  new UmbContextConsumerController(this.#host, UMB_DOCUMENT_STORE_CONTEXT_TOKEN, (instance) => {
30
30
  this.#store = instance;
31
- }),
31
+ }).asPromise(),
32
32
  new UmbContextConsumerController(this.#host, UMB_DOCUMENT_ITEM_STORE_CONTEXT_TOKEN, (instance) => {
33
33
  this.#itemStore = instance;
34
- }),
34
+ }).asPromise(),
35
35
  new UmbContextConsumerController(this.#host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => {
36
36
  this.#notificationContext = instance;
37
- }),
37
+ }).asPromise(),
38
38
  ]);
39
39
  }
40
40
  // TODO: Move
@@ -1,5 +1,6 @@
1
- import type { ManifestRepository, ManifestStore, ManifestTreeStore } from '../../../core/extension-registry/index.js';
1
+ import type { ManifestItemStore, ManifestRepository, ManifestStore, ManifestTreeStore } from '../../../core/extension-registry/index.js';
2
2
  export declare const DOCUMENT_REPOSITORY_ALIAS = "Umb.Repository.Document";
3
3
  export declare const DOCUMENT_STORE_ALIAS = "Umb.Store.Document";
4
4
  export declare const DOCUMENT_TREE_STORE_ALIAS = "Umb.Store.DocumentTree";
5
- export declare const manifests: (ManifestRepository | ManifestStore | ManifestTreeStore)[];
5
+ export declare const DOCUMENT_ITEM_STORE_ALIAS = "Umb.Store.DocumentItem";
6
+ export declare const manifests: (ManifestItemStore | ManifestRepository | ManifestStore | ManifestTreeStore)[];
@@ -1,4 +1,5 @@
1
1
  import { UmbDocumentRepository } from '../repository/document.repository.js';
2
+ import { UmbDocumentItemStore } from './document-item.store.js';
2
3
  import { UmbDocumentStore } from './document.store.js';
3
4
  import { UmbDocumentTreeStore } from './document.tree.store.js';
4
5
  export const DOCUMENT_REPOSITORY_ALIAS = 'Umb.Repository.Document';
@@ -10,6 +11,7 @@ const repository = {
10
11
  };
11
12
  export const DOCUMENT_STORE_ALIAS = 'Umb.Store.Document';
12
13
  export const DOCUMENT_TREE_STORE_ALIAS = 'Umb.Store.DocumentTree';
14
+ export const DOCUMENT_ITEM_STORE_ALIAS = 'Umb.Store.DocumentItem';
13
15
  const store = {
14
16
  type: 'store',
15
17
  alias: DOCUMENT_STORE_ALIAS,
@@ -22,4 +24,10 @@ const treeStore = {
22
24
  name: 'Document Tree Store',
23
25
  class: UmbDocumentTreeStore,
24
26
  };
25
- export const manifests = [repository, store, treeStore];
27
+ const itemStore = {
28
+ type: 'itemStore',
29
+ alias: DOCUMENT_ITEM_STORE_ALIAS,
30
+ name: 'Document Item Store',
31
+ class: UmbDocumentItemStore,
32
+ };
33
+ export const manifests = [repository, store, treeStore, itemStore];
@@ -0,0 +1 @@
1
+ export * from './manifests.js';
@@ -0,0 +1 @@
1
+ export * from './manifests.js';