@umbraco-cms/backoffice 14.0.0--preview004-24474e88 → 14.0.0--preview004-19e302a4

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 (45) hide show
  1. package/dist-cms/custom-elements.json +33 -0
  2. package/dist-cms/mocks/browser-handlers.js +1 -1
  3. package/dist-cms/mocks/data/media-type.data.d.ts +12 -7
  4. package/dist-cms/mocks/data/media-type.data.js +46 -22
  5. package/dist-cms/mocks/data/utils.d.ts +2 -1
  6. package/dist-cms/mocks/data/utils.js +6 -0
  7. package/dist-cms/mocks/handlers/media-type/detail.handlers.d.ts +1 -0
  8. package/dist-cms/mocks/handlers/media-type/detail.handlers.js +37 -0
  9. package/dist-cms/mocks/handlers/media-type/index.js +4 -0
  10. package/dist-cms/mocks/handlers/media-type/item.handlers.d.ts +1 -0
  11. package/dist-cms/mocks/handlers/media-type/item.handlers.js +20 -0
  12. package/dist-cms/mocks/handlers/media-type/slug.d.ts +1 -0
  13. package/dist-cms/mocks/handlers/media-type/slug.js +1 -0
  14. package/dist-cms/mocks/handlers/media-type/tree.handlers.d.ts +1 -0
  15. package/dist-cms/mocks/handlers/media-type/tree.handlers.js +25 -0
  16. package/dist-cms/packages/media/media-types/repository/media-type-item.store.d.ts +20 -0
  17. package/dist-cms/packages/media/media-types/repository/media-type-item.store.js +23 -0
  18. package/dist-cms/packages/media/media-types/repository/media-type.detail.store.d.ts +3 -2
  19. package/dist-cms/packages/media/media-types/repository/media-type.detail.store.js +3 -0
  20. package/dist-cms/packages/media/media-types/repository/media-type.repository.d.ts +25 -22
  21. package/dist-cms/packages/media/media-types/repository/media-type.repository.js +61 -30
  22. package/dist-cms/packages/media/media-types/repository/sources/media-type-item.server.data.d.ts +25 -0
  23. package/dist-cms/packages/media/media-types/repository/sources/media-type-item.server.data.js +32 -0
  24. package/dist-cms/packages/media/media-types/repository/sources/media-type.detail.server.data.d.ts +10 -10
  25. package/dist-cms/packages/media/media-types/repository/sources/media-type.detail.server.data.js +26 -35
  26. package/dist-cms/packages/media/media-types/workspace/manifests.js +76 -2
  27. package/dist-cms/packages/media/media-types/workspace/media-type-workspace-editor.element.d.ts +7 -1
  28. package/dist-cms/packages/media/media-types/workspace/media-type-workspace-editor.element.js +135 -18
  29. package/dist-cms/packages/media/media-types/workspace/media-type-workspace.context.d.ts +11 -8
  30. package/dist-cms/packages/media/media-types/workspace/media-type-workspace.context.js +25 -12
  31. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-design-workspace-view.element.d.ts +17 -0
  32. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-design-workspace-view.element.js +51 -0
  33. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-list-view-workspace-view.element.d.ts +17 -0
  34. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-list-view-workspace-view.element.js +51 -0
  35. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-permissions-workspace-view.element.d.ts +17 -0
  36. package/dist-cms/packages/media/media-types/workspace/views/details/media-type-permissions-workspace-view.element.js +51 -0
  37. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  38. package/dist-cms/vscode-html-custom-data.json +16 -1
  39. package/package.json +1 -1
  40. package/dist-cms/mocks/handlers/media-type.handlers.js +0 -23
  41. package/dist-cms/packages/media/media-types/repository/sources/media-type.details.server.data.interface.d.ts +0 -9
  42. package/dist-cms/packages/media/media-types/repository/sources/media-type.details.server.data.interface.js +0 -1
  43. package/dist-cms/packages/media/media-types/types.d.ts +0 -6
  44. package/dist-cms/packages/media/media-types/types.js +0 -1
  45. /package/dist-cms/mocks/handlers/{media-type.handlers.d.ts → media-type/index.d.ts} +0 -0
@@ -6138,6 +6138,39 @@
6138
6138
  }
6139
6139
  ]
6140
6140
  },
6141
+ {
6142
+ "name": "umb-media-type-design-workspace-view",
6143
+ "path": "./../src/packages/media/media-types/workspace/views/details/media-type-design-workspace-view.element.ts",
6144
+ "properties": [
6145
+ {
6146
+ "name": "styles",
6147
+ "type": "array",
6148
+ "default": "[\"UmbTextStyles\",null]"
6149
+ }
6150
+ ]
6151
+ },
6152
+ {
6153
+ "name": "umb-media-type-list-view-workspace-view",
6154
+ "path": "./../src/packages/media/media-types/workspace/views/details/media-type-list-view-workspace-view.element.ts",
6155
+ "properties": [
6156
+ {
6157
+ "name": "styles",
6158
+ "type": "array",
6159
+ "default": "[\"UmbTextStyles\",null]"
6160
+ }
6161
+ ]
6162
+ },
6163
+ {
6164
+ "name": "umb-media-type-permissions-workspace-view",
6165
+ "path": "./../src/packages/media/media-types/workspace/views/details/media-type-permissions-workspace-view.element.ts",
6166
+ "properties": [
6167
+ {
6168
+ "name": "styles",
6169
+ "type": "array",
6170
+ "default": "[\"UmbTextStyles\",null]"
6171
+ }
6172
+ ]
6173
+ },
6141
6174
  {
6142
6175
  "name": "umb-collection-view-media-test",
6143
6176
  "path": "./../src/packages/media/media/collection-view/collection-view-media-test.element.ts",
@@ -16,7 +16,7 @@ import { handlers as profilingHandlers } from './handlers/performance-profiling.
16
16
  import { handlers as documentHandlers } from './handlers/document/index.js';
17
17
  import { handlers as mediaHandlers } from './handlers/media.handlers.js';
18
18
  import { handlers as dictionaryHandlers } from './handlers/dictionary.handlers.js';
19
- import { handlers as mediaTypeHandlers } from './handlers/media-type.handlers.js';
19
+ import { handlers as mediaTypeHandlers } from './handlers/media-type/index.js';
20
20
  import { handlers as memberGroupHandlers } from './handlers/member-group.handlers.js';
21
21
  import { handlers as memberHandlers } from './handlers/member.handlers.js';
22
22
  import { handlers as memberTypeHandlers } from './handlers/member-type.handlers.js';
@@ -1,12 +1,17 @@
1
- import type { MediaTypeDetails } from '../../packages/media/media-types/types.js';
2
1
  import { UmbEntityData } from './entity.data.js';
3
- import { FolderTreeItemResponseModel, PagedMediaTreeItemResponseModel } from '../../external/backend-api/index.js';
4
- export declare const data: Array<MediaTypeDetails>;
5
- declare class UmbMediaTypeData extends UmbEntityData<MediaTypeDetails> {
2
+ import { MediaTypeResponseModel, MediaTypeTreeItemResponseModel } from '../../external/backend-api/index.js';
3
+ export declare const data: Array<MediaTypeResponseModel>;
4
+ export declare const treeData: Array<MediaTypeTreeItemResponseModel>;
5
+ declare class UmbMediaTypeData extends UmbEntityData<MediaTypeResponseModel> {
6
+ private treeData;
6
7
  constructor();
7
- getTreeRoot(): PagedMediaTreeItemResponseModel;
8
- getTreeItemChildren(id: string): PagedMediaTreeItemResponseModel;
9
- getTreeItem(ids: Array<string>): Array<FolderTreeItemResponseModel>;
8
+ insert(item: MediaTypeResponseModel): import("../../external/backend-api/index.js").ContentTypeResponseModelBaseMediaTypePropertyTypeResponseModelMediaTypePropertyTypeContainerResponseModel;
9
+ update(id: string, item: MediaTypeResponseModel): import("../../external/backend-api/index.js").ContentTypeResponseModelBaseMediaTypePropertyTypeResponseModelMediaTypePropertyTypeContainerResponseModel;
10
+ getItems(ids: Array<string>): Array<MediaTypeTreeItemResponseModel>;
11
+ getTreeRoot(): Array<MediaTypeTreeItemResponseModel>;
12
+ getTreeItemChildren(id: string): Array<MediaTypeTreeItemResponseModel>;
13
+ getTreeItems(ids: Array<string>): Array<MediaTypeTreeItemResponseModel>;
14
+ getAllowedTypesOf(id: string): Array<MediaTypeTreeItemResponseModel>;
10
15
  }
11
16
  export declare const umbMediaTypeData: UmbMediaTypeData;
12
17
  export {};
@@ -1,27 +1,25 @@
1
1
  import { UmbEntityData } from './entity.data.js';
2
- import { createFolderTreeItem } from './utils.js';
2
+ import { createMediaTypeTreeItem } from './utils.js';
3
3
  export const data = [
4
4
  {
5
5
  name: 'Media Type 1',
6
- type: 'media-type',
7
- hasChildren: false,
8
6
  id: 'c5159663-eb82-43ee-bd23-e42dc5e71db6',
9
- isContainer: false,
10
- parentId: null,
11
- isFolder: false,
7
+ description: 'Media type 1 description',
12
8
  alias: 'mediaType1',
9
+ icon: 'umb:bug',
13
10
  properties: [],
11
+ containers: [],
14
12
  },
13
+ ];
14
+ export const treeData = [
15
15
  {
16
- name: 'Media Type 2',
16
+ name: data[0].name,
17
+ id: data[0].id,
18
+ icon: data[0].icon,
17
19
  type: 'media-type',
18
20
  hasChildren: false,
19
- id: '22da1b0b-c310-4730-9912-c30b3eb9802e',
20
21
  isContainer: false,
21
22
  parentId: null,
22
- isFolder: false,
23
- alias: 'mediaType2',
24
- properties: [],
25
23
  },
26
24
  ];
27
25
  // Temp mocked database
@@ -31,22 +29,48 @@ export const data = [
31
29
  class UmbMediaTypeData extends UmbEntityData {
32
30
  constructor() {
33
31
  super(data);
32
+ this.treeData = treeData;
33
+ }
34
+ // TODO: Can we do this smarter so we don't need to make this for each mock data:
35
+ insert(item) {
36
+ const result = super.insert(item);
37
+ this.treeData.push(createMediaTypeTreeItem(result));
38
+ return result;
39
+ }
40
+ update(id, item) {
41
+ const result = super.save(id, item);
42
+ this.treeData = this.treeData.map((x) => {
43
+ if (x.id === result.id) {
44
+ return createMediaTypeTreeItem(result);
45
+ }
46
+ else {
47
+ return x;
48
+ }
49
+ });
50
+ return result;
51
+ }
52
+ getItems(ids) {
53
+ const items = this.data.filter((item) => ids.includes(item.id ?? ''));
54
+ return items.map((item) => item);
34
55
  }
35
56
  getTreeRoot() {
36
- const items = this.data.filter((item) => item.parentId === null);
37
- const treeItems = items.map((item) => createFolderTreeItem(item));
38
- const total = items.length;
39
- return { items: treeItems, total };
57
+ const rootItems = this.treeData.filter((item) => item.parentId === null);
58
+ const result = rootItems.map((item) => createMediaTypeTreeItem(item));
59
+ return result;
40
60
  }
41
61
  getTreeItemChildren(id) {
42
- const items = this.data.filter((item) => item.parentId === id);
43
- const treeItems = items.map((item) => createFolderTreeItem(item));
44
- const total = items.length;
45
- return { items: treeItems, total };
62
+ const childItems = this.treeData.filter((item) => item.parentId === id);
63
+ return childItems.map((item) => item);
46
64
  }
47
- getTreeItem(ids) {
48
- const items = this.data.filter((item) => ids.includes(item.id ?? ''));
49
- return items.map((item) => createFolderTreeItem(item));
65
+ getTreeItems(ids) {
66
+ const items = this.treeData.filter((item) => ids.includes(item.id ?? ''));
67
+ return items.map((item) => item);
68
+ }
69
+ getAllowedTypesOf(id) {
70
+ const mediaType = this.getById(id);
71
+ const allowedTypeKeys = mediaType?.allowedContentTypes?.map((mediaType) => mediaType.id) ?? [];
72
+ const items = this.treeData.filter((item) => allowedTypeKeys.includes(item.id ?? ''));
73
+ return items.map((item) => item);
50
74
  }
51
75
  }
52
76
  export const umbMediaTypeData = new UmbMediaTypeData();
@@ -1,4 +1,4 @@
1
- import type { ContentTreeItemResponseModel, DocumentTreeItemResponseModel, DocumentTypeTreeItemResponseModel, EntityTreeItemResponseModel, FolderTreeItemResponseModel, DocumentTypeResponseModel, FileSystemTreeItemPresentationModel, DocumentResponseModel, TextFileResponseModelBaseModel, FileItemResponseModelBaseModel } from '../../external/backend-api/index.js';
1
+ import type { ContentTreeItemResponseModel, DocumentTreeItemResponseModel, DocumentTypeTreeItemResponseModel, EntityTreeItemResponseModel, FolderTreeItemResponseModel, DocumentTypeResponseModel, FileSystemTreeItemPresentationModel, DocumentResponseModel, TextFileResponseModelBaseModel, FileItemResponseModelBaseModel, MediaTypeResponseModel, MediaTypeTreeItemResponseModel } from '../../external/backend-api/index.js';
2
2
  export declare const createEntityTreeItem: (item: any) => EntityTreeItemResponseModel;
3
3
  export declare const createFolderTreeItem: (item: any) => FolderTreeItemResponseModel;
4
4
  export declare const createContentTreeItem: (item: any) => ContentTreeItemResponseModel & {
@@ -8,6 +8,7 @@ export declare const createDocumentTreeItem: (item: DocumentResponseModel) => Do
8
8
  isTrashed: boolean;
9
9
  };
10
10
  export declare const createDocumentTypeTreeItem: (item: DocumentTypeResponseModel) => DocumentTypeTreeItemResponseModel;
11
+ export declare const createMediaTypeTreeItem: (item: MediaTypeResponseModel) => MediaTypeTreeItemResponseModel;
11
12
  export declare const createFileSystemTreeItem: (item: any) => FileSystemTreeItemPresentationModel;
12
13
  export declare const createTextFileItem: (item: any) => TextFileResponseModelBaseModel;
13
14
  export declare const createFileItemResponseModelBaseModel: (item: any) => FileItemResponseModelBaseModel;
@@ -46,6 +46,12 @@ export const createDocumentTypeTreeItem = (item) => {
46
46
  isElement: item.isElement,
47
47
  };
48
48
  };
49
+ export const createMediaTypeTreeItem = (item) => {
50
+ return {
51
+ ...createEntityTreeItem(item),
52
+ type: 'media-type',
53
+ };
54
+ };
49
55
  export const createFileSystemTreeItem = (item) => {
50
56
  return {
51
57
  name: item.name,
@@ -0,0 +1 @@
1
+ export declare const detailHandlers: import("msw").RestHandler<import("msw/lib/glossary-de6278a9.js").M<import("msw/lib/glossary-de6278a9.js").h>>[];
@@ -0,0 +1,37 @@
1
+ const { rest } = window.MockServiceWorker;
2
+ import { umbMediaTypeData } from '../../data/media-type.data.js';
3
+ import { slug } from './slug.js';
4
+ import { umbracoPath } from '../../../shared/utils/index.js';
5
+ export const detailHandlers = [
6
+ rest.post(umbracoPath(`${slug}`), async (req, res, ctx) => {
7
+ const data = await req.json();
8
+ if (!data)
9
+ return;
10
+ umbMediaTypeData.insert(data);
11
+ return res(ctx.status(200));
12
+ }),
13
+ rest.get(umbracoPath(`${slug}/:id`), (req, res, ctx) => {
14
+ const id = req.params.id;
15
+ if (!id)
16
+ return;
17
+ const data = umbMediaTypeData.getById(id);
18
+ return res(ctx.status(200), ctx.json(data));
19
+ }),
20
+ rest.put(umbracoPath(`${slug}/:id`), async (req, res, ctx) => {
21
+ const id = req.params.id;
22
+ if (!id)
23
+ return;
24
+ const data = await req.json();
25
+ if (!data)
26
+ return;
27
+ const saved = umbMediaTypeData.save(id, data);
28
+ return res(ctx.status(200), ctx.json(saved));
29
+ }),
30
+ rest.delete(umbracoPath(`${slug}/:id`), async (req, res, ctx) => {
31
+ const id = req.params.id;
32
+ if (!id)
33
+ return;
34
+ umbMediaTypeData.delete([id]);
35
+ return res(ctx.status(200));
36
+ }),
37
+ ];
@@ -0,0 +1,4 @@
1
+ import { treeHandlers } from './tree.handlers.js';
2
+ import { itemHandlers } from './item.handlers.js';
3
+ import { detailHandlers } from './detail.handlers.js';
4
+ export const handlers = [...treeHandlers, ...itemHandlers, ...detailHandlers];
@@ -0,0 +1 @@
1
+ export declare const itemHandlers: import("msw").RestHandler<import("msw/lib/glossary-de6278a9.js").M<import("msw/lib/glossary-de6278a9.js").h>>[];
@@ -0,0 +1,20 @@
1
+ const { rest } = window.MockServiceWorker;
2
+ import { umbMediaTypeData } from '../../data/media-type.data.js';
3
+ import { slug } from './slug.js';
4
+ import { umbracoPath } from '../../../shared/utils/index.js';
5
+ export const itemHandlers = [
6
+ rest.get(umbracoPath(`${slug}/item`), (req, res, ctx) => {
7
+ const ids = req.url.searchParams.getAll('id');
8
+ if (!ids)
9
+ return;
10
+ const items = umbMediaTypeData.getItems(ids);
11
+ return res(ctx.status(200), ctx.json(items));
12
+ }),
13
+ rest.get(umbracoPath(`/tree${slug}/item`), (req, res, ctx) => {
14
+ const ids = req.url.searchParams.getAll('id');
15
+ if (!ids)
16
+ return;
17
+ const items = umbMediaTypeData.getTreeItems(ids);
18
+ return res(ctx.status(200), ctx.json(items));
19
+ }),
20
+ ];
@@ -0,0 +1 @@
1
+ export declare const slug = "/media-type";
@@ -0,0 +1 @@
1
+ export const slug = '/media-type';
@@ -0,0 +1 @@
1
+ export declare const treeHandlers: import("msw").RestHandler<import("msw/lib/glossary-de6278a9.js").M<import("msw/lib/glossary-de6278a9.js").h>>[];
@@ -0,0 +1,25 @@
1
+ const { rest } = window.MockServiceWorker;
2
+ import { umbMediaTypeData } from '../../data/media-type.data.js';
3
+ import { slug } from './slug.js';
4
+ import { umbracoPath } from '../../../shared/utils/index.js';
5
+ export const treeHandlers = [
6
+ rest.get(umbracoPath(`/tree${slug}/root`), (req, res, ctx) => {
7
+ const rootItems = umbMediaTypeData.getTreeRoot();
8
+ const response = {
9
+ total: rootItems.length,
10
+ items: rootItems,
11
+ };
12
+ return res(ctx.status(200), ctx.json(response));
13
+ }),
14
+ rest.get(umbracoPath(`/tree${slug}/children`), (req, res, ctx) => {
15
+ const parentId = req.url.searchParams.get('parentId');
16
+ if (!parentId)
17
+ return;
18
+ const children = umbMediaTypeData.getTreeItemChildren(parentId);
19
+ const response = {
20
+ total: children.length,
21
+ items: children,
22
+ };
23
+ return res(ctx.status(200), ctx.json(response));
24
+ }),
25
+ ];
@@ -0,0 +1,20 @@
1
+ import { MediaTypeItemResponseModel } from '../../../../external/backend-api/index.js';
2
+ import { UmbContextToken } from '../../../../libs/context-api/index.js';
3
+ import { UmbControllerHostElement } from '../../../../libs/controller-api/index.js';
4
+ import { UmbItemStore, UmbStoreBase } from '../../../core/store/index.js';
5
+ /**
6
+ * @export
7
+ * @class UmbMediaTypeItemStore
8
+ * @extends {UmbStoreBase}
9
+ * @description - Data Store for Media Type items
10
+ */
11
+ export declare class UmbMediaTypeItemStore extends UmbStoreBase<MediaTypeItemResponseModel> implements UmbItemStore<MediaTypeItemResponseModel> {
12
+ /**
13
+ * Creates an instance of UmbMediaTypeItemStore.
14
+ * @param {UmbControllerHostElement} host
15
+ * @memberof UmbMediaTypeItemStore
16
+ */
17
+ constructor(host: UmbControllerHostElement);
18
+ items(ids: Array<string>): import("rxjs").Observable<MediaTypeItemResponseModel[]>;
19
+ }
20
+ export declare const UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT_TOKEN: UmbContextToken<UmbMediaTypeItemStore, UmbMediaTypeItemStore>;
@@ -0,0 +1,23 @@
1
+ import { UmbContextToken } from '../../../../libs/context-api/index.js';
2
+ import { UmbStoreBase } from '../../../core/store/index.js';
3
+ import { UmbArrayState } from '../../../../libs/observable-api/index.js';
4
+ /**
5
+ * @export
6
+ * @class UmbMediaTypeItemStore
7
+ * @extends {UmbStoreBase}
8
+ * @description - Data Store for Media Type items
9
+ */
10
+ export class UmbMediaTypeItemStore extends UmbStoreBase {
11
+ /**
12
+ * Creates an instance of UmbMediaTypeItemStore.
13
+ * @param {UmbControllerHostElement} host
14
+ * @memberof UmbMediaTypeItemStore
15
+ */
16
+ constructor(host) {
17
+ super(host, UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT_TOKEN.toString(), new UmbArrayState([], (x) => x.id));
18
+ }
19
+ items(ids) {
20
+ return this._data.asObservablePart((items) => items.filter((item) => ids.includes(item.id ?? '')));
21
+ }
22
+ }
23
+ export const UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT_TOKEN = new UmbContextToken('UmbMediaTypeItemStore');
@@ -1,7 +1,7 @@
1
- import type { MediaTypeDetails } from '../types.js';
2
1
  import { UmbContextToken } from '../../../../libs/context-api/index.js';
3
2
  import { UmbStoreBase } from '../../../core/store/index.js';
4
3
  import { UmbControllerHostElement } from '../../../../libs/controller-api/index.js';
4
+ import { MediaTypeResponseModel } from '../../../../external/backend-api/index.js';
5
5
  /**
6
6
  * @export
7
7
  * @class UmbMediaTypeDetailStore
@@ -10,7 +10,8 @@ import { UmbControllerHostElement } from '../../../../libs/controller-api/index.
10
10
  */
11
11
  export declare class UmbMediaTypeStore extends UmbStoreBase {
12
12
  constructor(host: UmbControllerHostElement);
13
- append(mediaType: MediaTypeDetails): void;
13
+ byId(id: MediaTypeResponseModel['id']): import("rxjs").Observable<any>;
14
+ append(mediaType: MediaTypeResponseModel): void;
14
15
  remove(uniques: string[]): void;
15
16
  }
16
17
  export declare const UMB_MEDIA_TYPE_STORE_CONTEXT_TOKEN: UmbContextToken<UmbMediaTypeStore, UmbMediaTypeStore>;
@@ -11,6 +11,9 @@ export class UmbMediaTypeStore extends UmbStoreBase {
11
11
  constructor(host) {
12
12
  super(host, UMB_MEDIA_TYPE_STORE_CONTEXT_TOKEN.toString(), new UmbArrayState([], (x) => x.id));
13
13
  }
14
+ byId(id) {
15
+ return this._data.asObservablePart((x) => x.find((y) => y.id === id));
16
+ }
14
17
  append(mediaType) {
15
18
  this._data.append([mediaType]);
16
19
  }
@@ -1,8 +1,7 @@
1
- import type { MediaTypeDetails } from '../types.js';
2
1
  import { UmbControllerHostElement } from '../../../../libs/controller-api/index.js';
3
- import { UmbTreeRepository } from '../../../core/repository/index.js';
4
- import { EntityTreeItemResponseModel } from '../../../../external/backend-api/index.js';
5
- export declare class UmbMediaTypeRepository implements UmbTreeRepository<EntityTreeItemResponseModel> {
2
+ import { UmbTreeRepository, UmbItemRepository, UmbDetailRepository } from '../../../core/repository/index.js';
3
+ import { CreateMediaTypeRequestModel, FolderTreeItemResponseModel, MediaTypeItemResponseModel, MediaTypeResponseModel, UpdateMediaTypeRequestModel } from '../../../../external/backend-api/index.js';
4
+ export declare class UmbMediaTypeRepository implements UmbItemRepository<MediaTypeItemResponseModel>, UmbTreeRepository<FolderTreeItemResponseModel>, UmbDetailRepository<CreateMediaTypeRequestModel, any, UpdateMediaTypeRequestModel, MediaTypeResponseModel> {
6
5
  #private;
7
6
  constructor(host: UmbControllerHostElement);
8
7
  requestTreeRoot(): Promise<{
@@ -17,35 +16,39 @@ export declare class UmbMediaTypeRepository implements UmbTreeRepository<EntityT
17
16
  requestRootTreeItems(): Promise<{
18
17
  data: import("../../../core/repository/index.js").UmbPagedData<any> | undefined;
19
18
  error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
20
- asObservable: () => import("rxjs").Observable<EntityTreeItemResponseModel[]>;
19
+ asObservable: () => import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>;
21
20
  }>;
22
21
  requestTreeItemsOf(parentId: string | null): Promise<{
23
22
  data: import("../../../core/repository/index.js").UmbPagedData<any> | undefined;
24
23
  error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
25
- asObservable: () => import("rxjs").Observable<EntityTreeItemResponseModel[]>;
24
+ asObservable: () => import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>;
26
25
  }>;
26
+ byId(id: string): Promise<import("rxjs").Observable<any>>;
27
27
  requestItemsLegacy(ids: Array<string>): Promise<{
28
28
  data: any[] | undefined;
29
29
  error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
30
- asObservable: () => import("rxjs").Observable<EntityTreeItemResponseModel[]>;
31
- }>;
32
- rootTreeItems(): Promise<import("rxjs").Observable<EntityTreeItemResponseModel[]>>;
33
- treeItemsOf(parentId: string | null): Promise<import("rxjs").Observable<EntityTreeItemResponseModel[]>>;
34
- itemsLegacy(ids: Array<string>): Promise<import("rxjs").Observable<EntityTreeItemResponseModel[]>>;
35
- createScaffold(): Promise<{
36
- data: MediaTypeDetails;
30
+ asObservable: () => import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>;
31
+ }>;
32
+ rootTreeItems(): Promise<import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>>;
33
+ treeItemsOf(parentId: string | null): Promise<import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>>;
34
+ itemsLegacy(ids: Array<string>): Promise<import("rxjs").Observable<import("../../../../external/backend-api/index.js").EntityTreeItemResponseModel[]>>;
35
+ createScaffold(parentId: string | null): Promise<import("../../../core/repository/index.js").DataSourceResponse<import("../../../../external/backend-api/index.js").CreateContentTypeRequestModelBaseCreateMediaTypePropertyTypeRequestModelCreateMediaTypePropertyTypeContainerRequestModel>>;
36
+ requestById(id: string): Promise<{
37
+ data: import("../../../../external/backend-api/index.js").ContentTypeResponseModelBaseMediaTypePropertyTypeResponseModelMediaTypePropertyTypeContainerResponseModel | undefined;
38
+ error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
37
39
  }>;
38
- requestDetails(id: string): Promise<{
39
- data: any;
40
- error: any;
40
+ requestItems(ids: Array<string>): Promise<{
41
+ data: MediaTypeItemResponseModel[] | undefined;
42
+ error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
43
+ asObservable: () => import("rxjs").Observable<MediaTypeItemResponseModel[]>;
41
44
  }>;
42
- delete(id: string): Promise<any>;
43
- save(mediaType: MediaTypeDetails): Promise<{
44
- error: any;
45
+ items(ids: Array<string>): Promise<import("rxjs").Observable<MediaTypeItemResponseModel[]>>;
46
+ delete(id: string): Promise<import("../../../core/repository/index.js").DataSourceResponse<unknown>>;
47
+ save(id: string, item: UpdateMediaTypeRequestModel): Promise<{
48
+ error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
45
49
  }>;
46
- create(mediaType: MediaTypeDetails): Promise<{
47
- data: any;
48
- error: any;
50
+ create(mediaType: CreateMediaTypeRequestModel): Promise<{
51
+ error: import("../../../../external/backend-api/index.js").ApiError | import("../../../../external/backend-api/index.js").CancelError | undefined;
49
52
  }>;
50
53
  move(): Promise<void>;
51
54
  copy(): Promise<void>;
@@ -2,6 +2,8 @@ import { UMB_MEDIA_TYPE_TREE_STORE_CONTEXT_TOKEN } from './media-type.tree.store
2
2
  import { UmbMediaTypeDetailServerDataSource } from './sources/media-type.detail.server.data.js';
3
3
  import { UMB_MEDIA_TYPE_STORE_CONTEXT_TOKEN } from './media-type.detail.store.js';
4
4
  import { UmbMediaTypeTreeServerDataSource } from './sources/media-type.tree.server.data.js';
5
+ import { UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT_TOKEN } from './media-type-item.store.js';
6
+ import { UmbMediaTypeItemServerDataSource } from './sources/media-type-item.server.data.js';
5
7
  import { UmbContextConsumerController } from '../../../../libs/context-api/index.js';
6
8
  import { UMB_NOTIFICATION_CONTEXT_TOKEN } from '../../../core/notification/index.js';
7
9
  export class UmbMediaTypeRepository {
@@ -10,26 +12,31 @@ export class UmbMediaTypeRepository {
10
12
  #treeSource;
11
13
  #treeStore;
12
14
  #detailSource;
13
- #store;
15
+ #detailStore;
16
+ #itemSource;
17
+ #itemStore;
14
18
  #notificationContext;
15
19
  constructor(host) {
16
20
  this.#host = host;
17
21
  // TODO: figure out how spin up get the correct data source
18
22
  this.#treeSource = new UmbMediaTypeTreeServerDataSource(this.#host);
19
23
  this.#detailSource = new UmbMediaTypeDetailServerDataSource(this.#host);
24
+ this.#itemSource = new UmbMediaTypeItemServerDataSource(this.#host);
20
25
  this.#init = Promise.all([
21
26
  new UmbContextConsumerController(this.#host, UMB_MEDIA_TYPE_STORE_CONTEXT_TOKEN, (instance) => {
22
- this.#store = instance;
27
+ this.#detailStore = instance;
23
28
  }),
24
29
  new UmbContextConsumerController(this.#host, UMB_MEDIA_TYPE_TREE_STORE_CONTEXT_TOKEN, (instance) => {
25
30
  this.#treeStore = instance;
26
31
  }),
32
+ new UmbContextConsumerController(this.#host, UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT_TOKEN, (instance) => {
33
+ this.#itemStore = instance;
34
+ }),
27
35
  new UmbContextConsumerController(this.#host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => {
28
36
  this.#notificationContext = instance;
29
37
  }),
30
38
  ]);
31
39
  }
32
- // TREE:
33
40
  async requestTreeRoot() {
34
41
  await this.#init;
35
42
  const data = {
@@ -59,6 +66,12 @@ export class UmbMediaTypeRepository {
59
66
  }
60
67
  return { data, error, asObservable: () => this.#treeStore.childrenOf(parentId) };
61
68
  }
69
+ async byId(id) {
70
+ if (!id)
71
+ throw new Error('Key is missing');
72
+ await this.#init;
73
+ return this.#detailStore.byId(id);
74
+ }
62
75
  async requestItemsLegacy(ids) {
63
76
  await this.#init;
64
77
  if (!ids) {
@@ -80,58 +93,76 @@ export class UmbMediaTypeRepository {
80
93
  return this.#treeStore.items(ids);
81
94
  }
82
95
  // DETAILS
83
- async createScaffold() {
96
+ async createScaffold(parentId) {
97
+ if (parentId === undefined)
98
+ throw new Error('Parent id is missing');
84
99
  await this.#init;
85
- return this.#detailSource.createScaffold();
100
+ return this.#detailSource.createScaffold(parentId);
86
101
  }
87
- async requestDetails(id) {
102
+ async requestById(id) {
88
103
  await this.#init;
89
- // TODO: should we show a notification if the id is missing?
90
- // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice?
91
104
  if (!id) {
92
105
  throw new Error('Id is missing');
93
106
  }
94
107
  const { data, error } = await this.#detailSource.get(id);
95
108
  if (data) {
96
- this.#store?.append(data);
109
+ this.#detailStore?.append(data);
97
110
  }
98
111
  return { data, error };
99
112
  }
113
+ async requestItems(ids) {
114
+ if (!ids)
115
+ throw new Error('Keys are missing');
116
+ await this.#init;
117
+ const { data, error } = await this.#itemSource.getItems(ids);
118
+ if (data) {
119
+ this.#itemStore?.appendItems(data);
120
+ }
121
+ return { data, error, asObservable: () => this.#itemStore.items(ids) };
122
+ }
123
+ async items(ids) {
124
+ await this.#init;
125
+ return this.#itemStore.items(ids);
126
+ }
100
127
  async delete(id) {
101
128
  await this.#init;
102
129
  return this.#detailSource.delete(id);
103
130
  }
104
- async save(mediaType) {
131
+ async save(id, item) {
132
+ if (!id)
133
+ throw new Error('Data Type id is missing');
134
+ if (!item)
135
+ throw new Error('Media Type is missing');
105
136
  await this.#init;
106
- // TODO: should we show a notification if the media type is missing?
107
- // Investigate what is best for Acceptance testing, cause in that perspective a thrown error might be the best choice?
108
- if (!mediaType || !mediaType.id) {
109
- throw new Error('Media type is missing');
110
- }
111
- const { error } = await this.#detailSource.update(mediaType);
137
+ const { error } = await this.#detailSource.update(id, item);
112
138
  if (!error) {
113
- const notification = { data: { message: `Media type '${mediaType.name}' saved` } };
139
+ this.#detailStore?.append(item);
140
+ this.#treeStore?.updateItem(id, item);
141
+ const notification = { data: { message: `Media type '${item.name}' saved` } };
114
142
  this.#notificationContext?.peek('positive', notification);
115
143
  }
116
- // TODO: we currently don't use the detail store for anything.
117
- // Consider to look up the data before fetching from the server
118
- // Consider notify a workspace if a media type is updated in the store while someone is editing it.
119
- this.#store?.append(mediaType);
120
- this.#treeStore?.updateItem(mediaType.id, { name: mediaType.name });
121
- // TODO: would be nice to align the stores on methods/methodNames.
122
144
  return { error };
123
145
  }
124
146
  async create(mediaType) {
147
+ if (!mediaType || !mediaType.id)
148
+ throw new Error('Document Type is missing');
125
149
  await this.#init;
126
- if (!mediaType.name) {
127
- throw new Error('Name is missing');
128
- }
129
- const { data, error } = await this.#detailSource.insert(mediaType);
150
+ const { error } = await this.#detailSource.insert(mediaType);
130
151
  if (!error) {
131
- const notification = { data: { message: `Media type '${mediaType.name}' created` } };
132
- this.#notificationContext?.peek('positive', notification);
152
+ //TODO: Model mismatch. FIX
153
+ this.#detailStore?.append(mediaType);
154
+ const treeItem = {
155
+ type: 'media-type',
156
+ parentId: null,
157
+ name: mediaType.name,
158
+ id: mediaType.id,
159
+ isFolder: false,
160
+ isContainer: false,
161
+ hasChildren: false,
162
+ };
163
+ this.#treeStore?.appendItems([treeItem]);
133
164
  }
134
- return { data, error };
165
+ return { error };
135
166
  }
136
167
  async move() {
137
168
  alert('move me!');