add handlers and data

This commit is contained in:
Julia Gru
2023-05-26 15:13:26 +02:00
parent 612381b351
commit f63afe2ecf
2 changed files with 108 additions and 10 deletions

View File

@@ -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<TemplateDBItem> = [
{
$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<TemplateDBItem> {
constructor() {
super(data);
@@ -105,12 +164,25 @@ class UmbTemplateData extends UmbEntityData<TemplateDBItem> {
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: '',

View File

@@ -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<UpdateTemplateRequestModel>(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
];