From abbb49c9af0828a25bde22a0a618ff90bdcbdbcc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 14 Nov 2023 20:05:38 +0100 Subject: [PATCH] add handlers for document type items --- .../src/mocks/browser-handlers.ts | 2 +- .../src/mocks/data/document-type.data.ts | 15 +++ .../src/mocks/e2e-handlers.ts | 2 +- .../mocks/handlers/document-type.handlers.ts | 99 ------------------- .../handlers/document-type/detail.handlers.ts | 36 +++++++ .../src/mocks/handlers/document-type/index.ts | 5 + .../handlers/document-type/item.handlers.ts | 13 +++ .../src/mocks/handlers/document-type/slug.ts | 1 + .../handlers/document-type/tree.handlers.ts | 29 ++++++ 9 files changed, 101 insertions(+), 101 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type.handlers.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/detail.handlers.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/item.handlers.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/slug.ts create mode 100644 src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/tree.handlers.ts diff --git a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts index f5447b0b8a..c72ac88069 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts @@ -1,6 +1,6 @@ import { handlers as dataTypeHandlers } from './handlers/data-type/index.js'; import { handlers as relationTypeHandlers } from './handlers/relation-type.handlers.js'; -import { handlers as documentTypeHandlers } from './handlers/document-type.handlers.js'; +import { handlers as documentTypeHandlers } from './handlers/document-type/index.js'; import { handlers as installHandlers } from './handlers/install.handlers.js'; import * as manifestsHandlers from './handlers/manifests.handlers.js'; import { handlers as publishedStatusHandlers } from './handlers/published-status.handlers.js'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type.data.ts index 831facacd5..a863da9edc 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type.data.ts @@ -4,6 +4,7 @@ import { DocumentTypeTreeItemResponseModel, DocumentTypeResponseModel, ContentTypeCompositionTypeModel, + DocumentTypeItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; export const data: Array = [ @@ -1166,6 +1167,20 @@ class UmbDocumentTypeData extends UmbEntityData { const items = this.treeData.filter((item) => allowedTypeKeys.includes(item.id ?? '')); return items.map((item) => item); } + + getItems(ids: Array): Array { + const items = this.data.filter((item) => ids.includes(item.id ?? '')); + return items.map((item) => createDocumentTypeItem(item)); + } } +const createDocumentTypeItem = (item: DocumentTypeResponseModel): DocumentTypeItemResponseModel => { + return { + id: item.id, + name: item.name, + isElement: item.isElement, + icon: item.icon, + }; +}; + export const umbDocumentTypeData = new UmbDocumentTypeData(); diff --git a/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts index 44c8707a2f..84a92de3d8 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/e2e-handlers.ts @@ -1,5 +1,5 @@ import { handlers as dataTypeHandlers } from './handlers/data-type/index.js'; -import { handlers as documentTypeHandlers } from './handlers/document-type.handlers.js'; +import { handlers as documentTypeHandlers } from './handlers/document-type/index.js'; import { handlers as installHandlers } from './handlers/install.handlers.js'; import * as manifestsHandlers from './handlers/manifests.handlers.js'; import { handlers as publishedStatusHandlers } from './handlers/published-status.handlers.js'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type.handlers.ts deleted file mode 100644 index 8fea958f41..0000000000 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type.handlers.ts +++ /dev/null @@ -1,99 +0,0 @@ -const { rest } = window.MockServiceWorker; -import { umbDocumentTypeData } from '../data/document-type.data.js'; -import type { DocumentTypeResponseModel } from '@umbraco-cms/backoffice/backend-api'; -import { umbracoPath } from '@umbraco-cms/backoffice/utils'; - -// TODO: add schema -export const handlers = [ - rest.post(umbracoPath(`/document-type`), async (req, res, ctx) => { - const data = await req.json(); - if (!data) return; - - // TODO: This is something that is missing in the Full model, but which we need to for the tree model. This should be fixed in the Full model. - data.parentId ??= null; - - const created = umbDocumentTypeData.insert(data); - - // TODO: remove this hack, as we get the right end-point, in that case we will be in control of the Ids. (I choose this URL to make it clear thats its a hack/mocked URL) - return res(ctx.status(200), ctx.set({ location: '/header/location/id/' + created.id })); - }), - - rest.put(umbracoPath(`/document-type/:id`), async (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - const data = await req.json(); - if (!data) return; - - const saved = umbDocumentTypeData.save(id, data); - - return res(ctx.status(200), ctx.json(saved)); - }), - - rest.get('/umbraco/management/api/v1/document-type/details/:id', (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - - const document = umbDocumentTypeData.getById(id); - - return res(ctx.status(200), ctx.json([document])); - }), - - rest.post('/umbraco/management/api/v1/document-type/details/save', (req, res, ctx) => { - const data = req.body; - if (!data) return; - - const saved = umbDocumentTypeData.save(data.id!, data); - - return res(ctx.status(200), ctx.json(saved)); - }), - - rest.get('/umbraco/management/api/v1/tree/document-type/root', (req, res, ctx) => { - const rootItems = umbDocumentTypeData.getTreeRoot(); - const response = { - total: rootItems.length, - items: rootItems, - }; - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/document-type/children', (req, res, ctx) => { - const parentId = req.url.searchParams.get('parentId'); - if (!parentId) return; - - const children = umbDocumentTypeData.getTreeItemChildren(parentId); - - const response = { - total: children.length, - items: children, - }; - - return res(ctx.status(200), ctx.json(response)); - }), - - rest.get('/umbraco/management/api/v1/tree/document-type/item', (req, res, ctx) => { - const ids = req.url.searchParams.getAll('id'); - if (!ids) return; - - const items = umbDocumentTypeData.getTreeItem(ids); - - return res(ctx.status(200), ctx.json(items)); - }), - - rest.get('/umbraco/management/api/v1/document-type/:id', (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - - const documentType = umbDocumentTypeData.getById(id); - - return res(ctx.status(200), ctx.json(documentType)); - }), - - rest.get('/umbraco/management/api/v1/document-type/allowed-children-of/:id', (req, res, ctx) => { - const id = req.params.id as string; - if (!id) return; - - const items = umbDocumentTypeData.getAllowedTypesOf(id); - - return res(ctx.status(200), ctx.json(items)); - }), -]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/detail.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/detail.handlers.ts new file mode 100644 index 0000000000..f93686a065 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/detail.handlers.ts @@ -0,0 +1,36 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentTypeData } from '../../data/document-type.data.js'; +import { slug } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const handlers = [ + rest.get(umbracoPath(`${slug}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + const document = umbDocumentTypeData.getById(id); + return res(ctx.status(200), ctx.json(document)); + }), + + rest.delete(umbracoPath(`${slug}/:id`), (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + const document = umbDocumentTypeData.getById(id); + return res(ctx.status(200), ctx.json(document)); + }), + + rest.put(umbracoPath(`${slug}/:id`), async (req, res, ctx) => { + const id = req.params.id as string; + if (!id) return; + const data = await req.json(); + if (!data) return; + const saved = umbDocumentTypeData.save(id, data); + return res(ctx.status(200), ctx.json(saved)); + }), + + rest.post(umbracoPath(`${slug}`), async (req, res, ctx) => { + const data = await req.json(); + if (!data) return; + umbDocumentTypeData.insert(data); + return res(ctx.status(200)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts new file mode 100644 index 0000000000..e691416e8c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/index.ts @@ -0,0 +1,5 @@ +import { handlers as treeHandlers } from './tree.handlers.js'; +import { handlers as detailHandlers } from './detail.handlers.js'; +import { handlers as itemHandlers } from './item.handlers.js'; + +export const handlers = [...treeHandlers, ...itemHandlers, ...detailHandlers]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/item.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/item.handlers.ts new file mode 100644 index 0000000000..6a2356c703 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/item.handlers.ts @@ -0,0 +1,13 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentTypeData } from '../../data/document-type.data.js'; +import { slug } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const handlers = [ + rest.get(umbracoPath(`${slug}/item`), (req, res, ctx) => { + const ids = req.url.searchParams.getAll('id'); + if (!ids) return; + const items = umbDocumentTypeData.getItems(ids); + return res(ctx.status(200), ctx.json(items)); + }), +]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/slug.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/slug.ts new file mode 100644 index 0000000000..d81153decf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/slug.ts @@ -0,0 +1 @@ +export const slug = '/document-type'; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/tree.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/tree.handlers.ts new file mode 100644 index 0000000000..37014d9edf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document-type/tree.handlers.ts @@ -0,0 +1,29 @@ +const { rest } = window.MockServiceWorker; +import { umbDocumentTypeData } from '../../data/document-type.data.js'; +import { slug } from './slug.js'; +import { umbracoPath } from '@umbraco-cms/backoffice/utils'; + +export const handlers = [ + rest.get(umbracoPath(`/tree${slug}/root`), (req, res, ctx) => { + const rootItems = umbDocumentTypeData.getTreeRoot(); + const response = { + total: rootItems.length, + items: rootItems, + }; + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath(`/tree${slug}/children`), (req, res, ctx) => { + const parentId = req.url.searchParams.get('parentId'); + if (!parentId) return; + + const children = umbDocumentTypeData.getTreeItemChildren(parentId); + + const response = { + total: children.length, + items: children, + }; + + return res(ctx.status(200), ctx.json(response)); + }), +];