From f63afe2ecfa5a3b45fea598d6c9e548e1d985a06 Mon Sep 17 00:00:00 2001 From: Julia Gru <56249914+julczka@users.noreply.github.com> Date: Fri, 26 May 2023 15:13:26 +0200 Subject: [PATCH] add handlers and data --- .../src/shared/mocks/data/template.data.ts | 82 +++++++++++++++++-- .../mocks/handlers/template.handlers.ts | 36 ++++++-- 2 files changed, 108 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/shared/mocks/data/template.data.ts b/src/Umbraco.Web.UI.Client/src/shared/mocks/data/template.data.ts index 9dd3ec2366..a73a8fef13 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/mocks/data/template.data.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/mocks/data/template.data.ts @@ -7,6 +7,7 @@ import { TemplateResponseModel, TemplateScaffoldResponseModel, CreateTemplateRequestModel, + TemplateItemResponseModel, } from '@umbraco-cms/backoffice/backend-api'; type TemplateDBItem = TemplateResponseModel & EntityTreeItemResponseModel; @@ -21,6 +22,11 @@ const createTemplate = (dbItem: TemplateDBItem): TemplateResponseModel => { }; }; +const createTemplateItem = (dbItem: TemplateDBItem): TemplateItemResponseModel => ({ + name: dbItem.name, + id: dbItem.id, +}); + export const data: Array = [ { $type: '', @@ -91,10 +97,63 @@ export const createTemplateScaffold = (masterTemplateAlias: string) => { return `Template Scaffold Mock for master template: ${masterTemplateAlias}`; }; +export const templateQuerySettings = { + contentTypeAliases: [], + properties: [ + { + alias: 'Id', + type: 'Integer', + }, + { + alias: 'Name', + type: 'String', + }, + { + alias: 'CreateDate', + type: 'DateTime', + }, + { + alias: 'UpdateDate', + type: 'DateTime', + }, + ], + operators: [ + { + operator: 'Equals', + applicableTypes: ['Integer', 'String'], + }, + { + operator: 'NotEquals', + applicableTypes: ['Integer', 'String'], + }, + { + operator: 'LessThan', + applicableTypes: ['Integer', 'DateTime'], + }, + { + operator: 'LessThanEqualTo', + applicableTypes: ['Integer', 'DateTime'], + }, + { + operator: 'GreaterThan', + applicableTypes: ['Integer', 'DateTime'], + }, + { + operator: 'GreaterThanEqualTo', + applicableTypes: ['Integer', 'DateTime'], + }, + { + operator: 'Contains', + applicableTypes: ['String'], + }, + { + operator: 'NotContains', + applicableTypes: ['String'], + }, + ], +}; + // 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); @@ -105,12 +164,25 @@ class UmbTemplateData extends UmbEntityData { return item ? createTemplate(item) : undefined; } - getScaffold(masterTemplateAlias: string): TemplateScaffoldResponseModel { + getItemById(id: string): TemplateItemResponseModel | null { + const item = this.data.find((item) => item.id === id); + return item ? createTemplateItem(item) : null; + } + + getScaffold(): TemplateScaffoldResponseModel { return { - content: `Template Scaffold Mock: Layout = ${masterTemplateAlias || null};`, + content: + '@using Umbraco.Cms.Web.Common.PublishedModels;\r\n@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n@{\r\n\tLayout = null;\r\n}', }; } + getItems(ids: string[]): TemplateItemResponseModel[] { + const items = ids.map((id) => this.getItemById(id)).filter((item) => item !== null) as TemplateItemResponseModel[]; + return items; + } + + getTemplateQuerySettings = () => templateQuerySettings; + create(templateData: CreateTemplateRequestModel) { const template = { $type: '', diff --git a/src/Umbraco.Web.UI.Client/src/shared/mocks/handlers/template.handlers.ts b/src/Umbraco.Web.UI.Client/src/shared/mocks/handlers/template.handlers.ts index 6941bc1e31..d748907544 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/mocks/handlers/template.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/mocks/handlers/template.handlers.ts @@ -3,8 +3,8 @@ import { umbTemplateData } from '../data/template.data'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; import { CreateTemplateRequestModel, UpdateTemplateRequestModel } from '@umbraco-cms/backoffice/backend-api'; -// TODO: add schema export const handlers = [ + //#region TREE rest.get(umbracoPath('/tree/template/root'), (req, res, ctx) => { const response = umbTemplateData.getTreeRoot(); return res(ctx.status(200), ctx.json(response)); @@ -26,15 +26,30 @@ export const handlers = [ return res(ctx.status(200), ctx.json(items)); }), - rest.get(umbracoPath('/template/scaffold'), (req, res, ctx) => { - const masterTemplateAlias = req.url.searchParams.get('masterTemplateAlias'); - if (!masterTemplateAlias) return; + //#endregion - const response = umbTemplateData.getScaffold(masterTemplateAlias); + //#region TEMPLATE + + rest.get(umbracoPath('/template/scaffold'), (req, res, ctx) => { + const response = umbTemplateData.getScaffold(); + return res(ctx.status(200), ctx.json(response)); + }), + + //This handler must come before the /template/:id handler otherwise it hits the wrong handler + rest.get(umbracoPath('/template/item'), (req, res, ctx) => { + const id = req.url.searchParams.getAll('id'); + if (!id) return; + const response = umbTemplateData.getItems(id); + return res(ctx.status(200), ctx.json(response)); + }), + + rest.get(umbracoPath('/template/query/settings'), (req, res, ctx) => { + const response = umbTemplateData.getTemplateQuerySettings(); return res(ctx.status(200), ctx.json(response)); }), rest.get(umbracoPath('/template/:id'), (req, res, ctx) => { + console.log('template/:id', req.params); const id = req.params.id as string; if (!id) return; @@ -58,4 +73,15 @@ export const handlers = [ const created = umbTemplateData.create(data); return res(ctx.status(200), ctx.json(created)); }), + + rest.delete(umbracoPath('/template/:id'), async (req, res, ctx) => { + const id = req.params.id as string; + const data = await req.json(); + if (!id) return; + + umbTemplateData.delete([data]); + return res(ctx.status(200)); + }), + + //#endregion ];