scripts handlers & data

This commit is contained in:
Julia Gru
2023-09-04 10:31:12 +02:00
committed by Jacob Overgaard
parent 96c277e513
commit ad977e5191
2 changed files with 116 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
import { UmbEntityData } from './entity.data.js';
import { createFileSystemTreeItem, createTextFileItem } from './utils.js';
import {
CreatePathFolderRequestModel,
CreateTextFileViewModelBaseModel,
FileSystemTreeItemPresentationModel,
PagedFileSystemTreeItemPresentationModel,
@@ -12,7 +13,7 @@ import {
type ScriptsDataItem = ScriptResponseModel & FileSystemTreeItemPresentationModel & { id: string };
export const treeData: Array<ScriptsDataItem> = [
export const data: Array<ScriptsDataItem> = [
{
id: 'some-folder',
path: 'some-folder',
@@ -124,7 +125,7 @@ export const treeData: Array<ScriptsDataItem> = [
class UmbScriptsTreeData extends UmbEntityData<FileSystemTreeItemPresentationModel> {
constructor() {
super(treeData);
super(data);
}
getTreeRoot(): PagedFileSystemTreeItemPresentationModel {
@@ -147,18 +148,47 @@ class UmbScriptsTreeData extends UmbEntityData<FileSystemTreeItemPresentationMod
}
}
class UmbScriptsFolderData extends UmbEntityData<ScriptResponseModel> {
constructor() {
super(data);
}
getFolder(path: string): FileSystemTreeItemPresentationModel {
const items = data.filter((item) => item.isFolder && item.path === path);
const total = items.length;
return items as FileSystemTreeItemPresentationModel;
}
postFolder(payload: CreatePathFolderRequestModel) {
const newFolder = {
id: `${payload.parentPath ?? ''}/${payload.name}`,
path: `${payload.parentPath ?? ''}/${payload.name}`,
isFolder: true,
name: payload.name,
type: 'script',
hasChildren: false,
};
return this.insert(newFolder);
}
deleteFolder(path: string) {
return this.delete([path]);
}
}
export const umbScriptsTreeData = new UmbScriptsTreeData();
export const umbScriptsFolderData = new UmbScriptsFolderData();
class UmbScriptsData extends UmbEntityData<ScriptResponseModel> {
constructor() {
super(treeData);
super(data);
}
getPartialView(path: string): PartialViewResponseModel | undefined {
getScript(path: string): ScriptResponseModel | undefined {
return createTextFileItem(this.data.find((item) => item.path === path));
}
insertPartialView(item: CreateTextFileViewModelBaseModel) {
insertScript(item: CreateTextFileViewModelBaseModel) {
const newItem: ScriptsDataItem = {
...item,
path: `${item.parentPath}/${item.name}.js}`,
@@ -173,4 +203,4 @@ class UmbScriptsData extends UmbEntityData<ScriptResponseModel> {
}
}
export const umbPartialViewsData = new UmbScriptsData();
export const umbScriptsData = new UmbScriptsData();

View File

@@ -0,0 +1,80 @@
const { rest } = window.MockServiceWorker;
import { RestHandler, MockedRequest, DefaultBodyType } from 'msw';
import { umbracoPath } from '@umbraco-cms/backoffice/utils';
import { CreatePathFolderRequestModel, CreateTextFileViewModelBaseModel } from '@umbraco-cms/backoffice/backend-api';
import { umbScriptsTreeData, umbScriptsData, umbScriptsFolderData } from '../data/scripts.data.js';
const treeHandlers = [
rest.get(umbracoPath('/tree/script/root'), (req, res, ctx) => {
const response = umbScriptsTreeData.getTreeRoot();
return res(ctx.status(200), ctx.json(response));
}),
rest.get(umbracoPath('/tree/script/children'), (req, res, ctx) => {
const path = req.url.searchParams.get('path');
if (!path) return;
const response = umbScriptsTreeData.getTreeItemChildren(path);
return res(ctx.status(200), ctx.json(response));
}),
rest.get(umbracoPath('/tree/script/item'), (req, res, ctx) => {
const paths = req.url.searchParams.getAll('paths');
if (!paths) return;
const items = umbScriptsTreeData.getTreeItem(paths);
return res(ctx.status(200), ctx.json(items));
}),
];
const detailHandlers: RestHandler<MockedRequest<DefaultBodyType>>[] = [
rest.get(umbracoPath('/script'), (req, res, ctx) => {
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
if (!path) return res(ctx.status(400));
const response = umbScriptsData.getScript(path);
return res(ctx.status(200), ctx.json(response));
}),
rest.post(umbracoPath('/script'), (req, res, ctx) => {
const requestBody = req.json() as CreateTextFileViewModelBaseModel;
if (!requestBody) return res(ctx.status(400, 'no body found'));
const response = umbScriptsData.insertScript(requestBody);
return res(ctx.status(200), ctx.json(response));
}),
rest.delete(umbracoPath('/script'), (req, res, ctx) => {
const path = req.url.searchParams.get('path');
if (!path) return res(ctx.status(400));
const response = umbScriptsData.delete([path]);
return res(ctx.status(200), ctx.json(response));
}),
rest.put(umbracoPath('/script'), (req, res, ctx) => {
const requestBody = req.json() as CreateTextFileViewModelBaseModel;
if (!requestBody) return res(ctx.status(400, 'no body found'));
const response = umbScriptsData.updateData(requestBody);
return res(ctx.status(200));
}),
];
const folderHandlers: RestHandler<MockedRequest<DefaultBodyType>>[] = [
rest.get(umbracoPath('script/folder'), (req, res, ctx) => {
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
if (!path) return res(ctx.status(400));
const response = umbScriptsFolderData.getFolder(path);
return res(ctx.status(200), ctx.json(response));
}),
rest.post(umbracoPath('script/folder'), (req, res, ctx) => {
const requestBody = req.json() as CreatePathFolderRequestModel;
if (!requestBody) return res(ctx.status(400, 'no body found'));
const response = umbScriptsFolderData.postFolder(requestBody);
return res(ctx.status(200));
}),
rest.delete(umbracoPath('script/folder'), (req, res, ctx) => {
const path = decodeURIComponent(req.url.searchParams.get('path') ?? '').replace('-js', '.js');
if (!path) return res(ctx.status(400));
const response = umbScriptsFolderData.deleteFolder(path);
return res(ctx.status(200), ctx.json(response));
}),
];
export const handlers = [...treeHandlers, ...detailHandlers, ...folderHandlers];