From f9f5a3d412c2ba2db4fcf5d0ad121ce49ff04a5f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Tue, 24 Jan 2023 22:03:34 +0100 Subject: [PATCH] add template tree handlers and mock data --- .../src/core/mocks/browser-handlers.ts | 2 + .../src/core/mocks/data/template.data.ts | 63 +++++++++++++++++++ .../core/mocks/domains/template.handlers.ts | 27 ++++++++ 3 files changed, 92 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts create mode 100644 src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts index 1d9c6a796c..8faab32740 100644 --- a/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/browser-handlers.ts @@ -18,6 +18,7 @@ import { handlers as dictionaryHandlers } from './domains/dictionary.handlers'; import { handlers as mediaTypeHandlers } from './domains/media-type.handlers'; import { handlers as memberGroupHandlers } from './domains/member-group.handlers'; import { handlers as memberTypeHandlers } from './domains/member-type.handlers'; +import { handlers as templateHandlers } from './domains/template.handlers'; const handlers = [ serverHandlers.serverVersionHandler, @@ -40,6 +41,7 @@ const handlers = [ ...modelsBuilderHandlers, ...profilingHandlers, ...dictionaryHandlers, + ...templateHandlers, ]; switch (import.meta.env.VITE_UMBRACO_INSTALL_STATUS) { diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts new file mode 100644 index 0000000000..8708b83aeb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/data/template.data.ts @@ -0,0 +1,63 @@ +import { UmbEntityData } from './entity.data'; +import { createEntityTreeItem } from './utils'; +import { EntityTreeItem, PagedEntityTreeItem, Template } from '@umbraco-cms/backend-api'; + +type TemplateDBItem = Template & EntityTreeItem; + +export const data: Array = [ + { + key: '2bf464b6-3aca-4388-b043-4eb439cc2643', + isContainer: false, + parentKey: null, + name: 'Doc 1', + type: 'template', + icon: 'icon-layout', + hasChildren: false, + alias: 'Doc1', + content: + '@using Umbraco.Cms.Web.Common.PublishedModels;\n@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;\r\n@{\r\n\tLayout = null;\r\n}', + }, + { + key: '9a84c0b3-03b4-4dd4-84ac-706740ac0f71', + isContainer: false, + parentKey: null, + name: 'Test', + type: 'template', + icon: 'icon-layout', + hasChildren: false, + alias: 'Test', + content: + '@using Umbraco.Cms.Web.Common.PublishedModels;\n@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n@using ContentModels = Umbraco.Cms.Web.Common.PublishedModels;\r\n@{\r\n\tLayout = null;\r\n}', + }, +]; + +// Temp mocked database +// TODO: all properties are optional in the server schema. I don't think this is correct. +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +class UmbTemplateData extends UmbEntityData { + constructor() { + super(data); + } + + getTreeRoot(): PagedEntityTreeItem { + const items = this.data.filter((item) => item.parentKey === null); + const treeItems = items.map((item) => createEntityTreeItem(item)); + const total = items.length; + return { items: treeItems, total }; + } + + getTreeItemChildren(key: string): PagedEntityTreeItem { + const items = this.data.filter((item) => item.parentKey === key); + const treeItems = items.map((item) => createEntityTreeItem(item)); + const total = items.length; + return { items: treeItems, total }; + } + + getTreeItem(keys: Array): Array { + const items = this.data.filter((item) => keys.includes(item.key ?? '')); + return items.map((item) => createEntityTreeItem(item)); + } +} + +export const umbTemplateData = new UmbTemplateData(); diff --git a/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts new file mode 100644 index 0000000000..5779819935 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/mocks/domains/template.handlers.ts @@ -0,0 +1,27 @@ +import { rest } from 'msw'; +import { umbTemplateData } from '../data/template.data'; +import { umbracoPath } from '@umbraco-cms/utils'; + +// TODO: add schema +export const handlers = [ + rest.get(umbracoPath('/tree/template/root'), (req, res, ctx) => { + const response = umbTemplateData.getTreeRoot(); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath('/tree/template/children'), (req, res, ctx) => { + const parentKey = req.url.searchParams.get('parentKey'); + if (!parentKey) return; + const response = umbTemplateData.getTreeItemChildren(parentKey); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath('/tree/template/item'), (req, res, ctx) => { + const keys = req.url.searchParams.getAll('key'); + if (!keys) return; + + const items = umbTemplateData.getTreeItem(keys); + + return res(ctx.status(200), ctx.json(items)); + }), +];